From b7e0f308982a6d51f259c2b1294be83ba21f5e90 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Tue, 7 Jul 2020 20:59:04 +0800 Subject: [PATCH] Update bukkit registry related parts. --- .../arclight/common/asm/SwitchTableFixer.java | 1 + .../common/bridge/bukkit/MaterialBridge.java | 4 ++++ .../common/mixin/bukkit/MaterialMixin.java | 21 +++++++++++++++---- .../common/mod/server/BukkitRegistry.java | 12 +++++++++++ .../i18n/conf/MaterialPropertySpec.java | 2 +- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/asm/SwitchTableFixer.java b/arclight-common/src/main/java/io/izzel/arclight/common/asm/SwitchTableFixer.java index 0b09976e..64b7c2a0 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/asm/SwitchTableFixer.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/asm/SwitchTableFixer.java @@ -28,6 +28,7 @@ public class SwitchTableFixer implements Implementer { private static final Marker MARKER = MarkerManager.getMarker("SWITCH_TABLE"); private static final Set ENUMS = ImmutableSet.builder() .add("org/bukkit/Material") + .add("org/bukkit/entity/EntityType") .build(); public byte[] processClass(byte[] bytes) { diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/bukkit/MaterialBridge.java b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/bukkit/MaterialBridge.java index 3051f155..7c55614b 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/bukkit/MaterialBridge.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/bukkit/MaterialBridge.java @@ -18,6 +18,10 @@ public interface MaterialBridge { void bridge$setupItem(ResourceLocation key, Item item, MaterialPropertySpec spec); + void bridge$setBlock(); + + void bridge$setItem(); + @Nullable MaterialPropertySpec bridge$getSpec(); diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/MaterialMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/MaterialMixin.java index 8dfda531..b9589425 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/MaterialMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/MaterialMixin.java @@ -88,18 +88,29 @@ public abstract class MaterialMixin implements MaterialBridge { private MaterialPropertySpec.MaterialType arclight$type = MaterialPropertySpec.MaterialType.VANILLA; private MaterialPropertySpec arclight$spec; + private boolean arclight$block = false, arclight$item = false; + + @Override + public void bridge$setBlock() { + this.arclight$block = true; + } + + @Override + public void bridge$setItem() { + this.arclight$item = true; + } @Inject(method = "isBlock", cancellable = true, at = @At("HEAD")) private void arclight$isBlock(CallbackInfoReturnable cir) { if (arclight$type != MaterialPropertySpec.MaterialType.VANILLA) { - cir.setReturnValue(arclight$type == MaterialPropertySpec.MaterialType.FORGE_BLOCK); + cir.setReturnValue(arclight$block); } } @Inject(method = "isItem", cancellable = true, at = @At("HEAD")) private void arclight$isItem(CallbackInfoReturnable cir) { if (arclight$type != MaterialPropertySpec.MaterialType.VANILLA) { - cir.setReturnValue(arclight$type == MaterialPropertySpec.MaterialType.FORGE_ITEM); + cir.setReturnValue(arclight$item); } } @@ -238,14 +249,16 @@ public abstract class MaterialMixin implements MaterialBridge { @Override public void bridge$setupBlock(ResourceLocation key, Block block, MaterialPropertySpec spec) { this.arclight$spec = spec.clone(); - arclight$type = MaterialPropertySpec.MaterialType.FORGE_BLOCK; + arclight$type = MaterialPropertySpec.MaterialType.FORGE; + arclight$block = true; arclight$setupCommon(key, block, block.asItem()); } @Override public void bridge$setupItem(ResourceLocation key, Item item, MaterialPropertySpec spec) { this.arclight$spec = spec.clone(); - arclight$type = MaterialPropertySpec.MaterialType.FORGE_ITEM; + arclight$type = MaterialPropertySpec.MaterialType.FORGE; + arclight$item = true; arclight$setupCommon(key, null, item); } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/BukkitRegistry.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/BukkitRegistry.java index 92b20128..d917086a 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/BukkitRegistry.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/server/BukkitRegistry.java @@ -129,6 +129,12 @@ public class BukkitRegistry { } BLOCK_MATERIAL.put(block, material); MATERIAL_BLOCK.put(material, block); + Item value = ForgeRegistries.ITEMS.getValue(location); + if (value != null) { + ((MaterialBridge) (Object) material).bridge$setItem(); + ITEM_MATERIAL.put(value, material); + MATERIAL_ITEM.put(material, value); + } } for (Map.Entry entry : ForgeRegistries.ITEMS.getEntries()) { ResourceLocation location = entry.getKey(); @@ -146,6 +152,12 @@ public class BukkitRegistry { } ITEM_MATERIAL.put(item, material); MATERIAL_ITEM.put(material, item); + Block value = ForgeRegistries.BLOCKS.getValue(location); + if (value != null) { + ((MaterialBridge) (Object) material).bridge$setBlock(); + BLOCK_MATERIAL.put(value, material); + MATERIAL_BLOCK.put(material, value); + } } EnumHelper.addEnums(Material.class, list); ArclightMod.LOGGER.info("registry.material", i - origin, blocks, items); diff --git a/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/MaterialPropertySpec.java b/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/MaterialPropertySpec.java index 2877beb5..b1b84bd1 100644 --- a/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/MaterialPropertySpec.java +++ b/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/MaterialPropertySpec.java @@ -75,6 +75,6 @@ public class MaterialPropertySpec implements Cloneable { } public enum MaterialType { - VANILLA, FORGE_BLOCK, FORGE_ITEM + VANILLA, FORGE } }