diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java index abcf5d08f..d37556692 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java @@ -417,9 +417,20 @@ public final class BukkitBlockManager extends AbstractBlockManager { @SuppressWarnings("unchecked") private void deceiveBukkitRegistry() { try { + Material material; + try { + material = Material.valueOf(Config.deceiveBukkitMaterial().value().toUpperCase(Locale.ROOT)); + } catch (IllegalArgumentException e) { + this.plugin.logger().warn(Config.deceiveBukkitMaterial() + " is not a valid material", e); + material = Material.STONE; + } + if (!material.isBlock()) { + this.plugin.logger().warn(Config.deceiveBukkitMaterial() + " is not a valid bukkit block material"); + material = Material.STONE; + } Map magicMap = (Map) CraftBukkitReflections.field$CraftMagicNumbers$BLOCK_MATERIAL.get(null); for (DelegatingBlock customBlock : this.customBlocks) { - magicMap.put(customBlock, Material.STONE); + magicMap.put(customBlock, material); } } catch (ReflectiveOperationException e) { this.plugin.logger().warn("Failed to deceive bukkit magic blocks", e); diff --git a/common-files/src/main/resources/config.yml b/common-files/src/main/resources/config.yml index a555e731e..56bbd8b53 100644 --- a/common-files/src/main/resources/config.yml +++ b/common-files/src/main/resources/config.yml @@ -233,6 +233,9 @@ block: enable: false interval: 10 extended-interaction-range: 0.5 + # Defines the value returned by Bukkit block.getMaterial() + # If another plugin causes incompatibility due to its reliance on this method, try changing this option to a different vanilla block. + deceive-bukkit-material: stone furniture: # Hide technical entities used for storing furniture metadata. diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java index 3e6f061e0..8a061351e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java @@ -125,6 +125,7 @@ public class Config { protected int block$predict_breaking_interval; protected double block$extended_interaction_range; protected boolean block$chunk_relighter; + protected Key block$deceive_bukkit_material; protected int block$serverside_blocks = -1; protected boolean recipe$enable; @@ -436,6 +437,7 @@ public class Config { block$predict_breaking_interval = Math.max(config.getInt("block.predict-breaking.interval", 10), 1); block$extended_interaction_range = Math.max(config.getDouble("block.predict-breaking.extended-interaction-range", 0.5), 0.0); block$chunk_relighter = config.getBoolean("block.chunk-relighter", true); + block$deceive_bukkit_material = Key.of(config.getString("block.deceive-bukkit-material", "stone")); if (firstTime) { block$serverside_blocks = Math.min(config.getInt("block.serverside-blocks", 2000), 10_0000); if (block$serverside_blocks < 0) block$serverside_blocks = 0; @@ -770,6 +772,10 @@ public class Config { return instance.resource_pack$protection$obfuscation$resource_location$bypass_equipments; } + public static Key deceiveBukkitMaterial() { + return instance.block$deceive_bukkit_material; + } + public static boolean generateModAssets() { return instance.resource_pack$generate_mod_assets; } diff --git a/gradle.properties b/gradle.properties index 1013b7096..97dfe4633 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] project_version=0.0.64.7 -config_version=48 +config_version=49 lang_version=34 project_group=net.momirealms latest_supported_version=1.21.10