mirror of
https://github.com/PlayPro/CoreProtect.git
synced 2024-11-24 12:16:36 +01:00
Added post-rollback sorting for player inventories
This commit is contained in:
parent
840eb3b4ee
commit
5861570f8a
@ -1038,6 +1038,7 @@ public class Rollback extends Queue {
|
||||
}
|
||||
chunkChanges.clear();
|
||||
|
||||
Map<Player, List<Integer>> sortPlayers = new HashMap<>();
|
||||
Object container = null;
|
||||
Material containerType = null;
|
||||
boolean containerInit = false;
|
||||
@ -1101,7 +1102,14 @@ public class Rollback extends Queue {
|
||||
if (rowAction == ItemLogger.ITEM_REMOVE_ENDER || rowAction == ItemLogger.ITEM_ADD_ENDER) {
|
||||
modifyContainerItems(containerType, player.getEnderChest(), (Integer) populatedStack[0], ((ItemStack) populatedStack[2]).clone(), action ^ 1);
|
||||
}
|
||||
modifyContainerItems(containerType, player.getInventory(), (Integer) populatedStack[0], (ItemStack) populatedStack[2], action);
|
||||
int modifiedArmor = modifyContainerItems(containerType, player.getInventory(), (Integer) populatedStack[0], (ItemStack) populatedStack[2], action);
|
||||
if (modifiedArmor > -1) {
|
||||
List<Integer> currentSortList = sortPlayers.getOrDefault(player, new ArrayList<>());
|
||||
if (!currentSortList.contains(modifiedArmor)) {
|
||||
currentSortList.add(modifiedArmor);
|
||||
}
|
||||
sortPlayers.put(player, currentSortList);
|
||||
}
|
||||
|
||||
itemCount1 = itemCount1 + rowAmount;
|
||||
ConfigHandler.rollbackHash.put(finalUserString, new int[] { itemCount1, blockCount1, entityCount1, 0 });
|
||||
@ -1186,6 +1194,11 @@ public class Rollback extends Queue {
|
||||
}
|
||||
itemData.clear();
|
||||
|
||||
for (Entry<Player, List<Integer>> sortEntry : sortPlayers.entrySet()) {
|
||||
sortContainerItems(sortEntry.getKey().getInventory(), sortEntry.getValue());
|
||||
}
|
||||
sortPlayers.clear();
|
||||
|
||||
int[] rollbackHashData1 = ConfigHandler.rollbackHash.get(finalUserString);
|
||||
int itemCount1 = rollbackHashData1[0];
|
||||
int blockCount1 = rollbackHashData1[1];
|
||||
@ -1567,7 +1580,8 @@ public class Rollback extends Queue {
|
||||
}
|
||||
}
|
||||
|
||||
static void modifyContainerItems(Material type, Object container, int slot, ItemStack itemstack, int action) {
|
||||
static int modifyContainerItems(Material type, Object container, int slot, ItemStack itemstack, int action) {
|
||||
int modifiedArmor = -1;
|
||||
try {
|
||||
ItemStack[] contents = null;
|
||||
|
||||
@ -1629,7 +1643,9 @@ public class Rollback extends Queue {
|
||||
while (count < amount) {
|
||||
boolean addedItem = false;
|
||||
if (isPlayerInventory) {
|
||||
addedItem = Util.setPlayerArmor((PlayerInventory) inventory, itemstack);
|
||||
int setArmor = Util.setPlayerArmor((PlayerInventory) inventory, itemstack);
|
||||
addedItem = (setArmor > -1);
|
||||
modifiedArmor = addedItem ? setArmor : modifiedArmor;
|
||||
}
|
||||
if (!addedItem) {
|
||||
addedItem = (inventory.addItem(itemstack).size() == 0);
|
||||
@ -1710,6 +1726,37 @@ public class Rollback extends Queue {
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return modifiedArmor;
|
||||
}
|
||||
|
||||
public static void sortContainerItems(PlayerInventory inventory, List<Integer> modifiedArmorSlots) {
|
||||
try {
|
||||
ItemStack[] armorContents = inventory.getArmorContents();
|
||||
ItemStack[] storageContents = inventory.getStorageContents();
|
||||
|
||||
for (int armor = 0; armor < armorContents.length; armor++) {
|
||||
ItemStack armorItem = armorContents[armor];
|
||||
if (armorItem == null || !modifiedArmorSlots.contains(armor)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (int storage = 0; storage < storageContents.length; storage++) {
|
||||
ItemStack storageItem = storageContents[storage];
|
||||
if (storageItem == null) {
|
||||
storageContents[storage] = armorItem;
|
||||
armorContents[armor] = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inventory.setArmorContents(armorContents);
|
||||
inventory.setStorageContents(storageContents);
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static void buildFireworkEffect(Builder effectBuilder, Material rowType, ItemStack itemstack) {
|
||||
|
@ -656,7 +656,7 @@ public class Util extends Queue {
|
||||
return artname;
|
||||
}
|
||||
|
||||
public static boolean setPlayerArmor(PlayerInventory inventory, ItemStack itemStack) {
|
||||
public static int setPlayerArmor(PlayerInventory inventory, ItemStack itemStack) {
|
||||
String itemName = itemStack.getType().name();
|
||||
boolean isHelmet = (itemName.endsWith("_HELMET") || itemName.endsWith("_HEAD") || itemName.endsWith("_SKULL") || itemName.endsWith("_PUMPKIN"));
|
||||
boolean isChestplate = (itemName.endsWith("_CHESTPLATE"));
|
||||
@ -665,22 +665,22 @@ public class Util extends Queue {
|
||||
|
||||
if (isHelmet && inventory.getHelmet() == null) {
|
||||
inventory.setHelmet(itemStack);
|
||||
return true;
|
||||
return 3;
|
||||
}
|
||||
else if (isChestplate && inventory.getChestplate() == null) {
|
||||
inventory.setChestplate(itemStack);
|
||||
return true;
|
||||
return 2;
|
||||
}
|
||||
else if (isLeggings && inventory.getLeggings() == null) {
|
||||
inventory.setLeggings(itemStack);
|
||||
return true;
|
||||
return 1;
|
||||
}
|
||||
else if (isBoots && inventory.getBoots() == null) {
|
||||
inventory.setBoots(itemStack);
|
||||
return true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return false;
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static ItemStack[] getArmorStandContents(EntityEquipment equipment) {
|
||||
|
Loading…
Reference in New Issue
Block a user