From ed219824f928d5da0939efb7a104334d3ccad6a9 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 21 Nov 2022 16:26:46 +0100 Subject: [PATCH] proper fluid IO for soyuz launcher, item transfer BS --- .../com/hbm/blocks/machine/SoyuzLauncher.java | 14 +++- .../hbm/blocks/network/RadioTorchBase.java | 44 +++++++++++ .../hbm/blocks/network/RadioTorchSender.java | 16 ++++ .../inventory/transfer/ITransferFilter.java | 11 +++ .../inventory/transfer/ITransferSource.java | 13 ++++ .../inventory/transfer/ITransferTarget.java | 11 +++ .../transfer/TransferSourceSided.java | 13 ++++ .../transfer/TransferSourceTileEntity.java | 70 ++++++++++++++++++ .../hbm/inventory/transfer/TransferUtil.java | 15 ++++ .../machine/TileEntitySoyuzLauncher.java | 49 +++++++++++- .../network/TileEntityRadioTorchBase.java | 9 +++ .../hbm/textures/blocks/rtty_rec_off.png | Bin 0 -> 301 bytes .../hbm/textures/blocks/rtty_rec_on.png | Bin 0 -> 283 bytes .../hbm/textures/blocks/rtty_sender_off.png | Bin 0 -> 313 bytes .../hbm/textures/blocks/rtty_sender_on.png | Bin 0 -> 291 bytes 15 files changed, 259 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/network/RadioTorchBase.java create mode 100644 src/main/java/com/hbm/blocks/network/RadioTorchSender.java create mode 100644 src/main/java/com/hbm/inventory/transfer/ITransferFilter.java create mode 100644 src/main/java/com/hbm/inventory/transfer/ITransferSource.java create mode 100644 src/main/java/com/hbm/inventory/transfer/ITransferTarget.java create mode 100644 src/main/java/com/hbm/inventory/transfer/TransferSourceSided.java create mode 100644 src/main/java/com/hbm/inventory/transfer/TransferSourceTileEntity.java create mode 100644 src/main/java/com/hbm/inventory/transfer/TransferUtil.java create mode 100644 src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchBase.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/rtty_rec_off.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rtty_rec_on.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rtty_sender_off.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rtty_sender_on.png diff --git a/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java b/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java index 480073153..6ed230464 100644 --- a/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java +++ b/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java @@ -7,6 +7,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.handler.BossSpawnHandler; import com.hbm.handler.MultiblockHandlerXR; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntitySoyuzLauncher; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; @@ -31,9 +32,9 @@ public class SoyuzLauncher extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { - - if(meta >= ForgeDirection.UNKNOWN.ordinal()) - return new TileEntitySoyuzLauncher(); + + if(meta >= 12) return new TileEntitySoyuzLauncher(); + if(meta >= 6) return new TileEntityProxyCombo().power().fluid(); return null; } @@ -143,6 +144,13 @@ public class SoyuzLauncher extends BlockDummyable { MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] { -2, 4, -3, 6, 6, -3 }, this, dir); MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] { 0, 4, 1, 1, -6, 8 }, this, dir); MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] { 0, 4, 2, 2, 9, -5 }, this, dir); + + for(int ix = x - 6; ix <= x + 6; ix++) { + for(int iz = z - 6; iz <= z + 6; iz++) { + this.makeExtra(world, ix, y, iz); + this.makeExtra(world, ix, y + 1, iz); + } + } } @Override diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchBase.java b/src/main/java/com/hbm/blocks/network/RadioTorchBase.java new file mode 100644 index 000000000..1f0f44b43 --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/RadioTorchBase.java @@ -0,0 +1,44 @@ +package com.hbm.blocks.network; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public abstract class RadioTorchBase extends BlockContainer { + + public RadioTorchBase() { + super(Material.circuits); + } + + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + + @Override + public int getRenderType() { + return renderID; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { + return true; + } + + @Override + public int onBlockPlaced(World world, int x, int y, int z, int side, float fX, float fY, float fZ, int meta) { + return side; + } +} diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchSender.java b/src/main/java/com/hbm/blocks/network/RadioTorchSender.java new file mode 100644 index 000000000..c456e2b2b --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/RadioTorchSender.java @@ -0,0 +1,16 @@ +package com.hbm.blocks.network; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class RadioTorchSender extends RadioTorchBase { + + public RadioTorchSender() { + super(); + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return null; + } +} diff --git a/src/main/java/com/hbm/inventory/transfer/ITransferFilter.java b/src/main/java/com/hbm/inventory/transfer/ITransferFilter.java new file mode 100644 index 000000000..8f5e91cae --- /dev/null +++ b/src/main/java/com/hbm/inventory/transfer/ITransferFilter.java @@ -0,0 +1,11 @@ +package com.hbm.inventory.transfer; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +public interface ITransferFilter { + + /** Returns a list of valid ItemStacks that pass the filter and can be added. The returned list is what is added to the target and removed from the source. */ + public List select(List offer); +} diff --git a/src/main/java/com/hbm/inventory/transfer/ITransferSource.java b/src/main/java/com/hbm/inventory/transfer/ITransferSource.java new file mode 100644 index 000000000..27891800f --- /dev/null +++ b/src/main/java/com/hbm/inventory/transfer/ITransferSource.java @@ -0,0 +1,13 @@ +package com.hbm.inventory.transfer; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +public interface ITransferSource { + + /** Returns a list of ItemStacks accessible from this source */ + public List offer(); + /** Removes the selected ItemStacks */ + public void remove(List toRem); +} diff --git a/src/main/java/com/hbm/inventory/transfer/ITransferTarget.java b/src/main/java/com/hbm/inventory/transfer/ITransferTarget.java new file mode 100644 index 000000000..28bba3987 --- /dev/null +++ b/src/main/java/com/hbm/inventory/transfer/ITransferTarget.java @@ -0,0 +1,11 @@ +package com.hbm.inventory.transfer; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +public interface ITransferTarget { + + /** Adds the selected ItemStacks to the target */ + public void fill(List offer); +} diff --git a/src/main/java/com/hbm/inventory/transfer/TransferSourceSided.java b/src/main/java/com/hbm/inventory/transfer/TransferSourceSided.java new file mode 100644 index 000000000..8c0dfb998 --- /dev/null +++ b/src/main/java/com/hbm/inventory/transfer/TransferSourceSided.java @@ -0,0 +1,13 @@ +package com.hbm.inventory.transfer; + +import net.minecraftforge.common.util.ForgeDirection; + +public abstract class TransferSourceSided implements ITransferSource { + + protected ForgeDirection fromSide; + + public TransferSourceSided fromSide(ForgeDirection side) { + this.fromSide = side; + return this; + } +} diff --git a/src/main/java/com/hbm/inventory/transfer/TransferSourceTileEntity.java b/src/main/java/com/hbm/inventory/transfer/TransferSourceTileEntity.java new file mode 100644 index 000000000..11a92d06c --- /dev/null +++ b/src/main/java/com/hbm/inventory/transfer/TransferSourceTileEntity.java @@ -0,0 +1,70 @@ +package com.hbm.inventory.transfer; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFurnace; + +public class TransferSourceTileEntity extends TransferSourceSided { + + protected TileEntity tile; + + public TransferSourceTileEntity fromTile(TileEntity tile) { + this.tile = tile; + return this; + } + + @Override + public List offer() { + + List list = new ArrayList(); + + if(tile instanceof ISidedInventory) { + ISidedInventory inventory = (ISidedInventory) tile; + int[] access = masquerade(inventory, fromSide.ordinal()); + + for(int i : access) { + ItemStack stack = inventory.getStackInSlot(i); + + if(stack != null && inventory.canExtractItem(i, stack, fromSide.ordinal())) { + list.add(stack.copy()); + } + } + + return list; + } + + if(tile instanceof IInventory) { + IInventory inventory = (IInventory) tile; + + for(int i = 0; i < inventory.getSizeInventory(); i++) { + ItemStack stack = inventory.getStackInSlot(i); + + if(stack != null) { + list.add(stack.copy()); + } + } + + return list; + } + + return list; + } + + public static int[] masquerade(ISidedInventory sided, int side) { + + if(sided instanceof TileEntityFurnace) { + return new int[] {2}; + } + + return sided.getAccessibleSlotsFromSide(side); + } + + @Override + public void remove(List toRem) { + } +} diff --git a/src/main/java/com/hbm/inventory/transfer/TransferUtil.java b/src/main/java/com/hbm/inventory/transfer/TransferUtil.java new file mode 100644 index 000000000..2ab5c8576 --- /dev/null +++ b/src/main/java/com/hbm/inventory/transfer/TransferUtil.java @@ -0,0 +1,15 @@ +package com.hbm.inventory.transfer; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +public class TransferUtil { + + public static void transfer(ITransferSource source, ITransferFilter filter, ITransferTarget target) { + + List filtered = filter.select(source.offer()); + source.remove(filtered); + target.fill(filtered); + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java index b4ca97203..f870f9cfe 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java @@ -15,8 +15,10 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; +import api.hbm.fluid.IFluidStandardReceiver; import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -29,7 +31,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements ISidedInventory, IEnergyUser, IFluidContainer, IFluidAcceptor { +public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements ISidedInventory, IEnergyUser, IFluidContainer, IFluidAcceptor, IFluidStandardReceiver { public long power; public static final long maxPower = 1000000; @@ -62,8 +64,14 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS if (!worldObj.isRemote) { - this.trySubscribe(worldObj, xCoord, yCoord - 1, zCoord, ForgeDirection.DOWN); - + if(worldObj.getTotalWorldTime() % 20 == 0) { + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + this.trySubscribe(tanks[1].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + tanks[0].loadTank(4, 5, slots); tanks[1].loadTank(6, 7, slots); @@ -134,6 +142,26 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS } } + protected List conPos; + protected List getConPos() { + + if(conPos != null) + return conPos; + + conPos = new ArrayList(); + + for(ForgeDirection dir : new ForgeDirection[] {Library.POS_X, Library.POS_Z, Library.NEG_X, Library.NEG_Z}) { + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + for(int i = -6; i <= 6; i++) { + conPos.add(new DirPos(xCoord + dir.offsetX * 7 + rot.offsetX * i, yCoord + 0, zCoord + dir.offsetX * 7 + rot.offsetZ * i, dir)); + conPos.add(new DirPos(xCoord + dir.offsetX * 7 + rot.offsetX * i, yCoord + 1, zCoord + dir.offsetX * 7 + rot.offsetZ * i, dir)); + } + } + + return conPos; + } + @Override public AudioWrapper createAudioLoop() { return MainRegistry.proxy.getLoopedSound("hbm:block.soyuzReady", xCoord, yCoord, zCoord, 1.0F, 1.0F); @@ -429,4 +457,19 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS public long getMaxPower() { return this.maxPower; } + + @Override + public FluidTank[] getAllTanks() { + return tanks; + } + + @Override + public FluidTank[] getReceivingTanks() { + return tanks; + } + + @Override + public boolean canConnect(FluidType type, ForgeDirection dir) { + return dir != ForgeDirection.UNKNOWN && dir != ForgeDirection.UP && dir != ForgeDirection.DOWN; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchBase.java new file mode 100644 index 000000000..d57223822 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchBase.java @@ -0,0 +1,9 @@ +package com.hbm.tileentity.network; + +import net.minecraft.tileentity.TileEntity; + +public class TileEntityRadioTorchBase extends TileEntity { + + public String channel = ""; + protected long lastUpdate; +} diff --git a/src/main/resources/assets/hbm/textures/blocks/rtty_rec_off.png b/src/main/resources/assets/hbm/textures/blocks/rtty_rec_off.png new file mode 100644 index 0000000000000000000000000000000000000000..6e823d5f09cfbe9c4c5d331df92667b5ed719eb1 GIT binary patch literal 301 zcmV+|0n+}7P)}R6 zu0F;n)>;q|LlIY3>nh8#%zvWy z9%Br3i3(_~q4z!yD5by{GY??q|5eC2|5@P|nR{W5qS%*~00000NkvXXu0mjfitv1F literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rtty_rec_on.png b/src/main/resources/assets/hbm/textures/blocks/rtty_rec_on.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd5d38c5f057850c9291aa281b09a8f7ae2d273 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfxFri-C~%X~3br(TZ*f0};>2>Qv^6=duXifMD6p0I;!iCYWP+-nyf`p7@&WGkyU zy@8v1=@gUaYgYHHX}cDc)U*18l!DTfpl^(;yf_l&6V@KJ+|Dl`7?tgPAc+40yUzNA zqH|KoOQtw+Fg}-AYigHgzJ%ev!TkqMEoKxO9XlZL`FXHc)>>DWfY5pWp4Yj55w1v; zI{drx(cb0X{nk!>e(5wes}B+Cb6AC=h5-(mP~ fy_4qCO^5W?&57D|my2Bw=sN~aS3j3^P6!^c>>v^7Fp37Ydc?rw7%@|*sh&_s{ljO+wc=2hC0r$j`&J^alzqt|xMvwX8 z6z+YqJ@@p}J7!094Q-K3_mI%grLV077aU!9t>>}Etd52tu6w`#G9>d{yY-i0t?B7a z9Sni5XKtGJRC|T!sp9K~eaiQ$*KE}}edyzdWADGpPCw0VF8NMAyXf4KDFI#+i=U-R z7`%75|2<>v%;%EHJW<(w>;`*^s=qq?3p4R;F7A_1zHB1s^dM8hOsOWY&hCHUl5M%( zvDbfhKbfQaTnA{qgtF$+zYUqQ0=(X`w+NUicSJ3mV|MQ+zidmw`k%eG8i0Oh@O1Ta JS?83{1OR@>fvx}m literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rtty_sender_on.png b/src/main/resources/assets/hbm/textures/blocks/rtty_sender_on.png new file mode 100644 index 0000000000000000000000000000000000000000..6899d1439d352a697789f837ef60cf22cf2e140b GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfxhAf%X~Yn7CoiXcRVZaK9|YdZXz)$DY1V-vd$6La}WKRY}*SIy>}kGe{|-z z`g;av8Wvf9Vczv^ah62eKAmnZfv*})UY@3bjC;$SIG!_Ji<(pXoKeY1)0K6FRb0kF znG5#QTc-#qvdk%-613x9o(EIi!q^A7GMQ@wvyVzRXZNnpJ^YX1^)4kP8#(?pTRS+y z8$R$pWY%lTob}<}=J(c?=}A3%@^63U`2L?KbKY~izQ;cmE8l0XU8$y(aKAij?Q=%U m^d7_KjE2XS3x@2ybV#1-bEE^y%4?wDVDNPHb6Mw<&;$TB=5y8n literal 0 HcmV?d00001