From 1b2936d53e78e8d4782ee2ce6dcb3d99bd65bafb Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sun, 23 Mar 2025 21:55:58 +0800 Subject: [PATCH 1/2] update default configs --- bukkit-loader/src/main/resources/config.yml | 2 +- .../default/configuration/blocks.yml | 11 ++- .../resources/default/configuration/icons.yml | 2 +- .../resources/internal/configuration/gui.yml | 22 ++--- .../internal/configuration/offset_chars.yml | 88 +++++++++---------- 5 files changed, 67 insertions(+), 58 deletions(-) diff --git a/bukkit-loader/src/main/resources/config.yml b/bukkit-loader/src/main/resources/config.yml index e0f09fd16..c96d8c192 100644 --- a/bukkit-loader/src/main/resources/config.yml +++ b/bukkit-loader/src/main/resources/config.yml @@ -211,7 +211,7 @@ performance: restore-custom-blocks-on-chunk-load: true offset-characters: - font: minecraft:offset_chars + font: minecraft:default -1: '\uf800' -2: '\uf801' -3: '\uf802' diff --git a/bukkit-loader/src/main/resources/resources/default/configuration/blocks.yml b/bukkit-loader/src/main/resources/resources/default/configuration/blocks.yml index cb1bc5c41..5475b6e3f 100644 --- a/bukkit-loader/src/main/resources/resources/default/configuration/blocks.yml +++ b/bukkit-loader/src/main/resources/resources/default/configuration/blocks.yml @@ -54,4 +54,13 @@ recipes: C: "minecraft:torch" result: id: default:chinese_lantern - count: 1 \ No newline at end of file + count: 1 + default:paper_from_reed: + type: shaped + pattern: + - "AAA" + ingredients: + A: "default:reed" + result: + id: minecraft:paper + count: 3 \ No newline at end of file diff --git a/bukkit-loader/src/main/resources/resources/default/configuration/icons.yml b/bukkit-loader/src/main/resources/resources/default/configuration/icons.yml index d54812865..47cda9d4c 100644 --- a/bukkit-loader/src/main/resources/resources/default/configuration/icons.yml +++ b/bukkit-loader/src/main/resources/resources/default/configuration/icons.yml @@ -2,7 +2,7 @@ images: default:icons: height: 10 ascent: 9 - font: minecraft:icons + font: minecraft:default # Consider using other fonts if other plugins support custom font! file: minecraft:font/image/icons.png chars: - '\ub000\ub001' diff --git a/bukkit-loader/src/main/resources/resources/internal/configuration/gui.yml b/bukkit-loader/src/main/resources/resources/internal/configuration/gui.yml index 7ba729dc6..827a861ed 100644 --- a/bukkit-loader/src/main/resources/resources/internal/configuration/gui.yml +++ b/bukkit-loader/src/main/resources/resources/internal/configuration/gui.yml @@ -2,67 +2,67 @@ images: internal:item_browser: height: 140 ascent: 18 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/item_browser.png char: '\ub000' internal:category: height: 140 ascent: 18 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/category.png char: '\ub001' internal:crafting_recipe: height: 142 ascent: 20 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/crafting_recipe.png char: '\ub002' internal:cooking_recipe: height: 138 ascent: 16 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/cooking_recipe.png char: '\ub003' internal:smelting: height: 23 ascent: 20 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/smelting.png char: '\ub004' internal:smoking: height: 23 ascent: 20 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/smoking.png char: '\ub005' internal:blasting: height: 23 ascent: 20 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/blasting.png char: '\ub006' internal:campfire: height: 23 ascent: 20 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/campfire.png char: '\ub007' internal:stonecutting_recipe: height: 142 ascent: 20 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/stonecutting_recipe.png char: '\ub008' internal:smithing_transform_recipe: height: 142 ascent: 20 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/smithing_transform_recipe.png char: '\ub009' internal:no_recipe: height: 140 ascent: 18 - font: minecraft:internal + font: minecraft:gui file: minecraft:font/gui/custom/no_recipe.png char: '\ub00a' diff --git a/bukkit-loader/src/main/resources/resources/internal/configuration/offset_chars.yml b/bukkit-loader/src/main/resources/resources/internal/configuration/offset_chars.yml index 45b1c925a..cf2175bf7 100644 --- a/bukkit-loader/src/main/resources/resources/internal/configuration/offset_chars.yml +++ b/bukkit-loader/src/main/resources/resources/internal/configuration/offset_chars.yml @@ -2,264 +2,264 @@ images: internal:neg_1: height: -3 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf800' internal:neg_2: height: -4 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf801' internal:neg_3: height: -5 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf802' internal:neg_4: height: -6 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf803' internal:neg_5: height: -7 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf804' internal:neg_6: height: -8 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf805' internal:neg_7: height: -9 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf806' internal:neg_8: height: -10 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf807' internal:neg_9: height: -11 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf808' internal:neg_10: height: -12 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf809' internal:neg_11: height: -13 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf80a' internal:neg_12: height: -14 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf80b' internal:neg_13: height: -15 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf80c' internal:neg_14: height: -16 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf80d' internal:neg_15: height: -17 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf80e' internal:neg_16: height: -18 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf80f' internal:neg_24: height: -26 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf810' internal:neg_32: height: -34 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf811' internal:neg_48: height: -50 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf812' internal:neg_64: height: -66 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf813' internal:neg_128: height: -130 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf814' internal:neg_256: height: -258 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf815' internal:pos_1: height: -1 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf830' internal:pos_2: height: 1 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf831' internal:pos_3: height: 2 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf832' internal:pos_4: height: 3 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf833' internal:pos_5: height: 4 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf834' internal:pos_6: height: 5 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf835' internal:pos_7: height: 6 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf836' internal:pos_8: height: 7 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf837' internal:pos_9: height: 8 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf838' internal:pos_10: height: 9 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf839' internal:pos_11: height: 10 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf83a' internal:pos_12: height: 11 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf83b' internal:pos_13: height: 12 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf83c' internal:pos_14: height: 13 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf83d' internal:pos_15: height: 14 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf83e' internal:pos_16: height: 15 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf83f' internal:pos_24: height: 23 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf840' internal:pos_32: height: 31 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf841' internal:pos_48: height: 47 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf842' internal:pos_64: height: 63 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf843' internal:pos_128: height: 127 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf844' internal:pos_256: height: 255 ascent: -5000 - font: minecraft:offset_chars + font: minecraft:default file: minecraft:font/offset/space_split.png char: '\uf845' \ No newline at end of file From 0c4a0a4e3ddf4da3d0a4b59b4cbcc887802c9a1f Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sun, 23 Mar 2025 23:32:29 +0800 Subject: [PATCH 2/2] fix number argument --- bukkit-loader/src/main/resources/config.yml | 2 +- .../block/behavior/BukkitBlockBehaviors.java | 1 + .../behavior/ConcretePowderBlockBehavior.java | 8 ++++++ .../block/behavior/FallingBlockBehavior.java | 2 +- .../plugin/injector/BukkitInjector.java | 27 +++++++++++++++++-- .../config/template/TemplateManagerImpl.java | 2 ++ .../craftengine/mod/CraftEngineBlock.java | 14 +++++++--- .../shared/block/BlockBehavior.java | 6 ++--- 8 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java diff --git a/bukkit-loader/src/main/resources/config.yml b/bukkit-loader/src/main/resources/config.yml index c96d8c192..50cc92e09 100644 --- a/bukkit-loader/src/main/resources/config.yml +++ b/bukkit-loader/src/main/resources/config.yml @@ -100,7 +100,7 @@ resource-pack: path: "pack.mcmeta" resolution: type: merge_pack_mcmeta - description: "CraftEngine ResourcePack" + description: "CraftEngine ResourcePack" - term: type: exact path: "pack.png" diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehaviors.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehaviors.java index f50ba9570..2e414eacf 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehaviors.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehaviors.java @@ -11,6 +11,7 @@ public class BukkitBlockBehaviors extends BlockBehaviors { public static final Key STRIPPABLE_BLOCK = Key.from("craftengine:strippable_block"); public static final Key SAPLING_BLOCK = Key.from("craftengine:sapling_block"); public static final Key ON_LIQUID_BLOCK = Key.from("craftengine:on_liquid_block"); + public static final Key CONCRETE_POWDER_BLOCK = Key.from("craftengine:concrete_powder_block"); public static void init() { register(EMPTY, (block, args) -> EmptyBlockBehavior.INSTANCE); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java new file mode 100644 index 000000000..6d2dad7cb --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ConcretePowderBlockBehavior.java @@ -0,0 +1,8 @@ +package net.momirealms.craftengine.bukkit.block.behavior; + +public class ConcretePowderBlockBehavior extends FallingBlockBehavior { + + public ConcretePowderBlockBehavior(float hurtAmount, int maxHurt) { + super(hurtAmount, maxHurt); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FallingBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FallingBlockBehavior.java index 484726bfa..fa0e9a2e6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FallingBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FallingBlockBehavior.java @@ -77,7 +77,7 @@ public class FallingBlockBehavior extends BlockBehavior { } @Override - public void onBrokenAfterFall(Object thisBlock, Object[] args, Callable superMethod) throws Exception { + public void onBrokenAfterFall(Object thisBlock, Object[] args) throws Exception { // Use EntityRemoveEvent for 1.20.3+ if (VersionHelper.isVersionNewerThan1_20_3()) return; Object level = args[0]; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/BukkitInjector.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/BukkitInjector.java index 2c43e78a9..4e835a00f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/BukkitInjector.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/BukkitInjector.java @@ -228,6 +228,15 @@ public class BukkitInjector { .and(ElementMatchers.takesArgument(2, Reflections.clazz$FallingBlockEntity)) ) .intercept(MethodDelegation.to(OnBrokenAfterFallInterceptor.INSTANCE)) + // onLand + .method(ElementMatchers.takesArguments(5) + .and(ElementMatchers.takesArgument(0, Reflections.clazz$Level)) + .and(ElementMatchers.takesArgument(1, Reflections.clazz$BlockPos)) + .and(ElementMatchers.takesArgument(2, Reflections.clazz$BlockState)) + .and(ElementMatchers.takesArgument(3, Reflections.clazz$BlockState)) + .and(ElementMatchers.takesArgument(4, Reflections.clazz$FallingBlockEntity)) + ) + .intercept(MethodDelegation.to(OnLandInterceptor.INSTANCE)) // canSurvive .method(ElementMatchers.takesArguments(3) .and(ElementMatchers.takesArgument(0, Reflections.clazz$BlockState)) @@ -754,14 +763,28 @@ public class BukkitInjector { } } + public static class OnLandInterceptor { + public static final OnLandInterceptor INSTANCE = new OnLandInterceptor(); + + @RuntimeType + public void intercept(@This Object thisObj, @AllArguments Object[] args) { + ObjectHolder holder = ((BehaviorHolder) thisObj).getBehaviorHolder(); + try { + holder.value().onLand(thisObj, args); + } catch (Exception e) { + CraftEngine.instance().logger().severe("Failed to run onLand", e); + } + } + } + public static class OnBrokenAfterFallInterceptor { public static final OnBrokenAfterFallInterceptor INSTANCE = new OnBrokenAfterFallInterceptor(); @RuntimeType - public void intercept(@This Object thisObj, @AllArguments Object[] args, @SuperCall Callable superMethod) { + public void intercept(@This Object thisObj, @AllArguments Object[] args) { ObjectHolder holder = ((BehaviorHolder) thisObj).getBehaviorHolder(); try { - holder.value().onBrokenAfterFall(thisObj, args, superMethod); + holder.value().onBrokenAfterFall(thisObj, args); } catch (Exception e) { CraftEngine.instance().logger().severe("Failed to run onBrokenAfterFall", e); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/TemplateManagerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/TemplateManagerImpl.java index 0cf4b5cc2..e50fe5837 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/TemplateManagerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/TemplateManagerImpl.java @@ -217,6 +217,8 @@ public class TemplateManagerImpl implements TemplateManager { } else if (rawArgument == null) { // 使用 null 覆写其父参数内容 result.put(placeholder, NullTemplateArgument.INSTANCE); + } else if (rawArgument instanceof Number number) { + result.put(placeholder, new ObjectTemplateArgument(number)); } else { // 将参数字符串化后,应用参数再放入 Object applied = applyArgument(rawArgument.toString(), parentArguments); diff --git a/server-mod/src/main/java/net/momirealms/craftengine/mod/CraftEngineBlock.java b/server-mod/src/main/java/net/momirealms/craftengine/mod/CraftEngineBlock.java index caa871ddc..24e8c1533 100644 --- a/server-mod/src/main/java/net/momirealms/craftengine/mod/CraftEngineBlock.java +++ b/server-mod/src/main/java/net/momirealms/craftengine/mod/CraftEngineBlock.java @@ -107,10 +107,7 @@ public class CraftEngineBlock extends Block implements BehaviorHolder, ShapeHold @Override public void onBrokenAfterFall(@NotNull Level level, @NotNull BlockPos pos, @NotNull FallingBlockEntity fallingBlock) { try { - behaviorHolder.value().onBrokenAfterFall(this, new Object[]{level, pos, fallingBlock}, () -> { - Fallable.super.onBrokenAfterFall(level, pos, fallingBlock); - return null; - }); + behaviorHolder.value().onBrokenAfterFall(this, new Object[]{level, pos, fallingBlock}); } catch (Exception e) { e.printStackTrace(); Fallable.super.onBrokenAfterFall(level, pos, fallingBlock); @@ -209,4 +206,13 @@ public class CraftEngineBlock extends Block implements BehaviorHolder, ShapeHold e.printStackTrace(); } } + + @Override + public void onLand(@NotNull Level level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull BlockState replaceableState, @NotNull FallingBlockEntity fallingBlock) { + try { + behaviorHolder.value().onLand(this, new Object[]{level, pos, state, replaceableState, fallingBlock}); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/shared/src/main/java/net/momirealms/craftengine/shared/block/BlockBehavior.java b/shared/src/main/java/net/momirealms/craftengine/shared/block/BlockBehavior.java index 305439451..c263301b2 100644 --- a/shared/src/main/java/net/momirealms/craftengine/shared/block/BlockBehavior.java +++ b/shared/src/main/java/net/momirealms/craftengine/shared/block/BlockBehavior.java @@ -28,12 +28,10 @@ public abstract class BlockBehavior { return (boolean) superMethod.call(); } - public void onBrokenAfterFall(Object thisBlock, Object[] args, Callable superMethod) throws Exception { - superMethod.call(); + public void onBrokenAfterFall(Object thisBlock, Object[] args) throws Exception { } - public void onLand(Object thisBlock, Object[] args, Callable superMethod) throws Exception { - superMethod.call(); + public void onLand(Object thisBlock, Object[] args) throws Exception { } public boolean isValidBoneMealTarget(Object thisBlock, Object[] args) throws Exception {