From 2ed5d18f33d3a5fd516afb93fba380b0d206e268 Mon Sep 17 00:00:00 2001 From: Jamie Holcroft Date: Thu, 23 Sep 2021 13:11:07 +0100 Subject: [PATCH 1/3] Remove containercontents from the default loot table as this is handled already through the inv nbt. --- .../resources/data/tutorial/loot_tables/blocks/demo.json | 9 --------- .../data/tutorial/loot_tables/blocks/generator.json | 9 --------- src/main/java/com/mcjty/datagen/LootTables.java | 2 -- 3 files changed, 20 deletions(-) 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/datagen/LootTables.java b/src/main/java/com/mcjty/datagen/LootTables.java index 361aeb1..777423d 100644 --- a/src/main/java/com/mcjty/datagen/LootTables.java +++ b/src/main/java/com/mcjty/datagen/LootTables.java @@ -53,8 +53,6 @@ protected LootTable.Builder createStandardTable(String name, Block block) { .apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY) .copy("inv", "BlockEntityTag.inv", CopyNbtFunction.MergeStrategy.REPLACE) .copy("energy", "BlockEntityTag.energy", CopyNbtFunction.MergeStrategy.REPLACE)) - .apply(SetContainerContents.setContents() - .withEntry(DynamicLoot.dynamicEntry(new ResourceLocation("minecraft", "contents")))) ); return LootTable.lootTable().withPool(builder); } From 6ccca414c765e2d6fead37489561ed2fcfe5551a Mon Sep 17 00:00:00 2001 From: Jamie Holcroft Date: Thu, 23 Sep 2021 13:12:42 +0100 Subject: [PATCH 2/3] Add a default powered state of false to prevent the block flashing as powered when it is placed. --- src/main/java/com/mcjty/blocks/GeneratorBlock.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mcjty/blocks/GeneratorBlock.java b/src/main/java/com/mcjty/blocks/GeneratorBlock.java index 6ce80c1..fdf021f 100644 --- a/src/main/java/com/mcjty/blocks/GeneratorBlock.java +++ b/src/main/java/com/mcjty/blocks/GeneratorBlock.java @@ -68,7 +68,9 @@ protected void createBlockStateDefinition(StateDefinition.Builder Date: Thu, 23 Sep 2021 13:23:51 +0100 Subject: [PATCH 3/3] Load NBT back into the BlockEntity when placed. --- src/main/java/com/mcjty/blocks/DemoBlock.java | 16 ++++++++++++++++ .../java/com/mcjty/blocks/GeneratorBE.java | 6 ++++++ .../java/com/mcjty/blocks/GeneratorBlock.java | 18 ++++++++++++++++++ 3 files changed, 40 insertions(+) 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 fdf021f..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);