Skip to content

Commit 1fa30f1

Browse files
committed
add fillContainer debug command,
make item grid scale configurable closes #301
1 parent 7727d33 commit 1fa30f1

File tree

9 files changed

+118
-12
lines changed

9 files changed

+118
-12
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package mcp.mobius.waila.fabric;
2+
3+
import mcp.mobius.waila.command.ServerCommand;
4+
import net.fabricmc.fabric.api.transfer.v1.item.ItemStorage;
5+
import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant;
6+
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
7+
import net.minecraft.core.BlockPos;
8+
import net.minecraft.core.Direction;
9+
import net.minecraft.core.registries.BuiltInRegistries;
10+
import net.minecraft.server.level.ServerLevel;
11+
import net.minecraft.server.level.ServerPlayer;
12+
import org.jetbrains.annotations.Nullable;
13+
14+
public class FabricServerCommand extends ServerCommand {
15+
16+
@Override
17+
protected @Nullable String fillContainer(ServerLevel world, BlockPos pos, ServerPlayer player) {
18+
var storage = ItemStorage.SIDED.find(world, pos, Direction.UP);
19+
if (storage == null) return "No storage at " + pos.toShortString();
20+
21+
try (var tx = Transaction.openOuter()) {
22+
while (true) {
23+
var offHandStack = player.getOffhandItem();
24+
var item = !offHandStack.isEmpty()
25+
? offHandStack.getItem()
26+
: BuiltInRegistries.ITEM.getRandom(world.random).orElseThrow().value();
27+
28+
if (storage.insert(ItemVariant.of(item), item.getDefaultMaxStackSize(), tx) == 0L) break;
29+
}
30+
tx.commit();
31+
return null;
32+
}
33+
}
34+
35+
}

platform/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWaila.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package mcp.mobius.waila.fabric;
22

33
import mcp.mobius.waila.Waila;
4-
import mcp.mobius.waila.command.ServerCommand;
54
import mcp.mobius.waila.config.PluginConfig;
65
import mcp.mobius.waila.debug.DumpGenerator;
76
import mcp.mobius.waila.network.Packets;
@@ -27,7 +26,7 @@ public void onInitialize() {
2726
Packets.initServer();
2827

2928
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) ->
30-
new ServerCommand().register(dispatcher));
29+
new FabricServerCommand().register(dispatcher));
3130

3231
ServerLifecycleEvents.SERVER_STARTING.register(server -> PluginConfig.reload());
3332
ServerLifecycleEvents.SERVER_STOPPED.register(server -> onServerStopped());
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package mcp.mobius.waila.neo;
2+
3+
import mcp.mobius.waila.command.ServerCommand;
4+
import net.minecraft.core.BlockPos;
5+
import net.minecraft.core.registries.BuiltInRegistries;
6+
import net.minecraft.server.level.ServerLevel;
7+
import net.minecraft.server.level.ServerPlayer;
8+
import net.minecraft.world.item.ItemStack;
9+
import net.neoforged.neoforge.capabilities.Capabilities;
10+
import org.jetbrains.annotations.Nullable;
11+
12+
public class NeoServerCommand extends ServerCommand {
13+
14+
@Override
15+
protected @Nullable String fillContainer(ServerLevel world, BlockPos pos, ServerPlayer player) {
16+
var handler = world.getCapability(Capabilities.ItemHandler.BLOCK, pos, null);
17+
if (handler == null) return "No storage at " + pos.toShortString();
18+
var offHandStack = player.getOffhandItem();
19+
20+
var size = handler.getSlots();
21+
for (var i = 0; i < size; i++) {
22+
var item = !offHandStack.isEmpty()
23+
? offHandStack.getItem()
24+
: BuiltInRegistries.ITEM.getRandom(world.random).orElseThrow().value();
25+
26+
handler.insertItem(i, new ItemStack(item, item.getDefaultMaxStackSize()), false);
27+
}
28+
29+
return null;
30+
}
31+
32+
}

platform/neo/src/main/java/mcp/mobius/waila/neo/NeoWaila.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import mcp.mobius.waila.Waila;
44
import mcp.mobius.waila.api.WailaConstants;
5-
import mcp.mobius.waila.command.ServerCommand;
65
import mcp.mobius.waila.config.PluginConfig;
76
import mcp.mobius.waila.debug.DumpGenerator;
87
import mcp.mobius.waila.network.Packets;
@@ -60,7 +59,7 @@ static void tagReload(TagsUpdatedEvent event) {
6059

6160
@SubscribeEvent
6261
static void registerCommands(RegisterCommandsEvent event) {
63-
new ServerCommand().register(event.getDispatcher());
62+
new NeoServerCommand().register(event.getDispatcher());
6463
}
6564

6665
}

src/api/java/mcp/mobius/waila/api/component/ItemListComponent.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,45 +20,58 @@ public ItemListComponent(List<ItemStack> items) {
2020
}
2121

2222
public ItemListComponent(List<ItemStack> items, int maxHeight) {
23+
this(items, maxHeight, 1f);
24+
}
25+
26+
public ItemListComponent(List<ItemStack> items, int maxHeight, float scale) {
2327
this.items = items;
2428
this.maxHeight = maxHeight;
29+
this.scale = scale;
2530
}
2631

2732
private final List<ItemStack> items;
2833
private final int maxHeight;
34+
private final float scale;
2935

3036
private int gridWidth;
3137
private int gridHeight;
3238
private int maxIndex;
3339

3440
@Override
3541
public int getMinimalWidth() {
36-
return Math.min(items.size(), 9) * 18;
42+
return (int) (Math.min(items.size(), 9) * 18 * scale);
3743
}
3844

3945
@Override
4046
public void setGrownWidth(int grownWidth) {
41-
gridWidth = grownWidth / 18;
47+
gridWidth = Mth.ceil(grownWidth / (18 * scale));
4248
gridHeight = items.isEmpty() ? 0 : Math.min(Mth.positiveCeilDiv(items.size(), gridWidth), maxHeight);
4349
maxIndex = gridWidth * gridHeight - 1;
4450
}
4551

4652
@Override
4753
public int getHeight() {
48-
return gridHeight * 18;
54+
return Mth.ceil(gridHeight * 18 * scale);
4955
}
5056

5157
@Override
5258
public void render(GuiGraphics ctx, int x, int y, DeltaTracker delta) {
59+
var pose = ctx.pose();
60+
pose.pushPose();
61+
pose.translate(x, y, 0);
62+
pose.scale(scale, scale, 0f);
63+
5364
for (var i = 0; i < items.size(); i++) {
5465
var item = items.get(i);
55-
var ix = x + (18 * (i % gridWidth)) + 1;
56-
var iy = y + (18 * (i / gridWidth)) + 1;
66+
var ix = (18 * (i % gridWidth)) + 1;
67+
var iy = (18 * (i / gridWidth)) + 1;
5768
ctx.renderItem(item, ix, iy);
5869
ItemComponent.renderItemDecorations(ctx, item, ix, iy);
5970

6071
if (i == maxIndex) break;
6172
}
73+
74+
pose.popPose();
6275
}
6376

6477
}

src/api/java/mcp/mobius/waila/api/data/ItemData.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public abstract class ItemData implements IData {
2626
public static final ResourceLocation CONFIG_DISPLAY_MODE = BuiltinDataUtil.rl("item.display_mode");
2727
public static final ResourceLocation CONFIG_MAX_HEIGHT = BuiltinDataUtil.rl("item.max_height");
2828
public static final ResourceLocation CONFIG_SORT_BY_COUNT = BuiltinDataUtil.rl("item.sort_by_count");
29+
public static final ResourceLocation CONFIG_GRID_MODE_SCALE = BuiltinDataUtil.rl("item.grid_mode_scale");
2930

3031
public enum ItemDisplayMode {
3132
GRID, LIST, DYNAMIC

src/main/java/mcp/mobius/waila/command/ServerCommand.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,26 @@
1818
import net.minecraft.commands.Commands;
1919
import net.minecraft.commands.arguments.EntityArgument;
2020
import net.minecraft.commands.arguments.coordinates.BlockPosArgument;
21+
import net.minecraft.core.BlockPos;
2122
import net.minecraft.core.component.DataComponentPredicate;
2223
import net.minecraft.core.registries.Registries;
2324
import net.minecraft.network.chat.ClickEvent;
2425
import net.minecraft.network.chat.Component;
2526
import net.minecraft.server.MinecraftServer;
27+
import net.minecraft.server.level.ServerLevel;
2628
import net.minecraft.server.level.ServerPlayer;
2729
import net.minecraft.world.InteractionHand;
2830
import net.minecraft.world.LockCode;
31+
import org.jetbrains.annotations.Nullable;
2932

30-
public class ServerCommand extends CommonCommand<CommandSourceStack, MinecraftServer> {
33+
public abstract class ServerCommand extends CommonCommand<CommandSourceStack, MinecraftServer> {
3134

3235
public ServerCommand() {
3336
super(WailaConstants.NAMESPACE);
3437
}
3538

39+
protected abstract @Nullable String fillContainer(ServerLevel world, BlockPos pos, ServerPlayer player);
40+
3641
@Override
3742
protected boolean pluginCommandRequirement(CommandSourceStack source) {
3843
return source.hasPermission(Commands.LEVEL_ADMINS);
@@ -138,6 +143,25 @@ protected void register(ArgumentBuilderBuilder<CommandSourceStack> command) {
138143
})
139144
.pop("pos", "lockContainer")
140145

146+
.then(Commands.literal("fillContainer"))
147+
.then(Commands.argument("pos", BlockPosArgument.blockPos()))
148+
.executes(context -> {
149+
var source = context.getSource();
150+
var world = source.getLevel();
151+
var player = source.getPlayer();
152+
var pos = BlockPosArgument.getLoadedBlockPos(context, "pos");
153+
154+
var err = fillContainer(world, pos, player);
155+
if (err != null) {
156+
source.sendFailure(Component.literal(err));
157+
return 0;
158+
} else {
159+
source.sendSuccess(() -> Component.literal("Filled " + pos.toShortString()), false);
160+
return 1;
161+
}
162+
})
163+
.pop("pos", "fillContainer")
164+
141165
.pop("debug");
142166
}
143167

src/pluginExtra/java/mcp/mobius/waila/plugin/extra/provider/ItemProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ protected void registerAdditions(ICommonRegistrar registrar, int priority) {
4141
registrar.localConfig(ItemData.CONFIG_DISPLAY_MODE, ItemData.ItemDisplayMode.DYNAMIC);
4242
registrar.localConfig(ItemData.CONFIG_MAX_HEIGHT, 3);
4343
registrar.localConfig(ItemData.CONFIG_SORT_BY_COUNT, true);
44+
registrar.localConfig(ItemData.CONFIG_GRID_MODE_SCALE, 1f);
4445
}
4546

4647
@Override
@@ -96,12 +97,13 @@ protected void appendBody(ITooltip tooltip, ItemDataImpl data, IPluginConfig con
9697

9798
var list = stream.toList();
9899
var maxHeight = config.getInt(ItemData.CONFIG_MAX_HEIGHT);
100+
var scale = (float) config.getDouble(ItemData.CONFIG_GRID_MODE_SCALE);
99101

100102
lastItemsComponent = switch (config.<ItemData.ItemDisplayMode>getEnum(ItemData.CONFIG_DISPLAY_MODE)) {
101103
case DYNAMIC -> list.size() <= maxHeight
102104
? new NamedItemListComponent(list, maxHeight)
103-
: new ItemListComponent(list, maxHeight);
104-
case GRID -> new ItemListComponent(list, maxHeight);
105+
: new ItemListComponent(list, maxHeight, scale);
106+
case GRID -> new ItemListComponent(list, maxHeight, scale);
105107
case LIST -> new NamedItemListComponent(list, maxHeight);
106108
};
107109

src/resources/resources/assets/waila/lang/en_us.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@
374374
"config.waila.plugin_wailax.item.display_mode_dynamic" : "Dynamic",
375375
"config.waila.plugin_wailax.item.max_height" : "Max Height",
376376
"config.waila.plugin_wailax.item.sort_by_count" : "Sort by Count",
377+
"config.waila.plugin_wailax.item.grid_mode_scale" : "Grid Mode Scale",
377378
"config.waila.plugin_wailax.item.blacklist" : "Item Contents Blacklist",
378379
"config.waila.plugin_wailax.fluid" : "Fluid",
379380
"config.waila.plugin_wailax.fluid.enabled_block" : "Show Block Fluid Contents",

0 commit comments

Comments
 (0)