From 034a8fe942c1234f528a9c8c743594596a68e6d1 Mon Sep 17 00:00:00 2001 From: IM23a-spirgif Date: Tue, 10 Jun 2025 18:39:46 +0200 Subject: [PATCH] Added shared party inventory management to Stalinium Cache block. Implemented new model, block state, and crafting recipe. Improved null handling in party inventory logic. --- .../krituximon/stalinium/block/ModBlocks.java | 4 ++-- .../block/custom/StaliniumCacheBlock.java | 1 - .../entity/StaliniumCacheBlockEntity.java | 19 ++++++++----------- .../datagen/ModBlockStateProvider.java | 8 ++++++++ .../stalinium/datagen/ModRecipeProvider.java | 9 +++++++++ 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/krituximon/stalinium/block/ModBlocks.java b/src/main/java/net/krituximon/stalinium/block/ModBlocks.java index fa49bdd..ad3db6d 100644 --- a/src/main/java/net/krituximon/stalinium/block/ModBlocks.java +++ b/src/main/java/net/krituximon/stalinium/block/ModBlocks.java @@ -47,9 +47,9 @@ public class ModBlocks { public static final DeferredBlock STALINIUM_PRESS = registerBlock("stalinium_press", () -> new StaliniumPressBlock(BlockBehaviour.Properties.of())); - public static final DeferredBlock STALINIUM_CACHE = registerBlock( + public static final DeferredBlock STALINIUM_CACHE = registerBlock( "stalinium_cache", - () -> new StaliniumCacheBlock(Block.Properties.of())); + () -> new StaliniumCacheBlock(BlockBehaviour.Properties.of())); private static DeferredBlock registerBlock(String name, Supplier block) { DeferredBlock toReturn = BLOCKS.register(name, block); diff --git a/src/main/java/net/krituximon/stalinium/block/custom/StaliniumCacheBlock.java b/src/main/java/net/krituximon/stalinium/block/custom/StaliniumCacheBlock.java index fc1b2aa..1d89848 100644 --- a/src/main/java/net/krituximon/stalinium/block/custom/StaliniumCacheBlock.java +++ b/src/main/java/net/krituximon/stalinium/block/custom/StaliniumCacheBlock.java @@ -22,7 +22,6 @@ import net.minecraft.world.phys.BlockHitResult; import org.jetbrains.annotations.Nullable; public class StaliniumCacheBlock extends BaseEntityBlock { - // 1) supply a real codec so the block actually constructs from your registry public static final MapCodec CODEC = simpleCodec(StaliniumCacheBlock::new); diff --git a/src/main/java/net/krituximon/stalinium/block/entity/StaliniumCacheBlockEntity.java b/src/main/java/net/krituximon/stalinium/block/entity/StaliniumCacheBlockEntity.java index b11530f..a5f07c9 100644 --- a/src/main/java/net/krituximon/stalinium/block/entity/StaliniumCacheBlockEntity.java +++ b/src/main/java/net/krituximon/stalinium/block/entity/StaliniumCacheBlockEntity.java @@ -29,27 +29,24 @@ import java.util.concurrent.ConcurrentHashMap; public class StaliniumCacheBlockEntity extends BlockEntity { private static final int SIZE = 27; - - // each party → shared 27‐slot inventory private static final Map PARTY_INVENTORIES = new ConcurrentHashMap<>(); public StaliniumCacheBlockEntity(BlockPos pos, BlockState state) { super(ModBlockEntities.STALINIUM_CACHE_BE.get(), pos, state); } - - /** - * Grab (or create) the shared SimpleContainer for this player's party - */ - public static SimpleContainer getPartyInventory(Player who) { + + public static SimpleContainer getPartyInventory(@Nullable Player who) { + if (who == null) { + UUID defaultKey = UUID.randomUUID(); + return PARTY_INVENTORIES.computeIfAbsent(defaultKey, __ -> new SimpleContainer(SIZE)); + } Optional opt = ComradeHandler.findPartyOf(who.getUUID()); UUID key = opt.map(p -> p.leader).orElse(who.getUUID()); return PARTY_INVENTORIES.computeIfAbsent(key, __ -> new SimpleContainer(SIZE)); } - /** Drop everything, using that same shared container */ public void drops() { - SimpleContainer inv = getPartyInventory((ServerPlayer) null); - // actually, we don't know "who" here—just drop all slots + SimpleContainer inv = getPartyInventory(null); SimpleContainer tmp = new SimpleContainer(SIZE); for (int i = 0; i < SIZE; i++) { tmp.setItem(i, inv.getItem(i)); @@ -67,4 +64,4 @@ public class StaliniumCacheBlockEntity extends BlockEntity { public Packet getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); } -} +} \ No newline at end of file diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModBlockStateProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModBlockStateProvider.java index 4a8d722..92f1d12 100644 --- a/src/main/java/net/krituximon/stalinium/datagen/ModBlockStateProvider.java +++ b/src/main/java/net/krituximon/stalinium/datagen/ModBlockStateProvider.java @@ -28,6 +28,14 @@ public class ModBlockStateProvider extends BlockStateProvider { .build()); simpleBlockItem(ModBlocks.STALINIUM_PRESS.get(), pressModel); + ModelFile cacheModel = models() + .getBuilder("stalinium_cache") + .parent(new ModelFile.UncheckedModelFile(modLoc("block/stalinium_cache"))); + getVariantBuilder(ModBlocks.STALINIUM_CACHE.get()) + .forAllStates(state -> ConfiguredModel.builder() + .modelFile(cacheModel) + .build()); + simpleBlockItem(ModBlocks.STALINIUM_CACHE.get(), cacheModel); } diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModRecipeProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModRecipeProvider.java index e030598..e5a1dfc 100644 --- a/src/main/java/net/krituximon/stalinium/datagen/ModRecipeProvider.java +++ b/src/main/java/net/krituximon/stalinium/datagen/ModRecipeProvider.java @@ -53,6 +53,15 @@ public class ModRecipeProvider extends RecipeProvider implements IConditionBuild .define('S', Items.NETHER_STAR) .unlockedBy("has_nugget", has(ModItems.STALINIUM_NUGGET)).save(recipeOutput); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.STALINIUM_CACHE.get()) + .pattern("ISI") + .pattern("SES") + .pattern("SIS") + .define('I', Items.IRON_BLOCK) + .define('E', Items.ENDER_CHEST) + .define('S', ModItems.STALINIUM_INGOT.get()) + .unlockedBy("has_nugget", has(ModItems.STALINIUM_NUGGET)).save(recipeOutput); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.STALINIUM_SMITHING_TEMPLATE.get(), 4) .pattern("NNN") .pattern("NIN")