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/entity/EntityType")
|
||||
.add("org/bukkit/World$Environment")
|
||||
.add("org/bukkit/entity/Villager$Profession")
|
||||
.add("org/bukkit/block/Biome")
|
||||
.build();
|
||||
|
||||
public byte[] processClass(byte[] bytes) {
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
package io.izzel.arclight.common.mixin.bukkit;
|
||||
|
||||
import io.izzel.arclight.common.bridge.bukkit.MaterialBridge;
|
||||
import io.izzel.arclight.common.mod.util.ResourceLocationUtil;
|
||||
import io.izzel.arclight.i18n.conf.MaterialPropertySpec;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.BlockState;
|
||||
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.Overwrite;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
|
@ -25,4 +30,22 @@ public abstract class CraftBlockMixin {
|
|||
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.MaterialPropertySpec;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.merchant.villager.VillagerProfession;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.potion.Effect;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
@ -26,16 +27,20 @@ import net.minecraftforge.registries.IForgeRegistry;
|
|||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.craftbukkit.v.CraftCrashReport;
|
||||
import org.bukkit.craftbukkit.v.enchantments.CraftEnchantment;
|
||||
import org.bukkit.craftbukkit.v.util.CraftMagicNumbers;
|
||||
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Villager;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
@ -60,6 +65,56 @@ public class BukkitRegistry {
|
|||
loadPotions();
|
||||
loadEnchantments();
|
||||
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() {
|
||||
|
@ -73,7 +128,7 @@ public class BukkitRegistry {
|
|||
environment = EnumHelper.makeEnum(World.Environment.class, name, i++, ENV_CTOR, ImmutableList.of(actual.getId()));
|
||||
newTypes.add(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);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
"CraftLegacyMixin",
|
||||
"CraftMagicNumbersMixin",
|
||||
"CraftServerMixin",
|
||||
"CraftVillagerMixin",
|
||||
"CraftWorldMixin",
|
||||
"EntityTypeMixin",
|
||||
"JavaPluginLoaderMixin",
|
||||
|
|
|
@ -53,6 +53,8 @@ registry {
|
|||
material = "注册了 {} 个材料,其中 {} 个方块 {} 个物品"
|
||||
entity-type = "注册了 {} 个新的生物类型"
|
||||
environment = "注册了 {} 个新的世界类型"
|
||||
villager-profession = "注册了 {} 个新的村民职业"
|
||||
biome = "注册了 {} 个新的生物群系"
|
||||
meta-type {
|
||||
not-subclass = "{} 不是 {} 的子类"
|
||||
error = "{} 提供的 itemMetaType {} 无效: {}"
|
||||
|
|
Loading…
Reference in New Issue
Block a user