diff --git a/src/main/java/dev/latvian/mods/kubejs/block/custom/CropBlockBuilder.java b/src/main/java/dev/latvian/mods/kubejs/block/custom/CropBlockBuilder.java index ae73b81ea..2a8738c63 100644 --- a/src/main/java/dev/latvian/mods/kubejs/block/custom/CropBlockBuilder.java +++ b/src/main/java/dev/latvian/mods/kubejs/block/custom/CropBlockBuilder.java @@ -13,6 +13,7 @@ import dev.latvian.mods.rhino.util.ReturnsSelf; import net.minecraft.advancements.critereon.StatePropertiesPredicate; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; import net.minecraft.world.item.Item; @@ -67,7 +68,7 @@ public ShapeBuilder(int age) { @Info(""" Describe the shape of the crop at a specific age. - + min/max coordinates are double values between 0 and 16. """) public ShapeBuilder shape(int age, double minX, double minY, double minZ, double maxX, double maxY, double maxZ) { @@ -124,7 +125,8 @@ public List getShapes() { public transient ToIntFunction fertilizerCallback; public transient SurviveCallback surviveCallback; - public transient List> outputs; + public transient List, NumberProvider>> outputs; + public transient boolean noSeeds; public CropBlockBuilder(ResourceLocation id) { super(id); @@ -140,6 +142,7 @@ public CropBlockBuilder(ResourceLocation id) { hardness = 0.0f; resistance = 0.0f; outputs = new ArrayList<>(); + noSeeds = false; notSolid = true; soundType(SoundType.CROP); @@ -159,14 +162,20 @@ public BlockBuilder noItem() { return this; } + @Info("Remove seed drops from the loot table, does not prevent seed item from creating.") + public CropBlockBuilder noSeeds() { + this.noSeeds = true; + return this; + } + @Info("Add a crop output with exactly one output.") - public CropBlockBuilder crop(Item output) { + public CropBlockBuilder crop(Holder output) { crop(output, ConstantValue.exactly(1.0f)); return this; } @Info("Add a crop output with a specific amount.") - public CropBlockBuilder crop(Item output, NumberProvider chance) { + public CropBlockBuilder crop(Holder output, NumberProvider chance) { outputs.add(new Pair<>(output, chance)); return this; } @@ -229,13 +238,16 @@ public LootTable generateLootTable() { var builder = LootTable.lootTable(); for (var output : outputs) { - var cropItem = LootItem.lootTableItem(output.getFirst()) + if (!output.getFirst().isBound()) { + continue; + } + var cropItem = LootItem.lootTableItem(output.getFirst().value()) .apply(SetItemCountFunction.setCount(output.getSecond())) .when(mature); builder.withPool(LootPool.lootPool().add(cropItem)); } - if (itemBuilder != null) { + if (itemBuilder != null && !noSeeds) { var pool = LootPool.lootPool().add(LootItem.lootTableItem(itemBuilder.get()) .when(mature) .otherwise(LootItem.lootTableItem(itemBuilder.get()))