From 21578edd49ed124979d539733bb00d6677967a98 Mon Sep 17 00:00:00 2001 From: IM23a-spirgif Date: Mon, 9 Jun 2025 16:02:55 +0200 Subject: [PATCH] - Removed Redstone and Lava Bucket requirement in stalinium press. - Fixed Stalinium Press Logic - Made Stalinium Press work faster when more players are nearby. - Fixed JEI recipe. --- .../block/custom/StaliniumPressBlock.java | 2 +- .../entity/StaliniumPressBlockEntity.java | 140 ++++++------------ .../stalinium/compat/JEIStaliniumPlugin.java | 7 +- .../compat/StaliniumPressRecipeCategory.java | 69 ++++----- .../screen/custom/StaliniumPressMenu.java | 22 +-- .../textures/gui/stalinium_press_gui.png | Bin 1202 -> 2603 bytes 6 files changed, 83 insertions(+), 157 deletions(-) diff --git a/src/main/java/net/krituximon/stalinium/block/custom/StaliniumPressBlock.java b/src/main/java/net/krituximon/stalinium/block/custom/StaliniumPressBlock.java index 831acc9..ccaf466 100644 --- a/src/main/java/net/krituximon/stalinium/block/custom/StaliniumPressBlock.java +++ b/src/main/java/net/krituximon/stalinium/block/custom/StaliniumPressBlock.java @@ -76,6 +76,6 @@ public class StaliniumPressBlock extends BaseEntityBlock { } return createTickerHelper(blockEntityType, net.krituximon.stalinium.block.entity.ModBlockEntities.STALINIUM_PRESS_BE.get(), - (level1, blockPos, blockState, blockEntity) -> blockEntity.tick(level1, blockPos, blockState)); + (level1, blockPos, blockState, blockEntity) -> blockEntity.tick(level1, blockPos, blockState, blockEntity)); } } 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 a6088f6..29d13bb 100644 --- a/src/main/java/net/krituximon/stalinium/block/entity/StaliniumPressBlockEntity.java +++ b/src/main/java/net/krituximon/stalinium/block/entity/StaliniumPressBlockEntity.java @@ -2,9 +2,6 @@ package net.krituximon.stalinium.block.entity; import net.krituximon.stalinium.event.ComradeHandler; import net.krituximon.stalinium.item.ModItems; -import net.krituximon.stalinium.recipe.StaliniumPressRecipe; -import net.krituximon.stalinium.recipe.StaliniumPressRecipeInput; -import net.krituximon.stalinium.recipe.ModRecipes; import net.krituximon.stalinium.screen.custom.StaliniumPressMenu; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; @@ -20,8 +17,6 @@ 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.item.crafting.RecipeHolder; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -32,97 +27,78 @@ import org.jetbrains.annotations.Nullable; import java.util.Optional; public class StaliniumPressBlockEntity extends BlockEntity implements MenuProvider { - 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; + public static final int INPUT_SLOT = 0; + public static final int OUTPUT_SLOT = 1; private int progress = 0; - private int maxProgress = 600; // base + private int maxProgress = 600; - public final ItemStackHandler itemHandler = new ItemStackHandler(4) { + public final ItemStackHandler itemHandler = new ItemStackHandler(2) { @Override protected void onContentsChanged(int slot) { setChanged(); - if (!level.isClientSide()) { + if (!level.isClientSide) { level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 3); } } }; protected final ContainerData data = new ContainerData() { - @Override - public int get(int index) { - return index == 0 ? progress : (index == 1 ? maxProgress : 0); - } - @Override - public void set(int index, int value) { - if (index == 0) progress = value; - if (index == 1) maxProgress = value; - } - @Override - public int getCount() { - return 2; - } + @Override public int get(int index) { return index == 0 ? progress : (index == 1 ? maxProgress : 0); } + @Override public void set(int index,int v){ if(index==0) progress=v; if(index==1) maxProgress=v; } + @Override public int getCount() { return 2; } }; public StaliniumPressBlockEntity(BlockPos pos, BlockState state) { super(ModBlockEntities.STALINIUM_PRESS_BE.get(), pos, state); } - @Override - public Component getDisplayName() { + @Override public Component getDisplayName() { return Component.translatable("block.stalinium.stalinium_press"); } @Nullable @Override - public AbstractContainerMenu createMenu(int id, net.minecraft.world.entity.player.Inventory inv, Player player) { + public AbstractContainerMenu createMenu(int id, + net.minecraft.world.entity.player.Inventory inv, + Player p) { return new StaliniumPressMenu(id, inv, this, data); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - tag.put("inventory", itemHandler.serializeNBT(registries)); + protected void saveAdditional(CompoundTag tag, HolderLookup.Provider regs) { + tag.put("inventory", itemHandler.serializeNBT(regs)); tag.putInt("progress", progress); tag.putInt("maxProgress", maxProgress); - super.saveAdditional(tag, registries); + super.saveAdditional(tag, regs); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - itemHandler.deserializeNBT(registries, tag.getCompound("inventory")); + protected void loadAdditional(CompoundTag tag, HolderLookup.Provider regs) { + super.loadAdditional(tag, regs); + itemHandler.deserializeNBT(regs, tag.getCompound("inventory")); progress = tag.getInt("progress"); maxProgress = tag.getInt("maxProgress"); } - @Override public Packet getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); } - @Override - public CompoundTag getUpdateTag(HolderLookup.Provider registries) { - return saveWithoutMetadata(registries); + public CompoundTag getUpdateTag(HolderLookup.Provider regs) { + return saveWithoutMetadata(regs); } - public static void tick(Level level, BlockPos pos, BlockState state, StaliniumPressBlockEntity be) { if (be.hasRecipe()) { - // count nearby party‐members within 10 blocks - AABB box = new AABB(pos).inflate(10); - int nearbyComrades = 0; - for (Player p : level.getEntitiesOfClass(Player.class, box, _ignored -> true)) { - if (ComradeHandler.findPartyOf(p.getUUID()).isPresent()) { - nearbyComrades++; - } - } - // base + bonus per comrade - int speed = 1 + nearbyComrades; - for (int i = 0; i < speed; i++) { - be.progress++; + int bonus = 0; + AABB search = new AABB(pos).inflate(10); + for (Player p : level.getEntitiesOfClass(Player.class, search, _ignore->true)) { + if (ComradeHandler.findPartyOf(p.getUUID()).isPresent()) bonus++; } + + be.progress += 1 + bonus; be.setChanged(level, pos, state); + if (be.progress >= be.maxProgress) { be.craftItem(); be.resetProgress(); @@ -131,59 +107,35 @@ public class StaliniumPressBlockEntity extends BlockEntity implements MenuProvid be.resetProgress(); } } - + private boolean hasRecipe() { - // require ≥9 nuggets ItemStack in = itemHandler.getStackInSlot(INPUT_SLOT); - if (in.getItem() != ModItems.STALINIUM_NUGGET.get() || in.getCount() < 9) { - return false; - } - Optional> o = getCurrentRecipe(); - if (o.isEmpty()) return false; - ItemStack out = o.get().value().output(); - return canInsertItemIntoOutputSlot(out) && - canInsertAmountIntoOutputSlot(out.getCount()); + return in.getItem() == ModItems.STALINIUM_NUGGET.get() && in.getCount() >= 9 + && canInsertItemIntoOutputSlot(ModItems.STALINIUM_INGOT.get().getDefaultInstance()); } - - private Optional> getCurrentRecipe() { - return level.getRecipeManager() - .getRecipeFor(ModRecipes.STALINIUM_PRESS_TYPE.get(), - new StaliniumPressRecipeInput( - itemHandler.getStackInSlot(REDSTONE_FUEL_SLOT), - itemHandler.getStackInSlot(INPUT_SLOT), - itemHandler.getStackInSlot(LAVA_FUEL_SLOT) - ), - level); - } - + private void craftItem() { - Optional> o = getCurrentRecipe(); - if (o.isEmpty()) return; 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)); - ItemStack out = o.get().value().output(); - ItemStack current = itemHandler.getStackInSlot(OUTPUT_SLOT); - itemHandler.setStackInSlot( - OUTPUT_SLOT, - new ItemStack(out.getItem(), current.getCount() + 1) - ); + ItemStack out = itemHandler.getStackInSlot(OUTPUT_SLOT); + if (out.isEmpty()) { + itemHandler.setStackInSlot(OUTPUT_SLOT, new ItemStack(ModItems.STALINIUM_INGOT.get())); + } else { + out.grow(1); + } } - private void resetProgress() { this.progress = 0; this.maxProgress = 600; } - - private boolean canInsertItemIntoOutputSlot(ItemStack out) { - ItemStack current = itemHandler.getStackInSlot(OUTPUT_SLOT); - return current.isEmpty() || current.getItem() == out.getItem(); + private boolean canInsertItemIntoOutputSlot(ItemStack output) { + ItemStack cur = itemHandler.getStackInSlot(OUTPUT_SLOT); + return cur.isEmpty() || cur.getItem() == output.getItem(); } - - private boolean canInsertAmountIntoOutputSlot(int count) { - ItemStack current = itemHandler.getStackInSlot(OUTPUT_SLOT); - int max = current.isEmpty() ? 64 : current.getMaxStackSize(); - return max >= current.getCount() + count; + public void drops() { + SimpleContainer inv = new SimpleContainer(itemHandler.getSlots()); + for (int i = 0; i < itemHandler.getSlots(); i++) { + inv.setItem(i, itemHandler.getStackInSlot(i)); + } + Containers.dropContents(level, worldPosition, inv); } } \ No newline at end of file diff --git a/src/main/java/net/krituximon/stalinium/compat/JEIStaliniumPlugin.java b/src/main/java/net/krituximon/stalinium/compat/JEIStaliniumPlugin.java index 5167e48..f24523a 100644 --- a/src/main/java/net/krituximon/stalinium/compat/JEIStaliniumPlugin.java +++ b/src/main/java/net/krituximon/stalinium/compat/JEIStaliniumPlugin.java @@ -35,21 +35,20 @@ public class JEIStaliniumPlugin implements IModPlugin { @Override public void registerRecipes(IRecipeRegistration registration) { RecipeManager recipeManager = Minecraft.getInstance().level.getRecipeManager(); - List staliniumPressRecipes = recipeManager .getAllRecipesFor(ModRecipes.STALINIUM_PRESS_TYPE.get()).stream().map(RecipeHolder::value).toList(); - registration.addRecipes(StaliniumPressRecipeCategory.STALINIUM_PRESS_RECIPE_RECIPE_TYPE, staliniumPressRecipes); + registration.addRecipes(StaliniumPressRecipeCategory.TYPE, staliniumPressRecipes); } @Override public void registerGuiHandlers(IGuiHandlerRegistration registration) { registration.addRecipeClickArea(StaliniumPressScreen.class, 74, 30, 22, 20, - StaliniumPressRecipeCategory.STALINIUM_PRESS_RECIPE_RECIPE_TYPE); + StaliniumPressRecipeCategory.TYPE); } @Override public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { registration.addRecipeCatalyst(new ItemStack(ModBlocks.STALINIUM_PRESS.get().asItem()), - StaliniumPressRecipeCategory.STALINIUM_PRESS_RECIPE_RECIPE_TYPE); + StaliniumPressRecipeCategory.TYPE); } } diff --git a/src/main/java/net/krituximon/stalinium/compat/StaliniumPressRecipeCategory.java b/src/main/java/net/krituximon/stalinium/compat/StaliniumPressRecipeCategory.java index 9fb0675..5cee3dd 100644 --- a/src/main/java/net/krituximon/stalinium/compat/StaliniumPressRecipeCategory.java +++ b/src/main/java/net/krituximon/stalinium/compat/StaliniumPressRecipeCategory.java @@ -2,8 +2,8 @@ package net.krituximon.stalinium.compat; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.builder.IRecipeSlotBuilder; import mezz.jei.api.gui.drawable.IDrawable; -import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import mezz.jei.api.helpers.IGuiHelper; import mezz.jei.api.recipe.IFocusGroup; import mezz.jei.api.recipe.RecipeIngredientRole; @@ -12,43 +12,40 @@ import mezz.jei.api.recipe.category.IRecipeCategory; import net.krituximon.stalinium.Stalinium; import net.krituximon.stalinium.block.ModBlocks; import net.krituximon.stalinium.recipe.StaliniumPressRecipe; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; import org.jetbrains.annotations.Nullable; public class StaliniumPressRecipeCategory implements IRecipeCategory { - public static final ResourceLocation UID = ResourceLocation.fromNamespaceAndPath(Stalinium.MODID, "stalinium_chamber"); + public static final ResourceLocation UID = ResourceLocation.fromNamespaceAndPath(Stalinium.MODID, "stalinium_press"); public static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(Stalinium.MODID, "textures/gui/stalinium_press_gui.png"); - public static final RecipeType STALINIUM_PRESS_RECIPE_RECIPE_TYPE = + public static final RecipeType TYPE = new RecipeType<>(UID, StaliniumPressRecipe.class); private final IDrawable background; private final IDrawable icon; - - /* --------------------------------------------------------------------- */ - /* GUI layout constants */ - /* --------------------------------------------------------------------- */ - private static final int[][] INPUT_SLOT_POSITIONS = { - {54, 34}, - {54, 14}, - {54, 54} - }; + private static final int INPUT_X = 54; + private static final int INPUT_Y = 34; private static final int OUTPUT_X = 104; private static final int OUTPUT_Y = 34; public StaliniumPressRecipeCategory(IGuiHelper helper) { this.background = helper.createDrawable(TEXTURE, 0, 0, 176, 85); - this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(ModBlocks.STALINIUM_PRESS)); + this.icon = helper.createDrawableIngredient( + VanillaTypes.ITEM_STACK, + new ItemStack(ModBlocks.STALINIUM_PRESS) + ); } @Override public RecipeType getRecipeType() { - return STALINIUM_PRESS_RECIPE_RECIPE_TYPE; + return TYPE; } @Override @@ -57,7 +54,8 @@ public class StaliniumPressRecipeCategory implements IRecipeCategory%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 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!