From 3c3ad096f1bd1bcae72bf8e709c063ffeeae8287 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Thu, 30 Oct 2025 05:57:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BAdebug=E5=88=86=E9=85=8D?= =?UTF-8?q?=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DebugAppearanceStateUsageCommand.java | 26 +++++++++++---- .../feature/DebugRealStateUsageCommand.java | 33 ++++++++++++++----- .../core/pack/allocator/IdAllocator.java | 6 ++++ .../allocator/VisualBlockStateAllocator.java | 6 ++++ 4 files changed, 57 insertions(+), 14 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugAppearanceStateUsageCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugAppearanceStateUsageCommand.java index 78b10ff30..8ee679ec6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugAppearanceStateUsageCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugAppearanceStateUsageCommand.java @@ -20,7 +20,9 @@ import org.incendo.cloud.suggestion.Suggestion; import org.incendo.cloud.suggestion.SuggestionProvider; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.CompletableFuture; public class DebugAppearanceStateUsageCommand extends BukkitCommandFeature { @@ -48,18 +50,30 @@ public class DebugAppearanceStateUsageCommand extends BukkitCommandFeature cachedStates = allocator.cachedBlockStates(); + Map reversed = new HashMap<>(cachedStates.size()); + for (Map.Entry entry : cachedStates.entrySet()) { + reversed.put(entry.getValue(), entry.getKey()); + } List batch = new ArrayList<>(); for (BlockStateWrapper appearance : appearances) { Component text = Component.text("|"); List reals = blockManager.appearanceToRealStates(appearance.registryId()); if (reals.isEmpty()) { - Component hover = Component.text(baseBlockId.value() + ":" + i).color(NamedTextColor.GREEN); - hover = hover.append(Component.newline()).append(Component.text(appearance.getAsString()).color(NamedTextColor.GREEN)); - text = text.color(NamedTextColor.GREEN).hoverEvent(HoverEvent.showText(hover)); + String cached = reversed.get(appearance); + if (cached != null) { + Component hover = Component.text("[Inactive] " + baseBlockId.value() + ":" + i).color(NamedTextColor.GRAY); + hover = hover.append(Component.newline()).append(Component.text(cached).color(NamedTextColor.GRAY)); + text = text.color(NamedTextColor.GRAY).hoverEvent(HoverEvent.showText(hover)); + } else { + Component hover = Component.text("[Available] " + baseBlockId.value() + ":" + i).color(NamedTextColor.GREEN); + hover = hover.append(Component.newline()).append(Component.text(appearance.getAsString()).color(NamedTextColor.GREEN)); + text = text.color(NamedTextColor.GREEN).hoverEvent(HoverEvent.showText(hover)); + } } else { - boolean isFixed = allocator.isForcedState(appearance); - NamedTextColor namedTextColor = isFixed ? NamedTextColor.RED : NamedTextColor.YELLOW; - Component hover = Component.text(baseBlockId.value() + ":" + i).color(namedTextColor); + boolean forced = allocator.isForcedState(appearance); + NamedTextColor namedTextColor = forced ? NamedTextColor.RED : NamedTextColor.YELLOW; + Component hover = Component.text((forced ? "[Forced] " : "[Auto] ") + baseBlockId.value() + ":" + i).color(namedTextColor); List hoverChildren = new ArrayList<>(); hoverChildren.add(Component.newline()); hoverChildren.add(Component.text(appearance.getAsString()).color(namedTextColor)); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugRealStateUsageCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugRealStateUsageCommand.java index 14e9888d9..c5e6151d4 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugRealStateUsageCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugRealStateUsageCommand.java @@ -14,8 +14,7 @@ import net.momirealms.craftengine.core.plugin.config.Config; import org.bukkit.command.CommandSender; import org.incendo.cloud.Command; -import java.util.ArrayList; -import java.util.List; +import java.util.*; public class DebugRealStateUsageCommand extends BukkitCommandFeature { @@ -31,16 +30,34 @@ public class DebugRealStateUsageCommand extends BukkitCommandFeature batch = new ArrayList<>(100); IdAllocator idAllocator = blockManager.blockParser().internalIdAllocator(); + Map cachedIds = idAllocator.cachedIdMap(); + Map reversedCachedIds = new HashMap<>(cachedIds.size()); + for (Map.Entry entry : cachedIds.entrySet()) { + reversedCachedIds.put(entry.getValue(), entry.getKey()); + } for (int i = 0; i < Config.serverSideBlocks(); i++) { ImmutableBlockState state = blockManager.getImmutableBlockStateUnsafe(i + blockManager.vanillaBlockStateCount()); if (state.isEmpty()) { - Component hover = Component.text(BlockManager.createCustomBlockKey(i).asString()).color(NamedTextColor.GREEN); - batch.add(Component.text("|").color(NamedTextColor.GREEN).hoverEvent(HoverEvent.showText(hover))); + String cached = reversedCachedIds.get(i); + if (cached == null) { + Component hover = Component.text("[Available] " + BlockManager.createCustomBlockKey(i).asString()).color(NamedTextColor.GREEN); + batch.add(Component.text("|").color(NamedTextColor.GREEN).hoverEvent(HoverEvent.showText(hover))); + } else { + Component hover = Component.text(BlockManager.createCustomBlockKey(i).asString()).color(NamedTextColor.GRAY); + hover = hover.append(Component.newline()).append(Component.text("[Inactive] " + cached).color(NamedTextColor.GRAY)); + batch.add(Component.text("|").color(NamedTextColor.GRAY).hoverEvent(HoverEvent.showText(hover))); + } } else { - NamedTextColor namedTextColor = idAllocator.isForced(state.toString()) ? NamedTextColor.RED : NamedTextColor.YELLOW; - Component hover = Component.text(BlockManager.createCustomBlockKey(i).asString()).color(namedTextColor); - hover = hover.append(Component.newline()).append(Component.text(state.toString()).color(NamedTextColor.GRAY)); - batch.add(Component.text("|").color(namedTextColor).hoverEvent(HoverEvent.showText(hover))); + boolean forced = idAllocator.isForced(state.toString()); + if (forced) { + Component hover = Component.text("[Forced] " + BlockManager.createCustomBlockKey(i).asString()).color(NamedTextColor.RED); + hover = hover.append(Component.newline()).append(Component.text(state.toString()).color(NamedTextColor.GRAY)); + batch.add(Component.text("|").color(NamedTextColor.RED).hoverEvent(HoverEvent.showText(hover))); + } else { + Component hover = Component.text("[Auto] " + BlockManager.createCustomBlockKey(i).asString()).color(NamedTextColor.YELLOW); + hover = hover.append(Component.newline()).append(Component.text(state.toString()).color(NamedTextColor.GRAY)); + batch.add(Component.text("|").color(NamedTextColor.YELLOW).hoverEvent(HoverEvent.showText(hover))); + } } if (batch.size() == 100) { plugin().senderFactory().wrap(context.sender()) diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/IdAllocator.java b/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/IdAllocator.java index 27aa4022e..8805bb994 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/IdAllocator.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/IdAllocator.java @@ -8,6 +8,7 @@ import com.google.gson.JsonPrimitive; import net.momirealms.craftengine.core.util.FileUtils; import net.momirealms.craftengine.core.util.GsonHelper; import net.momirealms.craftengine.core.util.Pair; +import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.nio.file.Files; @@ -201,6 +202,11 @@ public class IdAllocator { return Collections.unmodifiableMap(result); } + @NotNull + public Map cachedIdMap() { + return Collections.unmodifiableMap(this.cachedIdMap); + } + /** * 检查ID是否已被占用 */ diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/VisualBlockStateAllocator.java b/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/VisualBlockStateAllocator.java index 51f3592f0..e93196da9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/VisualBlockStateAllocator.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/VisualBlockStateAllocator.java @@ -8,6 +8,7 @@ import net.momirealms.craftengine.core.block.BlockStateWrapper; import net.momirealms.craftengine.core.util.FileUtils; import net.momirealms.craftengine.core.util.GsonHelper; import net.momirealms.craftengine.core.util.Pair; +import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.nio.file.Files; @@ -48,6 +49,11 @@ public class VisualBlockStateAllocator { return this.forcedStates.contains(state); } + @NotNull + public Map cachedBlockStates() { + return Collections.unmodifiableMap(this.cachedBlockStates); + } + public CompletableFuture assignFixedBlockState(String name, BlockStateWrapper state) { this.cachedBlockStates.remove(name); this.forcedStates.add(state);