diff --git a/src/generated/resources/data/tutorial/loot_tables/blocks/demo.json b/src/generated/resources/data/tutorial/loot_tables/blocks/demo.json index 268d138..0d98fb4 100644 --- a/src/generated/resources/data/tutorial/loot_tables/blocks/demo.json +++ b/src/generated/resources/data/tutorial/loot_tables/blocks/demo.json @@ -28,15 +28,6 @@ "op": "replace" } ] - }, - { - "function": "minecraft:set_contents", - "entries": [ - { - "type": "minecraft:dynamic", - "name": "minecraft:contents" - } - ] } ], "name": "tutorial:demo" diff --git a/src/generated/resources/data/tutorial/loot_tables/blocks/generator.json b/src/generated/resources/data/tutorial/loot_tables/blocks/generator.json index 07532c2..4f1b30a 100644 --- a/src/generated/resources/data/tutorial/loot_tables/blocks/generator.json +++ b/src/generated/resources/data/tutorial/loot_tables/blocks/generator.json @@ -28,15 +28,6 @@ "op": "replace" } ] - }, - { - "function": "minecraft:set_contents", - "entries": [ - { - "type": "minecraft:dynamic", - "name": "minecraft:contents" - } - ] } ], "name": "tutorial:generator" diff --git a/src/main/java/com/mcjty/blocks/DemoBlock.java b/src/main/java/com/mcjty/blocks/DemoBlock.java index 3f5e6d6..9cfafd3 100644 --- a/src/main/java/com/mcjty/blocks/DemoBlock.java +++ b/src/main/java/com/mcjty/blocks/DemoBlock.java @@ -1,8 +1,10 @@ package com.mcjty.blocks; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.BlockGetter; @@ -34,6 +36,20 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new DemoBE(pos, state); } + @Override + public void setPlacedBy(Level pLevel, BlockPos pPos, BlockState pState, @Nullable LivingEntity pPlacer, ItemStack pStack) { + super.setPlacedBy(pLevel, pPos, pState, pPlacer, pStack); + if (pStack.hasTag()) { + CompoundTag blockEntityTag = pStack.getTag().getCompound("BlockEntityTag"); + + if (!pLevel.isClientSide && !blockEntityTag.isEmpty()) { + BlockEntity blockEntity = pLevel.getBlockEntity(pPos); + if (blockEntity instanceof DemoBE demoBE) { + demoBE.load(blockEntityTag); + } + } + } + } @Override public void appendHoverText(ItemStack stack, @Nullable BlockGetter reader, List list, TooltipFlag flags) { list.add(new TranslatableComponent("message.demo.tooltip")); diff --git a/src/main/java/com/mcjty/blocks/GeneratorBE.java b/src/main/java/com/mcjty/blocks/GeneratorBE.java index 6bf6528..ec6e399 100644 --- a/src/main/java/com/mcjty/blocks/GeneratorBE.java +++ b/src/main/java/com/mcjty/blocks/GeneratorBE.java @@ -100,6 +100,12 @@ private void sendOutPower() { } } + @Override + public void handleUpdateTag(CompoundTag tag) { + //No Op + // We do not want to call load with a tag that doesn't have the information to be loaded + } + @Override public void load(CompoundTag tag) { itemHandler.deserializeNBT(tag.getCompound("inv")); diff --git a/src/main/java/com/mcjty/blocks/GeneratorBlock.java b/src/main/java/com/mcjty/blocks/GeneratorBlock.java index 6ce80c1..9e285d4 100644 --- a/src/main/java/com/mcjty/blocks/GeneratorBlock.java +++ b/src/main/java/com/mcjty/blocks/GeneratorBlock.java @@ -1,12 +1,16 @@ package com.mcjty.blocks; +import net.minecraft.Util; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -60,6 +64,20 @@ public BlockEntityTicker getTicker(Level level, Block } } + @Override + public void setPlacedBy(Level pLevel, BlockPos pPos, BlockState pState, @Nullable LivingEntity pPlacer, ItemStack pStack) { + super.setPlacedBy(pLevel, pPos, pState, pPlacer, pStack); + if (pStack.hasTag()) { + CompoundTag blockEntityTag = pStack.getTag().getCompound("BlockEntityTag"); + + if (!pLevel.isClientSide && !blockEntityTag.isEmpty()) { + BlockEntity blockEntity = pLevel.getBlockEntity(pPos); + if (blockEntity instanceof GeneratorBE generatorBE) { + generatorBE.load(blockEntityTag); + } + } + } + } @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(BlockStateProperties.FACING, BlockStateProperties.POWERED); @@ -68,7 +86,9 @@ protected void createBlockStateDefinition(StateDefinition.Builder