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.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;
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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.*;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -10,16 +10,14 @@ public class BlockSet {
|
||||
private final List<BlockPos> coordinates;
|
||||
private final List<BlockState> previousBlockStates;
|
||||
private final List<BlockState> newBlockStates;
|
||||
private final Vec3 hitVec;
|
||||
private final BlockPos firstPos;
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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<BlockPos> coordinates = blockSet.getCoordinates();
|
||||
List<BlockState> previousBlockStates = blockSet.getPreviousBlockStates();
|
||||
List<BlockState> newBlockStates = blockSet.getNewBlockStates();
|
||||
Vec3 hitVec = blockSet.getHitVec();
|
||||
|
||||
//Find up to date itemstacks in player inventory
|
||||
List<ItemStack> 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<BlockPos> coordinates = blockSet.getCoordinates();
|
||||
List<BlockState> previousBlockStates = blockSet.getPreviousBlockStates();
|
||||
List<BlockState> newBlockStates = blockSet.getNewBlockStates();
|
||||
Vec3 hitVec = blockSet.getHitVec();
|
||||
|
||||
//Find up to date itemstacks in player inventory
|
||||
List<ItemStack> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -93,7 +93,6 @@ public class AddUndoMessage {
|
||||
new ArrayList<BlockState>() {{
|
||||
add(message.getNewBlockState());
|
||||
}},
|
||||
new Vec3(0, 0, 0),
|
||||
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.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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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.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<BlockPos> coordinates;
|
||||
private List<BlockState> blockStates;
|
||||
private List<ItemStack> itemStacks;
|
||||
private Vec3 hitVec;
|
||||
private boolean placeStartPos;
|
||||
private int ticksTillPlacement;
|
||||
|
||||
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.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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
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.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.util.Mth;
|
||||
@@ -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);
|
||||
Reference in New Issue
Block a user