From 4500e7457f94425cdce091c1d11e36996002d30c Mon Sep 17 00:00:00 2001 From: IM23a-spirgif Date: Thu, 15 May 2025 17:36:14 +0200 Subject: [PATCH] Refactor and extend Stalinium Press functionality --- .../entity/StaliniumPressBlockEntity.java | 49 +++++++++++------- .../screen/custom/StaliniumPressMenu.java | 27 ++++++---- .../textures/gui/stalinium_press_gui.png | Bin 2603 -> 1202 bytes 3 files changed, 46 insertions(+), 30 deletions(-) diff --git a/src/main/java/net/krituximon/stalinium/block/entity/StaliniumPressBlockEntity.java b/src/main/java/net/krituximon/stalinium/block/entity/StaliniumPressBlockEntity.java index e99ec92..0f793d5 100644 --- a/src/main/java/net/krituximon/stalinium/block/entity/StaliniumPressBlockEntity.java +++ b/src/main/java/net/krituximon/stalinium/block/entity/StaliniumPressBlockEntity.java @@ -17,6 +17,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.ContainerData; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -26,7 +27,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.plaf.basic.BasicComboBoxUI; public class StaliniumPressBlockEntity extends BlockEntity implements MenuProvider { - public final ItemStackHandler itemHandler = new ItemStackHandler(2) { + public final ItemStackHandler itemHandler = new ItemStackHandler(4) { @Override protected void onContentsChanged(int slot) { setChanged(); @@ -36,8 +37,10 @@ public class StaliniumPressBlockEntity extends BlockEntity implements MenuProvid } }; - private static final int INPUT_SLOT = 0; - private static final int OUTPUT_SLOT = 1; + public static final int INPUT_SLOT = 0; + public static final int REDSTONE_FUEL_SLOT = 1; + public static final int LAVA_FUEL_SLOT = 2; + public static final int OUTPUT_SLOT = 3; protected final ContainerData data; private int progress = 0; @@ -110,11 +113,10 @@ public class StaliniumPressBlockEntity extends BlockEntity implements MenuProvid maxProgress = pTag.getInt("growth_chamber.max_progress"); } - public void tick(Level level, BlockPos blockPos, BlockState blockState) { + public void tick(Level level, BlockPos pos, BlockState state) { if (hasRecipe()) { increaseCraftingProgress(); - setChanged(level, blockPos, blockState); - + setChanged(level, pos, state); if (hasCraftingFinished()) { craftItem(); resetProgress(); @@ -125,11 +127,18 @@ public class StaliniumPressBlockEntity extends BlockEntity implements MenuProvid } private void craftItem() { - if (itemHandler.getStackInSlot(INPUT_SLOT).getCount() < 9) return; - ItemStack output = new ItemStack(ModItems.STALINIUM_INGOT.get(), 1); - itemHandler.extractItem(INPUT_SLOT, 9, false); - itemHandler.setStackInSlot(OUTPUT_SLOT, new ItemStack(output.getItem(), - itemHandler.getStackInSlot(OUTPUT_SLOT).getCount() + output.getCount())); + itemHandler.extractItem(INPUT_SLOT, 9, false); + itemHandler.extractItem(REDSTONE_FUEL_SLOT, 1, false); + itemHandler.extractItem(LAVA_FUEL_SLOT, 1, false); + itemHandler.setStackInSlot(LAVA_FUEL_SLOT, new ItemStack(Items.BUCKET, 1)); + ItemStack out = new ItemStack(ModItems.STALINIUM_INGOT.get(), 1); + itemHandler.setStackInSlot( + OUTPUT_SLOT, + new ItemStack( + out.getItem(), + itemHandler.getStackInSlot(OUTPUT_SLOT).getCount() + 1 + ) + ); } private void resetProgress() { @@ -146,15 +155,15 @@ public class StaliniumPressBlockEntity extends BlockEntity implements MenuProvid } private boolean hasRecipe() { - if (itemHandler.getStackInSlot(INPUT_SLOT).getCount() < 9) { - return false; - } - if (itemHandler.getStackInSlot(INPUT_SLOT).getItem() != ModItems.STALINIUM_NUGGET.get()) { - return false; - } - ItemStack result = new ItemStack(ModItems.STALINIUM_INGOT.get(), 1); - return canInsertItemIntoOutputSlot(result) && - canInsertAmountIntoOutputSlot(result.getCount()); + ItemStack in = itemHandler.getStackInSlot(INPUT_SLOT); + ItemStack red = itemHandler.getStackInSlot(REDSTONE_FUEL_SLOT); + ItemStack lava = itemHandler.getStackInSlot(LAVA_FUEL_SLOT); + + if (in.getItem() != ModItems.STALINIUM_NUGGET.get() || in.getCount() < 9) return false; + if (red.getItem() != Items.REDSTONE_BLOCK || red.getCount() < 1) return false; + if (lava.getItem()!= Items.LAVA_BUCKET || lava.getCount()< 1) return false; + ItemStack out = new ItemStack(ModItems.STALINIUM_INGOT.get(), 1); + return canInsertItemIntoOutputSlot(out) && canInsertAmountIntoOutputSlot(out.getCount()); } private boolean canInsertItemIntoOutputSlot(ItemStack output) { diff --git a/src/main/java/net/krituximon/stalinium/screen/custom/StaliniumPressMenu.java b/src/main/java/net/krituximon/stalinium/screen/custom/StaliniumPressMenu.java index 9048aea..2836b6d 100644 --- a/src/main/java/net/krituximon/stalinium/screen/custom/StaliniumPressMenu.java +++ b/src/main/java/net/krituximon/stalinium/screen/custom/StaliniumPressMenu.java @@ -13,27 +13,34 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.neoforged.neoforge.items.SlotItemHandler; +import static net.krituximon.stalinium.block.entity.StaliniumPressBlockEntity.*; + public class StaliniumPressMenu extends AbstractContainerMenu { public final StaliniumPressBlockEntity blockEntity; private final Level level; private final ContainerData data; public StaliniumPressMenu(int pContainerId, Inventory inv, FriendlyByteBuf extraData) { - this(pContainerId, inv, inv.player.level().getBlockEntity(extraData.readBlockPos()), new SimpleContainerData(2)); + this(pContainerId, inv, (StaliniumPressBlockEntity) inv.player.level().getBlockEntity(extraData.readBlockPos()), new SimpleContainerData(2)); } - public StaliniumPressMenu(int pContainerId, Inventory inv, BlockEntity entity, ContainerData data) { - super(ModMenuTypes.STALINIUM_PRESS_MENU.get(), pContainerId); - this.blockEntity = ((StaliniumPressBlockEntity) entity); - this.level = inv.player.level(); - this.data = data; + public StaliniumPressMenu(int id, Inventory inv, StaliniumPressBlockEntity be, ContainerData data) { + super(ModMenuTypes.STALINIUM_PRESS_MENU.get(), id); + this.blockEntity = be; + this.data = data; + this.level = inv.player.level(); + + // INPUT + this.addSlot(new SlotItemHandler(be.itemHandler, INPUT_SLOT, 54, 34)); + // REDSTONE FUEL + this.addSlot(new SlotItemHandler(be.itemHandler, REDSTONE_FUEL_SLOT,54, 14)); + // LAVA FUEL + this.addSlot(new SlotItemHandler(be.itemHandler, LAVA_FUEL_SLOT, 54, 54)); + // OUTPUT + this.addSlot(new SlotItemHandler(be.itemHandler, OUTPUT_SLOT, 104, 34)); addPlayerInventory(inv); addPlayerHotbar(inv); - - this.addSlot(new SlotItemHandler(blockEntity.itemHandler, 0, 54, 34)); - this.addSlot(new SlotItemHandler(blockEntity.itemHandler, 1, 104, 34)); - addDataSlots(data); } diff --git a/src/main/resources/assets/stalinium/textures/gui/stalinium_press_gui.png b/src/main/resources/assets/stalinium/textures/gui/stalinium_press_gui.png index 004b99b32b6df21303977ee0da874ff66350bb5c..e7e6c4ecf56feb44cae517e566eaa01c5506094f 100644 GIT binary patch literal 1202 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBzG#3?h%1o(|NsB7W5+^6L(R?2ySuxABB`6FO9LtPk|4iepeztDNO?26 z0fjgVJR*x37`TN&n2}-D90{PHM2TxeNpOBzNqJ&XDnmeGW?qS&pKFMMsh**pdH1#N zmOwSzQX@RmJUz7-IDi~h1}R2XuyehDJZUH!=mQ1~MrN=$6Oe7l$iyH3q@#d1vz-Mj zo&{usfTtuQ!waBCVKkbh3_z&~>9bpgbrDL^&|FagbF0;>$N zv;eZ8x(p2rK(db=*qsYR)XNwcm~}l}978JN-rjuZcRN79CDFO#{{M-q17EH@l{mSnaC58a9{V z->-Qd%NN&NT@c1_pXp`El=V_qxF4uZ@N@sU%JD3NlfvA-Pod4b7;89}Tn^lq6=2=4 z+QCZp>1wvCY!}{cK70A%JO4b60zse=cjw;`Ncdc`<@e-l=0CSf@7sY?ZDroE&j)OL z9z(qT<(C@qrYj^J_CSQ<7`9J`*vR$ZcPiM_sf-V1K3E6ze}7qhkt9Q{$_e9xyWdaz zf3)MvlNHMt&T|9(3JshO2gLcIerNc>^yL4;*PWJA8Gozs;EZB;F~8dW zoYkK%M$!s@*|*;UB_l9+!7Bp_atKiPzjymBBS{DO139*nFFxFQI;Y`_Zg?)(Fp!Eb zY<+A{rNCq~|3FBz8uJV08EeyxtoD@6ywk5f+)6cb__Z|{rxl07fL43~W{o|Je#Q*fo_^YwJBwk1-Y>=0>R*53 z8Lln$|MgTp|4{TdE(X~^uWhg1&9+ceEau4`_CT@Kn{C49lP}q37`njxg HN@xNA#a)W! literal 2603 zcmdT`eM}Q)7{68^h!Z751wZh1COV_--L(|yY59%SoVi5nZYq48chU8ge5b$jbxzs!N-7X4%tKj!NK10(dgnPy8W}}Y3{xE z{k^~Ed4A9PKDqa|7&pxgSR4RB(A=a%{Wb`afuRiY_XCfe!siz7n9V1qix4y?*z=b` zAG<>!$mc$jk|w1Yk_n2lD@ik#Nh@7;9-tv;L$r%0scc$;GifWs>X80RwFu0Zbx5kl zfEoBWI*Uon6X@-E#uO?qo6?$*=qPxDivR?6S|VYW-NuT9ONUJG5@76^MiF=dB4z84 zSdT+E&9DWI;{+PkDscscVJdi?R!QQN8CO}>!YWJ^j^a2l1+FEqNFqD}p86rconW>Q z+w=)j&cK@v$&w_VKvAdDsdTE9oM1(9tyYU-DpaLX0E9x!WhK(3V8s>F40>9m1csLw zj)gspWG3g3bO;D_G6y^FrDeq_oq%Gfi{w#UiFtCG0GcT;j&}&Q3Fl@CrERpGW+f3| zaW9t7;v`PY;{Jx(yZnp;psm5+_3_+T>~^mUQHsw2X-o<7T(p>y%hTvKTI3u8MaSoW zFjsi8;fXkbCM8Zt;W*oLrM66m467oPYWR&*hBb3earILhXgw*>Is{ZrqrlV(3{O#E z1cnis$Tb)a29r<&XJ#z9&xM8)s&&sm!I?3W68S=~nIbHlU?)MsjGeU7D9>6E*efFu z$JsamI0n(FC!#PIh$L2&NS30L^g0COtYjE7L18#eYG{oD$0H&YnU-)$p`}PtL2Dza zNDED>HJK69`}G{<@KknszxgHiZx$GEwMg45^LQ?t=SUEVj0lRAJ9Q(r)4QieHU^$J z1q4ZXPPY!BJY}WL$ka6R$_h-q^qcrnuaFw@qwtQb^4A?;L%r z!~QS<$z7iQUiIN3S~E{w7F+gu%#+kXU9azv&(10iU6jsk%?%yD>38d3ci+0Up0j;; z*w~n3AVFAjoW9X8FQ|Rs@@t1GmJE!H5C_-)_)%KJC1~&HU|-%@zk>Sa=H?Kpq`m{I zv5TwtA~bsJN@wwLw0110{q5OM(Z4s{laWmqjy5(nR_~%rEmduOO$E!?ccEm9sinH< zZvW6_*$4Ytq@HS5&cYgg-^1*o18lOUU%R`zZ=$k-Hz8$=&xvEu z&iDMW6|xI(P)3BDCy}~jpY{NKVfwAU#=_G%zr>F|c+fc>$~*2umEW9%T2?}-KLr+M zSNjedDokghM^o=~TK&LUU8i*+*uF4Y9aK2ytKqW4fcNV45}$VY+5(HCv_gL79x*uj z$GKe%A@!YB))`uOo9)Hs4bQEC=C6e2=alX!+@Wc%p0n5|11UH0%;Yp!`LArS!#OJ| zDk?00zr)lxFi@@S*_+qIo?o9AINo2nEAV3Fy{(H{`-i$7KfbY4jM6nOI#vFm;$xI3xN*oD>H`EhqceF&9)oZge4|EOoo$v4hashMl~|3tPr6EdDOrqm_<;Q5?OiZ|*jH)b686Sz`n A!2kdN