From d98032160f81ed0ab1406363eeff17d52617b97d Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Fri, 28 Mar 2025 12:01:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(block):=20=E4=BC=98=E5=8C=96=E4=BD=9C?= =?UTF-8?q?=E7=89=A9=E6=96=B9=E5=9D=97=E8=A1=8C=E4=B8=BA=E5=92=8C=E6=8E=89?= =?UTF-8?q?=E8=90=BD=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default/configuration/plants.yml | 35 ++++++++----------- .../bukkit/api/CraftEngineBlocks.java | 4 +++ .../bukkit/block/BlockEventListener.java | 3 ++ .../block/behavior/BushBlockBehavior.java | 3 ++ .../block/behavior/CropBlockBehavior.java | 7 ++-- 5 files changed, 29 insertions(+), 23 deletions(-) diff --git a/bukkit/loader/src/main/resources/resources/default/configuration/plants.yml b/bukkit/loader/src/main/resources/resources/default/configuration/plants.yml index 86f223217..93b12fd24 100644 --- a/bukkit/loader/src/main/resources/resources/default/configuration/plants.yml +++ b/bukkit/loader/src/main/resources/resources/default/configuration/plants.yml @@ -43,7 +43,7 @@ items: model: template: default:model/simplified_generated arguments: - path: "minecraft:item/custom/ender_pearl_crop_seed" + path: "minecraft:block/custom/ender_pearl_crop_seed" behavior: type: block_item block: default:ender_pearl_crop @@ -199,26 +199,19 @@ blocks: pools: - rolls: 1 entries: - - type: alternatives - children: - - type: item - item: "default:ender_pearl_crop_seed" - conditions: - - type: survives_explosion - - type: item - item: "minecraft:ender_pearl" - conditions: - - type: crop_ripe - functions: - - type: apply_bonus - enchantment: minecraft:fortune - formula: - type: ore_drops - - type: explosion_decay - count: - type: uniform - min: "1" - max: "5" + - type: item + item: "default:ender_pearl_crop_seed" + conditions: + - type: survives_explosion + - rolls: + type: uniform + min: "1" + max: "5" + entries: + - type: item + item: "minecraft:ender_pearl" + conditions: + - type: crop_ripe states: properties: age: diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java index ed4dc7d2e..c39947497 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java @@ -1,6 +1,7 @@ package net.momirealms.craftengine.bukkit.api; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; +import net.momirealms.craftengine.bukkit.block.behavior.CropBlockBehavior; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; @@ -181,6 +182,9 @@ public final class CraftEngineBlocks { builder.withParameter(LootParameters.PLAYER, serverPlayer); builder.withOptionalParameter(LootParameters.TOOL, serverPlayer.getItemInHand(InteractionHand.MAIN_HAND)); } + if (state.behavior() instanceof CropBlockBehavior) { + builder.withParameter(LootParameters.CROP_BLOCK, true); + } for (Item item : state.getDrops(builder, world)) { world.dropItemNaturally(vec3d, item); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java index ec3b798ec..2e8c2e4af 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java @@ -300,6 +300,9 @@ public class BlockEventListener implements Listener { if (yield < 1f) { builder.withParameter(LootParameters.EXPLOSION_RADIUS, 1.0f / yield); } + if (state.behavior() instanceof CropBlockBehavior) { + builder.withParameter(LootParameters.CROP_BLOCK, true); + } for (Item item : state.getDrops(builder, world)) { world.dropItemNaturally(vec3d, item); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BushBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BushBlockBehavior.java index 13b6e32ae..f1ff84512 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BushBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BushBlockBehavior.java @@ -71,6 +71,9 @@ public class BushBlockBehavior extends AbstractBlockBehavior { net.momirealms.craftengine.core.world.World world = new BukkitWorld(FastNMS.INSTANCE.method$Level$getCraftWorld(level)); builder.withParameter(LootParameters.LOCATION, vec3d); builder.withParameter(LootParameters.WORLD, world); + if (this instanceof CropBlockBehavior) { + builder.withParameter(LootParameters.CROP_BLOCK, true); + } for (Item item : previousState.getDrops(builder, world)) { world.dropItemNaturally(vec3d, item); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java index 4cc1a8fea..f44010e81 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/CropBlockBehavior.java @@ -5,6 +5,7 @@ import net.momirealms.craftengine.bukkit.util.BlockStateUtils; import net.momirealms.craftengine.bukkit.util.Reflections; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; +import net.momirealms.craftengine.core.block.UpdateOption; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.IntegerProperty; import net.momirealms.craftengine.core.block.properties.Property; @@ -56,7 +57,7 @@ public class CropBlockBehavior extends BushBlockBehavior { if (i > maxAge) { i = maxAge; } - Reflections.method$ServerLevel$sendBlockUpdated.invoke(level, pos, state, getStateForAge(state, i), 3); + Reflections.method$Level$setBlock.invoke(level, pos, getStateForAge(state, i), UpdateOption.UPDATE_NONE.flags()); } private static int getRawBrightness(Object level, Object pos) throws InvocationTargetException, IllegalAccessException { @@ -74,8 +75,10 @@ public class CropBlockBehavior extends BushBlockBehavior { Object pos = args[2]; if (getRawBrightness(level, pos) >= minGrowLight) { int age = this.getAge(state); + System.out.println("age: " + age); if (age < this.ageProperty.max && RandomUtils.generateRandomFloat(0, 1) >= this.growSpeed) { - Reflections.method$ServerLevel$sendBlockUpdated.invoke(level, pos, state, getStateForAge(state, age + 1), 3); + System.out.println("grow"); + Reflections.method$Level$setBlock.invoke(level, pos, getStateForAge(state, age + 1), UpdateOption.UPDATE_NONE.flags()); } } }