9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-28 03:19:14 +00:00

增强debug分配情况

This commit is contained in:
XiaoMoMi
2025-10-30 05:57:22 +08:00
parent 4392b1aaae
commit 3c3ad096f1
4 changed files with 57 additions and 14 deletions

View File

@@ -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<CommandSender> {
@@ -48,18 +50,30 @@ public class DebugAppearanceStateUsageCommand extends BukkitCommandFeature<Comma
Component block = Component.text(baseBlockId + ": ");
plugin().senderFactory().wrap(context.sender()).sendMessage(block);
VisualBlockStateAllocator allocator = blockManager.blockParser().visualBlockStateAllocator();
Map<String, BlockStateWrapper> cachedStates = allocator.cachedBlockStates();
Map<BlockStateWrapper, String> reversed = new HashMap<>(cachedStates.size());
for (Map.Entry<String, BlockStateWrapper> entry : cachedStates.entrySet()) {
reversed.put(entry.getValue(), entry.getKey());
}
List<Component> batch = new ArrayList<>();
for (BlockStateWrapper appearance : appearances) {
Component text = Component.text("|");
List<Integer> 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<Component> hoverChildren = new ArrayList<>();
hoverChildren.add(Component.newline());
hoverChildren.add(Component.text(appearance.getAsString()).color(namedTextColor));

View File

@@ -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<CommandSender> {
@@ -31,16 +30,34 @@ public class DebugRealStateUsageCommand extends BukkitCommandFeature<CommandSend
plugin().senderFactory().wrap(context.sender()).sendMessage(Component.text("Serverside block state usage:"));
List<Component> batch = new ArrayList<>(100);
IdAllocator idAllocator = blockManager.blockParser().internalIdAllocator();
Map<String, Integer> cachedIds = idAllocator.cachedIdMap();
Map<Integer, String> reversedCachedIds = new HashMap<>(cachedIds.size());
for (Map.Entry<String, Integer> 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())