private void syncBaubles(EntityPlayer player, IBaublesItemHandler baubles) {
ItemStack[] items = baublesSync.get(player.getUniqueID());
if (items == null) {
items = new ItemStack[baubles.getSlots()];
Arrays.fill(items, ItemStack.EMPTY);
baublesSync.put(player.getUniqueID(), items);
}
if (items.length != baubles.getSlots()) {
ItemStack[] old = items;
items = new ItemStack[baubles.getSlots()];
System.arraycopy(old, 0, items, 0, Math.min(old.length, items.length));
baublesSync.put(player.getUniqueID(), items);
}
Set<EntityPlayer> receivers = null;
for (int i = 0; i < baubles.getSlots(); i++) {
ItemStack stack = baubles.getStackInSlot(i);
IBauble bauble = stack.getCapability(BaublesCapabilities.CAPABILITY_ITEM_BAUBLE, null);
if (baubles.isChanged(i) || bauble != null && bauble.willAutoSync(stack, player) && !ItemStack.areItemStacksEqual(stack, items[i])) {
if (receivers == null) {
receivers = new HashSet<>(((WorldServer) player.world).getEntityTracker().getTrackingPlayers(player));
receivers.add(player);
}
syncSlot(player, i, stack, receivers);
baubles.setChanged(i,false);
items[i] = stack == null ? ItemStack.EMPTY : stack.copy();
}
}
}