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;
|
||||
|
||||
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.block.Biome;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.craftbukkit.v.block.CraftBlock;
|
||||
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;
|
||||
|
@ -30,13 +24,4 @@ public abstract class CraftBlockMixin {
|
|||
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.common.bridge.bukkit.EntityTypeBridge;
|
||||
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.util.ResourceLocationUtil;
|
||||
import io.izzel.arclight.common.mod.util.types.ArclightEnchantment;
|
||||
|
@ -62,6 +63,7 @@ import org.bukkit.potion.PotionEffectType;
|
|||
import org.bukkit.potion.PotionType;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
@ -108,6 +110,14 @@ public class BukkitRegistry {
|
|||
loadCreativeTab();
|
||||
loadSpawnCategory();
|
||||
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() {
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
"PluginClassLoaderMixin",
|
||||
"PotionEffectTypeMixin",
|
||||
"RecipeIteratorMixin",
|
||||
"Registry_SimpleRegistryMixin",
|
||||
"WatchdogThreadMixin"
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue
Block a user