From 7e5e2ce1c5e4a4f8dd1c3086b4a1d16f7736527b Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 11 Oct 2023 20:37:23 +0200 Subject: [PATCH] cyclotron automation yeah --- .../hbm/blocks/machine/MachineCyclotron.java | 6 +- .../machine/TileEntityMachineCyclotron.java | 91 +++++++++++------- .../textures/models/machines/cyclotron.png | Bin 4498 -> 4610 bytes 3 files changed, 59 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineCyclotron.java b/src/main/java/com/hbm/blocks/machine/MachineCyclotron.java index 285f2f838..6ace99312 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCyclotron.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCyclotron.java @@ -25,7 +25,7 @@ public class MachineCyclotron extends BlockDummyable { return new TileEntityMachineCyclotron(); if(meta >= 6) - return new TileEntityProxyCombo(false, true, true); + return new TileEntityProxyCombo().inventory().power().fluid(); return null; } @@ -93,12 +93,16 @@ public class MachineCyclotron extends BlockDummyable { super.fillSpace(world, x, y, z, dir, o); this.makeExtra(world, x + dir.offsetX * o + 2, y, z + dir.offsetZ * o + 1); + this.makeExtra(world, x + dir.offsetX * o + 2, y, z + dir.offsetZ * o); this.makeExtra(world, x + dir.offsetX * o + 2, y, z + dir.offsetZ * o - 1); this.makeExtra(world, x + dir.offsetX * o - 2, y, z + dir.offsetZ * o + 1); + this.makeExtra(world, x + dir.offsetX * o - 2, y, z + dir.offsetZ * o); this.makeExtra(world, x + dir.offsetX * o - 2, y, z + dir.offsetZ * o - 1); this.makeExtra(world, x + dir.offsetX * o + 1, y, z + dir.offsetZ * o + 2); + this.makeExtra(world, x + dir.offsetX * o, y, z + dir.offsetZ * o + 2); this.makeExtra(world, x + dir.offsetX * o - 1, y, z + dir.offsetZ * o + 2); this.makeExtra(world, x + dir.offsetX * o + 1, y, z + dir.offsetZ * o - 2); + this.makeExtra(world, x + dir.offsetX * o, y, z + dir.offsetZ * o - 2); this.makeExtra(world, x + dir.offsetX * o - 1, y, z + dir.offsetZ * o - 2); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java index 0fa7a053f..9d30a9f22 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java @@ -1,7 +1,7 @@ package com.hbm.tileentity.machine; -import java.util.ArrayList; import java.util.List; +import java.util.Map.Entry; import com.hbm.config.BombConfig; import com.hbm.entity.effect.EntityBlackHole; @@ -11,6 +11,8 @@ import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionThermo; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidSource; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.container.ContainerMachineCyclotron; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; @@ -22,8 +24,10 @@ import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IConditionalInvAccess; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; @@ -39,8 +43,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IFluidSource, IFluidAcceptor, IEnergyUser, IFluidStandardTransceiver, IGUIProvider { +public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IFluidSource, IFluidAcceptor, IEnergyUser, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess { public long power; public static final long maxPower = 100000000; @@ -58,8 +63,6 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements public FluidTank coolant; public FluidTank amat; - - public List list = new ArrayList(); public TileEntityMachineCyclotron() { super(16); @@ -408,39 +411,11 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements return 0; } - @Override - public void fillFluidInit(FluidType type) { - - fillFluid(xCoord + 3, yCoord, zCoord + 1, getTact(), type); - fillFluid(xCoord + 3, yCoord, zCoord - 1, getTact(), type); - fillFluid(xCoord - 3, yCoord, zCoord + 1, getTact(), type); - fillFluid(xCoord - 3, yCoord, zCoord - 1, getTact(), type); - - fillFluid(xCoord + 1, yCoord, zCoord + 3, getTact(), type); - fillFluid(xCoord - 1, yCoord, zCoord + 3, getTact(), type); - fillFluid(xCoord + 1, yCoord, zCoord - 3, getTact(), type); - fillFluid(xCoord - 1, yCoord, zCoord - 3, getTact(), type); - } - - @Override - public void fillFluid(int x, int y, int z, boolean newTact, FluidType type) { - Library.transmitFluid(x, y, z, newTact, this, worldObj, type); - } - - @Override - public boolean getTact() { - return age >= 0 && age < 10; - } - - @Override - public List getFluidList(FluidType type) { - return list; - } - - @Override - public void clearFluidList(FluidType type) { - list.clear(); - } + @Override public void fillFluidInit(FluidType type) { } + @Override public void fillFluid(int x, int y, int z, boolean newTact, FluidType type) { } + @Override public boolean getTact() { return false; } + @Override public List getFluidList(FluidType type) { return null; } + @Override public void clearFluidList(FluidType type) { } @Override public int getMaxFluidFill(FluidType type) { @@ -559,4 +534,46 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCyclotron(player.inventory, this); } + + @Override + public boolean isItemValidForSlot(int x, int y, int z, int slot, ItemStack stack) { + + if(slot < 3) { + for(Entry, Pair> entry : CyclotronRecipes.recipes.entrySet()) { + if(entry.getKey().getKey().matchesRecipe(stack, true)) return true; + } + } else if(slot < 6) { + + for(Entry, Pair> entry : CyclotronRecipes.recipes.entrySet()) { + if(entry.getKey().getValue().matchesRecipe(stack, true)) return true; + } + } + + return false; + } + + @Override + public boolean canInsertItem(int x, int y, int z, int slot, ItemStack stack, int side) { + return this.isItemValidForSlot(x, y, z, slot, stack); + } + + @Override + public boolean canExtractItem(int x, int y, int z, int slot, ItemStack stack, int side) { + return slot >= 6 && slot <= 8; + } + + @Override + public int[] getAccessibleSlotsFromSide(int x, int y, int z, int side) { + + for(int i = 2; i < 6; i++) { + ForgeDirection dir = ForgeDirection.getOrientation(i); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + if(x == xCoord + dir.offsetX * 2 + rot.offsetX && z == zCoord + dir.offsetZ * 2 + rot.offsetZ) return new int[] {0, 3, 6, 7, 8}; + if(x == xCoord + dir.offsetX * 2 && z == zCoord + dir.offsetZ * 2) return new int[] {1, 4, 6, 7, 8}; + if(x == xCoord + dir.offsetX * 2 - rot.offsetX && z == zCoord + dir.offsetZ * 2 - rot.offsetZ) return new int[] {2, 5, 6, 7, 8}; + } + + return new int[] {6, 7, 8}; + } } diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron.png index b10a0d1db62d5dd2e69f5d677785f3cceb73c7df..6cfaeb00832b88e5a54b050ced51620d432f8e5a 100644 GIT binary patch delta 4600 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 Uu#iVA>;uRTMqLk8p?WX$f0D+iH~;_u delta 4488 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