diff --git a/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java b/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java index e189f9b..54110ce 100644 --- a/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/ClientEvents.java @@ -40,7 +40,7 @@ import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.gui.buildmode.PlayerSettingsGui; import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu; 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.render.BuildRenderTypes; import org.lwjgl.glfw.GLFW; diff --git a/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java b/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java index b30c868..60f8192 100644 --- a/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java @@ -12,6 +12,7 @@ import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.level.BlockEvent; 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.ModifierCapabilityManager; 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.ClearUndoMessage; import nl.requios.effortlessbuilding.network.PacketHandler; @@ -62,13 +63,12 @@ public class CommonEvents { @SubscribeEvent 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; - ServerPlayer player = ((ServerPlayer) event.getEntity()); BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(player).getBuildMode(); ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player); @@ -85,15 +85,15 @@ public class CommonEvents { if (isPlayerHoldingBlock(player)) { event.setCanceled(true); } - PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> 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 RequestLookAtMessage(true)); + PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new AddUndoMessage(event.getPos(), event.getBlockSnapshot().getReplacedBlock(), event.getState())); } else { //NORMAL mode, let vanilla handle block placing //But modifiers should still work //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(() -> player), new AddUndoMessage(event.getPos(), event.getBlockSnapshot().getReplacedBlock(), event.getState())); + PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new RequestLookAtMessage(false)); + 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) { if (event.getLevel().isClientSide()) return; - if (event.getPlayer() instanceof FakePlayer) return; + Player player = event.getPlayer(); + if (player instanceof FakePlayer) return; //Cancel event if necessary //If cant break far then dont cancel event ever - BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(event.getPlayer()).getBuildMode(); - if (buildMode != BuildModes.BuildModeEnum.DISABLED && ReachHelper.canBreakFar(event.getPlayer())) { + BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(player).getBuildMode(); + if (buildMode != BuildModes.BuildModeEnum.DISABLED && ReachHelper.canBreakFar(player)) { event.setCanceled(true); } else { //NORMAL mode, let vanilla handle block breaking //But modifiers and QuickReplace should still 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 - if (event.getPlayer() instanceof ServerPlayer && event.getState() != null && event.getPos() != null) { - PacketDistributor.PacketTarget packetTarget = PacketDistributor.PLAYER.with(() -> (ServerPlayer) event.getPlayer()); + if (player instanceof ServerPlayer && event.getState() != null && event.getPos() != null) { + PacketDistributor.PacketTarget packetTarget = PacketDistributor.PLAYER.with(() -> (ServerPlayer) player); if (packetTarget != null) PacketHandler.INSTANCE.send(packetTarget, new AddUndoMessage(event.getPos(), event.getState(), Blocks.AIR.defaultBlockState())); } diff --git a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java index 5748382..00c11ea 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java +++ b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java @@ -22,12 +22,13 @@ import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.gui.DiamondRandomizerBagContainer; import nl.requios.effortlessbuilding.gui.GoldenRandomizerBagContainer; 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.network.PacketHandler; import nl.requios.effortlessbuilding.proxy.ClientProxy; import nl.requios.effortlessbuilding.proxy.IProxy; import nl.requios.effortlessbuilding.proxy.ServerProxy; +import nl.requios.effortlessbuilding.systems.ServerBlockPlacer; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -40,6 +41,7 @@ public class EffortlessBuilding { public static EffortlessBuilding instance; 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(); //Registration diff --git a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java index 91d64d0..b7ad4cc 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java +++ b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuildingClient.java @@ -6,9 +6,12 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import nl.requios.effortlessbuilding.gui.DiamondRandomizerBagScreen; import nl.requios.effortlessbuilding.gui.GoldenRandomizerBagScreen; import nl.requios.effortlessbuilding.gui.RandomizerBagScreen; +import nl.requios.effortlessbuilding.systems.BlockChain; public class EffortlessBuildingClient { + public static final BlockChain BLOCK_CHAIN = new BlockChain(); + public static void onConstructorClient(IEventBus modEventBus, IEventBus forgeEventBus) { modEventBus.addListener(EffortlessBuildingClient::clientSetup); } diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java index 469f5cb..c35038a 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/BuildModes.java @@ -11,8 +11,8 @@ import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.buildmode.buildmodes.*; import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; -import nl.requios.effortlessbuilding.helper.ReachHelper; -import nl.requios.effortlessbuilding.helper.SurvivalHelper; +import nl.requios.effortlessbuilding.utilities.ReachHelper; +import nl.requios.effortlessbuilding.utilities.SurvivalHelper; import nl.requios.effortlessbuilding.network.BlockBrokenMessage; import nl.requios.effortlessbuilding.network.BlockPlacedMessage; @@ -54,7 +54,7 @@ public class BuildModes { //Offset in direction of sidehit if not quickreplace and not replaceable 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) { startPos = startPos.relative(message.getSideHit()); } diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeSettingsManager.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeSettingsManager.java index e34510c..655ab98 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeSettingsManager.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeSettingsManager.java @@ -7,7 +7,7 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.network.PacketDistributor; import nl.requios.effortlessbuilding.EffortlessBuilding; 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.PacketHandler; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java index 25cd050..ad7f009 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/ThreeClicksBuildMode.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.core.Direction; import net.minecraft.core.BlockPos; import net.minecraft.world.phys.Vec3; -import nl.requios.effortlessbuilding.helper.ReachHelper; +import nl.requios.effortlessbuilding.utilities.ReachHelper; import java.util.*; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java index 8d3bf87..7bb99cf 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/TwoClicksBuildMode.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.core.Direction; import net.minecraft.core.BlockPos; 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.Dictionary; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java index 97735cc..6516ad8 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Floor.java @@ -6,7 +6,7 @@ import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.ModeOptions; 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.List; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java index 3b7aa33..6ca71fa 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Line.java @@ -5,7 +5,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.buildmode.BuildModes; 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.List; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Pyramid.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Pyramid.java index 25bb7d1..2831234 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Pyramid.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Pyramid.java @@ -2,11 +2,8 @@ package nl.requios.effortlessbuilding.buildmode.buildmodes; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; -import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.ThreeClicksBuildMode; -import nl.requios.effortlessbuilding.helper.ReachHelper; -import java.util.ArrayList; import java.util.List; public class Pyramid extends ThreeClicksBuildMode { diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java index b20a33f..1c5b677 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/SlopeFloor.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.core.BlockPos; import nl.requios.effortlessbuilding.buildmode.ModeOptions; 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.List; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java index 5f7e493..9181d48 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/buildmodes/Wall.java @@ -6,7 +6,7 @@ import net.minecraft.world.phys.Vec3; import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.ModeOptions; 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.List; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BlockSet.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BlockSet.java index 3f13564..cc9d992 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BlockSet.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BlockSet.java @@ -10,16 +10,14 @@ public class BlockSet { private final List coordinates; private final List previousBlockStates; private final List newBlockStates; - private final Vec3 hitVec; private final BlockPos firstPos; private final BlockPos secondPos; - public BlockSet(List coordinates, List previousBlockStates, List newBlockStates, Vec3 hitVec, + public BlockSet(List coordinates, List previousBlockStates, List newBlockStates, BlockPos firstPos, BlockPos secondPos) { this.coordinates = coordinates; this.previousBlockStates = previousBlockStates; this.newBlockStates = newBlockStates; - this.hitVec = hitVec; this.firstPos = firstPos; this.secondPos = secondPos; } @@ -36,10 +34,6 @@ public class BlockSet { return newBlockStates; } - public Vec3 getHitVec() { - return hitVec; - } - public BlockPos getFirstPos() { return firstPos; } diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java index 96c1fb6..1febfec 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java @@ -17,8 +17,8 @@ import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.compatibility.CompatHelper; -import nl.requios.effortlessbuilding.helper.DelayedBlockPlacer; -import nl.requios.effortlessbuilding.helper.SurvivalHelper; +import nl.requios.effortlessbuilding.systems.DelayedBlockPlacer; +import nl.requios.effortlessbuilding.utilities.SurvivalHelper; import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem; import nl.requios.effortlessbuilding.render.BlockPreviews; @@ -54,7 +54,7 @@ public class BuildModifiers { //place blocks after delay 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 BlockPos firstPos = startCoordinates.get(0); 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, hitVec, firstPos, secondPos)); + UndoRedo.addUndo(player, new BlockSet(coordinates, previousBlockStates, newBlockStates, firstPos, secondPos)); } diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/ModifierSettingsManager.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/ModifierSettingsManager.java index 87d9e2e..9965b48 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/ModifierSettingsManager.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/ModifierSettingsManager.java @@ -8,7 +8,7 @@ import net.minecraftforge.network.PacketDistributor; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; 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.PacketHandler; diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/UndoRedo.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/UndoRedo.java index b27b0d5..76d1faf 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/UndoRedo.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/UndoRedo.java @@ -12,9 +12,9 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.server.level.ServerLevel; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.helper.FixedStack; -import nl.requios.effortlessbuilding.helper.InventoryHelper; -import nl.requios.effortlessbuilding.helper.SurvivalHelper; +import nl.requios.effortlessbuilding.utilities.FixedStack; +import nl.requios.effortlessbuilding.utilities.InventoryHelper; +import nl.requios.effortlessbuilding.utilities.SurvivalHelper; import nl.requios.effortlessbuilding.render.BlockPreviews; import java.util.*; @@ -82,7 +82,6 @@ public class UndoRedo { List coordinates = blockSet.getCoordinates(); List previousBlockStates = blockSet.getPreviousBlockStates(); List newBlockStates = blockSet.getNewBlockStates(); - Vec3 hitVec = blockSet.getHitVec(); //Find up to date itemstacks in player inventory List itemStacks = findItemStacksInInventory(player, previousBlockStates); @@ -118,7 +117,7 @@ public class UndoRedo { } if (itemStack.isEmpty()) SurvivalHelper.breakBlock(player.level, player, coordinate, true); //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 coordinates = blockSet.getCoordinates(); List previousBlockStates = blockSet.getPreviousBlockStates(); List newBlockStates = blockSet.getNewBlockStates(); - Vec3 hitVec = blockSet.getHitVec(); //Find up to date itemstacks in player inventory List itemStacks = findItemStacksInInventory(player, newBlockStates); @@ -177,7 +175,7 @@ public class UndoRedo { } } 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); } } } diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArraySettingsGui.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArraySettingsGui.java index 1bfade0..8d8f710 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArraySettingsGui.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArraySettingsGui.java @@ -15,7 +15,7 @@ import nl.requios.effortlessbuilding.gui.elements.GuiCheckBoxFixed; import nl.requios.effortlessbuilding.gui.elements.GuiCollapsibleScrollEntry; import nl.requios.effortlessbuilding.gui.elements.GuiNumberField; 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.List; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorSettingsGui.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorSettingsGui.java index d73f9af..16e8298 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorSettingsGui.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorSettingsGui.java @@ -14,7 +14,7 @@ import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.buildmodifier.Mirror; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; 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.Arrays; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorSettingsGui.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorSettingsGui.java index 3f17b97..9ed3ca5 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorSettingsGui.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorSettingsGui.java @@ -14,7 +14,7 @@ import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.RadialMirror; 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.Arrays; diff --git a/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java b/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java index 0617705..d29253d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/AbstractRandomizerBagItem.java @@ -27,7 +27,7 @@ import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; 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.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))); 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 //Works without calling diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java index 8caef7a..bd5cf67 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade1Item.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; 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.ParametersAreNonnullByDefault; diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java index 5ac62ed..849b64b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade2Item.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; 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.ParametersAreNonnullByDefault; diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java index 2ed5a91..cb8baed 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ReachUpgrade3Item.java @@ -12,7 +12,7 @@ import net.minecraft.world.level.Level; import nl.requios.effortlessbuilding.CommonConfig; import nl.requios.effortlessbuilding.EffortlessBuilding; 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.ParametersAreNonnullByDefault; diff --git a/src/main/java/nl/requios/effortlessbuilding/network/AddUndoMessage.java b/src/main/java/nl/requios/effortlessbuilding/network/AddUndoMessage.java index 4a99723..21480a1 100644 --- a/src/main/java/nl/requios/effortlessbuilding/network/AddUndoMessage.java +++ b/src/main/java/nl/requios/effortlessbuilding/network/AddUndoMessage.java @@ -93,7 +93,6 @@ public class AddUndoMessage { new ArrayList() {{ add(message.getNewBlockState()); }}, - new Vec3(0, 0, 0), message.getCoordinate(), message.getCoordinate())); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java b/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java index 78ee7dc..93b9134 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/BlockPreviews.java @@ -30,9 +30,8 @@ import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.create.AllSpecialTextures; import nl.requios.effortlessbuilding.create.CreateClient; import nl.requios.effortlessbuilding.create.foundation.utility.Color; -import nl.requios.effortlessbuilding.create.foundation.utility.VecHelper; -import nl.requios.effortlessbuilding.helper.ReachHelper; -import nl.requios.effortlessbuilding.helper.SurvivalHelper; +import nl.requios.effortlessbuilding.utilities.ReachHelper; +import nl.requios.effortlessbuilding.utilities.SurvivalHelper; import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem; import java.util.ArrayList; @@ -270,7 +269,7 @@ public class BlockPreviews { //Check if we can place boolean canPlace = true; 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 { //If check is turned off, check if blockstate is the same (for dissolve effect) canPlace = player.level.getBlockState(blockPos) != blockState; diff --git a/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java b/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java index 65c5668..24b1fdc 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java @@ -23,7 +23,7 @@ import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.compatibility.CompatHelper; -import nl.requios.effortlessbuilding.helper.SurvivalHelper; +import nl.requios.effortlessbuilding.utilities.SurvivalHelper; /*** * Main render class for Effortless Building @@ -61,7 +61,7 @@ public class RenderHandler { //Check if tool (or none) in hand 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) { startPos = startPos.relative(blockLookingAt.getDirection()); } diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/BlockChain.java b/src/main/java/nl/requios/effortlessbuilding/systems/BlockChain.java new file mode 100644 index 0000000..4340792 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/systems/BlockChain.java @@ -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 { + +} diff --git a/src/main/java/nl/requios/effortlessbuilding/helper/DelayedBlockPlacer.java b/src/main/java/nl/requios/effortlessbuilding/systems/DelayedBlockPlacer.java similarity index 88% rename from src/main/java/nl/requios/effortlessbuilding/helper/DelayedBlockPlacer.java rename to src/main/java/nl/requios/effortlessbuilding/systems/DelayedBlockPlacer.java index bac8f8c..0373849 100644 --- a/src/main/java/nl/requios/effortlessbuilding/helper/DelayedBlockPlacer.java +++ b/src/main/java/nl/requios/effortlessbuilding/systems/DelayedBlockPlacer.java @@ -1,16 +1,15 @@ -package nl.requios.effortlessbuilding.helper; +package nl.requios.effortlessbuilding.systems; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; 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.UndoRedo; -import nl.requios.effortlessbuilding.create.foundation.utility.AnimationTickHolder; +import nl.requios.effortlessbuilding.utilities.InventoryHelper; +import nl.requios.effortlessbuilding.utilities.SurvivalHelper; import java.util.*; @@ -45,18 +44,16 @@ public class DelayedBlockPlacer { private List coordinates; private List blockStates; private List itemStacks; - private Vec3 hitVec; private boolean placeStartPos; private int ticksTillPlacement; public Entry(Level world, Player player, List coordinates, List blockStates, - List itemStacks, Vec3 hitVec, boolean placeStartPos, int ticksTillPlacement) { + List itemStacks, boolean placeStartPos, int ticksTillPlacement) { this.world = world; this.player = player; this.coordinates = coordinates; this.blockStates = blockStates; this.itemStacks = itemStacks; - this.hitVec = hitVec; this.placeStartPos = placeStartPos; this.ticksTillPlacement = ticksTillPlacement; } @@ -80,7 +77,7 @@ public class DelayedBlockPlacer { itemStack = InventoryHelper.findItemStackInInventory(player, blockState.getBlock()); 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 BlockPos firstPos = coordinates.get(0); 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)); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/systems/ServerBlockPlacer.java b/src/main/java/nl/requios/effortlessbuilding/systems/ServerBlockPlacer.java new file mode 100644 index 0000000..b6e350f --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/systems/ServerBlockPlacer.java @@ -0,0 +1,6 @@ +package nl.requios.effortlessbuilding.systems; + +// Receives block placement requests from the client and places them +public class ServerBlockPlacer { + +} diff --git a/src/main/java/nl/requios/effortlessbuilding/helper/FixedStack.java b/src/main/java/nl/requios/effortlessbuilding/utilities/FixedStack.java similarity index 94% rename from src/main/java/nl/requios/effortlessbuilding/helper/FixedStack.java rename to src/main/java/nl/requios/effortlessbuilding/utilities/FixedStack.java index a45d0a0..6cb7c3e 100644 --- a/src/main/java/nl/requios/effortlessbuilding/helper/FixedStack.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/FixedStack.java @@ -1,4 +1,4 @@ -package nl.requios.effortlessbuilding.helper; +package nl.requios.effortlessbuilding.utilities; //Stack with fixed size. Removes (overwrites) oldest element on push. public class FixedStack { diff --git a/src/main/java/nl/requios/effortlessbuilding/helper/InventoryHelper.java b/src/main/java/nl/requios/effortlessbuilding/utilities/InventoryHelper.java similarity index 94% rename from src/main/java/nl/requios/effortlessbuilding/helper/InventoryHelper.java rename to src/main/java/nl/requios/effortlessbuilding/utilities/InventoryHelper.java index 7accaf7..14315da 100644 --- a/src/main/java/nl/requios/effortlessbuilding/helper/InventoryHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/InventoryHelper.java @@ -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.entity.player.Player; diff --git a/src/main/java/nl/requios/effortlessbuilding/helper/ReachHelper.java b/src/main/java/nl/requios/effortlessbuilding/utilities/ReachHelper.java similarity index 96% rename from src/main/java/nl/requios/effortlessbuilding/helper/ReachHelper.java rename to src/main/java/nl/requios/effortlessbuilding/utilities/ReachHelper.java index 656259d..94be093 100644 --- a/src/main/java/nl/requios/effortlessbuilding/helper/ReachHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/ReachHelper.java @@ -1,4 +1,4 @@ -package nl.requios.effortlessbuilding.helper; +package nl.requios.effortlessbuilding.utilities; import net.minecraft.world.entity.player.Player; import net.minecraft.util.Mth; diff --git a/src/main/java/nl/requios/effortlessbuilding/helper/SurvivalHelper.java b/src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java similarity index 97% rename from src/main/java/nl/requios/effortlessbuilding/helper/SurvivalHelper.java rename to src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java index 19d9650..ed9438c 100644 --- a/src/main/java/nl/requios/effortlessbuilding/helper/SurvivalHelper.java +++ b/src/main/java/nl/requios/effortlessbuilding/utilities/SurvivalHelper.java @@ -1,4 +1,4 @@ -package nl.requios.effortlessbuilding.helper; +package nl.requios.effortlessbuilding.utilities; import net.minecraft.advancements.CriteriaTriggers; 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. //Based on ItemBlock#onItemUse 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) { if (!world.isLoaded(pos)) return false; ItemStack itemstack = origstack; @@ -57,7 +57,7 @@ public class SurvivalHelper { //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 dropBlock(world, player, pos); @@ -182,10 +182,9 @@ public class SurvivalHelper { * @param newBlockState the blockstate that is going to be placed * @param itemStack the itemstack used for placing * @param skipCollisionCheck skips collision check with entities - * @param sidePlacedOn * @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()) { //Check if itemstack is correct @@ -202,7 +201,7 @@ public class SurvivalHelper { block = newBlockState.getBlock(); 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); } @@ -248,7 +247,7 @@ public class SurvivalHelper { } //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); VoxelShape voxelShape = skipCollisionCheck ? null : blockIn.defaultBlockState().getCollisionShape(world, pos); @@ -257,7 +256,7 @@ public class SurvivalHelper { } //Check if double slab - if (placer != null && doesBecomeDoubleSlab(((Player) placer), pos, sidePlacedOn)) { + if (placer != null && doesBecomeDoubleSlab(((Player) placer), pos)) { return true; } @@ -290,7 +289,7 @@ public class SurvivalHelper { 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); ItemStack itemstack = player.getItemInHand(InteractionHand.MAIN_HAND);