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 b10a0d1db..6cfaeb008 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/cyclotron.png and b/src/main/resources/assets/hbm/textures/models/machines/cyclotron.png differ