9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2026-01-06 15:52:03 +00:00

使用snakeyaml取代

This commit is contained in:
XiaoMoMi
2025-06-29 01:40:16 +08:00
parent 72e4d7224b
commit 6c4e65eec6

View File

@@ -5,7 +5,6 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import dev.dejvokep.boostedyaml.YamlDocument;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntArrayList;
@@ -628,12 +627,16 @@ public final class BukkitBlockManager extends AbstractBlockManager {
if (!Files.exists(mappingsFile)) { if (!Files.exists(mappingsFile)) {
this.plugin.saveResource("mappings.yml"); this.plugin.saveResource("mappings.yml");
} }
Path additionalFile = this.plugin.dataFolderPath().resolve("additional-real-blocks.yml");
if (!Files.exists(additionalFile)) {
this.plugin.saveResource("additional-real-blocks.yml");
}
Yaml yaml = new Yaml(new StringKeyConstructor(mappingsFile, new LoaderOptions())); Yaml yaml = new Yaml(new StringKeyConstructor(mappingsFile, new LoaderOptions()));
try (InputStream inputStream = Files.newInputStream(mappingsFile)) { Map<Key, Integer> blockTypeCounter = new LinkedHashMap<>();
Map<String, String> blockStateMappings = loadBlockStateMappings(yaml.load(inputStream)); try (InputStream is = Files.newInputStream(mappingsFile)) {
Map<String, String> blockStateMappings = loadBlockStateMappings(yaml.load(is));
this.validateBlockStateMappings(mappingsFile, blockStateMappings); this.validateBlockStateMappings(mappingsFile, blockStateMappings);
Map<Integer, String> stateMap = new Int2ObjectOpenHashMap<>(); Map<Integer, String> stateMap = new Int2ObjectOpenHashMap<>();
Map<Key, Integer> blockTypeCounter = new LinkedHashMap<>();
Map<Integer, Integer> appearanceMapper = new Int2IntOpenHashMap(); Map<Integer, Integer> appearanceMapper = new Int2IntOpenHashMap();
Map<Key, List<Integer>> appearanceArranger = new HashMap<>(); Map<Key, List<Integer>> appearanceArranger = new HashMap<>();
for (Map.Entry<String, String> entry : blockStateMappings.entrySet()) { for (Map.Entry<String, String> entry : blockStateMappings.entrySet()) {
@@ -642,11 +645,14 @@ public final class BukkitBlockManager extends AbstractBlockManager {
this.blockAppearanceMapper = ImmutableMap.copyOf(appearanceMapper); this.blockAppearanceMapper = ImmutableMap.copyOf(appearanceMapper);
this.blockAppearanceArranger = ImmutableMap.copyOf(appearanceArranger); this.blockAppearanceArranger = ImmutableMap.copyOf(appearanceArranger);
this.plugin.logger().info("Freed " + this.blockAppearanceMapper.size() + " block state appearances."); this.plugin.logger().info("Freed " + this.blockAppearanceMapper.size() + " block state appearances.");
YamlDocument additionalYaml = Config.instance().loadOrCreateYamlData("additional-real-blocks.yml");
this.registeredRealBlockSlots = this.buildRegisteredRealBlockSlots(blockTypeCounter, additionalYaml);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException("Failed to init mappings.yml", e); throw new RuntimeException("Failed to init mappings.yml", e);
} }
try (InputStream is = Files.newInputStream(additionalFile)) {
this.registeredRealBlockSlots = this.buildRegisteredRealBlockSlots(blockTypeCounter, yaml.load(is));
} catch (IOException e) {
throw new RuntimeException("Failed to init additional-real-blocks.yml", e);
}
} }
private void recordVanillaNoteBlocks() { private void recordVanillaNoteBlocks() {
@@ -751,11 +757,11 @@ public final class BukkitBlockManager extends AbstractBlockManager {
} }
} }
private LinkedHashMap<Key, Integer> buildRegisteredRealBlockSlots(Map<Key, Integer> counter, YamlDocument additionalYaml) { private LinkedHashMap<Key, Integer> buildRegisteredRealBlockSlots(Map<Key, Integer> counter, Map<String, Object> additionalYaml) {
LinkedHashMap<Key, Integer> map = new LinkedHashMap<>(); LinkedHashMap<Key, Integer> map = new LinkedHashMap<>();
for (Map.Entry<Key, Integer> entry : counter.entrySet()) { for (Map.Entry<Key, Integer> entry : counter.entrySet()) {
String id = entry.getKey().toString(); String id = entry.getKey().toString();
int additionalStates = additionalYaml.getInt(id, 0); int additionalStates = (int) additionalYaml.getOrDefault(id, 0);
int internalIds = entry.getValue() + additionalStates; int internalIds = entry.getValue() + additionalStates;
plugin.logger().info("Loaded " + id + " with " + entry.getValue() + " appearances and " + internalIds + " real block states"); plugin.logger().info("Loaded " + id + " with " + entry.getValue() + " appearances and " + internalIds + " real block states");
map.put(entry.getKey(), internalIds); map.put(entry.getKey(), internalIds);