From e8665ddde2e029436fef00da8c88a1b1d3ca22b5 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Mon, 9 Aug 2021 22:08:35 +0700 Subject: [PATCH] Tags and LootTable test, added drops --- .../mc/otm/OverdriveThatMatters.java | 11 ------ .../mc/otm/block/BlockAndroidStation.java | 19 +++++++++- .../entity/BlockEntityAndroidStation.java | 19 +++++++++- .../mc/otm/screen/AndroidStationScreen.java | 2 +- .../tags/blocks/mineable/pickaxe.json | 6 +++ .../loot_tables/blocks/android_station.json | 37 +++++++++++++++++++ 6 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json create mode 100644 src/main/resources/data/overdrive_that_matters/loot_tables/blocks/android_station.json diff --git a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java index 81afae2b7..95c66034f 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java +++ b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java @@ -69,7 +69,6 @@ public class OverdriveThatMatters { private void setup(final FMLCommonSetupEvent event) { // some preinit code - LOGGER.info("setup called"); } private void enqueueIMC(final InterModEnqueueEvent event) { @@ -88,7 +87,6 @@ public class OverdriveThatMatters { @SubscribeEvent public void onServerStarting(FMLServerStartingEvent event) { // do something when the server starts - LOGGER.info("server starting called"); } private final ResourceLocation android_cap_location = new ResourceLocation(OverdriveThatMatters.MOD_ID, "android_capability"); @@ -122,23 +120,16 @@ public class OverdriveThatMatters { public static class RegistryEvents { @SubscribeEvent public static void onBlocksRegistry(final RegistryEvent.Register blockRegistryEvent) { - // регистрация блоков - LOGGER.info("Register Block called"); blockRegistryEvent.getRegistry().register(ANDROID_STATION); } @SubscribeEvent public static void onItemRegistry(final RegistryEvent.Register blockRegistryEvent) { - // регистрация предметов - LOGGER.info("Register Item called"); blockRegistryEvent.getRegistry().register(ANDROID_STATION_ITEM); } @SubscribeEvent public static void onBlockEntityRegistry(final RegistryEvent.Register> blockRegistryEvent) { - // регистрация tile entity - LOGGER.info("Register BlockEntity called"); - // build(data_fixer) ANDROID_STATION_FACTORY = ANDROID_STATION_BUILDER.build(null); ANDROID_STATION_FACTORY.setRegistryName(BlockAndroidStation.REGISTRY_NAME); blockRegistryEvent.getRegistry().register(ANDROID_STATION_FACTORY); @@ -146,8 +137,6 @@ public class OverdriveThatMatters { @SubscribeEvent public static void onMenuTypeRegistry(final RegistryEvent.Register> blockRegistryEvent) { - // регистрация tile entity - LOGGER.info("Register MenuType called"); blockRegistryEvent.getRegistry().register(ANDROID_STATION_MENU_TYPE); MenuScreens.register(ANDROID_STATION_MENU_TYPE, AndroidStationScreen::new); } diff --git a/src/main/java/ru/dbotthepony/mc/otm/block/BlockAndroidStation.java b/src/main/java/ru/dbotthepony/mc/otm/block/BlockAndroidStation.java index 6162b0ccb..616e48a0a 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/block/BlockAndroidStation.java +++ b/src/main/java/ru/dbotthepony/mc/otm/block/BlockAndroidStation.java @@ -1,10 +1,14 @@ package ru.dbotthepony.mc.otm.block; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -16,6 +20,9 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MaterialColor; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.parameters.LootContextParam; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; @@ -24,16 +31,26 @@ import ru.dbotthepony.mc.otm.OverdriveThatMatters; import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation; import javax.annotation.Nullable; +import java.util.Collections; +import java.util.List; public class BlockAndroidStation extends Block implements EntityBlock { public static final ResourceLocation REGISTRY_NAME = new ResourceLocation(OverdriveThatMatters.MOD_ID, "android_station"); private final VoxelShape SHAPE = Shapes.box(0, 0, 0, 1, 0.5, 1); public BlockAndroidStation() { - super(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(3F, 6.0F)); + super(BlockBehaviour.Properties.of(Material.STONE, MaterialColor.STONE).requiresCorrectToolForDrops().strength(1.5F, 6.0F)); this.setRegistryName(REGISTRY_NAME); } + @Override + public void setPlacedBy(Level p_49847_, BlockPos p_49848_, BlockState p_49849_, @Nullable LivingEntity p_49850_, ItemStack p_49851_) { + if (p_49851_.hasCustomHoverName() && !p_49847_.isClientSide && p_49847_.getBlockEntity(p_49848_) instanceof BlockEntityAndroidStation tile) { + tile.setDisplayName(p_49851_.getDisplayName()); + } + super.setPlacedBy(p_49847_, p_49848_, p_49849_, p_49850_, p_49851_); + } + @Override public VoxelShape getShape(BlockState p_151964_, BlockGetter p_151965_, BlockPos p_151966_, CollisionContext p_151967_) { return SHAPE; diff --git a/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.java b/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.java index ef9a74507..7940fd6ea 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.java +++ b/src/main/java/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.java @@ -3,6 +3,7 @@ package ru.dbotthepony.mc.otm.block.entity; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.StringTag; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.world.MenuProvider; @@ -29,9 +30,15 @@ import java.math.BigDecimal; import java.util.List; public class BlockEntityAndroidStation extends BlockEntity implements MenuProvider { + private Component display_name; + + public void setDisplayName(Component text) { + display_name = text; + } + @Override public Component getDisplayName() { - return new TranslatableComponent("container.otm.android_station"); + return display_name != null ? display_name : new TranslatableComponent("container.otm.android_station"); } @Nullable @@ -57,7 +64,12 @@ public class BlockEntityAndroidStation extends BlockEntity implements MenuProvid @Override public CompoundTag save(CompoundTag nbt) { - nbt.put("energy_cap", energy.serializeNBT()); + nbt.put("energy_cap", energy.serializeNBT()); + + if (display_name != null) { + nbt.putString("Name", Component.Serializer.toJson(display_name)); + } + return super.save(nbt); } @@ -66,6 +78,9 @@ public class BlockEntityAndroidStation extends BlockEntity implements MenuProvid if (nbt.contains("energy_cap") && nbt.get("energy_cap") instanceof CompoundTag tag) energy.deserializeNBT(tag); + + if (nbt.contains("Name") && nbt.get("Name") instanceof StringTag tag) + display_name = Component.Serializer.fromJson(tag.getAsString()); } void tick() { diff --git a/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java b/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java index 95101d9e5..2957665a2 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/screen/AndroidStationScreen.java @@ -60,6 +60,6 @@ public class AndroidStationScreen extends AbstractContainerScreen 0.01) - this.blit(pose, i + 13, j + 15 + 46 - (int) (level * 45d), 176, 0, 7, (int) (level * 45d)); + this.blit(pose, i + 13, j + 15 + 46 - (int) (level * 45d), 176, 0, 7, (int) (level * 46d)); } } diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json new file mode 100644 index 000000000..662aedfdb --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "overdrive_that_matters:android_station" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/overdrive_that_matters/loot_tables/blocks/android_station.json b/src/main/resources/data/overdrive_that_matters/loot_tables/blocks/android_station.json new file mode 100644 index 000000000..1f1897448 --- /dev/null +++ b/src/main/resources/data/overdrive_that_matters/loot_tables/blocks/android_station.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "energy_cap", + "target": "BlockEntityTag.energy_cap", + "op": "replace" + }, + { + "source": "Name", + "target": "BlockEntityTag.Name", + "op": "replace" + } + ] + } + ], + "name": "overdrive_that_matters:android_station" + } + ] + } + ] +} \ No newline at end of file