Renamed helper package to utilities. Added systems. Removed direction parameter when placing blocks.
This commit is contained in:
@@ -40,7 +40,7 @@ import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
|||||||
import nl.requios.effortlessbuilding.gui.buildmode.PlayerSettingsGui;
|
import nl.requios.effortlessbuilding.gui.buildmode.PlayerSettingsGui;
|
||||||
import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu;
|
import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu;
|
||||||
import nl.requios.effortlessbuilding.gui.buildmodifier.ModifierSettingsGui;
|
import nl.requios.effortlessbuilding.gui.buildmodifier.ModifierSettingsGui;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
import nl.requios.effortlessbuilding.network.*;
|
import nl.requios.effortlessbuilding.network.*;
|
||||||
import nl.requios.effortlessbuilding.render.BuildRenderTypes;
|
import nl.requios.effortlessbuilding.render.BuildRenderTypes;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
|
|||||||
import net.minecraftforge.common.util.FakePlayer;
|
import net.minecraftforge.common.util.FakePlayer;
|
||||||
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
|
import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||||
import net.minecraftforge.event.level.BlockEvent;
|
import net.minecraftforge.event.level.BlockEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
@@ -24,7 +25,7 @@ import nl.requios.effortlessbuilding.buildmodifier.UndoRedo;
|
|||||||
import nl.requios.effortlessbuilding.capability.ModeCapabilityManager;
|
import nl.requios.effortlessbuilding.capability.ModeCapabilityManager;
|
||||||
import nl.requios.effortlessbuilding.capability.ModifierCapabilityManager;
|
import nl.requios.effortlessbuilding.capability.ModifierCapabilityManager;
|
||||||
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
import nl.requios.effortlessbuilding.network.AddUndoMessage;
|
import nl.requios.effortlessbuilding.network.AddUndoMessage;
|
||||||
import nl.requios.effortlessbuilding.network.ClearUndoMessage;
|
import nl.requios.effortlessbuilding.network.ClearUndoMessage;
|
||||||
import nl.requios.effortlessbuilding.network.PacketHandler;
|
import nl.requios.effortlessbuilding.network.PacketHandler;
|
||||||
@@ -62,13 +63,12 @@ public class CommonEvents {
|
|||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onBlockPlaced(BlockEvent.EntityPlaceEvent event) {
|
public static void onBlockPlaced(BlockEvent.EntityPlaceEvent event) {
|
||||||
if (event.getLevel().isClientSide()) return;
|
if (event.getLevel().isClientSide()) return; //Never called clientside anyway, but just to be sure
|
||||||
|
|
||||||
if (!(event.getEntity() instanceof Player)) return;
|
if (!(event.getEntity() instanceof Player player)) return;
|
||||||
|
|
||||||
if (event.getEntity() instanceof FakePlayer) return;
|
if (event.getEntity() instanceof FakePlayer) return;
|
||||||
|
|
||||||
ServerPlayer player = ((ServerPlayer) event.getEntity());
|
|
||||||
BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(player).getBuildMode();
|
BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(player).getBuildMode();
|
||||||
ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
|
ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
|
||||||
|
|
||||||
@@ -85,15 +85,15 @@ public class CommonEvents {
|
|||||||
if (isPlayerHoldingBlock(player)) {
|
if (isPlayerHoldingBlock(player)) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new RequestLookAtMessage(true));
|
PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new RequestLookAtMessage(true));
|
||||||
PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new AddUndoMessage(event.getPos(), event.getBlockSnapshot().getReplacedBlock(), event.getState()));
|
PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new AddUndoMessage(event.getPos(), event.getBlockSnapshot().getReplacedBlock(), event.getState()));
|
||||||
} else {
|
} else {
|
||||||
//NORMAL mode, let vanilla handle block placing
|
//NORMAL mode, let vanilla handle block placing
|
||||||
//But modifiers should still work
|
//But modifiers should still work
|
||||||
|
|
||||||
//Send message to client, which sends message back with raytrace info
|
//Send message to client, which sends message back with raytrace info
|
||||||
PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new RequestLookAtMessage(false));
|
PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new RequestLookAtMessage(false));
|
||||||
PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new AddUndoMessage(event.getPos(), event.getBlockSnapshot().getReplacedBlock(), event.getState()));
|
PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new AddUndoMessage(event.getPos(), event.getBlockSnapshot().getReplacedBlock(), event.getState()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,22 +101,23 @@ public class CommonEvents {
|
|||||||
public static void onBlockBroken(BlockEvent.BreakEvent event) {
|
public static void onBlockBroken(BlockEvent.BreakEvent event) {
|
||||||
if (event.getLevel().isClientSide()) return;
|
if (event.getLevel().isClientSide()) return;
|
||||||
|
|
||||||
if (event.getPlayer() instanceof FakePlayer) return;
|
Player player = event.getPlayer();
|
||||||
|
if (player instanceof FakePlayer) return;
|
||||||
|
|
||||||
//Cancel event if necessary
|
//Cancel event if necessary
|
||||||
//If cant break far then dont cancel event ever
|
//If cant break far then dont cancel event ever
|
||||||
BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(event.getPlayer()).getBuildMode();
|
BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(player).getBuildMode();
|
||||||
if (buildMode != BuildModes.BuildModeEnum.DISABLED && ReachHelper.canBreakFar(event.getPlayer())) {
|
if (buildMode != BuildModes.BuildModeEnum.DISABLED && ReachHelper.canBreakFar(player)) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
} else {
|
} else {
|
||||||
//NORMAL mode, let vanilla handle block breaking
|
//NORMAL mode, let vanilla handle block breaking
|
||||||
//But modifiers and QuickReplace should still work
|
//But modifiers and QuickReplace should still work
|
||||||
//Dont break the original block yourself, otherwise Tinkers Hammer and Veinminer won't work
|
//Dont break the original block yourself, otherwise Tinkers Hammer and Veinminer won't work
|
||||||
BuildModes.onBlockBroken(event.getPlayer(), event.getPos(), false);
|
BuildModes.onBlockBroken(player, event.getPos(), false);
|
||||||
|
|
||||||
//Add to undo stack in client
|
//Add to undo stack in client
|
||||||
if (event.getPlayer() instanceof ServerPlayer && event.getState() != null && event.getPos() != null) {
|
if (player instanceof ServerPlayer && event.getState() != null && event.getPos() != null) {
|
||||||
PacketDistributor.PacketTarget packetTarget = PacketDistributor.PLAYER.with(() -> (ServerPlayer) event.getPlayer());
|
PacketDistributor.PacketTarget packetTarget = PacketDistributor.PLAYER.with(() -> (ServerPlayer) player);
|
||||||
if (packetTarget != null)
|
if (packetTarget != null)
|
||||||
PacketHandler.INSTANCE.send(packetTarget, new AddUndoMessage(event.getPos(), event.getState(), Blocks.AIR.defaultBlockState()));
|
PacketHandler.INSTANCE.send(packetTarget, new AddUndoMessage(event.getPos(), event.getState(), Blocks.AIR.defaultBlockState()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,12 +22,13 @@ import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
|||||||
import nl.requios.effortlessbuilding.gui.DiamondRandomizerBagContainer;
|
import nl.requios.effortlessbuilding.gui.DiamondRandomizerBagContainer;
|
||||||
import nl.requios.effortlessbuilding.gui.GoldenRandomizerBagContainer;
|
import nl.requios.effortlessbuilding.gui.GoldenRandomizerBagContainer;
|
||||||
import nl.requios.effortlessbuilding.gui.RandomizerBagContainer;
|
import nl.requios.effortlessbuilding.gui.RandomizerBagContainer;
|
||||||
import nl.requios.effortlessbuilding.helper.DelayedBlockPlacer;
|
import nl.requios.effortlessbuilding.systems.DelayedBlockPlacer;
|
||||||
import nl.requios.effortlessbuilding.item.*;
|
import nl.requios.effortlessbuilding.item.*;
|
||||||
import nl.requios.effortlessbuilding.network.PacketHandler;
|
import nl.requios.effortlessbuilding.network.PacketHandler;
|
||||||
import nl.requios.effortlessbuilding.proxy.ClientProxy;
|
import nl.requios.effortlessbuilding.proxy.ClientProxy;
|
||||||
import nl.requios.effortlessbuilding.proxy.IProxy;
|
import nl.requios.effortlessbuilding.proxy.IProxy;
|
||||||
import nl.requios.effortlessbuilding.proxy.ServerProxy;
|
import nl.requios.effortlessbuilding.proxy.ServerProxy;
|
||||||
|
import nl.requios.effortlessbuilding.systems.ServerBlockPlacer;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
@@ -40,6 +41,7 @@ public class EffortlessBuilding {
|
|||||||
public static EffortlessBuilding instance;
|
public static EffortlessBuilding instance;
|
||||||
public static IProxy proxy = DistExecutor.safeRunForDist(() -> ClientProxy::new, () -> ServerProxy::new);
|
public static IProxy proxy = DistExecutor.safeRunForDist(() -> ClientProxy::new, () -> ServerProxy::new);
|
||||||
|
|
||||||
|
public static final ServerBlockPlacer SERVER_BLOCK_PLACER = new ServerBlockPlacer();
|
||||||
public static final DelayedBlockPlacer DELAYED_BLOCK_PLACER = new DelayedBlockPlacer();
|
public static final DelayedBlockPlacer DELAYED_BLOCK_PLACER = new DelayedBlockPlacer();
|
||||||
|
|
||||||
//Registration
|
//Registration
|
||||||
|
|||||||
@@ -6,9 +6,12 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
|||||||
import nl.requios.effortlessbuilding.gui.DiamondRandomizerBagScreen;
|
import nl.requios.effortlessbuilding.gui.DiamondRandomizerBagScreen;
|
||||||
import nl.requios.effortlessbuilding.gui.GoldenRandomizerBagScreen;
|
import nl.requios.effortlessbuilding.gui.GoldenRandomizerBagScreen;
|
||||||
import nl.requios.effortlessbuilding.gui.RandomizerBagScreen;
|
import nl.requios.effortlessbuilding.gui.RandomizerBagScreen;
|
||||||
|
import nl.requios.effortlessbuilding.systems.BlockChain;
|
||||||
|
|
||||||
public class EffortlessBuildingClient {
|
public class EffortlessBuildingClient {
|
||||||
|
|
||||||
|
public static final BlockChain BLOCK_CHAIN = new BlockChain();
|
||||||
|
|
||||||
public static void onConstructorClient(IEventBus modEventBus, IEventBus forgeEventBus) {
|
public static void onConstructorClient(IEventBus modEventBus, IEventBus forgeEventBus) {
|
||||||
modEventBus.addListener(EffortlessBuildingClient::clientSetup);
|
modEventBus.addListener(EffortlessBuildingClient::clientSetup);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import nl.requios.effortlessbuilding.EffortlessBuilding;
|
|||||||
import nl.requios.effortlessbuilding.buildmode.buildmodes.*;
|
import nl.requios.effortlessbuilding.buildmode.buildmodes.*;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers;
|
import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
import nl.requios.effortlessbuilding.utilities.SurvivalHelper;
|
||||||
import nl.requios.effortlessbuilding.network.BlockBrokenMessage;
|
import nl.requios.effortlessbuilding.network.BlockBrokenMessage;
|
||||||
import nl.requios.effortlessbuilding.network.BlockPlacedMessage;
|
import nl.requios.effortlessbuilding.network.BlockPlacedMessage;
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ public class BuildModes {
|
|||||||
|
|
||||||
//Offset in direction of sidehit if not quickreplace and not replaceable
|
//Offset in direction of sidehit if not quickreplace and not replaceable
|
||||||
boolean replaceable = player.level.getBlockState(startPos).getMaterial().isReplaceable();
|
boolean replaceable = player.level.getBlockState(startPos).getMaterial().isReplaceable();
|
||||||
boolean becomesDoubleSlab = SurvivalHelper.doesBecomeDoubleSlab(player, startPos, message.getSideHit());
|
boolean becomesDoubleSlab = SurvivalHelper.doesBecomeDoubleSlab(player, startPos);
|
||||||
if (!modifierSettings.doQuickReplace() && !replaceable && !becomesDoubleSlab) {
|
if (!modifierSettings.doQuickReplace() && !replaceable && !becomesDoubleSlab) {
|
||||||
startPos = startPos.relative(message.getSideHit());
|
startPos = startPos.relative(message.getSideHit());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import net.minecraftforge.fml.common.Mod;
|
|||||||
import net.minecraftforge.network.PacketDistributor;
|
import net.minecraftforge.network.PacketDistributor;
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
import nl.requios.effortlessbuilding.capability.ModeCapabilityManager;
|
import nl.requios.effortlessbuilding.capability.ModeCapabilityManager;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
import nl.requios.effortlessbuilding.network.ModeSettingsMessage;
|
import nl.requios.effortlessbuilding.network.ModeSettingsMessage;
|
||||||
import nl.requios.effortlessbuilding.network.PacketHandler;
|
import nl.requios.effortlessbuilding.network.PacketHandler;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import net.minecraft.world.entity.player.Player;
|
|||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import net.minecraft.world.entity.player.Player;
|
|||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Dictionary;
|
import java.util.Dictionary;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import net.minecraft.world.phys.Vec3;
|
|||||||
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
||||||
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
||||||
import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode;
|
import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import net.minecraft.core.BlockPos;
|
|||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
||||||
import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode;
|
import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -2,11 +2,8 @@ package nl.requios.effortlessbuilding.buildmode.buildmodes;
|
|||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
|
||||||
import nl.requios.effortlessbuilding.buildmode.ThreeClicksBuildMode;
|
import nl.requios.effortlessbuilding.buildmode.ThreeClicksBuildMode;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Pyramid extends ThreeClicksBuildMode {
|
public class Pyramid extends ThreeClicksBuildMode {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import net.minecraft.world.entity.player.Player;
|
|||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
||||||
import nl.requios.effortlessbuilding.buildmode.ThreeClicksBuildMode;
|
import nl.requios.effortlessbuilding.buildmode.ThreeClicksBuildMode;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import net.minecraft.world.phys.Vec3;
|
|||||||
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
||||||
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
import nl.requios.effortlessbuilding.buildmode.ModeOptions;
|
||||||
import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode;
|
import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -10,16 +10,14 @@ public class BlockSet {
|
|||||||
private final List<BlockPos> coordinates;
|
private final List<BlockPos> coordinates;
|
||||||
private final List<BlockState> previousBlockStates;
|
private final List<BlockState> previousBlockStates;
|
||||||
private final List<BlockState> newBlockStates;
|
private final List<BlockState> newBlockStates;
|
||||||
private final Vec3 hitVec;
|
|
||||||
private final BlockPos firstPos;
|
private final BlockPos firstPos;
|
||||||
private final BlockPos secondPos;
|
private final BlockPos secondPos;
|
||||||
|
|
||||||
public BlockSet(List<BlockPos> coordinates, List<BlockState> previousBlockStates, List<BlockState> newBlockStates, Vec3 hitVec,
|
public BlockSet(List<BlockPos> coordinates, List<BlockState> previousBlockStates, List<BlockState> newBlockStates,
|
||||||
BlockPos firstPos, BlockPos secondPos) {
|
BlockPos firstPos, BlockPos secondPos) {
|
||||||
this.coordinates = coordinates;
|
this.coordinates = coordinates;
|
||||||
this.previousBlockStates = previousBlockStates;
|
this.previousBlockStates = previousBlockStates;
|
||||||
this.newBlockStates = newBlockStates;
|
this.newBlockStates = newBlockStates;
|
||||||
this.hitVec = hitVec;
|
|
||||||
this.firstPos = firstPos;
|
this.firstPos = firstPos;
|
||||||
this.secondPos = secondPos;
|
this.secondPos = secondPos;
|
||||||
}
|
}
|
||||||
@@ -36,10 +34,6 @@ public class BlockSet {
|
|||||||
return newBlockStates;
|
return newBlockStates;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vec3 getHitVec() {
|
|
||||||
return hitVec;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockPos getFirstPos() {
|
public BlockPos getFirstPos() {
|
||||||
return firstPos;
|
return firstPos;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ import net.minecraft.world.level.Level;
|
|||||||
import nl.requios.effortlessbuilding.CommonConfig;
|
import nl.requios.effortlessbuilding.CommonConfig;
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
||||||
import nl.requios.effortlessbuilding.helper.DelayedBlockPlacer;
|
import nl.requios.effortlessbuilding.systems.DelayedBlockPlacer;
|
||||||
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
import nl.requios.effortlessbuilding.utilities.SurvivalHelper;
|
||||||
import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem;
|
import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem;
|
||||||
import nl.requios.effortlessbuilding.render.BlockPreviews;
|
import nl.requios.effortlessbuilding.render.BlockPreviews;
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ public class BuildModifiers {
|
|||||||
|
|
||||||
//place blocks after delay
|
//place blocks after delay
|
||||||
EffortlessBuilding.DELAYED_BLOCK_PLACER.placeBlocksDelayed(new DelayedBlockPlacer.Entry(world, player, coordinates,
|
EffortlessBuilding.DELAYED_BLOCK_PLACER.placeBlocksDelayed(new DelayedBlockPlacer.Entry(world, player, coordinates,
|
||||||
blockStates, itemStacks, hitVec, placeStartPos, delay));
|
blockStates, itemStacks, placeStartPos, delay));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,8 +109,7 @@ public class BuildModifiers {
|
|||||||
//add to undo stack
|
//add to undo stack
|
||||||
BlockPos firstPos = startCoordinates.get(0);
|
BlockPos firstPos = startCoordinates.get(0);
|
||||||
BlockPos secondPos = startCoordinates.get(startCoordinates.size() - 1);
|
BlockPos secondPos = startCoordinates.get(startCoordinates.size() - 1);
|
||||||
Vec3 hitVec = new Vec3(0.5, 0.5, 0.5);
|
UndoRedo.addUndo(player, new BlockSet(coordinates, previousBlockStates, newBlockStates, firstPos, secondPos));
|
||||||
UndoRedo.addUndo(player, new BlockSet(coordinates, previousBlockStates, newBlockStates, hitVec, firstPos, secondPos));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import net.minecraftforge.network.PacketDistributor;
|
|||||||
import nl.requios.effortlessbuilding.CommonConfig;
|
import nl.requios.effortlessbuilding.CommonConfig;
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
import nl.requios.effortlessbuilding.capability.ModifierCapabilityManager;
|
import nl.requios.effortlessbuilding.capability.ModifierCapabilityManager;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
import nl.requios.effortlessbuilding.network.ModifierSettingsMessage;
|
import nl.requios.effortlessbuilding.network.ModifierSettingsMessage;
|
||||||
import nl.requios.effortlessbuilding.network.PacketHandler;
|
import nl.requios.effortlessbuilding.network.PacketHandler;
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ import net.minecraft.world.phys.Vec3;
|
|||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import nl.requios.effortlessbuilding.CommonConfig;
|
import nl.requios.effortlessbuilding.CommonConfig;
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
import nl.requios.effortlessbuilding.helper.FixedStack;
|
import nl.requios.effortlessbuilding.utilities.FixedStack;
|
||||||
import nl.requios.effortlessbuilding.helper.InventoryHelper;
|
import nl.requios.effortlessbuilding.utilities.InventoryHelper;
|
||||||
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
import nl.requios.effortlessbuilding.utilities.SurvivalHelper;
|
||||||
import nl.requios.effortlessbuilding.render.BlockPreviews;
|
import nl.requios.effortlessbuilding.render.BlockPreviews;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -82,7 +82,6 @@ public class UndoRedo {
|
|||||||
List<BlockPos> coordinates = blockSet.getCoordinates();
|
List<BlockPos> coordinates = blockSet.getCoordinates();
|
||||||
List<BlockState> previousBlockStates = blockSet.getPreviousBlockStates();
|
List<BlockState> previousBlockStates = blockSet.getPreviousBlockStates();
|
||||||
List<BlockState> newBlockStates = blockSet.getNewBlockStates();
|
List<BlockState> newBlockStates = blockSet.getNewBlockStates();
|
||||||
Vec3 hitVec = blockSet.getHitVec();
|
|
||||||
|
|
||||||
//Find up to date itemstacks in player inventory
|
//Find up to date itemstacks in player inventory
|
||||||
List<ItemStack> itemStacks = findItemStacksInInventory(player, previousBlockStates);
|
List<ItemStack> itemStacks = findItemStacksInInventory(player, previousBlockStates);
|
||||||
@@ -118,7 +117,7 @@ public class UndoRedo {
|
|||||||
}
|
}
|
||||||
if (itemStack.isEmpty()) SurvivalHelper.breakBlock(player.level, player, coordinate, true);
|
if (itemStack.isEmpty()) SurvivalHelper.breakBlock(player.level, player, coordinate, true);
|
||||||
//if previousBlockState is air, placeBlock will set it to air
|
//if previousBlockState is air, placeBlock will set it to air
|
||||||
SurvivalHelper.placeBlock(player.level, player, coordinate, previousBlockState, itemStack, Direction.UP, hitVec, true, false, false);
|
SurvivalHelper.placeBlock(player.level, player, coordinate, previousBlockState, itemStack, true, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,7 +141,6 @@ public class UndoRedo {
|
|||||||
List<BlockPos> coordinates = blockSet.getCoordinates();
|
List<BlockPos> coordinates = blockSet.getCoordinates();
|
||||||
List<BlockState> previousBlockStates = blockSet.getPreviousBlockStates();
|
List<BlockState> previousBlockStates = blockSet.getPreviousBlockStates();
|
||||||
List<BlockState> newBlockStates = blockSet.getNewBlockStates();
|
List<BlockState> newBlockStates = blockSet.getNewBlockStates();
|
||||||
Vec3 hitVec = blockSet.getHitVec();
|
|
||||||
|
|
||||||
//Find up to date itemstacks in player inventory
|
//Find up to date itemstacks in player inventory
|
||||||
List<ItemStack> itemStacks = findItemStacksInInventory(player, newBlockStates);
|
List<ItemStack> itemStacks = findItemStacksInInventory(player, newBlockStates);
|
||||||
@@ -177,7 +175,7 @@ public class UndoRedo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (itemStack.isEmpty()) SurvivalHelper.breakBlock(player.level, player, coordinate, true);
|
if (itemStack.isEmpty()) SurvivalHelper.breakBlock(player.level, player, coordinate, true);
|
||||||
SurvivalHelper.placeBlock(player.level, player, coordinate, newBlockState, itemStack, Direction.UP, hitVec, true, false, false);
|
SurvivalHelper.placeBlock(player.level, player, coordinate, newBlockState, itemStack, true, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import nl.requios.effortlessbuilding.gui.elements.GuiCheckBoxFixed;
|
|||||||
import nl.requios.effortlessbuilding.gui.elements.GuiCollapsibleScrollEntry;
|
import nl.requios.effortlessbuilding.gui.elements.GuiCollapsibleScrollEntry;
|
||||||
import nl.requios.effortlessbuilding.gui.elements.GuiNumberField;
|
import nl.requios.effortlessbuilding.gui.elements.GuiNumberField;
|
||||||
import nl.requios.effortlessbuilding.gui.elements.GuiScrollPane;
|
import nl.requios.effortlessbuilding.gui.elements.GuiScrollPane;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import nl.requios.effortlessbuilding.EffortlessBuilding;
|
|||||||
import nl.requios.effortlessbuilding.buildmodifier.Mirror;
|
import nl.requios.effortlessbuilding.buildmodifier.Mirror;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.gui.elements.*;
|
import nl.requios.effortlessbuilding.gui.elements.*;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import nl.requios.effortlessbuilding.EffortlessBuilding;
|
|||||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.RadialMirror;
|
import nl.requios.effortlessbuilding.buildmodifier.RadialMirror;
|
||||||
import nl.requios.effortlessbuilding.gui.elements.*;
|
import nl.requios.effortlessbuilding.gui.elements.*;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
|||||||
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.capability.ItemHandlerCapabilityProvider;
|
import nl.requios.effortlessbuilding.capability.ItemHandlerCapabilityProvider;
|
||||||
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
import nl.requios.effortlessbuilding.utilities.SurvivalHelper;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
@@ -163,7 +163,7 @@ public abstract class AbstractRandomizerBagItem extends Item {
|
|||||||
BlockPlaceContext blockItemUseContext = new BlockPlaceContext(new UseOnContext(player, InteractionHand.MAIN_HAND, new BlockHitResult(hitVec, facing, pos, false)));
|
BlockPlaceContext blockItemUseContext = new BlockPlaceContext(new UseOnContext(player, InteractionHand.MAIN_HAND, new BlockHitResult(hitVec, facing, pos, false)));
|
||||||
BlockState blockState = Block.byItem(toPlace.getItem()).getStateForPlacement(blockItemUseContext);
|
BlockState blockState = Block.byItem(toPlace.getItem()).getStateForPlacement(blockItemUseContext);
|
||||||
|
|
||||||
SurvivalHelper.placeBlock(world, player, pos, blockState, toPlace, facing, hitVec, false, false, true);
|
SurvivalHelper.placeBlock(world, player, pos, blockState, toPlace, false, false, true);
|
||||||
|
|
||||||
//Synergy
|
//Synergy
|
||||||
//Works without calling
|
//Works without calling
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import net.minecraft.world.level.Level;
|
|||||||
import nl.requios.effortlessbuilding.CommonConfig;
|
import nl.requios.effortlessbuilding.CommonConfig;
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import net.minecraft.world.level.Level;
|
|||||||
import nl.requios.effortlessbuilding.CommonConfig;
|
import nl.requios.effortlessbuilding.CommonConfig;
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import net.minecraft.world.level.Level;
|
|||||||
import nl.requios.effortlessbuilding.CommonConfig;
|
import nl.requios.effortlessbuilding.CommonConfig;
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|||||||
@@ -93,7 +93,6 @@ public class AddUndoMessage {
|
|||||||
new ArrayList<BlockState>() {{
|
new ArrayList<BlockState>() {{
|
||||||
add(message.getNewBlockState());
|
add(message.getNewBlockState());
|
||||||
}},
|
}},
|
||||||
new Vec3(0, 0, 0),
|
|
||||||
message.getCoordinate(), message.getCoordinate()));
|
message.getCoordinate(), message.getCoordinate()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,9 +30,8 @@ import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
|||||||
import nl.requios.effortlessbuilding.create.AllSpecialTextures;
|
import nl.requios.effortlessbuilding.create.AllSpecialTextures;
|
||||||
import nl.requios.effortlessbuilding.create.CreateClient;
|
import nl.requios.effortlessbuilding.create.CreateClient;
|
||||||
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
|
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
|
||||||
import nl.requios.effortlessbuilding.create.foundation.utility.VecHelper;
|
import nl.requios.effortlessbuilding.utilities.ReachHelper;
|
||||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
import nl.requios.effortlessbuilding.utilities.SurvivalHelper;
|
||||||
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
|
||||||
import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem;
|
import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -270,7 +269,7 @@ public class BlockPreviews {
|
|||||||
//Check if we can place
|
//Check if we can place
|
||||||
boolean canPlace = true;
|
boolean canPlace = true;
|
||||||
if (checkCanPlace) {
|
if (checkCanPlace) {
|
||||||
canPlace = SurvivalHelper.canPlace(player.level, player, blockPos, blockState, itemstack, modifierSettings.doQuickReplace(), Direction.UP);
|
canPlace = SurvivalHelper.canPlace(player.level, player, blockPos, blockState, itemstack, modifierSettings.doQuickReplace());
|
||||||
} else {
|
} else {
|
||||||
//If check is turned off, check if blockstate is the same (for dissolve effect)
|
//If check is turned off, check if blockstate is the same (for dissolve effect)
|
||||||
canPlace = player.level.getBlockState(blockPos) != blockState;
|
canPlace = player.level.getBlockState(blockPos) != blockState;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import nl.requios.effortlessbuilding.buildmode.BuildModes;
|
|||||||
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||||
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
import nl.requios.effortlessbuilding.compatibility.CompatHelper;
|
||||||
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
import nl.requios.effortlessbuilding.utilities.SurvivalHelper;
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* Main render class for Effortless Building
|
* Main render class for Effortless Building
|
||||||
@@ -61,7 +61,7 @@ public class RenderHandler {
|
|||||||
|
|
||||||
//Check if tool (or none) in hand
|
//Check if tool (or none) in hand
|
||||||
boolean replaceable = player.level.getBlockState(startPos).getMaterial().isReplaceable();
|
boolean replaceable = player.level.getBlockState(startPos).getMaterial().isReplaceable();
|
||||||
boolean becomesDoubleSlab = SurvivalHelper.doesBecomeDoubleSlab(player, startPos, blockLookingAt.getDirection());
|
boolean becomesDoubleSlab = SurvivalHelper.doesBecomeDoubleSlab(player, startPos);
|
||||||
if (!modifierSettings.doQuickReplace() && !noBlockInHand && !replaceable && !becomesDoubleSlab) {
|
if (!modifierSettings.doQuickReplace() && !noBlockInHand && !replaceable && !becomesDoubleSlab) {
|
||||||
startPos = startPos.relative(blockLookingAt.getDirection());
|
startPos = startPos.relative(blockLookingAt.getDirection());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package nl.requios.effortlessbuilding.systems;
|
||||||
|
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
|
// Receives block placed events, then finds additional blocks we want to place through various systems,
|
||||||
|
// and then sends them to the server to be placed
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public class BlockChain {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,16 +1,15 @@
|
|||||||
package nl.requios.effortlessbuilding.helper;
|
package nl.requios.effortlessbuilding.systems;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.phys.Vec3;
|
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.BlockSet;
|
import nl.requios.effortlessbuilding.buildmodifier.BlockSet;
|
||||||
import nl.requios.effortlessbuilding.buildmodifier.UndoRedo;
|
import nl.requios.effortlessbuilding.buildmodifier.UndoRedo;
|
||||||
import nl.requios.effortlessbuilding.create.foundation.utility.AnimationTickHolder;
|
import nl.requios.effortlessbuilding.utilities.InventoryHelper;
|
||||||
|
import nl.requios.effortlessbuilding.utilities.SurvivalHelper;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -45,18 +44,16 @@ public class DelayedBlockPlacer {
|
|||||||
private List<BlockPos> coordinates;
|
private List<BlockPos> coordinates;
|
||||||
private List<BlockState> blockStates;
|
private List<BlockState> blockStates;
|
||||||
private List<ItemStack> itemStacks;
|
private List<ItemStack> itemStacks;
|
||||||
private Vec3 hitVec;
|
|
||||||
private boolean placeStartPos;
|
private boolean placeStartPos;
|
||||||
private int ticksTillPlacement;
|
private int ticksTillPlacement;
|
||||||
|
|
||||||
public Entry(Level world, Player player, List<BlockPos> coordinates, List<BlockState> blockStates,
|
public Entry(Level world, Player player, List<BlockPos> coordinates, List<BlockState> blockStates,
|
||||||
List<ItemStack> itemStacks, Vec3 hitVec, boolean placeStartPos, int ticksTillPlacement) {
|
List<ItemStack> itemStacks, boolean placeStartPos, int ticksTillPlacement) {
|
||||||
this.world = world;
|
this.world = world;
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.coordinates = coordinates;
|
this.coordinates = coordinates;
|
||||||
this.blockStates = blockStates;
|
this.blockStates = blockStates;
|
||||||
this.itemStacks = itemStacks;
|
this.itemStacks = itemStacks;
|
||||||
this.hitVec = hitVec;
|
|
||||||
this.placeStartPos = placeStartPos;
|
this.placeStartPos = placeStartPos;
|
||||||
this.ticksTillPlacement = ticksTillPlacement;
|
this.ticksTillPlacement = ticksTillPlacement;
|
||||||
}
|
}
|
||||||
@@ -80,7 +77,7 @@ public class DelayedBlockPlacer {
|
|||||||
itemStack = InventoryHelper.findItemStackInInventory(player, blockState.getBlock());
|
itemStack = InventoryHelper.findItemStackInInventory(player, blockState.getBlock());
|
||||||
if (itemStack.isEmpty()) continue;
|
if (itemStack.isEmpty()) continue;
|
||||||
}
|
}
|
||||||
SurvivalHelper.placeBlock(world, player, blockPos, blockState, itemStack, Direction.UP, hitVec, false, false, false);
|
SurvivalHelper.placeBlock(world, player, blockPos, blockState, itemStack, false, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,7 +97,7 @@ public class DelayedBlockPlacer {
|
|||||||
//add to undo stack
|
//add to undo stack
|
||||||
BlockPos firstPos = coordinates.get(0);
|
BlockPos firstPos = coordinates.get(0);
|
||||||
BlockPos secondPos = coordinates.get(coordinates.size() - 1);
|
BlockPos secondPos = coordinates.get(coordinates.size() - 1);
|
||||||
UndoRedo.addUndo(player, new BlockSet(coordinates, previousBlockStates, newBlockStates, hitVec, firstPos, secondPos));
|
UndoRedo.addUndo(player, new BlockSet(coordinates, previousBlockStates, newBlockStates, firstPos, secondPos));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package nl.requios.effortlessbuilding.systems;
|
||||||
|
|
||||||
|
// Receives block placement requests from the client and places them
|
||||||
|
public class ServerBlockPlacer {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package nl.requios.effortlessbuilding.helper;
|
package nl.requios.effortlessbuilding.utilities;
|
||||||
|
|
||||||
//Stack with fixed size. Removes (overwrites) oldest element on push.
|
//Stack with fixed size. Removes (overwrites) oldest element on push.
|
||||||
public class FixedStack<T> {
|
public class FixedStack<T> {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package nl.requios.effortlessbuilding.helper;
|
package nl.requios.effortlessbuilding.utilities;
|
||||||
|
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package nl.requios.effortlessbuilding.helper;
|
package nl.requios.effortlessbuilding.utilities;
|
||||||
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package nl.requios.effortlessbuilding.helper;
|
package nl.requios.effortlessbuilding.utilities;
|
||||||
|
|
||||||
import net.minecraft.advancements.CriteriaTriggers;
|
import net.minecraft.advancements.CriteriaTriggers;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
@@ -35,7 +35,7 @@ public class SurvivalHelper {
|
|||||||
//Checks if area is loaded, if player has the right permissions, if existing block can be replaced (drops it if so) and consumes an item from the stack.
|
//Checks if area is loaded, if player has the right permissions, if existing block can be replaced (drops it if so) and consumes an item from the stack.
|
||||||
//Based on ItemBlock#onItemUse
|
//Based on ItemBlock#onItemUse
|
||||||
public static boolean placeBlock(Level world, Player player, BlockPos pos, BlockState blockState,
|
public static boolean placeBlock(Level world, Player player, BlockPos pos, BlockState blockState,
|
||||||
ItemStack origstack, Direction facing, Vec3 hitVec, boolean skipPlaceCheck,
|
ItemStack origstack, boolean skipPlaceCheck,
|
||||||
boolean skipCollisionCheck, boolean playSound) {
|
boolean skipCollisionCheck, boolean playSound) {
|
||||||
if (!world.isLoaded(pos)) return false;
|
if (!world.isLoaded(pos)) return false;
|
||||||
ItemStack itemstack = origstack;
|
ItemStack itemstack = origstack;
|
||||||
@@ -57,7 +57,7 @@ public class SurvivalHelper {
|
|||||||
|
|
||||||
|
|
||||||
//More manual with ItemBlock#placeBlockAt
|
//More manual with ItemBlock#placeBlockAt
|
||||||
if (skipPlaceCheck || canPlace(world, player, pos, blockState, itemstack, skipCollisionCheck, facing.getOpposite())) {
|
if (skipPlaceCheck || canPlace(world, player, pos, blockState, itemstack, skipCollisionCheck)) {
|
||||||
//Drop existing block
|
//Drop existing block
|
||||||
dropBlock(world, player, pos);
|
dropBlock(world, player, pos);
|
||||||
|
|
||||||
@@ -182,10 +182,9 @@ public class SurvivalHelper {
|
|||||||
* @param newBlockState the blockstate that is going to be placed
|
* @param newBlockState the blockstate that is going to be placed
|
||||||
* @param itemStack the itemstack used for placing
|
* @param itemStack the itemstack used for placing
|
||||||
* @param skipCollisionCheck skips collision check with entities
|
* @param skipCollisionCheck skips collision check with entities
|
||||||
* @param sidePlacedOn
|
|
||||||
* @return Whether the player may place the block at pos with itemstack
|
* @return Whether the player may place the block at pos with itemstack
|
||||||
*/
|
*/
|
||||||
public static boolean canPlace(Level world, Player player, BlockPos pos, BlockState newBlockState, ItemStack itemStack, boolean skipCollisionCheck, Direction sidePlacedOn) {
|
public static boolean canPlace(Level world, Player player, BlockPos pos, BlockState newBlockState, ItemStack itemStack, boolean skipCollisionCheck) {
|
||||||
|
|
||||||
if (!player.isCreative()) {
|
if (!player.isCreative()) {
|
||||||
//Check if itemstack is correct
|
//Check if itemstack is correct
|
||||||
@@ -202,7 +201,7 @@ public class SurvivalHelper {
|
|||||||
block = newBlockState.getBlock();
|
block = newBlockState.getBlock();
|
||||||
|
|
||||||
return canPlayerEdit(player, world, pos, itemStack) &&
|
return canPlayerEdit(player, world, pos, itemStack) &&
|
||||||
mayPlace(world, block, newBlockState, pos, skipCollisionCheck, sidePlacedOn, player) &&
|
mayPlace(world, block, newBlockState, pos, skipCollisionCheck, player) &&
|
||||||
canReplace(world, player, pos);
|
canReplace(world, player, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,7 +247,7 @@ public class SurvivalHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//From World#mayPlace
|
//From World#mayPlace
|
||||||
private static boolean mayPlace(Level world, Block blockIn, BlockState newBlockState, BlockPos pos, boolean skipCollisionCheck, Direction sidePlacedOn, @Nullable Entity placer) {
|
private static boolean mayPlace(Level world, Block blockIn, BlockState newBlockState, BlockPos pos, boolean skipCollisionCheck, @Nullable Entity placer) {
|
||||||
BlockState currentBlockState = world.getBlockState(pos);
|
BlockState currentBlockState = world.getBlockState(pos);
|
||||||
VoxelShape voxelShape = skipCollisionCheck ? null : blockIn.defaultBlockState().getCollisionShape(world, pos);
|
VoxelShape voxelShape = skipCollisionCheck ? null : blockIn.defaultBlockState().getCollisionShape(world, pos);
|
||||||
|
|
||||||
@@ -257,7 +256,7 @@ public class SurvivalHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Check if double slab
|
//Check if double slab
|
||||||
if (placer != null && doesBecomeDoubleSlab(((Player) placer), pos, sidePlacedOn)) {
|
if (placer != null && doesBecomeDoubleSlab(((Player) placer), pos)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -290,7 +289,7 @@ public class SurvivalHelper {
|
|||||||
return ForgeEventFactory.doPlayerHarvestCheck(player, blockState, true);
|
return ForgeEventFactory.doPlayerHarvestCheck(player, blockState, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean doesBecomeDoubleSlab(Player player, BlockPos pos, Direction facing) {
|
public static boolean doesBecomeDoubleSlab(Player player, BlockPos pos) {
|
||||||
BlockState placedBlockState = player.level.getBlockState(pos);
|
BlockState placedBlockState = player.level.getBlockState(pos);
|
||||||
|
|
||||||
ItemStack itemstack = player.getItemInHand(InteractionHand.MAIN_HAND);
|
ItemStack itemstack = player.getItemInHand(InteractionHand.MAIN_HAND);
|
||||||
Reference in New Issue
Block a user