Skip to content

Commit 7a9b9af

Browse files
committed
Add modifier for item lists
1 parent 7d38227 commit 7a9b9af

File tree

2 files changed

+30
-21
lines changed

2 files changed

+30
-21
lines changed

modules/API/src/main/java/com/comphenix/protocol/events/PacketContainer.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,25 @@ public StructureModifier<ItemStack[]> getItemArrayModifier() {
401401
MinecraftReflection.getItemStackArrayClass(),
402402
BukkitConverters.getIgnoreNull(new ItemStackArrayConverter()));
403403
}
404-
404+
405+
/**
406+
* Retrieves a read/write structure for lists of ItemStacks.
407+
* <p>
408+
* This modifier will automatically marshal between the Bukkit ItemStack and the
409+
* internal Minecraft ItemStack.
410+
* @return A modifier for ItemStack list fields.
411+
*/
412+
public StructureModifier<List<ItemStack>> getItemListModifier() {
413+
// Convert to and from the Bukkit wrapper
414+
return structureModifier.withType(
415+
List.class,
416+
BukkitConverters.getListConverter(
417+
MinecraftReflection.getItemStackClass(),
418+
BukkitConverters.getItemStackConverter()
419+
)
420+
);
421+
}
422+
405423
/**
406424
* Retrieve a read/write structure for maps of statistics.
407425
* <p>

modules/ProtocolLib/src/test/java/com/comphenix/protocol/events/PacketContainerTest.java

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import java.lang.reflect.Array;
2626
import java.lang.reflect.Field;
27+
import java.util.ArrayList;
2728
import java.util.List;
2829
import java.util.Objects;
2930
import java.util.UUID;
@@ -219,34 +220,24 @@ private ItemStack itemWithData() {
219220
return item;
220221
}
221222

222-
// TODO: It's a list now
223-
/* @Test
224-
public void testGetItemArrayModifier() {
223+
@Test
224+
public void testGetItemListModifier() {
225225
PacketContainer windowItems = new PacketContainer(PacketType.Play.Server.WINDOW_ITEMS);
226-
StructureModifier<ItemStack[]> itemAccess = windowItems.getItemArrayModifier();
226+
StructureModifier<List<ItemStack>> itemAccess = windowItems.getItemListModifier();
227227

228-
ItemStack[] itemArray = new ItemStack[] {
229-
itemWithData(),
230-
new ItemStack(Material.DIAMOND_AXE)
231-
};
228+
List<ItemStack> items = new ArrayList<>();
229+
items.add(itemWithData());
230+
items.add(new ItemStack(Material.DIAMOND_AXE));
232231

233232
assertNull(itemAccess.read(0));
234233

235234
// Insert and check that it was succesful
236-
itemAccess.write(0, itemArray);
235+
itemAccess.write(0, items);
237236

238237
// Read back array
239-
ItemStack[] comparison = itemAccess.read(0);
240-
assertEquals(itemArray.length, comparison.length);
241-
242-
// Check that it is equivalent
243-
for (int i = 0; i < itemArray.length; i++) {
244-
ItemStack original = itemArray[i];
245-
ItemStack written = comparison[i];
246-
247-
assertTrue(String.format("Array element %s is not the same: %s != %s", i, original, written), equivalentItem(original, written));
248-
}
249-
} */
238+
List<ItemStack> comparison = itemAccess.read(0);
239+
assertEquals(items, comparison);
240+
}
250241

251242
private boolean equivalentItem(ItemStack first, ItemStack second) {
252243
if (first == null) {

0 commit comments

Comments
 (0)