Overhauled crop drop tables to be more in line with 1.12.

Readded native right click harvesting to AA crops.
This commit is contained in:
Flanks255 2024-12-01 16:10:32 -06:00
parent bfd8eb8fae
commit 506d481d36
8 changed files with 222 additions and 60 deletions

View file

@ -16,6 +16,8 @@
* Reinforced fix for drills breaking in certain circumstances.
* Fix for drill not dropping block contents for certain mods.
* Fixed the Farmer not making sounds when planting.
* Overhauled AA crop drop tables to be more in line with 1.12 numbers.
* Re-added native right click harvesting to AA crops.
# 1.3.10+mc1.21.1
* Fixed Fluid placer not being harvestable.

View file

@ -1,4 +1,4 @@
// 1.21.1 2024-11-30T14:28:45.6232631 Loot Tables
// 1.21.1 2024-12-01T15:57:03.7596243 Loot Tables
ef11aa79a2f96a47250f46811f8491fd34d627f9 data/actuallyadditions/loot_table/blocks/atomic_reconstructor.json
e15c868b26b669c30365bfb93e7d9274e07df16d data/actuallyadditions/loot_table/blocks/battery_box.json
745d64af3b0203a138f9eca7de21ed4988b35c95 data/actuallyadditions/loot_table/blocks/bio_reactor.json
@ -16,14 +16,14 @@ c49b30e8d893f67866d0a47cf8682502468e9864 data/actuallyadditions/loot_table/block
e4f42700948abba5991c961ee5b2c0ab6839d437 data/actuallyadditions/loot_table/blocks/black_quartz_stair.json
0d7396ec2071fcdd2df045b20c9b5a5a2692cc80 data/actuallyadditions/loot_table/blocks/black_quartz_wall.json
721df65869084716c4e8dded76f9a691dbf6f165 data/actuallyadditions/loot_table/blocks/breaker.json
6543b2f46d8c4e81c3b3efb8aff3cb3216c4acda data/actuallyadditions/loot_table/blocks/canola.json
c40d97a5b17a4b94c343ff298b61db21f9d2b3ce data/actuallyadditions/loot_table/blocks/canola.json
363f70b76c9ceea3bfbe62656523acc52178803c data/actuallyadditions/loot_table/blocks/canola_press.json
37edff6a4dd2975276e73be28cf2490bd91700a9 data/actuallyadditions/loot_table/blocks/chiseled_black_quartz_block.json
967afd8eaa3169037502ac72985ddba7b3670087 data/actuallyadditions/loot_table/blocks/chiseled_black_quartz_slab.json
b598ece027ef00e9ed0457a7f9542ebe8b89538c data/actuallyadditions/loot_table/blocks/chiseled_black_quartz_stair.json
584c40d2867ad0376823c1a4f37f1d901721ae4f data/actuallyadditions/loot_table/blocks/chiseled_black_quartz_wall.json
7d23a0c906af2f6b3fecaba91f776385db5a50bc data/actuallyadditions/loot_table/blocks/coal_generator.json
afab93747299dba6783292e5949ea7e0cd5d5b13 data/actuallyadditions/loot_table/blocks/coffee.json
be0627c013316cc2b7729e7fdbf2778ca10e7ea2 data/actuallyadditions/loot_table/blocks/coffee.json
3d8c1c296df957964e41065f4d2c0814eee29282 data/actuallyadditions/loot_table/blocks/coffee_machine.json
7c7a4028f6fe02446d1557f72ad494ab363a8409 data/actuallyadditions/loot_table/blocks/crusher.json
cbd5456165eaf299685aab50dc3bce38d99a1cf8 data/actuallyadditions/loot_table/blocks/crusher_double.json
@ -57,7 +57,7 @@ d4eeacb9036343a75ba390acb912c294db3bbdb6 data/actuallyadditions/loot_table/block
4f60395b41acdd21a5e8e8592fb6141a230ffdde data/actuallyadditions/loot_table/blocks/feeder.json
25ef94eb9b94c7707d8ae5df2b4e9f52378ee6f7 data/actuallyadditions/loot_table/blocks/fermenting_barrel.json
c02726c670fccfa57d403272b9c96e3ad9cf4cc9 data/actuallyadditions/loot_table/blocks/firework_box.json
4bd34fdd919b12992acbfe81b6aa79cadb7f2774 data/actuallyadditions/loot_table/blocks/flax.json
af51485c31b2fe83b3aa6a43cfeceeb3487fe94f data/actuallyadditions/loot_table/blocks/flax.json
306b4cb3da4065ba83240b24e0e6c3a067b99d73 data/actuallyadditions/loot_table/blocks/fluid_collector.json
1216c21d9f3805de5988ba3c65997b3b78d70abc data/actuallyadditions/loot_table/blocks/fluid_placer.json
8f15a45992ecb1be2ce326702c204c190a0aad14 data/actuallyadditions/loot_table/blocks/greenhouse_glass.json
@ -108,7 +108,7 @@ e030d31981f02c0ed25d08fcaf8d8e7c89016247 data/actuallyadditions/loot_table/block
8f51bc016a6797bfdf81973a21509e14bd47f245 data/actuallyadditions/loot_table/blocks/ranged_collector.json
0cff315b834058c90a7f26425565e086fb833305 data/actuallyadditions/loot_table/blocks/restonia_crystal_block.json
d1c8ca548cefbb4f33d4763606a7e0c909319717 data/actuallyadditions/loot_table/blocks/restonia_crystal_cluster.json
247ec0004cfa51a635f305aed06f6a8f2d0cd0c4 data/actuallyadditions/loot_table/blocks/rice.json
21c7f764086ad1f4add6853f182e16324c498fa2 data/actuallyadditions/loot_table/blocks/rice.json
d9337537495eb5b2d5288c6df81125594522e5b7 data/actuallyadditions/loot_table/blocks/shock_suppressor.json
a534077796cbfbcf0c66f986db3abd037c2d14d6 data/actuallyadditions/loot_table/blocks/smooth_black_quartz_block.json
5018c69cc3e6c87b0080ed3ea914e47744088ab7 data/actuallyadditions/loot_table/blocks/smooth_black_quartz_slab.json

View file

@ -23,6 +23,25 @@
}
}
],
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 5.0,
"min": 2.0
},
"function": "minecraft:set_count"
},
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:uniform_bonus_count",
"function": "minecraft:apply_bonus",
"parameters": {
"bonusMultiplier": 1
}
}
],
"name": "actuallyadditions:canola"
},
{
@ -36,26 +55,34 @@
},
{
"bonus_rolls": 0.0,
"conditions": [
{
"block": "actuallyadditions:canola",
"condition": "minecraft:block_state_property",
"properties": {
"age": "7"
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"block": "actuallyadditions:canola",
"condition": "minecraft:block_state_property",
"properties": {
"age": "7"
}
}
],
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 2.0,
"min": 1.0
},
"function": "minecraft:set_count"
},
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:binomial_with_bonus_count",
"formula": "minecraft:uniform_bonus_count",
"function": "minecraft:apply_bonus",
"parameters": {
"extra": 3,
"probability": 0.5714286
"bonusMultiplier": 1
}
}
],

View file

@ -23,6 +23,25 @@
}
}
],
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 4.0,
"min": 2.0
},
"function": "minecraft:set_count"
},
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:uniform_bonus_count",
"function": "minecraft:apply_bonus",
"parameters": {
"bonusMultiplier": 1
}
}
],
"name": "actuallyadditions:coffee_beans"
},
{
@ -36,26 +55,34 @@
},
{
"bonus_rolls": 0.0,
"conditions": [
{
"block": "actuallyadditions:coffee",
"condition": "minecraft:block_state_property",
"properties": {
"age": "7"
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"block": "actuallyadditions:coffee",
"condition": "minecraft:block_state_property",
"properties": {
"age": "7"
}
}
],
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 2.0,
"min": 1.0
},
"function": "minecraft:set_count"
},
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:binomial_with_bonus_count",
"formula": "minecraft:uniform_bonus_count",
"function": "minecraft:apply_bonus",
"parameters": {
"extra": 3,
"probability": 0.5714286
"bonusMultiplier": 1
}
}
],

View file

@ -23,6 +23,25 @@
}
}
],
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 6.0,
"min": 2.0
},
"function": "minecraft:set_count"
},
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:uniform_bonus_count",
"function": "minecraft:apply_bonus",
"parameters": {
"bonusMultiplier": 1
}
}
],
"name": "minecraft:string"
},
{
@ -36,26 +55,34 @@
},
{
"bonus_rolls": 0.0,
"conditions": [
{
"block": "actuallyadditions:flax",
"condition": "minecraft:block_state_property",
"properties": {
"age": "7"
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"block": "actuallyadditions:flax",
"condition": "minecraft:block_state_property",
"properties": {
"age": "7"
}
}
],
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 2.0,
"min": 1.0
},
"function": "minecraft:set_count"
},
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:binomial_with_bonus_count",
"formula": "minecraft:uniform_bonus_count",
"function": "minecraft:apply_bonus",
"parameters": {
"extra": 3,
"probability": 0.5714286
"bonusMultiplier": 1
}
}
],

View file

@ -23,6 +23,25 @@
}
}
],
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 3.0,
"min": 1.0
},
"function": "minecraft:set_count"
},
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:uniform_bonus_count",
"function": "minecraft:apply_bonus",
"parameters": {
"bonusMultiplier": 1
}
}
],
"name": "actuallyadditions:rice"
},
{
@ -36,26 +55,34 @@
},
{
"bonus_rolls": 0.0,
"conditions": [
{
"block": "actuallyadditions:rice",
"condition": "minecraft:block_state_property",
"properties": {
"age": "7"
}
}
],
"entries": [
{
"type": "minecraft:item",
"conditions": [
{
"block": "actuallyadditions:rice",
"condition": "minecraft:block_state_property",
"properties": {
"age": "7"
}
}
],
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 2.0,
"min": 1.0
},
"function": "minecraft:set_count"
},
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:binomial_with_bonus_count",
"formula": "minecraft:uniform_bonus_count",
"function": "minecraft:apply_bonus",
"parameters": {
"extra": 3,
"probability": 0.5714286
"bonusMultiplier": 1
}
}
],

View file

@ -11,6 +11,7 @@ import de.ellpeck.actuallyadditions.mod.misc.DungeonLoot;
import net.minecraft.advancements.critereon.StatePropertiesPredicate;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.WritableRegistry;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.data.loot.BlockLootSubProvider;
import net.minecraft.data.loot.LootTableProvider;
@ -20,6 +21,7 @@ import net.minecraft.util.ProblemReporter;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.CropBlock;
import net.minecraft.world.level.storage.loot.LootPool;
@ -27,6 +29,7 @@ import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.ValidationContext;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.entries.TagEntry;
import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount;
import net.minecraft.world.level.storage.loot.functions.CopyComponentsFunction;
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
@ -200,16 +203,28 @@ public class LootTableGenerator extends LootTableProvider {
add(ActuallyBlocks.BLACK_QUARTZ_ORE.get(), createOreDrop(ActuallyBlocks.BLACK_QUARTZ_ORE.getBlock(), ActuallyItems.BLACK_QUARTZ.get()));
addCrop(ActuallyBlocks.CANOLA, ActuallyItems.CANOLA, ActuallyItems.CANOLA_SEEDS);
addCrop(ActuallyBlocks.RICE, ActuallyItems.RICE, ActuallyItems.RICE_SEEDS);
addCrop(ActuallyBlocks.FLAX, () -> Items.STRING, ActuallyItems.FLAX_SEEDS);
addCrop(ActuallyBlocks.COFFEE, ActuallyItems.COFFEE_BEANS, ActuallyItems.COFFEE_BEANS);
addCrop(ActuallyBlocks.CANOLA, ActuallyItems.CANOLA, 2, 3, ActuallyItems.CANOLA_SEEDS);
addCrop(ActuallyBlocks.RICE, ActuallyItems.RICE, 1, 2, ActuallyItems.RICE_SEEDS);
addCrop(ActuallyBlocks.FLAX, () -> Items.STRING, 2, 4, ActuallyItems.FLAX_SEEDS);
addCrop(ActuallyBlocks.COFFEE, ActuallyItems.COFFEE_BEANS, 2, 2, ActuallyItems.COFFEE_BEANS);
}
private void addCrop(Supplier<? extends Block> block, Supplier<? extends Item> item, Supplier<? extends Item> seed) {
add(block.get(), createCropDrops(block.get(), item.get(), seed.get(),
LootItemBlockStatePropertyCondition.hasBlockStateProperties(block.get()).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(CropBlock.AGE, 7))));
private void addCrop(Supplier<? extends Block> block, Supplier<? extends Item> item, int min, int bonus, Supplier<? extends Item> seed) {
var registry = registries.lookupOrThrow(Registries.ENCHANTMENT);
LootItemBlockStatePropertyCondition.Builder cropCondition = LootItemBlockStatePropertyCondition.hasBlockStateProperties(block.get()).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(CropBlock.AGE, 7));
var table = LootTable.lootTable()
.withPool(LootPool.lootPool().add(LootItem
.lootTableItem(item.get()).when(cropCondition)
.apply(SetItemCountFunction.setCount(UniformGenerator.between(min, min + bonus)))
.apply(ApplyBonusCount.addUniformBonusCount(registry.getOrThrow(Enchantments.FORTUNE)))
.otherwise(LootItem.lootTableItem(seed.get())))
)
.withPool(LootPool.lootPool().add(LootItem.lootTableItem(seed.get()).when(cropCondition)
.apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F)))
.apply(ApplyBonusCount.addUniformBonusCount(registry.getOrThrow(Enchantments.FORTUNE)))));
add(block.get(), applyExplosionDecay(block.get(), table));
}
private void dropComponents(Supplier<? extends Block> blockSupplier, Consumer<LootPool.Builder> lootFunctionProvider) {

View file

@ -1,19 +1,28 @@
package de.ellpeck.actuallyadditions.mod.blocks.base;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.WorldGenRegion;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.ItemInteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.CropBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.phys.BlockHitResult;
import net.neoforged.neoforge.items.ItemHandlerHelper;
import javax.annotation.Nonnull;
import java.util.List;
import java.util.function.Supplier;
public class AACrops extends CropBlock {
@ -52,4 +61,32 @@ public class AACrops extends CropBlock {
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(AGE, PERSISTENT);
}
@Nonnull
@Override
protected ItemInteractionResult useItemOn(@Nonnull ItemStack pStack, @Nonnull BlockState state, @Nonnull Level world, @Nonnull BlockPos pos, @Nonnull Player player, @Nonnull InteractionHand hand, @Nonnull BlockHitResult pHitResult) {
if (this.getAge(state) < 7) {
return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
}
if (!world.isClientSide) {
List<ItemStack> drops = Block.getDrops(state, (ServerLevel) world, pos, null, player, pStack);
boolean deductedSeedSize = false;
for (ItemStack drop : drops) {
if (!drop.isEmpty()) {
if (drop.getItem() == this.itemSupplier.get() && !deductedSeedSize) {
drop.shrink(1);
deductedSeedSize = true;
}
if (!drop.isEmpty()) {
ItemHandlerHelper.giveItemToPlayer(player, drop);
}
}
}
world.setBlockAndUpdate(pos, this.defaultBlockState().setValue(AGE, 0));
}
return super.useItemOn(pStack, state, world, pos, player, hand, pHitResult);
}
}