Several registries.
This commit is contained in:
parent
4079a7f421
commit
89c108d1f3
|
@ -30,6 +30,8 @@ public class SwitchTableFixer implements Implementer {
|
||||||
.add("org/bukkit/Material")
|
.add("org/bukkit/Material")
|
||||||
.add("org/bukkit/entity/EntityType")
|
.add("org/bukkit/entity/EntityType")
|
||||||
.add("org/bukkit/World$Environment")
|
.add("org/bukkit/World$Environment")
|
||||||
|
.add("org/bukkit/entity/Villager$Profession")
|
||||||
|
.add("org/bukkit/block/Biome")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public byte[] processClass(byte[] bytes) {
|
public byte[] processClass(byte[] bytes) {
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
package io.izzel.arclight.common.mixin.bukkit;
|
package io.izzel.arclight.common.mixin.bukkit;
|
||||||
|
|
||||||
import io.izzel.arclight.common.bridge.bukkit.MaterialBridge;
|
import io.izzel.arclight.common.bridge.bukkit.MaterialBridge;
|
||||||
|
import io.izzel.arclight.common.mod.util.ResourceLocationUtil;
|
||||||
import io.izzel.arclight.i18n.conf.MaterialPropertySpec;
|
import io.izzel.arclight.i18n.conf.MaterialPropertySpec;
|
||||||
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.craftbukkit.v.block.CraftBlock;
|
import org.bukkit.craftbukkit.v.block.CraftBlock;
|
||||||
|
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
@ -25,4 +30,22 @@ public abstract class CraftBlockMixin {
|
||||||
cir.setReturnValue(bridge.bridge$blockStateFactory().apply((CraftBlock) (Object) this));
|
cir.setReturnValue(bridge.bridge$blockStateFactory().apply((CraftBlock) (Object) this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author IzzelAliz
|
||||||
|
* @reason
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public static Biome biomeBaseToBiome(net.minecraft.world.biome.Biome base) {
|
||||||
|
return Biome.valueOf(ResourceLocationUtil.standardize(base.getRegistryName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author IzzelAliz
|
||||||
|
* @reason
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public static net.minecraft.world.biome.Biome biomeToBiomeBase(Biome bio) {
|
||||||
|
return ForgeRegistries.BIOMES.getValue(CraftNamespacedKey.toMinecraft(bio.getKey()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
package io.izzel.arclight.common.mixin.bukkit;
|
||||||
|
|
||||||
|
import io.izzel.arclight.common.mod.util.ResourceLocationUtil;
|
||||||
|
import net.minecraft.entity.merchant.villager.VillagerProfession;
|
||||||
|
import org.bukkit.craftbukkit.v.entity.CraftVillager;
|
||||||
|
import org.bukkit.entity.Villager;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
|
|
||||||
|
@Mixin(CraftVillager.class)
|
||||||
|
public class CraftVillagerMixin {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author IzzelAliz
|
||||||
|
* @reason
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public static Villager.Profession nmsToBukkitProfession(VillagerProfession nms) {
|
||||||
|
return Villager.Profession.valueOf(ResourceLocationUtil.standardize(nms.getRegistryName()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,6 +14,7 @@ import io.izzel.arclight.i18n.ArclightConfig;
|
||||||
import io.izzel.arclight.i18n.conf.EntityPropertySpec;
|
import io.izzel.arclight.i18n.conf.EntityPropertySpec;
|
||||||
import io.izzel.arclight.i18n.conf.MaterialPropertySpec;
|
import io.izzel.arclight.i18n.conf.MaterialPropertySpec;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.entity.merchant.villager.VillagerProfession;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.potion.Effect;
|
import net.minecraft.potion.Effect;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
@ -26,16 +27,20 @@ import net.minecraftforge.registries.IForgeRegistry;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.craftbukkit.v.CraftCrashReport;
|
import org.bukkit.craftbukkit.v.CraftCrashReport;
|
||||||
import org.bukkit.craftbukkit.v.enchantments.CraftEnchantment;
|
import org.bukkit.craftbukkit.v.enchantments.CraftEnchantment;
|
||||||
import org.bukkit.craftbukkit.v.util.CraftMagicNumbers;
|
import org.bukkit.craftbukkit.v.util.CraftMagicNumbers;
|
||||||
|
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -60,6 +65,56 @@ public class BukkitRegistry {
|
||||||
loadPotions();
|
loadPotions();
|
||||||
loadEnchantments();
|
loadEnchantments();
|
||||||
loadEntities();
|
loadEntities();
|
||||||
|
loadVillagerProfessions();
|
||||||
|
loadBiomes();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void loadBiomes() {
|
||||||
|
int i = Biome.values().length;
|
||||||
|
List<Biome> newTypes = new ArrayList<>();
|
||||||
|
Field key = Arrays.stream(Biome.class.getDeclaredFields()).filter(it -> it.getName().equals("key")).findAny().orElse(null);
|
||||||
|
long keyOffset = Unsafe.objectFieldOffset(key);
|
||||||
|
for (net.minecraft.world.biome.Biome biome : ForgeRegistries.BIOMES) {
|
||||||
|
String name = ResourceLocationUtil.standardize(biome.getRegistryName());
|
||||||
|
Biome bukkit;
|
||||||
|
try {
|
||||||
|
bukkit = Biome.valueOf(name);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
bukkit = null;
|
||||||
|
}
|
||||||
|
if (bukkit == null) {
|
||||||
|
bukkit = EnumHelper.makeEnum(Biome.class, name, i++, ImmutableList.of(), ImmutableList.of());
|
||||||
|
newTypes.add(bukkit);
|
||||||
|
Unsafe.putObject(bukkit, keyOffset, CraftNamespacedKey.fromMinecraft(biome.getRegistryName()));
|
||||||
|
ArclightMod.LOGGER.debug("Registered {} as biome {}", biome.getRegistryName(), bukkit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EnumHelper.addEnums(Biome.class, newTypes);
|
||||||
|
ArclightMod.LOGGER.info("registry.biome", newTypes.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void loadVillagerProfessions() {
|
||||||
|
int i = Villager.Profession.values().length;
|
||||||
|
List<Villager.Profession> newTypes = new ArrayList<>();
|
||||||
|
Field key = Arrays.stream(Villager.Profession.class.getDeclaredFields()).filter(it -> it.getName().equals("key")).findAny().orElse(null);
|
||||||
|
long keyOffset = Unsafe.objectFieldOffset(key);
|
||||||
|
for (VillagerProfession villagerProfession : ForgeRegistries.PROFESSIONS) {
|
||||||
|
String name = ResourceLocationUtil.standardize(villagerProfession.getRegistryName());
|
||||||
|
Villager.Profession profession;
|
||||||
|
try {
|
||||||
|
profession = Villager.Profession.valueOf(name);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
profession = null;
|
||||||
|
}
|
||||||
|
if (profession == null) {
|
||||||
|
profession = EnumHelper.makeEnum(Villager.Profession.class, name, i++, ImmutableList.of(), ImmutableList.of());
|
||||||
|
newTypes.add(profession);
|
||||||
|
Unsafe.putObject(profession, keyOffset, CraftNamespacedKey.fromMinecraft(villagerProfession.getRegistryName()));
|
||||||
|
ArclightMod.LOGGER.debug("Registered {} as villager profession {}", villagerProfession.getRegistryName(), profession);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EnumHelper.addEnums(Villager.Profession.class, newTypes);
|
||||||
|
ArclightMod.LOGGER.info("registry.villager-profession", newTypes.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerEnvironments() {
|
public static void registerEnvironments() {
|
||||||
|
@ -73,7 +128,7 @@ public class BukkitRegistry {
|
||||||
environment = EnumHelper.makeEnum(World.Environment.class, name, i++, ENV_CTOR, ImmutableList.of(actual.getId()));
|
environment = EnumHelper.makeEnum(World.Environment.class, name, i++, ENV_CTOR, ImmutableList.of(actual.getId()));
|
||||||
newTypes.add(environment);
|
newTypes.add(environment);
|
||||||
ENVIRONMENT_MAP.put(actual.getId(), environment);
|
ENVIRONMENT_MAP.put(actual.getId(), environment);
|
||||||
ArclightMod.LOGGER.debug("Registered {} as entity {}", actual.getRegistryName(), environment);
|
ArclightMod.LOGGER.debug("Registered {} as environment {}", actual.getRegistryName(), environment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EnumHelper.addEnums(World.Environment.class, newTypes);
|
EnumHelper.addEnums(World.Environment.class, newTypes);
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"CraftLegacyMixin",
|
"CraftLegacyMixin",
|
||||||
"CraftMagicNumbersMixin",
|
"CraftMagicNumbersMixin",
|
||||||
"CraftServerMixin",
|
"CraftServerMixin",
|
||||||
|
"CraftVillagerMixin",
|
||||||
"CraftWorldMixin",
|
"CraftWorldMixin",
|
||||||
"EntityTypeMixin",
|
"EntityTypeMixin",
|
||||||
"JavaPluginLoaderMixin",
|
"JavaPluginLoaderMixin",
|
||||||
|
|
|
@ -53,6 +53,8 @@ registry {
|
||||||
material = "注册了 {} 个材料,其中 {} 个方块 {} 个物品"
|
material = "注册了 {} 个材料,其中 {} 个方块 {} 个物品"
|
||||||
entity-type = "注册了 {} 个新的生物类型"
|
entity-type = "注册了 {} 个新的生物类型"
|
||||||
environment = "注册了 {} 个新的世界类型"
|
environment = "注册了 {} 个新的世界类型"
|
||||||
|
villager-profession = "注册了 {} 个新的村民职业"
|
||||||
|
biome = "注册了 {} 个新的生物群系"
|
||||||
meta-type {
|
meta-type {
|
||||||
not-subclass = "{} 不是 {} 的子类"
|
not-subclass = "{} 不是 {} 的子类"
|
||||||
error = "{} 提供的 itemMetaType {} 无效: {}"
|
error = "{} 提供的 itemMetaType {} 无效: {}"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user