Skip to content

Commit ef33608

Browse files
authored
Fix select res missing player items (#810)
1 parent 9dd462f commit ef33608

File tree

4 files changed

+66
-12
lines changed

4 files changed

+66
-12
lines changed

src/main/java/com/ldtteam/structurize/client/gui/WindowReplaceBlock.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public WindowReplaceBlock(
4646
super(origin,
4747
Component.translatable("com.ldtteam.structurize.gui.replaceblock.info"),
4848
toReplace.itemStorage.getItemStack(),
49-
ItemUtil.getAllItems(),
49+
ItemUtil.getAllItemsInlcudingInventory(),
5050
((stack, integer) -> {}),
5151
true,
5252
Component.translatable("com.ldtteam.structurize.gui.scan.replace.pct"));

src/main/java/com/ldtteam/structurize/client/gui/WindowSelectRes.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,11 +324,15 @@ private void updateResources()
324324

325325
if (filter.isEmpty())
326326
{
327-
displayedItems.sort(Comparator.comparing(s1 -> s1.getHoverName().getString()));
327+
displayedItems.sort(Comparator.comparing(s -> mc.player.getInventory().contains((ItemStack) s))
328+
.reversed()
329+
.thenComparing((s1 -> ((ItemStack) s1).getHoverName().getString())));
328330
}
329331
else
330332
{
331-
displayedItems.sort(Comparator.comparingInt(s1 -> StringUtils.getLevenshteinDistance(s1.getHoverName().getString(), filter)));
333+
displayedItems.sort(Comparator.comparing(s -> mc.player.getInventory().contains((ItemStack) s))
334+
.reversed()
335+
.thenComparingInt(s1 -> StringUtils.getLevenshteinDistance(((ItemStack) s1).getHoverName().getString(), filter)));
332336
}
333337
this.updateResourceList();
334338
}

src/main/java/com/ldtteam/structurize/client/gui/WindowShapeTool.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,15 +262,27 @@ else if (shape != Shape.WAVE && shape != Shape.WAVE_3D)
262262
*/
263263
private void pickMainBlock()
264264
{
265-
new WindowSelectRes(this, Component.literal("Select the main block"), mainBlock, ItemUtil.getAllItems(), (s, c) -> updateBlock(s, true), false, null).open();
265+
new WindowSelectRes(this,
266+
Component.literal("Select the main block"),
267+
mainBlock,
268+
ItemUtil.getAllItemsInlcudingInventory(),
269+
(s, c) -> updateBlock(s, true),
270+
false,
271+
null).open();
266272
}
267273

268274
/**
269275
* Opens the block picker window.
270276
*/
271277
private void pickFillBlock()
272278
{
273-
new WindowSelectRes(this, Component.literal("Select the main block"), secondaryBlock, ItemUtil.getAllItems(), (s, c) -> updateBlock(s, false), false, null).open();
279+
new WindowSelectRes(this,
280+
Component.literal("Select the main block"),
281+
secondaryBlock,
282+
ItemUtil.getAllItemsInlcudingInventory(),
283+
(s, c) -> updateBlock(s, false),
284+
false,
285+
null).open();
274286
}
275287

276288
private void adjust(final TextField input, final int value)

src/main/java/com/ldtteam/structurize/client/gui/util/ItemUtil.java

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package com.ldtteam.structurize.client.gui.util;
22

33
import com.google.common.collect.ImmutableList;
4-
import net.minecraft.world.item.AirItem;
5-
import net.minecraft.world.item.BlockItem;
6-
import net.minecraft.world.item.BucketItem;
7-
import net.minecraft.world.item.ItemStack;
4+
import com.ldtteam.structurize.api.util.ItemStorage;
5+
import net.minecraft.client.Minecraft;
6+
import net.minecraft.world.item.*;
87
import net.minecraft.world.level.material.Fluids;
98
import net.minecraftforge.registries.ForgeRegistries;
109

11-
import java.util.List;
12-
import java.util.Spliterator;
13-
import java.util.Spliterators;
10+
import java.util.*;
1411
import java.util.stream.Collectors;
1512
import java.util.stream.StreamSupport;
1613

14+
/**
15+
* Client-side Item utility class
16+
*/
1717
public class ItemUtil
1818
{
1919
/**
@@ -29,4 +29,42 @@ public static List<ItemStack> getAllItems()
2929
.map(ItemStack::new)
3030
.collect(Collectors.toList()));
3131
}
32+
33+
/**
34+
* Creates a list of all items that can be picked inlcuding player items
35+
* Client-side
36+
*
37+
* @return
38+
*/
39+
public static List<ItemStack> getAllItemsInlcudingInventory()
40+
{
41+
final Set<ItemStorage> items = new HashSet<>();
42+
for (final Item item : ForgeRegistries.ITEMS)
43+
{
44+
if (item instanceof AirItem || item instanceof BlockItem || (item instanceof BucketItem
45+
&& ((BucketItem) item).getFluid() != Fluids.EMPTY))
46+
{
47+
items.add(new ItemStorage(new ItemStack(item)));
48+
}
49+
}
50+
51+
for (final ItemStack stack : Minecraft.getInstance().player.getInventory().items)
52+
{
53+
final Item item = stack.getItem();
54+
if (item instanceof AirItem || item instanceof BlockItem || (item instanceof BucketItem
55+
&& ((BucketItem) item).getFluid() != Fluids.EMPTY))
56+
{
57+
items.add(new ItemStorage(stack.copy()));
58+
}
59+
}
60+
61+
final List<ItemStack> stackList = new ArrayList<>(items.size());
62+
63+
for (final ItemStorage storage : items)
64+
{
65+
stackList.add(storage.getItemStack());
66+
}
67+
68+
return stackList;
69+
}
3270
}

0 commit comments

Comments
 (0)