Fix bukkit biome registry crash (#829)
This commit is contained in:
parent
b8adaabac5
commit
9a6b8a73bf
|
@ -0,0 +1,6 @@
|
||||||
|
package io.izzel.arclight.common.bridge.bukkit;
|
||||||
|
|
||||||
|
public interface SimpleRegistryBridge {
|
||||||
|
|
||||||
|
void bridge$reload();
|
||||||
|
}
|
|
@ -1,16 +1,10 @@
|
||||||
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 net.minecraft.core.Holder;
|
|
||||||
import net.minecraft.core.Registry;
|
|
||||||
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.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;
|
||||||
|
@ -30,13 +24,4 @@ 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(Registry<net.minecraft.world.level.biome.Biome> registry, Holder<net.minecraft.world.level.biome.Biome> base) {
|
|
||||||
return Biome.valueOf(ResourceLocationUtil.standardize(ForgeRegistries.BIOMES.getKey(base.value())));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package io.izzel.arclight.common.mixin.bukkit;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import io.izzel.arclight.common.bridge.bukkit.SimpleRegistryBridge;
|
||||||
|
import org.bukkit.Keyed;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.Registry;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Mutable;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
@Mixin(Registry.SimpleRegistry.class)
|
||||||
|
public class Registry_SimpleRegistryMixin<T extends Enum<T> & Keyed> implements SimpleRegistryBridge {
|
||||||
|
|
||||||
|
@Shadow @Final @Mutable private Map<NamespacedKey, T> map;
|
||||||
|
|
||||||
|
private Runnable arclight$reloadCallback;
|
||||||
|
|
||||||
|
@Inject(method = "<init>(Ljava/lang/Class;Ljava/util/function/Predicate;)V", at = @At("RETURN"))
|
||||||
|
private void arclight$init(Class<T> type, Predicate<T> predicate, CallbackInfo ci) {
|
||||||
|
this.arclight$reloadCallback = () -> {
|
||||||
|
ImmutableMap.Builder<NamespacedKey, T> builder = ImmutableMap.builder();
|
||||||
|
|
||||||
|
for (T entry : type.getEnumConstants()) {
|
||||||
|
if (predicate.test(entry)) {
|
||||||
|
builder.put(entry.getKey(), entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
map = builder.build();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void bridge$reload() {
|
||||||
|
this.arclight$reloadCallback.run();
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,6 +10,7 @@ import io.izzel.arclight.api.EnumHelper;
|
||||||
import io.izzel.arclight.api.Unsafe;
|
import io.izzel.arclight.api.Unsafe;
|
||||||
import io.izzel.arclight.common.bridge.bukkit.EntityTypeBridge;
|
import io.izzel.arclight.common.bridge.bukkit.EntityTypeBridge;
|
||||||
import io.izzel.arclight.common.bridge.bukkit.MaterialBridge;
|
import io.izzel.arclight.common.bridge.bukkit.MaterialBridge;
|
||||||
|
import io.izzel.arclight.common.bridge.bukkit.SimpleRegistryBridge;
|
||||||
import io.izzel.arclight.common.mod.ArclightMod;
|
import io.izzel.arclight.common.mod.ArclightMod;
|
||||||
import io.izzel.arclight.common.mod.util.ResourceLocationUtil;
|
import io.izzel.arclight.common.mod.util.ResourceLocationUtil;
|
||||||
import io.izzel.arclight.common.mod.util.types.ArclightEnchantment;
|
import io.izzel.arclight.common.mod.util.types.ArclightEnchantment;
|
||||||
|
@ -62,6 +63,7 @@ import org.bukkit.potion.PotionEffectType;
|
||||||
import org.bukkit.potion.PotionType;
|
import org.bukkit.potion.PotionType;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -108,6 +110,14 @@ public class BukkitRegistry {
|
||||||
loadCreativeTab();
|
loadCreativeTab();
|
||||||
loadSpawnCategory();
|
loadSpawnCategory();
|
||||||
loadEndDragonPhase();
|
loadEndDragonPhase();
|
||||||
|
try {
|
||||||
|
for (var field : org.bukkit.Registry.class.getFields()) {
|
||||||
|
if (Modifier.isStatic(field.getModifiers()) && field.get(null) instanceof org.bukkit.Registry.SimpleRegistry<?> registry) {
|
||||||
|
((SimpleRegistryBridge) (Object) registry).bridge$reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Throwable ignored) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void loadEndDragonPhase() {
|
private static void loadEndDragonPhase() {
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
"PluginClassLoaderMixin",
|
"PluginClassLoaderMixin",
|
||||||
"PotionEffectTypeMixin",
|
"PotionEffectTypeMixin",
|
||||||
"RecipeIteratorMixin",
|
"RecipeIteratorMixin",
|
||||||
|
"Registry_SimpleRegistryMixin",
|
||||||
"WatchdogThreadMixin"
|
"WatchdogThreadMixin"
|
||||||
]
|
]
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user