9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-27 02:49:15 +00:00

修复了新版本不加载

This commit is contained in:
XiaoMoMi
2025-04-14 04:22:51 +08:00
parent 26f3a84a42
commit d693e5f31c
2 changed files with 22 additions and 3 deletions

View File

@@ -1,5 +1,6 @@
package net.momirealms.craftengine.mod.block;
import net.minecraft.commands.arguments.blocks.BlockStateParser;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
@@ -12,14 +13,15 @@ import net.momirealms.craftengine.mod.CraftEnginePlugin;
import net.momirealms.craftengine.mod.util.NoteBlockUtils;
import net.momirealms.craftengine.mod.util.Reflections;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.craftbukkit.block.data.CraftBlockData;
import java.io.StringReader;
import java.lang.reflect.InvocationTargetException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
public class CustomBlocks {
@@ -120,8 +122,12 @@ public class CustomBlocks {
private static BlockState createBlockData(String blockState) {
try {
CraftBlockData data = CraftBlockData.newData(null, blockState);
return data.getState();
Object holderLookUp = BuiltInRegistries.BLOCK;
if (Reflections.method$Registry$asLookup != null) {
holderLookUp = Reflections.method$Registry$asLookup.invoke(holderLookUp);
}
BlockStateParser.BlockResult result = (BlockStateParser.BlockResult) Reflections.method$BlockStateParser$parseForBlock.invoke(null, holderLookUp, blockState, false);
return result.blockState();
} catch (Exception e) {
e.printStackTrace();
return null;

View File

@@ -1,6 +1,9 @@
package net.momirealms.craftengine.mod.util;
import net.minecraft.commands.arguments.blocks.BlockStateParser;
import net.minecraft.core.DefaultedRegistry;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.state.BlockBehaviour;
@@ -21,4 +24,14 @@ public class Reflections {
public static final Field field$BlockBehaviour$Properties$id = ReflectionUtils.getDeclaredField(
BlockBehaviour.Properties.class, ResourceKey.class, 0
);
public static final Method method$BlockStateParser$parseForBlock = requireNonNull(
ReflectionUtils.getStaticMethod(
BlockStateParser.class, BlockStateParser.BlockResult.class, new String[]{"parseForBlock"}, HolderLookup.class, String.class, boolean.class
)
);
public static final Method method$Registry$asLookup = ReflectionUtils.getMethod(
Registry.class, new String[]{"asLookup"}
);
}