From debb9449cb89ef4820d49f765b070a3dbc72d438 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 10 Jun 2022 15:24:46 +0200 Subject: [PATCH] working ejector crane upgrades --- .../hbm/items/machine/ItemMetaUpgrade.java | 30 +++++++ .../network/TileEntityCraneExtractor.java | 83 +++++++++++++++--- .../gui/storage/gui_crane_ejector.png | Bin 2698 -> 2749 bytes 3 files changed, 100 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/hbm/items/machine/ItemMetaUpgrade.java b/src/main/java/com/hbm/items/machine/ItemMetaUpgrade.java index 9cbc33aac..521a4a148 100644 --- a/src/main/java/com/hbm/items/machine/ItemMetaUpgrade.java +++ b/src/main/java/com/hbm/items/machine/ItemMetaUpgrade.java @@ -4,9 +4,11 @@ import java.util.List; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; public class ItemMetaUpgrade extends ItemMachineUpgrade { @@ -34,4 +36,32 @@ public class ItemMetaUpgrade extends ItemMachineUpgrade { list.add(new ItemStack(item, 1, i)); } } + + protected IIcon[] icons; + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister reg) { + + this.icons = new IIcon[levels]; + + for(int i = 0; i < levels; i++) { + this.icons[i] = reg.registerIcon(this.getIconString() + "_" + (i + 1)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int meta) { + if(meta >= 0 && meta < levels) { + return this.icons[meta]; + } + + return this.icons[0]; + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName() + "_" + (stack.getItemDamage() + 1); + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 172db796d..93a10d9e3 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -4,6 +4,7 @@ import com.hbm.entity.item.EntityMovingItem; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerCraneExtractor; import com.hbm.inventory.gui.GUICraneExtractor; +import com.hbm.items.ModItems; import com.hbm.module.ModulePatternMatcher; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -44,8 +45,26 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I if(!worldObj.isRemote) { - if(worldObj.getTotalWorldTime() % 20 == 0) { + int delay = 20; + + if(slots[19] != null && slots[19].getItem() == ModItems.upgrade_ejector) { + switch(slots[19].getItemDamage()) { + case 0: delay = 10; break; + case 1: delay = 5; break; + case 2: delay = 2; break; + } + } + + if(worldObj.getTotalWorldTime() % delay == 0) { int amount = 1; + + if(slots[18] != null && slots[18].getItem() == ModItems.upgrade_stack) { + switch(slots[18].getItemDamage()) { + case 0: amount = 4; break; + case 1: amount = 16; break; + case 2: amount = 64; break; + } + } ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); TileEntity te = worldObj.getTileEntity(xCoord - dir.offsetX, yCoord - dir.offsetY, zCoord - dir.offsetZ); @@ -59,27 +78,60 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I access = sided.getAccessibleSlotsFromSide(dir.ordinal()); } - if(b instanceof IConveyorBelt && te instanceof IInventory) { - IInventory inv = (IInventory) te; - int size = access == null ? inv.getSizeInventory() : access.length; + boolean hasSent = false; + + if(b instanceof IConveyorBelt) { - for(int i = 0; i < size; i++) { - int index = access == null ? i : access[i]; - ItemStack stack = inv.getStackInSlot(index); + IConveyorBelt belt = (IConveyorBelt) b; + + /* try to send items from a connected inv, if present */ + if(te instanceof IInventory) { - if(stack != null && (sided == null || sided.canExtractItem(index, stack, dir.ordinal()))){ + IInventory inv = (IInventory) te; + int size = access == null ? inv.getSizeInventory() : access.length; + + for(int i = 0; i < size; i++) { + int index = access == null ? i : access[i]; + ItemStack stack = inv.getStackInSlot(index); - boolean match = this.matchesFilter(stack); + if(stack != null && (sided == null || sided.canExtractItem(index, stack, dir.ordinal()))){ + + boolean match = this.matchesFilter(stack); + + if((isWhitelist && match) || (!isWhitelist && !match)) { + stack = stack.copy(); + int toSend = Math.min(amount, stack.stackSize); + inv.decrStackSize(index, toSend); + stack.stackSize = toSend; + + EntityMovingItem moving = new EntityMovingItem(worldObj); + Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + dir.offsetX * 0.55, yCoord + 0.5 + dir.offsetY * 0.55, zCoord + 0.5 + dir.offsetZ * 0.55); + Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, pos); + moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); + moving.setItemStack(stack); + worldObj.spawnEntityInWorld(moving); + hasSent = true; + break; + } + } + } + } + + /* if no item has been sent, send buffered items while ignoring the filter */ + if(!hasSent) { + + for(int i = 0; i < 9; i++) { + ItemStack stack = slots[i]; - if((isWhitelist && match) || (!isWhitelist && !match)) { + if(stack != null){ stack = stack.copy(); int toSend = Math.min(amount, stack.stackSize); - inv.decrStackSize(index, toSend); + decrStackSize(i, toSend); stack.stackSize = toSend; EntityMovingItem moving = new EntityMovingItem(worldObj); Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + dir.offsetX * 0.55, yCoord + 0.5 + dir.offsetY * 0.55, zCoord + 0.5 + dir.offsetZ * 0.55); - Vec3 snap = ((IConveyorBelt) b).getClosestSnappingPosition(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, pos); + Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, pos); moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); moving.setItemStack(stack); worldObj.spawnEntityInWorld(moving); @@ -122,7 +174,12 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I @Override public boolean isItemValidForSlot(int i, ItemStack itemStack) { - return true; + return i > 8 && i < 18; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i > 8 && i < 18; } @Override diff --git a/src/main/resources/assets/hbm/textures/gui/storage/gui_crane_ejector.png b/src/main/resources/assets/hbm/textures/gui/storage/gui_crane_ejector.png index 146aa1d61e49d9b0e0c83fcf35de52f1e7c42ecf..fccf0e7905970d108e08846df5894d357d19f258 100644 GIT binary patch delta 2391 zcma);dpOkj7so#{#uB2bEUB=xs%ch~uqL8kOl`R{)6|Hf6=f=yT*7y-wX?Zqa!-^k z!)S*j_lDeQs2!KWkn0r2U@~rV+1cIa_xt z-I{$fBhd3TZgMvDXwR?FQq&R`QWNZDT3%(YM&x?j7L1~zq0%jc^eN>1&94q@EQ~O9 zq*0cW%UWH>xxOu5H^f&e&LNS6#ipFg1k?5FiNeVa>QTM%)m3vny;qf$2kQ(itgMpa z;^LI~)MU-H6DNG`iYY* zwwr-VO$$-KwRd`!&kaFOh?#IrSgF!IS28U>F0BWa5Ev1mg)|OSD!u0l(+8<($DmAZ z9%-6t5&gck)oxPehHr$rI%2X1*Ytnl0^RTTp4WNgF|+Ymm?jx1P)MH09VLn`giAb! z4U<%}O|`awJ+srvzPlGYgu-5|fX!x`uYS3tpdI`yqV$1OqebD9?j(xf-5~tTHZ;DW;?2 zZq@GQkSd*d*GMD>QMKw2)1{O9M* zP_-ZGCGabQLO0;!%gxwAK zYTyZ@YyrI`kv<1?#(u3&GRG)5Ricz*OZ+{oVJTHm6C{Z$&KnX7Mt}B)dRgaN$|X(F z)3R)lWtqDBZb@v$lAVXBCiP7jo51)yr`B64D(|tPFN^6_T|wF{72>IJomryFp5tJl zmF8fzf0x0ITY=ZL;?0-T+zlmVtu5Ai28f1F=()P={%#Xl=P9fqoe~es!~@I*%_$7x zb1DlB(T9pB98n7|+V@*Khu`e6Knr*HUIW3koND@lisW%lZ@0-n8k3jz*5i(^Q%B(` zUczCPle9i`^wCwFd+9&UaTD%Ydz%!c_UNJD_F6Dvg+R^jT3o@JJ32rqMUxB6@yi{r zSuED)m5sv+D>WL=0^qQQ-V1e+M7)?#@UGF#cI33dm-S!xH+LM=I;clPWnY-X*N~SbI>b}`d9-RU5g=x_y8Q|n_ z$yE_S%>jP=O#;}uvc{Ac_w|Susm%Vmz34cgtE#Fxy&i1}by-G(SIo zXBpJi*4`9Mvwj*)UPJ(HXKs`mm)Xf7H>sq{^Lf0Mv9Yl`0U6(DoCY^Y*#%UrMKMEWK|yuRGdl|#?^*%TqcLwe9_$UQ#H5TM|R zy)S>Vil-@>bU^4(In%XjAoE?=s5SHxy?2d`jm^#tC6x&F8JY6^@Bb=!+drZ3AX`KP z59K~3)_l8>pgea|Jx*PbpaN@f!L6$o26jaoT6ZF>$7e1~Favw!PbSpDiri~C+JkFt zEUA9?Gf?ifZQ5VPHU}zB1Z5ab>Km0Fr;8r{^YfJAde#$E-DEPb_QSmYtr4Jw!9=~tok8U)y+6cL zj`j#BrAqOAMpeyW!NJ>a3U~Z$XDIi=rQ{&3zk<^K0^Rk)2>Gju9Uyqbo8_zCmG3IudeNSej7|D{=4Mt!&mhruNkH}o0HlYiL+ zPG$nHrz&@)ZWHHD_{a{A`U^b=HMSnsg!w$jT`j`E@nZI}S?RT0zv8+z;BS7XY#mPgaoj8RFNpJ{j{pDw delta 2340 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