diff --git a/src/main/java/techreborn/api/recipe/recipes/FluidReplicatorRecipe.java b/src/main/java/techreborn/api/recipe/recipes/FluidReplicatorRecipe.java index 6b16232b4..88073a9be 100644 --- a/src/main/java/techreborn/api/recipe/recipes/FluidReplicatorRecipe.java +++ b/src/main/java/techreborn/api/recipe/recipes/FluidReplicatorRecipe.java @@ -62,7 +62,7 @@ public class FluidReplicatorRecipe extends RebornFluidRecipe { @Override public boolean canCraft(BlockEntity be) { FluidReplicatorBlockEntity blockEntity = (FluidReplicatorBlockEntity) be; - if (!blockEntity.getMultiBlock()) { + if (!blockEntity.isMultiblockValid()) { return false; } final BlockPos hole = blockEntity.getPos().offset(blockEntity.getFacing().getOpposite(), 2); diff --git a/src/main/java/techreborn/api/recipe/recipes/IndustrialGrinderRecipe.java b/src/main/java/techreborn/api/recipe/recipes/IndustrialGrinderRecipe.java index 0ac75fa42..38a5d9b89 100644 --- a/src/main/java/techreborn/api/recipe/recipes/IndustrialGrinderRecipe.java +++ b/src/main/java/techreborn/api/recipe/recipes/IndustrialGrinderRecipe.java @@ -58,7 +58,7 @@ public class IndustrialGrinderRecipe extends RebornFluidRecipe { @Override public boolean canCraft(BlockEntity be) { IndustrialGrinderBlockEntity blockEntity = (IndustrialGrinderBlockEntity) be; - if (!blockEntity.getMultiBlock()) { + if (!blockEntity.isMultiblockValid()) { return false; } return super.canCraft(be); diff --git a/src/main/java/techreborn/api/recipe/recipes/IndustrialSawmillRecipe.java b/src/main/java/techreborn/api/recipe/recipes/IndustrialSawmillRecipe.java index b18fe4094..25827bd46 100644 --- a/src/main/java/techreborn/api/recipe/recipes/IndustrialSawmillRecipe.java +++ b/src/main/java/techreborn/api/recipe/recipes/IndustrialSawmillRecipe.java @@ -58,7 +58,7 @@ public class IndustrialSawmillRecipe extends RebornFluidRecipe { @Override public boolean canCraft(BlockEntity be) { IndustrialSawmillBlockEntity blockEntity = (IndustrialSawmillBlockEntity) be; - if (!blockEntity.getMutliBlock()) { + if (!blockEntity.isMultiblockValid()) { return false; } return super.canCraft(be); diff --git a/src/main/java/techreborn/blockentity/machine/GenericMachineBlockEntity.java b/src/main/java/techreborn/blockentity/machine/GenericMachineBlockEntity.java index 1e3ce5232..da583bdba 100644 --- a/src/main/java/techreborn/blockentity/machine/GenericMachineBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/GenericMachineBlockEntity.java @@ -79,7 +79,7 @@ public abstract class GenericMachineBlockEntity extends PowerAcceptorBlockEntity @Override public void tick() { super.tick(); - if (!world.isClient) { + if (!world.isClient && energySlot != -1) { charge(energySlot); } } diff --git a/src/main/java/techreborn/blockentity/machine/multiblock/DistillationTowerBlockEntity.java b/src/main/java/techreborn/blockentity/machine/multiblock/DistillationTowerBlockEntity.java index d794af763..6b7905ec7 100644 --- a/src/main/java/techreborn/blockentity/machine/multiblock/DistillationTowerBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/multiblock/DistillationTowerBlockEntity.java @@ -24,12 +24,12 @@ package techreborn.blockentity.machine.multiblock; -import net.minecraft.block.Material; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; import reborncore.client.screen.BuiltScreenHandlerProvider; import reborncore.client.screen.builder.BuiltScreenHandler; import reborncore.client.screen.builder.ScreenHandlerBuilder; +import reborncore.common.blockentity.MultiblockWriter; import reborncore.common.crafting.RebornRecipe; import reborncore.common.recipes.RecipeCrafter; import reborncore.common.util.RebornInventory; @@ -41,40 +41,21 @@ import techreborn.init.TRContent; public class DistillationTowerBlockEntity extends GenericMachineBlockEntity implements BuiltScreenHandlerProvider { - public MultiblockChecker multiblockChecker; - public DistillationTowerBlockEntity() { super(TRBlockEntities.DISTILLATION_TOWER, "DistillationTower", TechRebornConfig.distillationTowerMaxInput, TechRebornConfig.distillationTowerMaxEnergy, TRContent.Machine.DISTILLATION_TOWER.block, 6); - final int[] inputs = new int[] { 0, 1 }; - final int[] outputs = new int[] { 2, 3, 4, 5 }; + final int[] inputs = new int[]{0, 1}; + final int[] outputs = new int[]{2, 3, 4, 5}; this.inventory = new RebornInventory<>(7, "DistillationTowerBlockEntity", 64, this); this.crafter = new RecipeCrafter(ModRecipes.DISTILLATION_TOWER, this, 2, 4, this.inventory, inputs, outputs); } - - public boolean getMutliBlock() { - if (multiblockChecker == null) { - return false; - } - final boolean layer0 = multiblockChecker.checkRectY(1, 1, MultiblockChecker.STANDARD_CASING, MultiblockChecker.ZERO_OFFSET); - final boolean layer1 = multiblockChecker.checkRingY(1, 1, MultiblockChecker.INDUSTRIAL_CASING, new BlockPos(0, 1, 0)); - final boolean layer2 = multiblockChecker.checkRingY(1, 1, MultiblockChecker.STANDARD_CASING, new BlockPos(0, 2, 0)); - final boolean layer3 = multiblockChecker.checkRectY(1, 1, MultiblockChecker.INDUSTRIAL_CASING, new BlockPos(0, 3, 0)); - final Material centerBlock1 = multiblockChecker.getBlock(0, 1, 0).getMaterial(); - final Material centerBlock2 = multiblockChecker.getBlock(0, 2, 0).getMaterial(); - final boolean center1 = (centerBlock1 == Material.AIR); - final boolean center2 = (centerBlock2 == Material.AIR); - return layer0 && layer1 && layer2 && layer3 && center1 && center2; - } - // TileGenericMachine @Override - public void tick() { - if (multiblockChecker == null) { - final BlockPos downCenter = pos.offset(getFacing().getOpposite(), 2); - multiblockChecker = new MultiblockChecker(world, downCenter); - } - - super.tick(); + public void writeMultiblock(MultiblockWriter writer) { + writer .translate(1, 0, -1) + .fill(0, 0, 0, 3, 1, 3, TRContent.MachineBlocks.BASIC.getCasing().getDefaultState()) + .ringWithAir(Direction.Axis.Y, 3, 1, 3, TRContent.MachineBlocks.INDUSTRIAL.getCasing().getDefaultState()) + .ringWithAir(Direction.Axis.Y, 3, 2, 3, TRContent.MachineBlocks.BASIC.getCasing().getDefaultState()) + .fill(0, 3, 0, 3, 4, 3, TRContent.MachineBlocks.INDUSTRIAL.getCasing().getDefaultState()); } // IContainerProvider @@ -88,6 +69,6 @@ public class DistillationTowerBlockEntity extends GenericMachineBlockEntity impl @Override public boolean canCraft(RebornRecipe rebornRecipe) { - return getMutliBlock(); + return isMultiblockValid(); } } \ No newline at end of file diff --git a/src/main/java/techreborn/blockentity/machine/multiblock/FluidReplicatorBlockEntity.java b/src/main/java/techreborn/blockentity/machine/multiblock/FluidReplicatorBlockEntity.java index 88cdd3851..c0ebce709 100644 --- a/src/main/java/techreborn/blockentity/machine/multiblock/FluidReplicatorBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/multiblock/FluidReplicatorBlockEntity.java @@ -27,10 +27,11 @@ package techreborn.blockentity.machine.multiblock; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; import reborncore.client.screen.BuiltScreenHandlerProvider; import reborncore.client.screen.builder.BuiltScreenHandler; import reborncore.client.screen.builder.ScreenHandlerBuilder; +import reborncore.common.blockentity.MultiblockWriter; import reborncore.common.fluid.FluidValue; import reborncore.common.recipes.RecipeCrafter; import reborncore.common.util.IInventoryAccess; @@ -47,11 +48,9 @@ import javax.annotation.Nullable; /** * @author drcrazy - * */ public class FluidReplicatorBlockEntity extends GenericMachineBlockEntity implements BuiltScreenHandlerProvider { - public MultiblockChecker multiblockChecker; public static final FluidValue TANK_CAPACITY = FluidValue.BUCKET.multiply(16); public Tank tank; int ticksSinceLastChange; @@ -59,27 +58,20 @@ public class FluidReplicatorBlockEntity extends GenericMachineBlockEntity implem public FluidReplicatorBlockEntity() { super(TRBlockEntities.FLUID_REPLICATOR, "FluidReplicator", TechRebornConfig.fluidReplicatorMaxInput, TechRebornConfig.fluidReplicatorMaxEnergy, TRContent.Machine.FLUID_REPLICATOR.block, 3); this.inventory = new RebornInventory<>(4, "FluidReplicatorBlockEntity", 64, this, getInventoryAccess()); - this.crafter = new RecipeCrafter(ModRecipes.FLUID_REPLICATOR, this, 1, 0, this.inventory, new int[] {0}, null); + this.crafter = new RecipeCrafter(ModRecipes.FLUID_REPLICATOR, this, 1, 0, this.inventory, new int[]{0}, null); this.tank = new Tank("FluidReplicatorBlockEntity", FluidReplicatorBlockEntity.TANK_CAPACITY, this); } - public boolean getMultiBlock() { - if (multiblockChecker == null) { - return false; - } - final boolean ring = multiblockChecker.checkRingY(1, 1, MultiblockChecker.ADVANCED_CASING, - MultiblockChecker.ZERO_OFFSET); - return ring; + @Override + public void writeMultiblock(MultiblockWriter writer) { + BlockState state = TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState(); + writer .translate(1, 0, -1) + .ring(Direction.Axis.Y, 3, 0, 3, (v, p) -> v.getBlockState(p) == state, state, null, null); } // TileGenericMachine @Override public void tick() { - if (multiblockChecker == null) { - final BlockPos downCenter = pos.offset(getFacing().getOpposite(), 2); - multiblockChecker = new MultiblockChecker(world, downCenter); - } - ticksSinceLastChange++; // Check cells input slot 2 time per second if (!world.isClient && ticksSinceLastChange >= 10) { @@ -92,7 +84,7 @@ public class FluidReplicatorBlockEntity extends GenericMachineBlockEntity implem super.tick(); } - + @Override public RecipeCrafter getRecipeCrafter() { return (RecipeCrafter) crafter; @@ -112,9 +104,9 @@ public class FluidReplicatorBlockEntity extends GenericMachineBlockEntity implem return tagCompound; } - private static IInventoryAccess getInventoryAccess(){ + private static IInventoryAccess getInventoryAccess() { return (slotID, stack, face, direction, blockEntity) -> { - if(slotID == 0){ + if (slotID == 0) { return stack.isItemEqualIgnoreDamage(TRContent.Parts.UU_MATTER.getStack()); } return true; diff --git a/src/main/java/techreborn/blockentity/machine/multiblock/FusionControlComputerBlockEntity.java b/src/main/java/techreborn/blockentity/machine/multiblock/FusionControlComputerBlockEntity.java index 73d249f3c..aba769a16 100644 --- a/src/main/java/techreborn/blockentity/machine/multiblock/FusionControlComputerBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/multiblock/FusionControlComputerBlockEntity.java @@ -33,32 +33,27 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; -import reborncore.api.IToolDrop; -import reborncore.api.blockentity.InventoryProvider; import reborncore.client.screen.BuiltScreenHandlerProvider; import reborncore.client.screen.builder.BuiltScreenHandler; import reborncore.client.screen.builder.ScreenHandlerBuilder; +import reborncore.common.blockentity.MultiblockWriter; import reborncore.common.crafting.RebornRecipe; import reborncore.common.crafting.ingredient.RebornIngredient; -import reborncore.common.powerSystem.PowerAcceptorBlockEntity; import reborncore.common.util.ItemUtils; import reborncore.common.util.RebornInventory; import reborncore.common.util.StringUtils; import reborncore.common.util.Torus; import techreborn.api.recipe.recipes.FusionReactorRecipe; +import techreborn.blockentity.machine.GenericMachineBlockEntity; import techreborn.config.TechRebornConfig; import techreborn.init.ModRecipes; import techreborn.init.TRBlockEntities; import techreborn.init.TRContent; -import java.util.List; - -public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity - implements IToolDrop, InventoryProvider, BuiltScreenHandlerProvider { +public class FusionControlComputerBlockEntity extends GenericMachineBlockEntity implements BuiltScreenHandlerProvider { public RebornInventory inventory; - public int coilCount = 0; public int crafingTickTime = 0; public int neededPower = 0; public int size = 6; @@ -73,36 +68,15 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity long lastTick = -1; public FusionControlComputerBlockEntity() { - super(TRBlockEntities.FUSION_CONTROL_COMPUTER); + super(TRBlockEntities.FUSION_CONTROL_COMPUTER, "FusionControlComputer", -1, -1, TRContent.Machine.FUSION_CONTROL_COMPUTER.block, -1); checkOverfill = false; this.inventory = new RebornInventory<>(3, "FusionControlComputerBlockEntity", 64, this); } - /** - * Check that reactor has all necessary coils in place - * - * @return boolean Return true if coils are present - */ - public boolean checkCoils() { - List coils = Torus.generate(pos, size); - for(BlockPos coilPos : coils){ - if (!isCoil(coilPos)) { - coilCount = 0; - return false; - } - } - coilCount = coils.size(); - return true; - } - - /** - * Checks if block is fusion coil - * - * @param pos coordinate for block - * @return boolean Returns true if block is fusion coil - */ - public boolean isCoil(BlockPos pos) { - return world.getBlockState(pos).getBlock() == TRContent.Machine.FUSION_COIL.block; + @Override + public void writeMultiblock(MultiblockWriter writer) { + BlockState coil = TRContent.Machine.FUSION_COIL.block.getDefaultState(); + Torus.generate(BlockPos.ORIGIN, size).forEach(pos -> writer.add(pos.getX(), pos.getY(), pos.getZ(), coil)); } /** @@ -118,14 +92,14 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity /** * Checks that ItemStack could be inserted into slot provided, including check * for existing item in slot and maximum stack size - * + * * @param stack ItemStack ItemStack to insert - * @param slot int Slot ID to check - * @param tags boolean Should we use tags + * @param slot int Slot ID to check + * @param tags boolean Should we use tags * @return boolean Returns true if ItemStack will fit into slot */ public boolean canFitStack(ItemStack stack, int slot, boolean tags) {// Checks to see if it can - // fit the stack + // fit the stack if (stack.isEmpty()) { return true; } @@ -140,7 +114,7 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity /** * Returns progress scaled to input value - * + * * @param scale int Maximum value for progress * @return int Scale of progress */ @@ -166,20 +140,20 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity } } } - + /** * Validates if reactor has all inputs and can output result - * + * * @param recipe FusionReactorRecipe Recipe to validate * @return Boolean True if we have all inputs and can fit output */ private boolean validateRecipe(FusionReactorRecipe recipe) { - return hasAllInputs(recipe) && canFitStack(recipe.getOutputs().get(0), outputStackSlot, true); + return hasAllInputs(recipe) && canFitStack(recipe.getOutputs().get(0), outputStackSlot, true); } - + /** * Check if BlockEntity has all necessary inputs for recipe provided - * + * * @param recipeType RebornRecipe Recipe to check inputs * @return Boolean True if reactor has all inputs for recipe */ @@ -199,10 +173,10 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity } return true; } - + /** * Decrease stack size on the given slot according to recipe input - * + * * @param slot int Slot number */ private void useInput(int slot) { @@ -228,7 +202,7 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity } //Move this to here from the nbt read method, as it now requires the world as of 1.14 - if(checkNBTRecipe) { + if (checkNBTRecipe) { checkNBTRecipe = false; for (final RebornRecipe reactorRecipe : ModRecipes.FUSION_REACTOR.getRecipes(getWorld())) { if (validateRecipe((FusionReactorRecipe) reactorRecipe)) { @@ -237,7 +211,7 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity } } - if(lastTick == world.getTime()){ + if (lastTick == world.getTime()) { //Prevent tick accerators, blame obstinate for this. return; } @@ -245,11 +219,10 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity // Force check every second if (world.getTime() % 20 == 0) { - checkCoils(); inventory.setChanged(); } - if (coilCount == 0) { + if (!isMultiblockValid()) { resetCrafter(); return; } @@ -314,7 +287,7 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity @Override public double getPowerMultiplier() { - double calc = (1F/2F) * Math.pow(size -5, 1.8); + double calc = (1F / 2F) * Math.pow(size - 5, 1.8); return Math.max(Math.round(calc * 100D) / 100D, 1D); } @@ -355,10 +328,10 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity this.crafingTickTime = tagCompound.getInt("crafingTickTime"); this.neededPower = tagCompound.getInt("neededPower"); this.hasStartedCrafting = tagCompound.getBoolean("hasStartedCrafting"); - if(tagCompound.contains("hasActiveRecipe") && tagCompound.getBoolean("hasActiveRecipe") && this.currentRecipe == null){ + if (tagCompound.contains("hasActiveRecipe") && tagCompound.getBoolean("hasActiveRecipe") && this.currentRecipe == null) { checkNBTRecipe = true; } - if(tagCompound.contains("size")){ + if (tagCompound.contains("size")) { this.size = tagCompound.getInt("size"); } this.size = Math.min(size, TechRebornConfig.fusionControlComputerMaxCoilSize);//Done here to force the samller size, will be useful if people lag out on a large one. @@ -375,24 +348,11 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity return tagCompound; } - // TileLegacyMachineBase - @Override - public void onLoad() { - super.onLoad(); - this.checkCoils(); - } - @Override public boolean canBeUpgraded() { return false; } - // IToolDrop - @Override - public ItemStack getToolDrop(PlayerEntity playerIn) { - return TRContent.Machine.FUSION_CONTROL_COMPUTER.getStack(); - } - // ItemHandlerProvider @Override public RebornInventory getInventory() { @@ -404,7 +364,6 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity public BuiltScreenHandler createScreenHandler(int syncID, final PlayerEntity player) { return new ScreenHandlerBuilder("fusionreactor").player(player.inventory).inventory().hotbar() .addInventory().blockEntity(this).slot(0, 34, 47).slot(1, 126, 47).outputSlot(2, 80, 47).syncEnergyValue() - .sync(this::getCoilStatus, this::setCoilStatus) .sync(this::getCrafingTickTime, this::setCrafingTickTime) .sync(this::getSize, this::setSize) .sync(this::getState, this::setState) @@ -414,14 +373,6 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity .create(this, syncID); } - public int getCoilStatus() { - return coilCount; - } - - public void setCoilStatus(int coilStatus) { - this.coilCount = coilStatus; - } - public int getCrafingTickTime() { return crafingTickTime; } @@ -446,61 +397,61 @@ public class FusionControlComputerBlockEntity extends PowerAcceptorBlockEntity this.size = size; } - public void changeSize(int sizeDelta){ + public void changeSize(int sizeDelta) { int newSize = size + sizeDelta; this.size = Math.max(6, Math.min(TechRebornConfig.fusionControlComputerMaxCoilSize, newSize)); } - public int getState(){ - if(currentRecipe == null ){ + public int getState() { + if (currentRecipe == null) { return 0; //No Recipe } - if(!hasStartedCrafting){ + if (!hasStartedCrafting) { return 1; //Waiting on power } return 2; //Crafting } - public void setState(int state){ + public void setState(int state) { this.state = state; } public Identifier getCurrentRecipeID() { - if(currentRecipe == null) { + if (currentRecipe == null) { return new Identifier("null", "null"); } return currentRecipe.getId(); } public void setCurrentRecipeID(Identifier currentRecipeID) { - if(currentRecipeID.getPath().equals("null")) { + if (currentRecipeID.getPath().equals("null")) { currentRecipeID = null; } this.currentRecipeID = currentRecipeID; } public FusionReactorRecipe getCurrentRecipeFromID() { - if(currentRecipeID == null) return null; + if (currentRecipeID == null) return null; return ModRecipes.FUSION_REACTOR.getRecipes(world).stream() .filter(recipe -> recipe.getId().equals(currentRecipeID)) .findFirst() .orElse(null); } - public Text getStateText(){ - if(state == -1){ + public Text getStateText() { + if (state == -1) { return LiteralText.EMPTY; - } else if (state == 0){ + } else if (state == 0) { return new LiteralText("No recipe"); - } else if (state == 1){ + } else if (state == 1) { FusionReactorRecipe r = getCurrentRecipeFromID(); - if(r == null) { + if (r == null) { return new LiteralText("Charging"); } int percentage = percentage(r.getStartEnergy(), getEnergy()); return new LiteralText("Charging (") .append(StringUtils.getPercentageText(percentage)); - } else if (state == 2){ + } else if (state == 2) { return new LiteralText("Crafting"); } return LiteralText.EMPTY; diff --git a/src/main/java/techreborn/blockentity/machine/multiblock/ImplosionCompressorBlockEntity.java b/src/main/java/techreborn/blockentity/machine/multiblock/ImplosionCompressorBlockEntity.java index acee313b1..7a0d78ccc 100644 --- a/src/main/java/techreborn/blockentity/machine/multiblock/ImplosionCompressorBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/multiblock/ImplosionCompressorBlockEntity.java @@ -25,10 +25,11 @@ package techreborn.blockentity.machine.multiblock; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; import reborncore.client.screen.BuiltScreenHandlerProvider; import reborncore.client.screen.builder.BuiltScreenHandler; import reborncore.client.screen.builder.ScreenHandlerBuilder; +import reborncore.common.blockentity.MultiblockWriter; import reborncore.common.crafting.RebornRecipe; import reborncore.common.recipes.RecipeCrafter; import reborncore.common.util.RebornInventory; @@ -40,34 +41,20 @@ import techreborn.init.TRContent; public class ImplosionCompressorBlockEntity extends GenericMachineBlockEntity implements BuiltScreenHandlerProvider { - public MultiblockChecker multiblockChecker; - public ImplosionCompressorBlockEntity() { super(TRBlockEntities.IMPLOSION_COMPRESSOR, "ImplosionCompressor", TechRebornConfig.implosionCompressorMaxInput, TechRebornConfig.implosionCompressorMaxEnergy, TRContent.Machine.IMPLOSION_COMPRESSOR.block, 4); - final int[] inputs = new int[] { 0, 1 }; - final int[] outputs = new int[] { 2, 3 }; + final int[] inputs = new int[]{0, 1}; + final int[] outputs = new int[]{2, 3}; this.inventory = new RebornInventory<>(5, "ImplosionCompressorBlockEntity", 64, this); this.crafter = new RecipeCrafter(ModRecipes.IMPLOSION_COMPRESSOR, this, 2, 2, this.inventory, inputs, outputs); } - - public boolean getMutliBlock() { - if(multiblockChecker == null){ - return false; - } - final boolean down = multiblockChecker.checkRectY(1, 1, MultiblockChecker.ADVANCED_CASING, MultiblockChecker.ZERO_OFFSET); - final boolean up = multiblockChecker.checkRectY(1, 1, MultiblockChecker.ADVANCED_CASING, new BlockPos(0, 2, 0)); - final boolean chamber = multiblockChecker.checkRingYHollow(1, 1, MultiblockChecker.ADVANCED_CASING, new BlockPos(0, 1, 0)); - return down && chamber && up; - } - // TileGenericMachine @Override - public void tick() { - if (multiblockChecker == null) { - multiblockChecker = new MultiblockChecker(world, pos.down(3)); - } - - super.tick(); + public void writeMultiblock(MultiblockWriter writer) { + writer .translate(-1, -3, -1) + .fill(0, 0, 0, 3, 1, 3, TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState()) + .ringWithAir(Direction.Axis.Y, 3, 1, 3, TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState()) + .fill(0, 2, 0, 3, 3, 3, TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState()); } // IContainerProvider @@ -80,6 +67,6 @@ public class ImplosionCompressorBlockEntity extends GenericMachineBlockEntity im @Override public boolean canCraft(RebornRecipe rebornRecipe) { - return getMutliBlock(); + return isMultiblockValid(); } } diff --git a/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialBlastFurnaceBlockEntity.java b/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialBlastFurnaceBlockEntity.java index ddf82c8e5..a5602a8af 100644 --- a/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialBlastFurnaceBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialBlastFurnaceBlockEntity.java @@ -24,14 +24,18 @@ package techreborn.blockentity.machine.multiblock; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.block.Material; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; +import net.minecraft.world.BlockView; import reborncore.client.screen.BuiltScreenHandlerProvider; import reborncore.client.screen.builder.BuiltScreenHandler; import reborncore.client.screen.builder.ScreenHandlerBuilder; +import reborncore.common.blockentity.MultiblockWriter; import reborncore.common.multiblock.IMultiblockPart; import reborncore.common.recipes.RecipeCrafter; import reborncore.common.util.RebornInventory; @@ -44,24 +48,49 @@ import techreborn.init.TRBlockEntities; import techreborn.init.TRContent; import techreborn.multiblocks.MultiBlockCasing; +import java.util.function.BiPredicate; + public class IndustrialBlastFurnaceBlockEntity extends GenericMachineBlockEntity implements BuiltScreenHandlerProvider { - public MultiblockChecker multiblockChecker; private int cachedHeat; public IndustrialBlastFurnaceBlockEntity() { super(TRBlockEntities.INDUSTRIAL_BLAST_FURNACE, "IndustrialBlastFurnace", TechRebornConfig.industrialBlastFurnaceMaxInput, TechRebornConfig.industrialBlastFurnaceMaxEnergy, TRContent.Machine.INDUSTRIAL_BLAST_FURNACE.block, 4); - final int[] inputs = new int[] { 0, 1 }; - final int[] outputs = new int[] { 2, 3 }; + final int[] inputs = new int[]{0, 1}; + final int[] outputs = new int[]{2, 3}; this.inventory = new RebornInventory<>(5, "IndustrialBlastFurnaceBlockEntity", 64, this); this.crafter = new RecipeCrafter(ModRecipes.BLAST_FURNACE, this, 2, 2, this.inventory, inputs, outputs); } - + + @Override + public void writeMultiblock(MultiblockWriter writer) { + BlockState basic = TRContent.MachineBlocks.BASIC.getCasing().getDefaultState(); + BlockState advanced = TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState(); + BlockState industrial = TRContent.MachineBlocks.INDUSTRIAL.getCasing().getDefaultState(); + BlockState lava = Blocks.LAVA.getDefaultState(); + + BiPredicate casing = (view, pos) -> { + BlockState state = view.getBlockState(pos); + return basic == state || advanced == state || industrial == state; + }; + + BiPredicate maybeLava = (view, pos) -> { + BlockState state = view.getBlockState(pos); + return state == lava || state.getBlock() == Blocks.AIR; + }; + + writer .translate(1, 0, -1) + .fill(0, 0, 0, 3, 1, 3, casing, basic) + .ring(Direction.Axis.Y, 3, 1, 3, casing, basic, maybeLava, lava) + .ring(Direction.Axis.Y, 3, 2, 3, casing, basic, maybeLava, lava) + .fill(0, 3, 0, 3, 4, 3, casing, basic); + } + public int getHeat() { - if (!getMutliBlock()){ + if (!isMultiblockValid()) { return 0; } - + // Bottom center of multiblock final BlockPos location = pos.offset(getFacing().getOpposite(), 2); final BlockEntity blockEntity = world.getBlockEntity(location); @@ -93,22 +122,7 @@ public class IndustrialBlastFurnaceBlockEntity extends GenericMachineBlockEntity return 0; } - - public boolean getMutliBlock() { - if(multiblockChecker == null){ - return false; - } - final boolean layer0 = multiblockChecker.checkRectY(1, 1, MultiblockChecker.CASING_ANY, MultiblockChecker.ZERO_OFFSET); - final boolean layer1 = multiblockChecker.checkRingY(1, 1, MultiblockChecker.CASING_ANY, new BlockPos(0, 1, 0)); - final boolean layer2 = multiblockChecker.checkRingY(1, 1, MultiblockChecker.CASING_ANY, new BlockPos(0, 2, 0)); - final boolean layer3 = multiblockChecker.checkRectY(1, 1, MultiblockChecker.CASING_ANY, new BlockPos(0, 3, 0)); - final Material centerBlock1 = multiblockChecker.getBlock(0, 1, 0).getMaterial(); - final Material centerBlock2 = multiblockChecker.getBlock(0, 2, 0).getMaterial(); - final boolean center1 = (centerBlock1 == Material.AIR || centerBlock1 == Material.LAVA); - final boolean center2 = (centerBlock2 == Material.AIR || centerBlock2 == Material.LAVA); - return layer0 && layer1 && layer2 && layer3 && center1 && center2; - } - + public void setHeat(final int heat) { cachedHeat = heat; } @@ -116,17 +130,7 @@ public class IndustrialBlastFurnaceBlockEntity extends GenericMachineBlockEntity public int getCachedHeat() { return cachedHeat; } - - // TileGenericMachine - @Override - public void tick() { - if (multiblockChecker == null) { - final BlockPos downCenter = pos.offset(getFacing().getOpposite(), 2); - multiblockChecker = new MultiblockChecker(world, downCenter); - } - super.tick(); - } - + // IContainerProvider @Override public BuiltScreenHandler createScreenHandler(int syncID, final PlayerEntity player) { diff --git a/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialGrinderBlockEntity.java b/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialGrinderBlockEntity.java index d75832740..07c9cf3d4 100644 --- a/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialGrinderBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialGrinderBlockEntity.java @@ -25,15 +25,15 @@ package techreborn.blockentity.machine.multiblock; import net.minecraft.block.BlockState; -import net.minecraft.block.FluidBlock; +import net.minecraft.block.Blocks; import net.minecraft.block.Material; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import reborncore.client.screen.BuiltScreenHandlerProvider; import reborncore.client.screen.builder.BuiltScreenHandler; import reborncore.client.screen.builder.ScreenHandlerBuilder; +import reborncore.common.blockentity.MultiblockWriter; import reborncore.common.fluid.FluidValue; import reborncore.common.recipes.RecipeCrafter; import reborncore.common.util.RebornInventory; @@ -51,41 +51,31 @@ public class IndustrialGrinderBlockEntity extends GenericMachineBlockEntity impl public static final FluidValue TANK_CAPACITY = FluidValue.BUCKET.multiply(16); public Tank tank; - public MultiblockChecker multiblockChecker; int ticksSinceLastChange; public IndustrialGrinderBlockEntity() { super(TRBlockEntities.INDUSTRIAL_GRINDER, "IndustrialGrinder", TechRebornConfig.industrialGrinderMaxInput, TechRebornConfig.industrialGrinderMaxEnergy, TRContent.Machine.INDUSTRIAL_GRINDER.block, 7); - final int[] inputs = new int[] { 0, 1 }; - final int[] outputs = new int[] {2, 3, 4, 5}; + final int[] inputs = new int[]{0, 1}; + final int[] outputs = new int[]{2, 3, 4, 5}; this.inventory = new RebornInventory<>(8, "IndustrialGrinderBlockEntity", 64, this); this.crafter = new RecipeCrafter(ModRecipes.INDUSTRIAL_GRINDER, this, 1, 4, this.inventory, inputs, outputs); this.tank = new Tank("IndustrialGrinderBlockEntity", IndustrialGrinderBlockEntity.TANK_CAPACITY, this); this.ticksSinceLastChange = 0; } - public boolean getMultiBlock() { - if (multiblockChecker == null) { - return false; - } - final boolean down = multiblockChecker.checkRectY(1, 1, MultiblockChecker.STANDARD_CASING, MultiblockChecker.ZERO_OFFSET); - final boolean up = multiblockChecker.checkRectY(1, 1, MultiblockChecker.STANDARD_CASING, new BlockPos(0, 2, 0)); - final boolean blade = multiblockChecker.checkRingY(1, 1, MultiblockChecker.ADVANCED_CASING, new BlockPos(0, 1, 0)); - final BlockState centerBlock = multiblockChecker.getBlock(0, 1, 0); - final boolean center = ((centerBlock.getBlock() instanceof FluidBlock - || centerBlock.getBlock() instanceof FluidBlock) - && centerBlock.getMaterial() == Material.WATER); - return down && center && blade && up; + @Override + public void writeMultiblock(MultiblockWriter writer) { + BlockState basic = TRContent.MachineBlocks.BASIC.getCasing().getDefaultState(); + BlockState advanced = TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState(); + writer .translate(1, -1, -1) + .fill(0, 0, 0, 3, 1, 3, basic) + .ring(Direction.Axis.Y, 3, 1, 3, (view, pos) -> view.getBlockState(pos) == advanced, advanced, (view, pos) -> view.getBlockState(pos).getMaterial() == Material.WATER, Blocks.WATER.getDefaultState()) + .fill(0, 2, 0, 3, 3, 3, basic); } // TilePowerAcceptor @Override public void tick() { - if (multiblockChecker == null) { - final BlockPos downCenter = pos.offset(getFacing().getOpposite(), 2).offset(Direction.DOWN, 1); - multiblockChecker = new MultiblockChecker(world, downCenter); - } - ticksSinceLastChange++; // Check cells input slot 2 time per second if (!world.isClient && ticksSinceLastChange >= 10) { diff --git a/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialSawmillBlockEntity.java b/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialSawmillBlockEntity.java index 14ddc914f..cecc215b7 100644 --- a/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialSawmillBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/multiblock/IndustrialSawmillBlockEntity.java @@ -25,15 +25,15 @@ package techreborn.blockentity.machine.multiblock; import net.minecraft.block.BlockState; -import net.minecraft.block.FluidBlock; +import net.minecraft.block.Blocks; import net.minecraft.block.Material; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import reborncore.client.screen.BuiltScreenHandlerProvider; import reborncore.client.screen.builder.BuiltScreenHandler; import reborncore.client.screen.builder.ScreenHandlerBuilder; +import reborncore.common.blockentity.MultiblockWriter; import reborncore.common.fluid.FluidValue; import reborncore.common.recipes.RecipeCrafter; import reborncore.common.util.RebornInventory; @@ -51,41 +51,31 @@ public class IndustrialSawmillBlockEntity extends GenericMachineBlockEntity impl public static final FluidValue TANK_CAPACITY = FluidValue.BUCKET.multiply(16); public Tank tank; - public MultiblockChecker multiblockChecker; int ticksSinceLastChange; public IndustrialSawmillBlockEntity() { super(TRBlockEntities.INDUSTRIAL_SAWMILL, "IndustrialSawmill", TechRebornConfig.industrialSawmillMaxInput, TechRebornConfig.industrialSawmillMaxEnergy, TRContent.Machine.INDUSTRIAL_SAWMILL.block, 6); - final int[] inputs = new int[] { 0, 1 }; - final int[] outputs = new int[] { 2, 3, 4 }; + final int[] inputs = new int[]{0, 1}; + final int[] outputs = new int[]{2, 3, 4}; this.inventory = new RebornInventory<>(7, "SawmillBlockEntity", 64, this); this.crafter = new RecipeCrafter(ModRecipes.INDUSTRIAL_SAWMILL, this, 1, 3, this.inventory, inputs, outputs); this.tank = new Tank("SawmillBlockEntity", IndustrialSawmillBlockEntity.TANK_CAPACITY, this); this.ticksSinceLastChange = 0; } - public boolean getMutliBlock() { - if (multiblockChecker == null) { - return false; - } - final boolean down = multiblockChecker.checkRectY(1, 1, MultiblockChecker.STANDARD_CASING, MultiblockChecker.ZERO_OFFSET); - final boolean up = multiblockChecker.checkRectY(1, 1, MultiblockChecker.STANDARD_CASING, new BlockPos(0, 2, 0)); - final boolean blade = multiblockChecker.checkRingY(1, 1, MultiblockChecker.ADVANCED_CASING, new BlockPos(0, 1, 0)); - final BlockState centerBlock = multiblockChecker.getBlock(0, 1, 0); - final boolean center = ((centerBlock.getBlock() instanceof FluidBlock - || centerBlock.getBlock() instanceof FluidBlock) - && centerBlock.getMaterial() == Material.WATER); - return down && center && blade && up; + @Override + public void writeMultiblock(MultiblockWriter writer) { + BlockState basic = TRContent.MachineBlocks.BASIC.getCasing().getDefaultState(); + BlockState advanced = TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState(); + writer .translate(1, -1, -1) + .fill(0, 0, 0, 3, 1, 3, basic) + .ring(Direction.Axis.Y, 3, 1, 3, (view, pos) -> view.getBlockState(pos) == advanced, advanced, (view, pos) -> view.getBlockState(pos).getMaterial() == Material.WATER, Blocks.WATER.getDefaultState()) + .fill(0, 2, 0, 3, 3, 3, basic); } // TileGenericMachine @Override public void tick() { - if (multiblockChecker == null) { - final BlockPos downCenter = pos.offset(getFacing().getOpposite(), 2).offset(Direction.DOWN, 1); - multiblockChecker = new MultiblockChecker(world, downCenter); - } - ticksSinceLastChange++; // Check cells input slot 2 time per second if (!world.isClient && ticksSinceLastChange >= 10) { @@ -99,7 +89,7 @@ public class IndustrialSawmillBlockEntity extends GenericMachineBlockEntity impl super.tick(); } - + // TilePowerAcceptor @Override public void fromTag(BlockState blockState, final CompoundTag tagCompound) { diff --git a/src/main/java/techreborn/blockentity/machine/multiblock/MultiblockChecker.java b/src/main/java/techreborn/blockentity/machine/multiblock/MultiblockChecker.java deleted file mode 100644 index b6dc2a03b..000000000 --- a/src/main/java/techreborn/blockentity/machine/multiblock/MultiblockChecker.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * This file is part of TechReborn, licensed under the MIT License (MIT). - * - * Copyright (c) 2020 TechReborn - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package techreborn.blockentity.machine.multiblock; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import techreborn.init.TRContent; - -public class MultiblockChecker { - - public static final BlockPos ZERO_OFFSET = BlockPos.ORIGIN; - - public static final String STANDARD_CASING = "standard"; - public static final String ADVANCED_CASING = "advanced"; - public static final String INDUSTRIAL_CASING = "industrial"; - public static final String CASING_ANY = "any"; - - private final World world; - private final BlockPos downCenter; - - public MultiblockChecker(World world, BlockPos downCenter) { - this.world = world; - this.downCenter = downCenter; - } - - // TODO: make thid not so ugly - public boolean checkCasing(int offX, int offY, int offZ, String type) { - Block block = getBlock(offX, offY, offZ).getBlock(); - if (block == TRContent.MachineBlocks.BASIC.getCasing()|| block == TRContent.MachineBlocks.ADVANCED.getCasing() || block == TRContent.MachineBlocks.INDUSTRIAL.getCasing() ) { - if (type == MultiblockChecker.CASING_ANY) { - return true; - } else if ( type == "standard" && block == TRContent.MachineBlocks.BASIC.getCasing()) { - return true; - } - else if (type == "advanced" && block == TRContent.MachineBlocks.ADVANCED.getCasing()) { - return true; - } - else if (type == "industrial" && block == TRContent.MachineBlocks.INDUSTRIAL.getCasing()) { - return true; - } - } - return false; - } - - public boolean checkAir(int offX, int offY, int offZ) { - BlockPos pos = downCenter.add(offX, offY, offZ); - return world.isAir(pos); - } - - public BlockState getBlock(int offX, int offY, int offZ) { - BlockPos pos = downCenter.add(offX, offY, offZ); - return world.getBlockState(pos); - } - - public boolean checkRectY(int sizeX, int sizeZ, String casingType, BlockPos offset) { - for (int x = -sizeX; x <= sizeX; x++) { - for (int z = -sizeZ; z <= sizeZ; z++) { - if (!checkCasing(x + offset.getX(), offset.getY(), z + offset.getZ(), casingType)) - return false; - } - } - return true; - } - - public boolean checkRectZ(int sizeX, int sizeY, String casingType, BlockPos offset) { - for (int x = -sizeX; x <= sizeX; x++) { - for (int y = -sizeY; y <= sizeY; y++) { - if (!checkCasing(x + offset.getX(), y + offset.getY(), offset.getZ(), casingType)) - return false; - } - } - return true; - } - - public boolean checkRectX(int sizeZ, int sizeY, String casingType, BlockPos offset) { - for (int z = -sizeZ; z <= sizeZ; z++) { - for (int y = -sizeY; y <= sizeY; y++) { - if (!checkCasing(offset.getX(), y + offset.getY(), z + offset.getZ(), casingType)) - return false; - } - } - return true; - } - - public boolean checkRingY(int sizeX, int sizeZ, String casingType, BlockPos offset) { - for (int x = -sizeX; x <= sizeX; x++) { - for (int z = -sizeZ; z <= sizeZ; z++) { - if ((x == sizeX || x == -sizeX) || (z == sizeZ || z == -sizeZ)) { - if (!checkCasing(x + offset.getX(), offset.getY(), z + offset.getZ(), casingType)) - return false; - } - } - } - return true; - } - - public boolean checkRingYHollow(int sizeX, int sizeZ, String casingType, BlockPos offset) { - for (int x = -sizeX; x <= sizeX; x++) { - for (int z = -sizeZ; z <= sizeZ; z++) { - if ((x == sizeX || x == -sizeX) || (z == sizeZ || z == -sizeZ)) { - if (!checkCasing(x + offset.getX(), offset.getY(), z + offset.getZ(), casingType)) - return false; - } else if (!checkAir(x + offset.getX(), offset.getY(), z + offset.getZ())) - return false; - } - } - return true; - } - -} diff --git a/src/main/java/techreborn/blockentity/machine/multiblock/VacuumFreezerBlockEntity.java b/src/main/java/techreborn/blockentity/machine/multiblock/VacuumFreezerBlockEntity.java index b9d195a45..3694db5d3 100644 --- a/src/main/java/techreborn/blockentity/machine/multiblock/VacuumFreezerBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/multiblock/VacuumFreezerBlockEntity.java @@ -24,12 +24,13 @@ package techreborn.blockentity.machine.multiblock; +import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import reborncore.client.screen.BuiltScreenHandlerProvider; import reborncore.client.screen.builder.BuiltScreenHandler; import reborncore.client.screen.builder.ScreenHandlerBuilder; +import reborncore.common.blockentity.MultiblockWriter; import reborncore.common.recipes.RecipeCrafter; import reborncore.common.util.RebornInventory; import techreborn.blockentity.machine.GenericMachineBlockEntity; @@ -40,31 +41,23 @@ import techreborn.init.TRContent; public class VacuumFreezerBlockEntity extends GenericMachineBlockEntity implements BuiltScreenHandlerProvider { - public MultiblockChecker multiblockChecker; - public VacuumFreezerBlockEntity() { super(TRBlockEntities.VACUUM_FREEZER, "VacuumFreezer", TechRebornConfig.vacuumFreezerMaxInput, TechRebornConfig.vacuumFreezerMaxEnergy, TRContent.Machine.VACUUM_FREEZER.block, 2); - final int[] inputs = new int[] { 0 }; - final int[] outputs = new int[] { 1 }; + final int[] inputs = new int[]{0}; + final int[] outputs = new int[]{1}; this.inventory = new RebornInventory<>(3, "VacuumFreezerBlockEntity", 64, this); this.crafter = new RecipeCrafter(ModRecipes.VACUUM_FREEZER, this, 2, 1, this.inventory, inputs, outputs); } - - public boolean getMultiBlock() { - if (multiblockChecker == null) { - return false; - } - final boolean up = multiblockChecker.checkRectY(1, 1, MultiblockChecker.ADVANCED_CASING, MultiblockChecker.ZERO_OFFSET); - final boolean down = multiblockChecker.checkRectY(1, 1, MultiblockChecker.ADVANCED_CASING, new BlockPos(0, -2, 0)); - final boolean chamber = multiblockChecker.checkRingYHollow(1, 1, MultiblockChecker.INDUSTRIAL_CASING, new BlockPos(0, -1, 0)); - return down && chamber && up; - } - - // BlockEntity + @Override - public void cancelRemoval() { - super.cancelRemoval(); - multiblockChecker = new MultiblockChecker(world, pos.offset(Direction.DOWN, 1)); + public void writeMultiblock(MultiblockWriter writer) { + BlockState advanced = TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState(); + BlockState industrial = TRContent.MachineBlocks.INDUSTRIAL.getCasing().getDefaultState(); + + writer .translate(-1, -3, -1) + .fill(0, 0, 0, 3, 1, 3, advanced) + .ringWithAir(Direction.Axis.Y, 3, 1, 3, industrial) + .fill(0, 2, 0, 3, 3, 3, advanced); } // IContainerProvider diff --git a/src/main/java/techreborn/blockentity/machine/tier1/GreenhouseControllerBlockEntity.java b/src/main/java/techreborn/blockentity/machine/tier1/GreenhouseControllerBlockEntity.java index 2eea91be6..d264d1023 100644 --- a/src/main/java/techreborn/blockentity/machine/tier1/GreenhouseControllerBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/tier1/GreenhouseControllerBlockEntity.java @@ -29,6 +29,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.server.world.ServerWorld; import net.minecraft.state.property.IntProperty; +import net.minecraft.state.property.Properties; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import reborncore.api.IToolDrop; @@ -36,6 +37,7 @@ import reborncore.api.blockentity.InventoryProvider; import reborncore.client.screen.BuiltScreenHandlerProvider; import reborncore.client.screen.builder.BuiltScreenHandler; import reborncore.client.screen.builder.ScreenHandlerBuilder; +import reborncore.common.blockentity.MultiblockWriter; import reborncore.common.powerSystem.PowerAcceptorBlockEntity; import reborncore.common.util.ItemUtils; import reborncore.common.util.RebornInventory; @@ -50,31 +52,34 @@ import java.util.List; public class GreenhouseControllerBlockEntity extends PowerAcceptorBlockEntity implements IToolDrop, InventoryProvider, BuiltScreenHandlerProvider { - + private final RebornInventory inventory = new RebornInventory<>(7, "GreenhouseControllerBlockEntity", 64, this); private BlockPos multiblockCenter; private int ticksToNextMultiblockCheck = 0; private boolean growthBoost = false; - + public GreenhouseControllerBlockEntity() { super(TRBlockEntities.GREENHOUSE_CONTROLLER); } - - public boolean getMultiBlock() { - if (multiblockCenter == null || world == null) { - return false; - } - for (int i = -1; i <= 1; i++) { - for (int j = -1; j <= 1; j++) { - BlockState block = world.getBlockState(multiblockCenter.add(i * 3, 3, i * 3)); - if (!(block.getBlock() instanceof BlockLamp) || !BlockLamp.isActive(block)) { - return false; - } + + @Override + public void writeMultiblock(MultiblockWriter writer) { + BlockState lamp = TRContent.Machine.LAMP_INCANDESCENT.block.getDefaultState().with(Properties.FACING, Direction.DOWN); + BlockState crop = Blocks.CACTUS.getDefaultState(); + + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + writer.add(i * 3, 3, j * 3, (world, pos) -> BlockLamp.isActive(world.getBlockState(pos)), lamp); + } + } + + for (int i = -4; i <= 4; i++) { + for (int j = -4; j <= 4; j++) { + writer.add(i, 0, j, (world, pos) -> true, crop); } } - return true; } - + @Override public void tick() { if (multiblockCenter == null) { @@ -82,34 +87,34 @@ public class GreenhouseControllerBlockEntity extends PowerAcceptorBlockEntity } charge(6); super.tick(); - + if (world.isClient) { return; } - + if (useEnergy(getEuPerTick(TechRebornConfig.greenhouseControllerEnergyPerTick)) != getEuPerTick(TechRebornConfig.greenhouseControllerEnergyPerTick)) { return; } - + if (--ticksToNextMultiblockCheck < 0) { - growthBoost = getMultiBlock(); + growthBoost = isMultiblockValid(); ticksToNextMultiblockCheck = 200; } - + if (world.getTime() % 20 == 0) { double cyclesLimit = getSpeedMultiplier() * 4 + 1; while (cyclesLimit-- > 0) { workCycle(); } } - + } - + private void workCycle() { BlockPos blockPos = multiblockCenter.add(world.random.nextInt(9) - 4, 0, world.random.nextInt(9) - 4); BlockState blockState = world.getBlockState(blockPos); Block block = blockState.getBlock(); - + if (growthBoost) { if (block instanceof Fertilizable || block instanceof PlantBlock @@ -122,7 +127,7 @@ public class GreenhouseControllerBlockEntity extends PowerAcceptorBlockEntity } } } - + if (block instanceof CropBlock) { processAgedCrop(blockState, blockPos, ((CropBlock) block).getAgeProperty(), ((CropBlock) block).getMaxAge(), 0); } else if (block instanceof NetherWartBlock) { @@ -160,9 +165,9 @@ public class GreenhouseControllerBlockEntity extends PowerAcceptorBlockEntity } } } - + } - + private void processAgedCrop(BlockState blockState, BlockPos blockPos, IntProperty ageProperty, int maxAge, int newAge) { if (blockState.get(ageProperty) >= maxAge) { if (tryHarvestBlock(blockState, blockPos)) { @@ -170,7 +175,7 @@ public class GreenhouseControllerBlockEntity extends PowerAcceptorBlockEntity } } } - + private boolean tryHarvestBlock(BlockState blockState, BlockPos blockPos) { if (canUseEnergy(TechRebornConfig.greenhouseControllerEnergyPerHarvest) && insertIntoInv(Block.getDroppedStacks(blockState, (ServerWorld) world, blockPos, null))) { @@ -179,7 +184,7 @@ public class GreenhouseControllerBlockEntity extends PowerAcceptorBlockEntity } return false; } - + private boolean insertIntoInv(List stacks) { boolean result = false; for (ItemStack stack : stacks) { @@ -190,7 +195,7 @@ public class GreenhouseControllerBlockEntity extends PowerAcceptorBlockEntity } return result; } - + private boolean insertIntoInv(int slot, ItemStack stack) { ItemStack targetStack = inventory.getStack(slot); if (targetStack.isEmpty()) { @@ -210,47 +215,42 @@ public class GreenhouseControllerBlockEntity extends PowerAcceptorBlockEntity } return false; } - - @Override - public boolean canAcceptEnergy(Direction direction) { - return true; - } - + @Override public boolean canProvideEnergy(Direction direction) { return false; } - + @Override public double getBaseMaxPower() { return TechRebornConfig.greenhouseControllerMaxEnergy; } - + @Override public double getBaseMaxOutput() { return 0; } - + @Override public double getBaseMaxInput() { return TechRebornConfig.greenhouseControllerMaxInput; } - + @Override public ItemStack getToolDrop(PlayerEntity entityPlayer) { return TRContent.Machine.GREENHOUSE_CONTROLLER.getStack(); } - + @Override public RebornInventory getInventory() { return this.inventory; } - + @Override public boolean canBeUpgraded() { return true; } - + @Override public BuiltScreenHandler createScreenHandler(int syncID, PlayerEntity player) { return new ScreenHandlerBuilder("greenhousecontroller").player(player.inventory).inventory().hotbar().addInventory() @@ -261,5 +261,5 @@ public class GreenhouseControllerBlockEntity extends PowerAcceptorBlockEntity .energySlot(6, 8, 72).syncEnergyValue() .addInventory().create(this, syncID); } - + } diff --git a/src/main/java/techreborn/blocks/generator/BlockFusionControlComputer.java b/src/main/java/techreborn/blocks/generator/BlockFusionControlComputer.java index b8223e11e..2d1220ef6 100644 --- a/src/main/java/techreborn/blocks/generator/BlockFusionControlComputer.java +++ b/src/main/java/techreborn/blocks/generator/BlockFusionControlComputer.java @@ -59,7 +59,8 @@ public class BlockFusionControlComputer extends BlockMachineBase { if(playerIn.getStackInHand(hand).isEmpty()){ return ActionResult.SUCCESS; } - if(worldIn.getBlockState(coil).canReplace(new ItemPlacementContext(new ItemUsageContext(playerIn, hand, hitResult))) && !blockEntityFusionControlComputer.isCoil(coil)){ + if(worldIn.getBlockState(coil).canReplace(new ItemPlacementContext(new ItemUsageContext(playerIn, hand, hitResult))) + && worldIn.getBlockState(pos).getBlock() != TRContent.Machine.FUSION_COIL.block) { worldIn.setBlockState(coil, TRContent.Machine.FUSION_COIL.block.getDefaultState()); if(!playerIn.isCreative()){ playerIn.getStackInHand(hand).decrement(1); @@ -72,7 +73,7 @@ public class BlockFusionControlComputer extends BlockMachineBase { } } - blockEntityFusionControlComputer.checkCoils(); + blockEntityFusionControlComputer.isMultiblockValid(); return super.onUse(state, worldIn, pos, playerIn, hand, hitResult); } @@ -86,7 +87,7 @@ public class BlockFusionControlComputer extends BlockMachineBase { super.onSteppedOn(worldIn, pos, entityIn); if (worldIn.getBlockEntity(pos) instanceof FusionControlComputerBlockEntity) { if (((FusionControlComputerBlockEntity) worldIn.getBlockEntity(pos)).crafingTickTime != 0 - && ((FusionControlComputerBlockEntity) worldIn.getBlockEntity(pos)).checkCoils()) { + && ((FusionControlComputerBlockEntity) worldIn.getBlockEntity(pos)).isMultiblockValid()) { entityIn.damage(new FusionDamageSource(), 200F); } } diff --git a/src/main/java/techreborn/blocks/lighting/BlockLamp.java b/src/main/java/techreborn/blocks/lighting/BlockLamp.java index 65fb96a82..a5ef59e19 100644 --- a/src/main/java/techreborn/blocks/lighting/BlockLamp.java +++ b/src/main/java/techreborn/blocks/lighting/BlockLamp.java @@ -85,7 +85,7 @@ public class BlockLamp extends BaseBlockEntityProvider { } public static boolean isActive(BlockState state) { - return state.get(ACTIVE); + return state.contains(ACTIVE) && state.get(ACTIVE); } public static Direction getFacing(BlockState state) { diff --git a/src/main/java/techreborn/client/gui/GuiBlastFurnace.java b/src/main/java/techreborn/client/gui/GuiBlastFurnace.java index cd95e1ce6..423d2ea89 100644 --- a/src/main/java/techreborn/client/gui/GuiBlastFurnace.java +++ b/src/main/java/techreborn/client/gui/GuiBlastFurnace.java @@ -25,22 +25,17 @@ package techreborn.client.gui; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.block.BlockState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import reborncore.client.gui.builder.GuiBase; import reborncore.client.gui.builder.widget.GuiButtonExtended; import reborncore.client.gui.guibuilder.GuiBuilder; -import reborncore.client.multiblock.Multiblock; import reborncore.client.screen.builder.BuiltScreenHandler; import techreborn.blockentity.machine.multiblock.IndustrialBlastFurnaceBlockEntity; -import techreborn.init.TRContent; public class GuiBlastFurnace extends GuiBase { - public IndustrialBlastFurnaceBlockEntity blockEntity; + private final IndustrialBlastFurnaceBlockEntity blockEntity; boolean hasMultiBlock; public GuiBlastFurnace(int syncID, final PlayerEntity player, final IndustrialBlastFurnaceBlockEntity blockEntity) { @@ -61,9 +56,9 @@ public class GuiBlastFurnace extends GuiBase { RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); final GuiBase.Layer layer = Layer.BACKGROUND; - + drawSlot(matrixStack, 8, 72, layer); - + drawSlot(matrixStack, 50, 27, layer); drawSlot(matrixStack, 50, 47, layer); drawOutputSlotBar(matrixStack, 92, 36, 2, layer); @@ -93,62 +88,7 @@ public class GuiBlastFurnace extends GuiBase { builder.drawMultiEnergyBar(matrixStack, this, 9, 19, (int) blockEntity.getEnergy(), (int) blockEntity.getMaxPower(), mouseX, mouseY, 0, layer); } - public void onClick(GuiButtonExtended button, Double x, Double y){ - if (hideGuiElements()) return; - if (blockEntity.renderMultiblock == null) { - { - // This code here makes a basic multiblock and then sets to the selected one. - final Multiblock multiblock = new Multiblock(); - BlockState standardCasing = TRContent.MachineBlocks.BASIC.getCasing().getDefaultState(); - - this.addComponent(0, 0, 0, standardCasing, multiblock); - this.addComponent(1, 0, 0, standardCasing, multiblock); - this.addComponent(0, 0, 1, standardCasing, multiblock); - this.addComponent(-1, 0, 0, standardCasing, multiblock); - this.addComponent(0, 0, -1, standardCasing, multiblock); - this.addComponent(-1, 0, -1, standardCasing, multiblock); - this.addComponent(-1, 0, 1, standardCasing, multiblock); - this.addComponent(1, 0, -1, standardCasing, multiblock); - this.addComponent(1, 0, 1, standardCasing, multiblock); - - this.addComponent(1, 1, 0, standardCasing, multiblock); - this.addComponent(0, 1, 1, standardCasing, multiblock); - this.addComponent(-1, 1, 0, standardCasing, multiblock); - this.addComponent(0, 1, -1, standardCasing, multiblock); - this.addComponent(-1, 1, -1, standardCasing, multiblock); - this.addComponent(-1, 1, 1, standardCasing, multiblock); - this.addComponent(1, 1, -1, standardCasing, multiblock); - this.addComponent(1, 1, 1, standardCasing, multiblock); - - this.addComponent(1, 2, 0, standardCasing, multiblock); - this.addComponent(0, 2, 1, standardCasing, multiblock); - this.addComponent(-1, 2, 0, standardCasing, multiblock); - this.addComponent(0, 2, -1, standardCasing, multiblock); - this.addComponent(-1, 2, -1, standardCasing, multiblock); - this.addComponent(-1, 2, 1, standardCasing, multiblock); - this.addComponent(1, 2, -1, standardCasing, multiblock); - this.addComponent(1, 2, 1, standardCasing, multiblock); - - this.addComponent(0, 3, 0, standardCasing, multiblock); - this.addComponent(1, 3, 0, standardCasing, multiblock); - this.addComponent(0, 3, 1, standardCasing, multiblock); - this.addComponent(-1, 3, 0, standardCasing, multiblock); - this.addComponent(0, 3, -1, standardCasing, multiblock); - this.addComponent(-1, 3, -1, standardCasing, multiblock); - this.addComponent(-1, 3, 1, standardCasing, multiblock); - this.addComponent(1, 3, -1, standardCasing, multiblock); - this.addComponent(1, 3, 1, standardCasing, multiblock); - blockEntity.renderMultiblock = multiblock; - } - } else { - blockEntity.renderMultiblock = null; - } + public void onClick(GuiButtonExtended button, Double x, Double y) { + blockEntity.renderMultiblock ^= !hideGuiElements(); } - - public void addComponent(final int x, final int y, final int z, final BlockState blockState, final Multiblock multiblock) { - multiblock.addComponent(new BlockPos(x - Direction.byId(blockEntity.getFacingInt()).getOffsetX() * 2, - y, - z - Direction.byId(blockEntity.getFacingInt()).getOffsetZ() * 2), blockState); - } - } diff --git a/src/main/java/techreborn/client/gui/GuiDistillationTower.java b/src/main/java/techreborn/client/gui/GuiDistillationTower.java index 809abc15a..a90298536 100644 --- a/src/main/java/techreborn/client/gui/GuiDistillationTower.java +++ b/src/main/java/techreborn/client/gui/GuiDistillationTower.java @@ -25,22 +25,17 @@ package techreborn.client.gui; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.block.BlockState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import reborncore.client.gui.builder.GuiBase; import reborncore.client.gui.builder.widget.GuiButtonExtended; import reborncore.client.gui.guibuilder.GuiBuilder; -import reborncore.client.multiblock.Multiblock; import reborncore.client.screen.builder.BuiltScreenHandler; import techreborn.blockentity.machine.multiblock.DistillationTowerBlockEntity; -import techreborn.init.TRContent; public class GuiDistillationTower extends GuiBase { - - public DistillationTowerBlockEntity blockEntity; + + private final DistillationTowerBlockEntity blockEntity; public GuiDistillationTower(int syncID, final PlayerEntity player, final DistillationTowerBlockEntity blockEntity) { super(player, blockEntity, blockEntity.createScreenHandler(syncID, player)); @@ -70,7 +65,7 @@ public class GuiDistillationTower extends GuiBase { final GuiBase.Layer layer = Layer.FOREGROUND; builder.drawProgressBar(matrixStack, this, blockEntity.getProgressScaled(100), 100, 55, 40, mouseX, mouseY, GuiBuilder.ProgressDirection.RIGHT, layer); - if (blockEntity.getMutliBlock()) { + if (blockEntity.isMultiblockValid()) { addHologramButton(6, 4, 212, layer).clickHandler(this::onClick); builder.drawHologramButton(matrixStack, this, 6, 4, mouseX, mouseY, layer); } else { @@ -83,61 +78,6 @@ public class GuiDistillationTower extends GuiBase { } public void onClick(GuiButtonExtended button, Double x, Double y){ - if (hideGuiElements()) return; - if (blockEntity.renderMultiblock == null) { - { - // This code here makes a basic multiblock and then sets to the selected one. - final Multiblock multiblock = new Multiblock(); - BlockState industrialCasing = TRContent.MachineBlocks.INDUSTRIAL.getCasing().getDefaultState(); - BlockState standardCasing = TRContent.MachineBlocks.BASIC.getCasing().getDefaultState(); - - addComponent(0, 0, 0, standardCasing, multiblock); - addComponent(1, 0, 0, standardCasing, multiblock); - addComponent(0, 0, 1, standardCasing, multiblock); - addComponent(-1, 0, 0, standardCasing, multiblock); - addComponent(0, 0, -1, standardCasing, multiblock); - addComponent(-1, 0, -1, standardCasing, multiblock); - addComponent(-1, 0, 1, standardCasing, multiblock); - addComponent(1, 0, -1, standardCasing, multiblock); - addComponent(1, 0, 1, standardCasing, multiblock); - - addComponent(1, 1, 0, industrialCasing, multiblock); - addComponent(0, 1, 1, industrialCasing, multiblock); - addComponent(-1, 1, 0, industrialCasing, multiblock); - addComponent(0, 1, -1, industrialCasing, multiblock); - addComponent(-1, 1, -1, industrialCasing, multiblock); - addComponent(-1, 1, 1, industrialCasing, multiblock); - addComponent(1, 1, -1, industrialCasing, multiblock); - addComponent(1, 1, 1, industrialCasing, multiblock); - - addComponent(1, 2, 0, standardCasing, multiblock); - addComponent(0, 2, 1, standardCasing, multiblock); - addComponent(-1, 2, 0, standardCasing, multiblock); - addComponent(0, 2, -1, standardCasing, multiblock); - addComponent(-1, 2, -1, standardCasing, multiblock); - addComponent(-1, 2, 1, standardCasing, multiblock); - addComponent(1, 2, -1, standardCasing, multiblock); - addComponent(1, 2, 1, standardCasing, multiblock); - - addComponent(0, 3, 0, industrialCasing, multiblock); - addComponent(1, 3, 0, industrialCasing, multiblock); - addComponent(0, 3, 1, industrialCasing, multiblock); - addComponent(-1, 3, 0, industrialCasing, multiblock); - addComponent(0, 3, -1, industrialCasing, multiblock); - addComponent(-1, 3, -1, industrialCasing, multiblock); - addComponent(-1, 3, 1, industrialCasing, multiblock); - addComponent(1, 3, -1, industrialCasing, multiblock); - addComponent(1, 3, 1, industrialCasing, multiblock); - - blockEntity.renderMultiblock = multiblock; - } - } else { - blockEntity.renderMultiblock = null; - } + blockEntity.renderMultiblock ^= !hideGuiElements(); } - - public void addComponent(final int x, final int y, final int z, final BlockState blockState, final Multiblock multiblock) { - multiblock.addComponent(new BlockPos(x - Direction.byId(blockEntity.getFacingInt()).getOffsetX() * 2, y, z - Direction.byId(blockEntity.getFacingInt()).getOffsetZ() * 2), blockState); - } - } diff --git a/src/main/java/techreborn/client/gui/GuiFluidReplicator.java b/src/main/java/techreborn/client/gui/GuiFluidReplicator.java index 65b627056..baec1ef89 100644 --- a/src/main/java/techreborn/client/gui/GuiFluidReplicator.java +++ b/src/main/java/techreborn/client/gui/GuiFluidReplicator.java @@ -24,26 +24,20 @@ package techreborn.client.gui; -import net.minecraft.block.BlockState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import reborncore.client.gui.builder.GuiBase; import reborncore.client.gui.builder.widget.GuiButtonExtended; import reborncore.client.gui.guibuilder.GuiBuilder; -import reborncore.client.multiblock.Multiblock; import reborncore.client.screen.builder.BuiltScreenHandler; import techreborn.blockentity.machine.multiblock.FluidReplicatorBlockEntity; -import techreborn.init.TRContent; /** * @author drcrazy - * */ public class GuiFluidReplicator extends GuiBase { - FluidReplicatorBlockEntity blockEntity; + private final FluidReplicatorBlockEntity blockEntity; public GuiFluidReplicator(int syncID, final PlayerEntity player, final FluidReplicatorBlockEntity blockEntity) { super(player, blockEntity, blockEntity.createScreenHandler(syncID, player)); @@ -64,7 +58,7 @@ public class GuiFluidReplicator extends GuiBase { drawSlot(matrixStack, 124, 55, layer); // JEI button builder.drawJEIButton(matrixStack, this, 158, 5, layer); - if (blockEntity.getMultiBlock()) { + if (blockEntity.isMultiblockValid()) { builder.drawHologramButton(matrixStack, this, 6, 4, mouseX, mouseY, layer); } } @@ -76,7 +70,7 @@ public class GuiFluidReplicator extends GuiBase { builder.drawTank(matrixStack, this, 99, 25, mouseX, mouseY, blockEntity.tank.getFluidInstance(), blockEntity.tank.getCapacity(), blockEntity.tank.isEmpty(), layer); builder.drawProgressBar(matrixStack, this, blockEntity.getProgressScaled(100), 100, 76, 48, mouseX, mouseY, GuiBuilder.ProgressDirection.RIGHT, layer); - if (blockEntity.getMultiBlock()) { + if (blockEntity.isMultiblockValid()) { addHologramButton(6, 4, 212, layer).clickHandler(this::onClick); } else { builder.drawMultiblockMissingBar(matrixStack, this, layer); @@ -87,35 +81,7 @@ public class GuiFluidReplicator extends GuiBase { } // GuiScreen - public void onClick(GuiButtonExtended button, Double x, Double y){ - if (hideGuiElements()) return; - if (blockEntity.renderMultiblock == null) { - { - // This code here makes a basic multiblock and then sets to the selected one. - final Multiblock multiblock = new Multiblock(); - final BlockState reinforcedCasing = TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState(); - - addComponent(1, 0, 0, reinforcedCasing, multiblock); - addComponent(0, 0, 1, reinforcedCasing, multiblock); - addComponent(-1, 0, 0, reinforcedCasing, multiblock); - addComponent(0, 0, -1, reinforcedCasing, multiblock); - addComponent(-1, 0, -1, reinforcedCasing, multiblock); - addComponent(-1, 0, 1, reinforcedCasing, multiblock); - addComponent(1, 0, -1, reinforcedCasing, multiblock); - addComponent(1, 0, 1, reinforcedCasing, multiblock); - - blockEntity.renderMultiblock = multiblock; - } - } else { - blockEntity.renderMultiblock = null; - } + public void onClick(GuiButtonExtended button, Double x, Double y) { + blockEntity.renderMultiblock ^= !hideGuiElements(); } - - public void addComponent(final int x, final int y, final int z, final BlockState blockState, final Multiblock multiblock) { - multiblock.addComponent(new BlockPos( - x - Direction.byId(this.blockEntity.getFacingInt()).getOffsetX() * 2, - y, - z - Direction.byId(this.blockEntity.getFacingInt()).getOffsetZ() * 2), blockState); - } - } diff --git a/src/main/java/techreborn/client/gui/GuiFusionReactor.java b/src/main/java/techreborn/client/gui/GuiFusionReactor.java index 9a545be45..afb98f4df 100644 --- a/src/main/java/techreborn/client/gui/GuiFusionReactor.java +++ b/src/main/java/techreborn/client/gui/GuiFusionReactor.java @@ -24,39 +24,35 @@ package techreborn.client.gui; -import net.minecraft.block.BlockState; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.text.LiteralText; -import net.minecraft.util.math.BlockPos; import org.apache.commons.lang3.tuple.Pair; import reborncore.client.gui.builder.GuiBase; import reborncore.client.gui.builder.widget.GuiButtonExtended; import reborncore.client.gui.builder.widget.GuiButtonUpDown; import reborncore.client.gui.builder.widget.GuiButtonUpDown.UpDownButtonType; import reborncore.client.gui.guibuilder.GuiBuilder; -import reborncore.client.multiblock.Multiblock; import reborncore.client.screen.builder.BuiltScreenHandler; import reborncore.common.network.NetworkManager; import reborncore.common.powerSystem.PowerSystem; import reborncore.common.util.Color; import reborncore.common.util.Torus; import techreborn.blockentity.machine.multiblock.FusionControlComputerBlockEntity; -import techreborn.init.TRContent; import techreborn.packets.ServerboundPackets; -import java.util.List; import java.util.Optional; public class GuiFusionReactor extends GuiBase { - FusionControlComputerBlockEntity blockEntity; + + private final FusionControlComputerBlockEntity blockEntity; public GuiFusionReactor(int syncID, final PlayerEntity player, final FusionControlComputerBlockEntity blockEntity) { super(player, blockEntity, blockEntity.createScreenHandler(syncID, player)); this.blockEntity = blockEntity; } - + @Override public void init() { super.init(); @@ -76,7 +72,7 @@ public class GuiFusionReactor extends GuiBase { drawOutputSlot(matrixStack, 80, 47, layer); builder.drawJEIButton(matrixStack, this, 158, 5, layer); - if (blockEntity.getCoilStatus() > 0) { + if (blockEntity.isMultiblockValid()) { builder.drawHologramButton(matrixStack, this, 6, 4, mouseX, mouseY, layer); } @@ -89,10 +85,10 @@ public class GuiFusionReactor extends GuiBase { builder.drawProgressBar(matrixStack, this, blockEntity.getProgressScaled(100), 100, 55, 51, mouseX, mouseY, GuiBuilder.ProgressDirection.RIGHT, layer); builder.drawProgressBar(matrixStack, this, blockEntity.getProgressScaled(100), 100, 105, 51, mouseX, mouseY, GuiBuilder.ProgressDirection.LEFT, layer); - if (blockEntity.getCoilStatus() > 0) { + if (blockEntity.isMultiblockValid()) { addHologramButton(6, 4, 212, layer).clickHandler(this::hologramToggle); drawCentredText(matrixStack, blockEntity.getStateText(), 20, Color.BLUE.darker().getColor(), layer); - if(blockEntity.state == 2){ + if (blockEntity.state == 2) { drawCentredText(matrixStack, new LiteralText(PowerSystem.getLocaliszedPowerFormatted((int) blockEntity.getPowerChange())).append("/t"), 30, Color.GREEN.darker().getColor(), layer); } } else { @@ -101,60 +97,37 @@ public class GuiFusionReactor extends GuiBase { builder.drawHologramButton(matrixStack, this, 76, 56, mouseX, mouseY, layer); Optional> stackSize = getCoilStackCount(); - if(stackSize.isPresent()){ - if(stackSize.get().getLeft() > 0){ + if (stackSize.isPresent()) { + if (stackSize.get().getLeft() > 0) { drawCentredText(matrixStack, new LiteralText("Required Coils: ") - .append(String.valueOf(stackSize.get().getLeft())) - .append("x64 +") - .append(String.valueOf(stackSize.get().getRight())) - , 25, 0xFFFFFF, layer); + .append(String.valueOf(stackSize.get().getLeft())) + .append("x64 +") + .append(String.valueOf(stackSize.get().getRight())) + , 25, 0xFFFFFF, layer); } else { drawCentredText(matrixStack, new LiteralText("Required Coils: ").append(String.valueOf(stackSize.get().getRight())), 25, 0xFFFFFF, layer); } } } - drawTextWithShadow(matrixStack, client.textRenderer, new LiteralText("Size: ").append(String.valueOf(blockEntity.size)), 83, 81, 0xFFFFFF); - drawTextWithShadow(matrixStack, client.textRenderer,new LiteralText(String.valueOf(blockEntity.getPowerMultiplier())).append("x"), 10, 81, 0xFFFFFF); + drawTextWithShadow(matrixStack, client.textRenderer, new LiteralText("Size: ").append(String.valueOf(blockEntity.size)), 83, 81, 0xFFFFFF); + drawTextWithShadow(matrixStack, client.textRenderer, new LiteralText(String.valueOf(blockEntity.getPowerMultiplier())).append("x"), 10, 81, 0xFFFFFF); builder.drawMultiEnergyBar(matrixStack, this, 9, 19, (int) this.blockEntity.getEnergy(), (int) this.blockEntity.getMaxPower(), mouseX, mouseY, 0, layer); } - public void hologramToggle(GuiButtonExtended button, double x, double y){ - if (hideGuiElements()) return; - if (blockEntity.renderMultiblock == null) { - updateMultiBlockRender(); - } else { - blockEntity.renderMultiblock = null; - } + public void hologramToggle(GuiButtonExtended button, double x, double y) { + blockEntity.renderMultiblock ^= !hideGuiElements(); } - private void sendSizeChange(int sizeDelta){ + private void sendSizeChange(int sizeDelta) { NetworkManager.sendToServer(ServerboundPackets.createPacketFusionControlSize(sizeDelta, blockEntity.getPos())); - //Reset the multiblock as it will be wrong now. - if(blockEntity.renderMultiblock != null){ - updateMultiBlockRender(); - } } - private void updateMultiBlockRender(){ - final Multiblock multiblock = new Multiblock(); - BlockState coil = TRContent.Machine.FUSION_COIL.block.getDefaultState(); - - List coils = Torus.generate(new BlockPos(0, 0, 0), blockEntity.size); - coils.forEach(pos -> addComponent(pos.getX(), pos.getY(), pos.getZ(), coil, multiblock)); - - blockEntity.renderMultiblock = multiblock; - } - - public void addComponent(final int x, final int y, final int z, final BlockState blockState, final Multiblock multiblock) { - multiblock.addComponent(new BlockPos(x, y, z), blockState); - } - - public Optional> getCoilStackCount(){ - if(!Torus.TORUS_SIZE_MAP.containsKey(blockEntity.size)){ + public Optional> getCoilStackCount() { + if (!Torus.TORUS_SIZE_MAP.containsKey(blockEntity.size)) { return Optional.empty(); } int count = Torus.TORUS_SIZE_MAP.get(blockEntity.size); diff --git a/src/main/java/techreborn/client/gui/GuiGreenhouseController.java b/src/main/java/techreborn/client/gui/GuiGreenhouseController.java index 052c260d1..7cfdadd94 100644 --- a/src/main/java/techreborn/client/gui/GuiGreenhouseController.java +++ b/src/main/java/techreborn/client/gui/GuiGreenhouseController.java @@ -25,44 +25,37 @@ package techreborn.client.gui; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.state.property.Properties; import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import reborncore.client.gui.builder.GuiBase; import reborncore.client.gui.builder.widget.GuiButtonExtended; -import reborncore.client.multiblock.Multiblock; import reborncore.client.screen.builder.BuiltScreenHandler; import techreborn.blockentity.machine.tier1.GreenhouseControllerBlockEntity; -import techreborn.init.TRContent; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class GuiGreenhouseController extends GuiBase { - - GreenhouseControllerBlockEntity blockEntity; - + + private final GreenhouseControllerBlockEntity blockEntity; + public GuiGreenhouseController(int syncID, final PlayerEntity player, final GreenhouseControllerBlockEntity blockEntity) { super(player, blockEntity, blockEntity.createScreenHandler(syncID, player)); this.blockEntity = blockEntity; } - + @Override protected void drawBackground(MatrixStack matrixStack, final float f, final int mouseX, final int mouseY) { super.drawBackground(matrixStack, f, mouseX, mouseY); final GuiBase.Layer layer = GuiBase.Layer.BACKGROUND; - + drawSlot(matrixStack, 8, 72, layer); - + int gridYPos = 22; drawSlot(matrixStack, 30, gridYPos, layer); drawSlot(matrixStack, 48, gridYPos, layer); @@ -70,8 +63,8 @@ public class GuiGreenhouseController extends GuiBase { drawSlot(matrixStack, 48, gridYPos + 18, layer); drawSlot(matrixStack, 30, gridYPos + 36, layer); drawSlot(matrixStack, 48, gridYPos + 36, layer); - - if (!blockEntity.getMultiBlock()) { + + if (!blockEntity.isMultiblockValid()) { getMinecraft().getTextureManager().bindTexture(new Identifier("techreborn", "textures/item/part/digital_display.png")); drawTexture(matrixStack, x + 68, y + 22, 0, 0, 16, 16, 16, 16); if (isPointInRect(68, 22, 16, 16, mouseX, mouseY)) { @@ -85,18 +78,18 @@ public class GuiGreenhouseController extends GuiBase { matrixStack.pop(); } } - + } - + @Override protected void drawForeground(MatrixStack matrixStack, final int mouseX, final int mouseY) { super.drawForeground(matrixStack, mouseX, mouseY); final GuiBase.Layer layer = GuiBase.Layer.FOREGROUND; - + addHologramButton(90, 24, 212, layer).clickHandler(this::onClick); builder.drawHologramButton(matrixStack, this, 90, 24, mouseX, mouseY, layer); - - if (!blockEntity.getMultiBlock()) { + + if (!blockEntity.isMultiblockValid()) { if (isPointInRect(68, 22, 16, 16, mouseX, mouseY)) { List list = Arrays.stream(I18n.translate("techreborn.tooltip.greenhouse.upgrade_available") .split("\\r?\\n")) @@ -108,46 +101,11 @@ public class GuiGreenhouseController extends GuiBase { RenderSystem.popMatrix(); } } - + builder.drawMultiEnergyBar(matrixStack, this, 9, 19, (int) blockEntity.getEnergy(), (int) blockEntity.getMaxPower(), mouseX, mouseY, 0, layer); } - + public void onClick(GuiButtonExtended button, Double x, Double y) { - if (hideGuiElements()) return; - if (blockEntity.renderMultiblock == null) { - final Multiblock multiblock = new Multiblock(); - BlockState lamp = TRContent.Machine.LAMP_INCANDESCENT.block.getDefaultState().with(Properties.FACING, Direction.DOWN); - BlockState crop = Blocks.CACTUS.getDefaultState(); - - this.addComponent(-3, 3, -3, lamp, multiblock); - this.addComponent(-3, 3, 0, lamp, multiblock); - this.addComponent(-3, 3, 3, lamp, multiblock); - this.addComponent(0, 3, -3, lamp, multiblock); - this.addComponent(0, 3, 0, lamp, multiblock); - this.addComponent(0, 3, 3, lamp, multiblock); - this.addComponent(3, 3, -3, lamp, multiblock); - this.addComponent(3, 3, 0, lamp, multiblock); - this.addComponent(3, 3, 3, lamp, multiblock); - - for (int i = -4; i <= 4; i++) { - for (int j = -4; j <= 4; j++) { - this.addComponent(i, 0, j, crop, multiblock); - } - } - - blockEntity.renderMultiblock = multiblock; - } else { - blockEntity.renderMultiblock = null; - } + blockEntity.renderMultiblock ^= !hideGuiElements(); } - - public void addComponent(final int x, final int y, final int z, final BlockState blockState, final Multiblock multiblock) { - multiblock.addComponent(new BlockPos( - x - Direction.byId(this.blockEntity.getFacingInt()).getOffsetX() * 5, - y, - z - Direction.byId(this.blockEntity.getFacingInt()).getOffsetZ() * 5), - blockState - ); - } - } \ No newline at end of file diff --git a/src/main/java/techreborn/client/gui/GuiImplosionCompressor.java b/src/main/java/techreborn/client/gui/GuiImplosionCompressor.java index 4c6b23f25..a48355570 100644 --- a/src/main/java/techreborn/client/gui/GuiImplosionCompressor.java +++ b/src/main/java/techreborn/client/gui/GuiImplosionCompressor.java @@ -25,21 +25,17 @@ package techreborn.client.gui; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.block.BlockState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; import reborncore.client.gui.builder.GuiBase; import reborncore.client.gui.builder.widget.GuiButtonExtended; import reborncore.client.gui.guibuilder.GuiBuilder; -import reborncore.client.multiblock.Multiblock; import reborncore.client.screen.builder.BuiltScreenHandler; import techreborn.blockentity.machine.multiblock.ImplosionCompressorBlockEntity; -import techreborn.init.TRContent; public class GuiImplosionCompressor extends GuiBase { - ImplosionCompressorBlockEntity blockEntity; + private final ImplosionCompressorBlockEntity blockEntity; public GuiImplosionCompressor(int syncID, final PlayerEntity player, final ImplosionCompressorBlockEntity blockEntity) { super(player, blockEntity, blockEntity.createScreenHandler(syncID, player)); @@ -54,13 +50,13 @@ public class GuiImplosionCompressor extends GuiBase { final GuiBase.Layer layer = Layer.BACKGROUND; drawSlot(matrixStack, 8, 72, layer); - + drawSlot(matrixStack, 50, 27, layer); drawSlot(matrixStack, 50, 47, layer); drawSlot(matrixStack, 92, 36, layer); drawSlot(matrixStack, 110, 36, layer); - if (blockEntity.getMutliBlock()) { + if (blockEntity.isMultiblockValid()) { builder.drawHologramButton(matrixStack, this, 6, 4, mouseX, mouseY, layer); } @@ -73,7 +69,7 @@ public class GuiImplosionCompressor extends GuiBase { final GuiBase.Layer layer = Layer.FOREGROUND; builder.drawProgressBar(matrixStack, this, blockEntity.getProgressScaled(100), 100, 71, 40, mouseX, mouseY, GuiBuilder.ProgressDirection.RIGHT, layer); - if (blockEntity.getMutliBlock()) { + if (blockEntity.isMultiblockValid()) { addHologramButton(6, 4, 212, layer).clickHandler(this::onClick); } else { builder.drawMultiblockMissingBar(matrixStack, this, layer); @@ -84,30 +80,7 @@ public class GuiImplosionCompressor extends GuiBase { } - public void onClick(GuiButtonExtended button, Double mouseX, Double mouseY){ - if (hideGuiElements()) return; - if (blockEntity.renderMultiblock == null) { - { - // This code here makes a basic multiblock and then sets to the selected one. - final Multiblock multiblock = new Multiblock(); - for (int x = -1; x <= 1; x++) { - for (int y = -4; y <= -2; y++) { - for (int z = -1; z <= 1; z++) { - if (!((x == 0) && (y == -3) && (z == 0))) { - this.addComponent(x, y + 1, z, TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState(), multiblock); - } - } - } - } - - blockEntity.renderMultiblock = multiblock; - } - } else { - blockEntity.renderMultiblock = null; - } - } - - public void addComponent(final int x, final int y, final int z, final BlockState blockState, final Multiblock multiblock) { - multiblock.addComponent(new BlockPos(x, y, z), blockState); + public void onClick(GuiButtonExtended button, Double mouseX, Double mouseY) { + blockEntity.renderMultiblock ^= !hideGuiElements(); } } diff --git a/src/main/java/techreborn/client/gui/GuiIndustrialGrinder.java b/src/main/java/techreborn/client/gui/GuiIndustrialGrinder.java index da9b29ad1..2d07e046d 100644 --- a/src/main/java/techreborn/client/gui/GuiIndustrialGrinder.java +++ b/src/main/java/techreborn/client/gui/GuiIndustrialGrinder.java @@ -24,23 +24,17 @@ package techreborn.client.gui; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import reborncore.client.gui.builder.GuiBase; import reborncore.client.gui.builder.widget.GuiButtonExtended; import reborncore.client.gui.guibuilder.GuiBuilder; -import reborncore.client.multiblock.Multiblock; import reborncore.client.screen.builder.BuiltScreenHandler; import techreborn.blockentity.machine.multiblock.IndustrialGrinderBlockEntity; -import techreborn.init.TRContent; public class GuiIndustrialGrinder extends GuiBase { - IndustrialGrinderBlockEntity blockEntity; + private final IndustrialGrinderBlockEntity blockEntity; public GuiIndustrialGrinder(int syncID, final PlayerEntity player, final IndustrialGrinderBlockEntity blockEntity) { super(player, blockEntity, blockEntity.createScreenHandler(syncID, player)); @@ -51,7 +45,7 @@ public class GuiIndustrialGrinder extends GuiBase { protected void drawBackground(MatrixStack matrixStack, final float f, final int mouseX, final int mouseY) { super.drawBackground(matrixStack, f, mouseX, mouseY); final Layer layer = Layer.BACKGROUND; - + // Battery slot drawSlot(matrixStack, 8, 72, layer); // Liquid input slot @@ -67,7 +61,7 @@ public class GuiIndustrialGrinder extends GuiBase { drawSlot(matrixStack, 126, 72, layer); builder.drawJEIButton(matrixStack, this, 158, 5, layer); - if (blockEntity.getMultiBlock()) { + if (blockEntity.isMultiblockValid()) { builder.drawHologramButton(matrixStack, this, 6, 4, mouseX, mouseY, layer); } } @@ -79,7 +73,7 @@ public class GuiIndustrialGrinder extends GuiBase { builder.drawProgressBar(matrixStack, this, blockEntity.getProgressScaled(100), 100, 105, 47, mouseX, mouseY, GuiBuilder.ProgressDirection.RIGHT, layer); builder.drawTank(matrixStack, this, 53, 25, mouseX, mouseY, blockEntity.tank.getFluidInstance(), blockEntity.tank.getCapacity(), blockEntity.tank.isEmpty(), layer); - if (blockEntity.getMultiBlock()) { + if (blockEntity.isMultiblockValid()) { addHologramButton(6, 4, 212, layer).clickHandler(this::onClick); } else { builder.drawMultiblockMissingBar(matrixStack, this, layer); @@ -89,59 +83,7 @@ public class GuiIndustrialGrinder extends GuiBase { builder.drawMultiEnergyBar(matrixStack, this, 9, 19, (int) blockEntity.getEnergy(), (int) blockEntity.getMaxPower(), mouseX, mouseY, 0, layer); } - public void onClick(GuiButtonExtended button, double mouseX, double mouseY){ - if (hideGuiElements()) return; - if (blockEntity.renderMultiblock == null) { - { - // This code here makes a basic multiblock and then sets to the selected one. - final Multiblock multiblock = new Multiblock(); - BlockState standardCasing = TRContent.MachineBlocks.BASIC.getCasing().getDefaultState(); - BlockState reinforcedCasing = TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState(); - - addComponent(0, -1, 0, standardCasing, multiblock); - addComponent(1, -1, 0, standardCasing, multiblock); - addComponent(0, -1, 1, standardCasing, multiblock); - addComponent(-1, -1, 0, standardCasing, multiblock); - addComponent(0, -1, -1, standardCasing, multiblock); - addComponent(-1, -1, -1, standardCasing, multiblock); - addComponent(-1, -1, 1, standardCasing, multiblock); - addComponent(1, -1, -1, standardCasing, multiblock); - addComponent(1, -1, 1, standardCasing, multiblock); - - addComponent(0, 0, 0, Blocks.WATER.getDefaultState(), multiblock); - addComponent(1, 0, 0, reinforcedCasing, multiblock); - addComponent(0, 0, 1, reinforcedCasing, multiblock); - addComponent(-1, 0, 0, reinforcedCasing, multiblock); - addComponent(0, 0, -1, reinforcedCasing, multiblock); - addComponent(-1, 0, -1, reinforcedCasing, multiblock); - addComponent(-1, 0, 1, reinforcedCasing, multiblock); - addComponent(1, 0, -1, reinforcedCasing, multiblock); - addComponent(1, 0, 1, reinforcedCasing, multiblock); - - addComponent(0, 1, 0, standardCasing, multiblock); - addComponent(0, 1, 0, standardCasing, multiblock); - addComponent(1, 1, 0, standardCasing, multiblock); - addComponent(0, 1, 1, standardCasing, multiblock); - addComponent(-1, 1, 0, standardCasing, multiblock); - addComponent(0, 1, -1, standardCasing, multiblock); - addComponent(-1, 1, -1, standardCasing, multiblock); - addComponent(-1, 1, 1, standardCasing, multiblock); - addComponent(1, 1, -1, standardCasing, multiblock); - addComponent(1, 1, 1, standardCasing, multiblock); - - blockEntity.renderMultiblock = multiblock; - } - } else { - blockEntity.renderMultiblock = null; - } + public void onClick(GuiButtonExtended button, double mouseX, double mouseY) { + blockEntity.renderMultiblock ^= !hideGuiElements(); } - - public void addComponent(final int x, final int y, final int z, final BlockState blockState, final Multiblock multiblock) { - multiblock.addComponent(new BlockPos( - x - Direction.byId(this.blockEntity.getFacingInt()).getOffsetX() * 2, - y, - z - Direction.byId(this.blockEntity.getFacingInt()).getOffsetZ() * 2), - blockState); - } - } diff --git a/src/main/java/techreborn/client/gui/GuiIndustrialSawmill.java b/src/main/java/techreborn/client/gui/GuiIndustrialSawmill.java index 636a560a8..8fc03bbaf 100644 --- a/src/main/java/techreborn/client/gui/GuiIndustrialSawmill.java +++ b/src/main/java/techreborn/client/gui/GuiIndustrialSawmill.java @@ -24,40 +24,28 @@ package techreborn.client.gui; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import reborncore.client.gui.builder.GuiBase; import reborncore.client.gui.builder.widget.GuiButtonExtended; import reborncore.client.gui.guibuilder.GuiBuilder; -import reborncore.client.multiblock.Multiblock; import reborncore.client.screen.builder.BuiltScreenHandler; import techreborn.blockentity.machine.multiblock.IndustrialSawmillBlockEntity; -import techreborn.init.TRContent; public class GuiIndustrialSawmill extends GuiBase { - IndustrialSawmillBlockEntity blockEntity; + private final IndustrialSawmillBlockEntity blockEntity; public GuiIndustrialSawmill(int syncID, final PlayerEntity player, final IndustrialSawmillBlockEntity blockEntity) { super(player, blockEntity, blockEntity.createScreenHandler(syncID, player)); this.blockEntity = blockEntity; } - @Override - public void init() { - super.init(); - blockEntity.renderMultiblock = null; - } - @Override protected void drawBackground(MatrixStack matrixStack, final float partialTicks, final int mouseX, final int mouseY) { super.drawBackground(matrixStack, partialTicks, mouseX, mouseY); final Layer layer = Layer.BACKGROUND; - + // Battery slot drawSlot(matrixStack, 8, 72, layer); // Liquid input slot @@ -70,9 +58,9 @@ public class GuiIndustrialSawmill extends GuiBase { drawSlot(matrixStack, 126, 25, layer); drawSlot(matrixStack, 126, 43, layer); drawSlot(matrixStack, 126, 61, layer); - + builder.drawJEIButton(matrixStack, this, 158, 5, layer); - if (blockEntity.getMutliBlock()) { + if (blockEntity.isMultiblockValid()) { builder.drawHologramButton(matrixStack, this, 6, 4, mouseX, mouseY, layer); } } @@ -81,70 +69,20 @@ public class GuiIndustrialSawmill extends GuiBase { protected void drawForeground(MatrixStack matrixStack, final int mouseX, final int mouseY) { super.drawForeground(matrixStack, mouseX, mouseY); final Layer layer = Layer.FOREGROUND; - + builder.drawProgressBar(matrixStack, this, blockEntity.getProgressScaled(100), 100, 105, 47, mouseX, mouseY, GuiBuilder.ProgressDirection.RIGHT, layer); builder.drawTank(matrixStack, this, 53, 25, mouseX, mouseY, blockEntity.tank.getFluidInstance(), blockEntity.tank.getCapacity(), blockEntity.tank.isEmpty(), layer); - if (blockEntity.getMutliBlock()) { + if (blockEntity.isMultiblockValid()) { addHologramButton(6, 4, 212, layer).clickHandler(this::onClick); } else { builder.drawMultiblockMissingBar(matrixStack, this, layer); addHologramButton(76, 56, 212, layer).clickHandler(this::onClick); builder.drawHologramButton(matrixStack, this, 76, 56, mouseX, mouseY, layer); - } + } builder.drawMultiEnergyBar(matrixStack, this, 9, 19, (int) blockEntity.getEnergy(), (int) blockEntity.getMaxPower(), mouseX, mouseY, 0, layer); } - public void onClick(GuiButtonExtended button, Double mouseX, Double mouseY){ - if (hideGuiElements()) return; - if (blockEntity.renderMultiblock == null) { - { - // This code here makes a basic multiblock and then sets to the selected one. - final Multiblock multiblock = new Multiblock(); - BlockState standardCasing = TRContent.MachineBlocks.BASIC.getCasing().getDefaultState(); - BlockState reinforcedCasing = TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState(); - - addComponent(0, -1, 0, standardCasing, multiblock); - addComponent(1, -1, 0, standardCasing, multiblock); - addComponent(0, -1, 1, standardCasing, multiblock); - addComponent(-1, -1, 0, standardCasing, multiblock); - addComponent(0, -1, -1, standardCasing, multiblock); - addComponent(-1, -1, -1, standardCasing, multiblock); - addComponent(-1, -1, 1, standardCasing, multiblock); - addComponent(1, -1, -1, standardCasing, multiblock); - addComponent(1, -1, 1, standardCasing, multiblock); - - addComponent(0, 0, 0, Blocks.WATER.getDefaultState(), multiblock); - addComponent(1, 0, 0, reinforcedCasing, multiblock); - addComponent(0, 0, 1, reinforcedCasing, multiblock); - addComponent(-1, 0, 0, reinforcedCasing, multiblock); - addComponent(0, 0, -1, reinforcedCasing, multiblock); - addComponent(-1, 0, -1, reinforcedCasing, multiblock); - addComponent(-1, 0, 1, reinforcedCasing, multiblock); - addComponent(1, 0, -1, reinforcedCasing, multiblock); - addComponent(1, 0, 1, reinforcedCasing, multiblock); - - addComponent(0, 1, 0, standardCasing, multiblock); - addComponent(0, 1, 0, standardCasing, multiblock); - addComponent(1, 1, 0, standardCasing, multiblock); - addComponent(0, 1, 1, standardCasing, multiblock); - addComponent(-1, 1, 0, standardCasing, multiblock); - addComponent(0, 1, -1, standardCasing, multiblock); - addComponent(-1, 1, -1, standardCasing, multiblock); - addComponent(-1, 1, 1, standardCasing, multiblock); - addComponent(1, 1, -1, standardCasing, multiblock); - addComponent(1, 1, 1, standardCasing, multiblock); - - blockEntity.renderMultiblock = multiblock; - } - } else { - blockEntity.renderMultiblock = null; - } - } - - public void addComponent(final int x, final int y, final int z, final BlockState blockState, final Multiblock multiblock) { - multiblock.addComponent(new BlockPos( - x - Direction.byId(this.blockEntity.getFacingInt()).getOffsetY() * 2, - y, - z- Direction.byId(this.blockEntity.getFacingInt()).getOffsetY() * 2).offset(blockEntity.getFacing().getOpposite(), 2), blockState); + public void onClick(GuiButtonExtended button, Double mouseX, Double mouseY) { + blockEntity.renderMultiblock ^= !hideGuiElements(); } } diff --git a/src/main/java/techreborn/client/gui/GuiVacuumFreezer.java b/src/main/java/techreborn/client/gui/GuiVacuumFreezer.java index 2717debbb..55f6fc42f 100644 --- a/src/main/java/techreborn/client/gui/GuiVacuumFreezer.java +++ b/src/main/java/techreborn/client/gui/GuiVacuumFreezer.java @@ -24,27 +24,23 @@ package techreborn.client.gui; -import net.minecraft.block.BlockState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; import reborncore.client.gui.builder.GuiBase; import reborncore.client.gui.builder.widget.GuiButtonExtended; import reborncore.client.gui.guibuilder.GuiBuilder; -import reborncore.client.multiblock.Multiblock; import reborncore.client.screen.builder.BuiltScreenHandler; import techreborn.blockentity.machine.multiblock.VacuumFreezerBlockEntity; -import techreborn.init.TRContent; public class GuiVacuumFreezer extends GuiBase { - VacuumFreezerBlockEntity blockEntity; + private final VacuumFreezerBlockEntity blockEntity; public GuiVacuumFreezer(int syncID, final PlayerEntity player, final VacuumFreezerBlockEntity blockEntity) { super(player, blockEntity, blockEntity.createScreenHandler(syncID, player)); this.blockEntity = blockEntity; } - + @Override protected void drawBackground(MatrixStack matrixStack, final float f, final int mouseX, final int mouseY) { super.drawBackground(matrixStack, f, mouseX, mouseY); @@ -59,7 +55,7 @@ public class GuiVacuumFreezer extends GuiBase { drawOutputSlot(matrixStack, 101, 45, layer); builder.drawJEIButton(matrixStack, this, 158, 5, layer); - if (blockEntity.getMultiBlock()) { + if (blockEntity.isMultiblockValid()) { builder.drawHologramButton(matrixStack, this, 6, 4, mouseX, mouseY, layer); } } @@ -70,7 +66,7 @@ public class GuiVacuumFreezer extends GuiBase { final GuiBase.Layer layer = GuiBase.Layer.FOREGROUND; builder.drawProgressBar(matrixStack, this, blockEntity.getProgressScaled(100), 100, 76, 48, mouseX, mouseY, GuiBuilder.ProgressDirection.RIGHT, layer); - if (blockEntity.getMultiBlock()) { + if (blockEntity.isMultiblockValid()) { addHologramButton(6, 4, 212, layer).clickHandler(this::onClick); } else { builder.drawMultiblockMissingBar(matrixStack, this, layer); @@ -80,52 +76,7 @@ public class GuiVacuumFreezer extends GuiBase { builder.drawMultiEnergyBar(matrixStack, this, 9, 19, (int) blockEntity.getEnergy(), (int) blockEntity.getMaxPower(), mouseX, mouseY, 0, layer); } - public void onClick(GuiButtonExtended button, Double mouseX, Double mouseY){ - if (hideGuiElements()) return; - if (blockEntity.renderMultiblock == null) { - { - // This code here makes a basic multiblock and then sets to the selected one. - final Multiblock multiblock = new Multiblock(); - BlockState advancedCasing = TRContent.MachineBlocks.ADVANCED.getCasing().getDefaultState(); - BlockState industrialCasing = TRContent.MachineBlocks.INDUSTRIAL.getCasing().getDefaultState(); - - addComponent(0, -1, 0, advancedCasing, multiblock); - addComponent(1, -1, 0, advancedCasing, multiblock); - addComponent(0, -1, 1, advancedCasing, multiblock); - addComponent(-1, -1, 0, advancedCasing, multiblock); - addComponent(0, -1, -1, advancedCasing, multiblock); - addComponent(-1, -1, -1, advancedCasing, multiblock); - addComponent(-1, -1, 1, advancedCasing, multiblock); - addComponent(1, -1, -1, advancedCasing, multiblock); - addComponent(1, -1, 1, advancedCasing, multiblock); - - addComponent(1, -2, 0, industrialCasing, multiblock); - addComponent(0, -2, 1, industrialCasing, multiblock); - addComponent(-1, -2, 0, industrialCasing, multiblock); - addComponent(0, -2, -1, industrialCasing, multiblock); - addComponent(-1, -2, -1, industrialCasing, multiblock); - addComponent(-1, -2, 1, industrialCasing, multiblock); - addComponent(1, -2, -1, industrialCasing, multiblock); - addComponent(1, -2, 1, industrialCasing, multiblock); - - addComponent(0, -3, 0, advancedCasing, multiblock); - addComponent(1, -3, 0, advancedCasing, multiblock); - addComponent(0, -3, 1, advancedCasing, multiblock); - addComponent(-1, -3, 0, advancedCasing, multiblock); - addComponent(0, -3, -1, advancedCasing, multiblock); - addComponent(-1, -3, -1, advancedCasing, multiblock); - addComponent(-1, -3, 1, advancedCasing, multiblock); - addComponent(1, -3, -1, advancedCasing, multiblock); - addComponent(1, -3, 1, advancedCasing, multiblock); - - blockEntity.renderMultiblock = multiblock; - } - } else { - blockEntity.renderMultiblock = null; - } - } - - public void addComponent(final int x, final int y, final int z, final BlockState blockState, final Multiblock multiblock) { - multiblock.addComponent(new BlockPos(x, y, z), blockState); + public void onClick(GuiButtonExtended button, Double mouseX, Double mouseY) { + blockEntity.renderMultiblock ^= !hideGuiElements(); } }