From fa6f54f01a18c4d34115f87ad3afd5e65d95a507 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Fri, 17 Jul 2026 21:07:26 +0200 Subject: [PATCH] now we're cooking with fire --- .../hbm/blocks/machine/pile/BlockPile.java | 3 + .../blocks/machine/pile/BlockPileDevice.java | 18 ++++-- .../render/tileentity/RenderPileControl.java | 6 +- .../machine/pile/TileEntityPileControl.java | 59 +++++++++++++++++- .../machine/pile/TileEntityPileCore.java | 7 ++- .../machine/pile/TileEntityPileVent.java | 17 ++--- .../textures/blocks/pile_block_core_ct.png | Bin 0 -> 1172 bytes 7 files changed, 96 insertions(+), 14 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/pile_block_core_ct.png diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java index b189566bc..2495ffc5e 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java @@ -52,6 +52,7 @@ public class BlockPile extends BlockContainer implements IBlockCT, IToolable { @SideOnly(Side.CLIENT) public CTStitchReceiver recChanIn; @SideOnly(Side.CLIENT) public CTStitchReceiver recChanOut; @SideOnly(Side.CLIENT) public CTStitchReceiver recCon; + @SideOnly(Side.CLIENT) public CTStitchReceiver recCore; @SideOnly(Side.CLIENT) protected IIcon iconTop; @@ -76,6 +77,7 @@ public class BlockPile extends BlockContainer implements IBlockCT, IToolable { this.recChanIn = IBlockCT.primeReceiver(reg, RefStrings.MODID + ":pile_block_input", this.blockIcon); this.recChanOut = IBlockCT.primeReceiver(reg, RefStrings.MODID + ":pile_block_output", this.blockIcon); this.recCon = IBlockCT.primeReceiver(reg, RefStrings.MODID + ":pile_block_control_top", this.iconTop); + this.recCore = IBlockCT.primeReceiver(reg, RefStrings.MODID + ":pile_block_core", this.iconTop); } @Override @@ -84,6 +86,7 @@ public class BlockPile extends BlockContainer implements IBlockCT, IToolable { if(side == 0 || side == 1) return meta == META_CONTROL ? recCon.fragCache : recTop.fragCache; if(meta == META_FUEL_IN || meta == META_AIR_IN) return recChanIn.fragCache; if(meta == META_FUEL_OUT || meta == META_AIR_OUT) return recChanOut.fragCache; + if(meta == META_CORE) return recCore.fragCache; return rec.fragCache; } diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java index d4d7968f9..500c9fe29 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java @@ -17,7 +17,9 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class BlockPileDevice extends BlockContainer implements IBlockMulti { @@ -73,10 +75,10 @@ public class BlockPileDevice extends BlockContainer implements IBlockMulti { if(world.getBlockMetadata(x, y, z) != BLOCK_META_CONTROL) return; int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - if(i == 0) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 1, 2); - if(i == 1) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 2, 2); - if(i == 2) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 0, 2); - if(i == 3) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 3, 2); + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 0, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 3, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 1, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 2, 2); } public static int itemMetaToBlockMeta(int meta) { @@ -91,4 +93,12 @@ public class BlockPileDevice extends BlockContainer implements IBlockMulti { if(meta >= BLOCK_META_VENT) return ITEM_META_VENT; return ITEM_META_LOADER; } + + @Override + public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) { + int meta = world.getBlockMetadata(x, y, z); + if(meta < BLOCK_META_CONTROL) return false; + + return side.ordinal() == meta % 4 + 2; + } } diff --git a/src/main/java/com/hbm/render/tileentity/RenderPileControl.java b/src/main/java/com/hbm/render/tileentity/RenderPileControl.java index 7acf06b59..f3c248a22 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPileControl.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPileControl.java @@ -3,6 +3,7 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; import com.hbm.main.ResourceManager; +import com.hbm.tileentity.machine.pile.TileEntityPileControl; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; @@ -23,9 +24,12 @@ public class RenderPileControl extends TileEntitySpecialRenderer { case 3: GL11.glRotated(0, 0, 1, 0); break; } + TileEntityPileControl control = (TileEntityPileControl) te; + double level = control.lastLevel + (control.level - control.lastLevel) * interp; + bindTexture(ResourceManager.pile_control_tex); ResourceManager.pile_control.renderPart("Base"); - GL11.glTranslated(0, 0.5, 0); + GL11.glTranslated(0, level * 0.75, 0); ResourceManager.pile_control.renderPart("Rod"); GL11.glShadeModel(GL11.GL_FLAT); diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java index 69689a864..3b904f198 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java @@ -6,10 +6,13 @@ import com.hbm.tileentity.TileEntityTickingBase; import com.hbm.tileentity.machine.pile.TileEntityPileCore.PileChannel; import com.hbm.util.Compat; +import api.hbm.redstoneoverradio.IRORInteractive; import io.netty.buffer.ByteBuf; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityPileControl extends TileEntityTickingBase { +public class TileEntityPileControl extends TileEntityTickingBase implements IRORInteractive { public double syncLevel; public double level; @@ -17,6 +20,10 @@ public class TileEntityPileControl extends TileEntityTickingBase { public int turnProgress; + public double targetLevel; + public static final double SPEED = 1D / 60D; // full traverse takes 3s + public boolean wasRedstone; + public int chanNum; @Override @@ -46,6 +53,24 @@ public class TileEntityPileControl extends TileEntityTickingBase { } } + if(canMove) { + if(Math.abs(level - targetLevel) <= SPEED) { + this.level = this.targetLevel; + } else if(level < targetLevel) { + this.level += SPEED; + } else if(level > targetLevel) { + this.level -= SPEED; + } + } + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() % 4 + 2); + boolean redstone = worldObj.getIndirectPowerOutput(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir.getOpposite().ordinal()); + + if(redstone && !wasRedstone) this.setTarget(1D); + if(!redstone && wasRedstone) this.setTarget(0D); + + this.wasRedstone = redstone; + this.networkPackNT(100); } else { @@ -77,4 +102,36 @@ public class TileEntityPileControl extends TileEntityTickingBase { if(this.syncLevel != lastSync) this.turnProgress = 2; } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_FUNCTION + "setrods" + NAME_SEPARATOR + "percent", + PREFIX_FUNCTION + "extendrods" + NAME_SEPARATOR + "percent" + }; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "setrods").equals(name) && params.length > 0) { + int percent = IRORInteractive.parseInt(params[0], 0, 100); + this.setTarget(percent / 100D); + this.markChanged(); + return null; + } + + if((PREFIX_FUNCTION + "extendrods").equals(name) && params.length > 0) { + int percent = IRORInteractive.parseInt(params[0], -100, 100); + this.setTarget(MathHelper.clamp_double(this.targetLevel + percent / 100D, 0D, 1D)); + this.markChanged(); + return null; + } + + return null; + } + + public void setTarget(double target) { + this.targetLevel = target; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java index 654e2d234..6d11f60d7 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java @@ -193,8 +193,13 @@ public class TileEntityPileCore extends TileEntityTickingBase { if(!worldObj.isRemote) { - if(worldObj.getTotalWorldTime() % 3 == 0) for(PileChannel chan : this.ventilationChannels) { + for(PileChannel chan : this.ventilationChannels) { if(chan.air <= 0) continue; + + int toUse = (int) Math.ceil(chan.air * 5D / 1_000); + chan.air -= toUse; + + if(worldObj.getTotalWorldTime() % 3 != 0) continue; double x = chan.entry.getX() + 0.5 + chan.entry.getDir().offsetX * (this.width - 0.375); double y = chan.entry.getY() + 0.5; diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java index 4d48a2a3e..af645c568 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java @@ -7,6 +7,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.tileentity.TileEntityTickingBase; import com.hbm.tileentity.machine.pile.TileEntityPileCore.PileChannel; +import com.hbm.util.BobMathUtil; import com.hbm.util.Compat; import api.hbm.fluidmk2.IFluidStandardReceiverMK2; @@ -25,7 +26,7 @@ public class TileEntityPileVent extends TileEntityTickingBase implements IFluidS public int chanNum; public TileEntityPileVent() { - this.compair = new FluidTank(Fluids.AIR, 4_000); + this.compair = new FluidTank(Fluids.AIR, 4_000).withPressure(1); } @Override public FluidTank[] getAllTanks() { return new FluidTank[] {compair}; } @@ -35,7 +36,7 @@ public class TileEntityPileVent extends TileEntityTickingBase implements IFluidS public boolean canConnect(FluidType type, ForgeDirection dir) { if(type != compair.getTankType()) return false; ForgeDirection conDir = getOrientation(); - return dir == conDir.getOpposite(); + return dir == conDir; } @Override @@ -44,17 +45,17 @@ public class TileEntityPileVent extends TileEntityTickingBase implements IFluidS if(!worldObj.isRemote) { ForgeDirection dir = getOrientation(); - this.trySubscribe(compair.getTankType(), worldObj, xCoord - dir.offsetX, yCoord, zCoord - dir.offsetZ, dir.getOpposite()); + this.trySubscribe(compair.getTankType(), worldObj, xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir); this.isActive = false; if(this.compair.getFill() > 0) { - int x = xCoord + dir.offsetX; + int x = xCoord - dir.offsetX; int y = yCoord; - int z = zCoord + dir.offsetZ; + int z = zCoord - dir.offsetZ; if(worldObj.getBlock(x, y, z) == ModBlocks.pile_block && worldObj.getBlockMetadata(x, y, z) == BlockPile.META_AIR_IN) { - TileEntity tile = Compat.getTileStandard(worldObj, xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ); + TileEntity tile = Compat.getTileStandard(worldObj, x, y, z); if(tile instanceof TileEntityPileBaseMK2) { TileEntityPileBaseMK2 pile = (TileEntityPileBaseMK2) tile; @@ -66,7 +67,9 @@ public class TileEntityPileVent extends TileEntityTickingBase implements IFluidS if(ventChan != null) { this.isActive = true; this.chanNum = core.getVentilationChannelNum(ventChan); - // compair stuff here + int toFill = BobMathUtil.min(compair.getFill(), 1_000 - ventChan.air); + ventChan.air += toFill; + this.compair.setFill(this.compair.getFill() - toFill); } } } diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_block_core_ct.png b/src/main/resources/assets/hbm/textures/blocks/pile_block_core_ct.png new file mode 100644 index 0000000000000000000000000000000000000000..f78e3eba37a491d77a42aeaf53041fc38dfdd7c0 GIT binary patch literal 1172 zcmV;F1Z(?=P)yjF3p$&z_RG2=Qu(T1|Eem0631U`RH_roc%n{bMibV48yvA(LB$q zzvp>QmSq&-CZ;I)6f5@k+EA8!_;SYnUK`hS0dO6M_q_pkZZ)ASdH*HlR{I9FZ6Rly z9UUFjKZ@g+PN!417cGh+Uc7h#Kp2L!nho|J{a(*Iw=2$>qWg@Z=s!8tJNY&60$5qDaBwIq9+9p4wmDKB*k?%k=<^WFbwMj?RJ|y&+F@+ zzjn{_=yWT5^6?mZJ_as&Fgy8de9@Fr z@b~sMuIplqAq+!K zPEN2ai;ay9+J4DSv%%PDF2%RxkW5diJTU*}^E~I-vu9U&{N%}#x*x|eS(YJM4TKO& z^Fjzb*R5gzxbnSUv>*t8>gs1Pu<85wzP~i@`#w@SU-Lj5$CpkT1ObD=;L=93XRDNA zl(+a8rRe5z{Kx1RA?4RR(CKt2%aWa)o$q=A%;f=>{oNLuOY-;c{J_WKUKImMDWWJM zNfMGIsTV1w2*a>$=Pl23(lkYP1cfn6^Mx@8+oqPL=g*%ncm|NBX+54j)!BF!xY8=B zMAZM2uqbM^(|Ur=MlccFZ#JMDfMp@x>&+SKDz4w+fzN?n(BEAEDLDkO38R4r+U6M^>7=2 z=ya3qn?Ar?J+QG*4+yKI+1RXj*IlRwOi^N+q9i&UBJ3)$2-`*o8`p8z@H}iG>V7pZ zIPK>ZY+IP3#1!QM|LLTU>o~Zsi#6q=vr)|pA!|mqnoU~GCgH)a^~t_h56tU%tJwrt z;J;T7L{UVb-k`Nc{_`Qi^SqVyd_CSp{&fF#U9Z7%dTxy2$DNyN@%EsvR@U=8&sdk2 zdaN-;u`v1a@DOjVy-v@y24UN4@%F#**~)r;+*7Q}i^sp*dm8xO%6h)jY_KXH_#RRS z!O7W>-Ra4e)${pUU|HUABz6!4+}Z1_tmi=xtXvN`j*EQvIl;E9mGyjGUOqVJqP1R0 z&-HkWf8)klyv(Pi)k=CU1ncth{CtQp#kG3gX>8GHaHXCD2w{Jd|5iN!VEys<=Tg|> mT0IxGz!c_MJ)daJI{be$LevC@vt$_n0000