From a1a4741b6393c68fcc28ec2b2b5e17f2f07e85bf Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Sun, 24 Jul 2022 23:57:22 +0200 Subject: [PATCH] corrected all bugs --- .../EmptyLavaHoarderBlockEntity.java | 17 ++++-- .../blockentity/ItemHoarderBlockEntity.java | 7 ++- .../MonsterHoarderBlockEntity.java | 13 +++-- .../blocks/BlockEmptyLavahoarder.java | 19 ++++--- .../blocks/BlockLavahoarder.java | 14 +---- .../quickiefabric/init/LootHelper.java | 3 +- .../quickiefabric/init/RegistryManager.java | 6 +-- .../quickiefabric/text/PrefixedText.java | 52 +++++++++++++++++++ ...lavahoarder.json => emptylavahoarder.json} | 2 +- .../recipes/itemhoarder_from_barrel.json | 20 +++++++ ...arder.json => itemhoarder_from_chest.json} | 0 11 files changed, 114 insertions(+), 39 deletions(-) create mode 100644 src/main/java/de/jottyfan/minecraft/quickiefabric/text/PrefixedText.java rename src/main/resources/data/quickiefabric/recipes/{lavahoarder.json => emptylavahoarder.json} (83%) create mode 100644 src/main/resources/data/quickiefabric/recipes/itemhoarder_from_barrel.json rename src/main/resources/data/quickiefabric/recipes/{itemhoarder.json => itemhoarder_from_chest.json} (100%) diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/EmptyLavaHoarderBlockEntity.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/EmptyLavaHoarderBlockEntity.java index e11fe9d..e3988aa 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/EmptyLavaHoarderBlockEntity.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/EmptyLavaHoarderBlockEntity.java @@ -9,11 +9,12 @@ import net.minecraft.block.Blocks; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.ItemEntity; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; /** - * + * * @author jotty * */ @@ -23,9 +24,18 @@ public class EmptyLavaHoarderBlockEntity extends BlockEntity { super(QuickieFabricBlockEntity.EMPTYLAVAHOARDER, pos, state); } + public static final void spawnRandomItems(World world, BlockPos pos, Integer count) { + world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.DIAMOND, new Random().nextInt(count)))); + world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.EMERALD, new Random().nextInt(count)))); + world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.GOLD_NUGGET, new Random().nextInt(count)))); + world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.IRON_NUGGET, new Random().nextInt(count)))); + world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.LAPIS_LAZULI, new Random().nextInt(count)))); + world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(QuickieItems.SULPHOR, 1 + new Random().nextInt(count)))); + } + /** * sucks the lava that touches the block - * + * * @param world the world * @param pos the pos * @return true if lava was found @@ -38,8 +48,7 @@ public class EmptyLavaHoarderBlockEntity extends BlockEntity { BlockPos up = pos.up(); Random random = new Random(); if (random.nextFloat() > 0.9f) { - world.spawnEntity(new ItemEntity(world, up.getX(), up.getY(), up.getZ(), - new ItemStack(QuickieItems.SULPHOR, 1 + new Random().nextInt(4)))); + spawnRandomItems(world, up, 2); } return true; } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/ItemHoarderBlockEntity.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/ItemHoarderBlockEntity.java index cff9a21..a286404 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/ItemHoarderBlockEntity.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/ItemHoarderBlockEntity.java @@ -3,6 +3,7 @@ package de.jottyfan.minecraft.quickiefabric.blockentity; import java.util.ArrayList; import java.util.List; +import de.jottyfan.minecraft.quickiefabric.text.PrefixedText; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.LootableContainerBlockEntity; @@ -134,10 +135,8 @@ public class ItemHoarderBlockEntity extends LootableContainerBlockEntity { for (ItemStack stack : stacks) { Item item = stack.getItem(); if (item != Items.AIR) { - Integer amount = stack.getCount(); - StringBuilder buf = new StringBuilder(String.format("%dx ", amount)); - buf.append(Text.translatable(stack.getTranslationKey()).translate()); - Text text = Text.of(buf.toString()); + Text text = PrefixedText.instance(String.format("%dx ", stack.getCount()).concat("%s"), + Text.translatable(stack.getTranslationKey())); list.add(text); } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/MonsterHoarderBlockEntity.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/MonsterHoarderBlockEntity.java index 661f9ed..38b38e6 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/MonsterHoarderBlockEntity.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blockentity/MonsterHoarderBlockEntity.java @@ -6,12 +6,14 @@ import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.mob.HostileEntity; +import net.minecraft.entity.mob.PiglinEntity; +import net.minecraft.entity.mob.WardenEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.world.World; /** - * + * * @author jotty * */ @@ -30,9 +32,12 @@ public class MonsterHoarderBlockEntity extends BlockEntity { Box box = new Box(pos).expand(mhbe.getSuckradius()); List entities = world.getOtherEntities(null, box); for (Entity entity : entities) { - if (entity instanceof HostileEntity) { - HostileEntity mobEntity = (HostileEntity) entity; - mobEntity.setOnFireFor(90); + if (entity instanceof WardenEntity) { + entity.kill(); + } else if (entity instanceof PiglinEntity) { + entity.kill(); + } else if (entity instanceof HostileEntity) { + entity.setOnFireFor(90); } } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockEmptyLavahoarder.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockEmptyLavahoarder.java index ee89894..4555c83 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockEmptyLavahoarder.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockEmptyLavahoarder.java @@ -7,7 +7,6 @@ import java.util.Random; import java.util.Set; import de.jottyfan.minecraft.quickiefabric.blockentity.EmptyLavaHoarderBlockEntity; -import de.jottyfan.minecraft.quickiefabric.items.QuickieItems; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.Block; import net.minecraft.block.BlockEntityProvider; @@ -15,17 +14,17 @@ import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.Material; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.ExperienceOrbEntity; -import net.minecraft.entity.ItemEntity; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; import net.minecraft.loot.context.LootContext.Builder; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; /** - * + * * @author jotty * */ @@ -40,6 +39,11 @@ public class BlockEmptyLavahoarder extends Block implements BlockEntityProvider return new EmptyLavaHoarderBlockEntity(pos, blockState); } + @Override + public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type){ + return (world1, pos, state1, be) -> EmptyLavaHoarderBlockEntity.tick(world1, pos, state1, be); + } + @Override public List getDroppedStacks(BlockState state, Builder builder) { List list = new ArrayList<>(); @@ -113,12 +117,7 @@ public class BlockEmptyLavahoarder extends Block implements BlockEntityProvider } BlockPos up = pos.up(); if (count > 0) { - world.spawnEntity(new ItemEntity(world, up.getX(), up.getY(), up.getZ(), new ItemStack(QuickieItems.SULPHOR, count))); - world.spawnEntity(new ItemEntity(world, up.getX(), up.getY(), up.getZ(), new ItemStack(Items.DIAMOND, new Random().nextInt(count)))); - world.spawnEntity(new ItemEntity(world, up.getX(), up.getY(), up.getZ(), new ItemStack(Items.EMERALD, new Random().nextInt(count)))); - world.spawnEntity(new ItemEntity(world, up.getX(), up.getY(), up.getZ(), new ItemStack(Items.GOLD_NUGGET, new Random().nextInt(count)))); - world.spawnEntity(new ItemEntity(world, up.getX(), up.getY(), up.getZ(), new ItemStack(Items.IRON_NUGGET, new Random().nextInt(count)))); - world.spawnEntity(new ItemEntity(world, up.getX(), up.getY(), up.getZ(), new ItemStack(Items.LAPIS_LAZULI, new Random().nextInt(count)))); + EmptyLavaHoarderBlockEntity.spawnRandomItems(world, up, count); world.spawnEntity(new ExperienceOrbEntity(world, (double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D, count)); } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockLavahoarder.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockLavahoarder.java index 983a016..1bf29ab 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockLavahoarder.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockLavahoarder.java @@ -2,7 +2,6 @@ package de.jottyfan.minecraft.quickiefabric.blocks; import java.util.ArrayList; import java.util.List; -import java.util.Random; import de.jottyfan.minecraft.quickiefabric.blockentity.EmptyLavaHoarderBlockEntity; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -26,7 +25,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; /** - * + * * @author jotty * */ @@ -73,16 +72,7 @@ public class BlockLavahoarder extends Block implements BlockEntityProvider { player.setStackInHand(hand, emptyBucketStack); world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), lavaBucketStack)); } - world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), - new ItemStack(Items.DIAMOND, new Random().nextInt(2)))); - world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), - new ItemStack(Items.EMERALD, new Random().nextInt(2)))); - world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), - new ItemStack(Items.GOLD_NUGGET, new Random().nextInt(2)))); - world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), - new ItemStack(Items.IRON_NUGGET, new Random().nextInt(2)))); - world.spawnEntity(new ItemEntity(world, pos.getX(), pos.getY(), pos.getZ(), - new ItemStack(Items.LAPIS_LAZULI, new Random().nextInt(2)))); + EmptyLavaHoarderBlockEntity.spawnRandomItems(world, pos, 2); world.setBlockState(pos, QuickieBlocks.EMPTYLAVAHOARDER.getDefaultState()); } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/LootHelper.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/LootHelper.java index b92ba0e..1553eb7 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/LootHelper.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/LootHelper.java @@ -2,6 +2,7 @@ package de.jottyfan.minecraft.quickiefabric.init; import net.minecraft.item.Item; import net.minecraft.loot.LootPool; +import net.minecraft.loot.condition.RandomChanceLootCondition; import net.minecraft.loot.entry.ItemEntry; import net.minecraft.loot.provider.number.ConstantLootNumberProvider; @@ -19,7 +20,7 @@ public class LootHelper { */ public static final LootPool.Builder build(Integer number, Item item, float chance) { return LootPool.builder().rolls(ConstantLootNumberProvider.create(number)) - .with(RandomChanceLootCondition.builder(chance)) + .conditionally(RandomChanceLootCondition.builder(chance)) .with(ItemEntry.builder(item)); } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java index eb756da..92f81ac 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java @@ -318,10 +318,10 @@ public class RegistryManager { } public static final void registerLootings() { - LootTableEvents.MODIFY.register((resourceManager, lootManager, id, supplier, setter) -> { + LootTableEvents.MODIFY.register((resourceManager, lootManager, id, tableBuilder, source) -> { if (isGrass(id)) { - supplier.pool(LootHelper.build(1, QuickieItems.COTTONSEED, 0.125f)); - supplier.pool(LootHelper.build(2, QuickieItems.SALPETER, 0.012f)); + tableBuilder.pool(LootHelper.build(1, QuickieItems.COTTONSEED, 0.125f)); + tableBuilder.pool(LootHelper.build(2, QuickieItems.SALPETER, 0.012f)); } }); } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/text/PrefixedText.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/text/PrefixedText.java new file mode 100644 index 0000000..6a73028 --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/text/PrefixedText.java @@ -0,0 +1,52 @@ +package de.jottyfan.minecraft.quickiefabric.text; + +import java.util.List; + +import net.minecraft.text.OrderedText; +import net.minecraft.text.Style; +import net.minecraft.text.Text; +import net.minecraft.text.TextContent; + +/** + * + * @author jotty + * + */ +public class PrefixedText implements Text { + + private final String pattern; + private final Text text; + + private PrefixedText(String pattern, Text text) { + this.pattern = pattern; + this.text = text; + } + + public final static PrefixedText instance(String pattern, Text text) { + return new PrefixedText(pattern, text); + } + + private Text generateText() { + return Text.of(pattern.replace("%s", text.getString())); + } + + @Override + public OrderedText asOrderedText() { + return generateText().asOrderedText(); + } + + @Override + public TextContent getContent() { + return generateText().getContent(); + } + + @Override + public List getSiblings() { + return generateText().getSiblings(); + } + + @Override + public Style getStyle() { + return text.getStyle(); + } +} diff --git a/src/main/resources/data/quickiefabric/recipes/lavahoarder.json b/src/main/resources/data/quickiefabric/recipes/emptylavahoarder.json similarity index 83% rename from src/main/resources/data/quickiefabric/recipes/lavahoarder.json rename to src/main/resources/data/quickiefabric/recipes/emptylavahoarder.json index 37072a8..6fec377 100644 --- a/src/main/resources/data/quickiefabric/recipes/lavahoarder.json +++ b/src/main/resources/data/quickiefabric/recipes/emptylavahoarder.json @@ -14,7 +14,7 @@ } }, "result": { - "item": "quickiefabric:lavahoarder", + "item": "quickiefabric:emptylavahoarder", "count": 1 } } \ No newline at end of file diff --git a/src/main/resources/data/quickiefabric/recipes/itemhoarder_from_barrel.json b/src/main/resources/data/quickiefabric/recipes/itemhoarder_from_barrel.json new file mode 100644 index 0000000..dd2a325 --- /dev/null +++ b/src/main/resources/data/quickiefabric/recipes/itemhoarder_from_barrel.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "ooo", + "oso", + "ooo" + ], + "key": { + "o": { + "item": "quickiefabric:speedpowder" + }, + "s": { + "item": "minecraft:barrel" + } + }, + "result": { + "item": "quickiefabric:itemhoarder", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/quickiefabric/recipes/itemhoarder.json b/src/main/resources/data/quickiefabric/recipes/itemhoarder_from_chest.json similarity index 100% rename from src/main/resources/data/quickiefabric/recipes/itemhoarder.json rename to src/main/resources/data/quickiefabric/recipes/itemhoarder_from_chest.json