Fixed item frame transactions not logging BlockFace data

This commit is contained in:
Intelli 2022-02-18 17:31:35 -07:00
parent c652ce852f
commit 527be90249
10 changed files with 72 additions and 30 deletions

View file

@ -1220,9 +1220,9 @@ public class Util extends Queue {
return newVersion(convertArray(oldVersionSplit), convertArray(currentVersionSplit));
}
public static Map<Integer, Object> serializeItemStackLegacy(ItemStack itemStack, int slot) {
public static Map<Integer, Object> serializeItemStackLegacy(ItemStack itemStack, String faceData, int slot) {
Map<Integer, Object> result = new HashMap<>();
Map<String, Object> itemMap = serializeItemStack(itemStack, slot);
Map<String, Object> itemMap = serializeItemStack(itemStack, faceData, slot);
if (itemMap.size() > 1) {
result.put(0, itemMap.get("0"));
result.put(1, itemMap.get("1"));
@ -1245,11 +1245,11 @@ public class Util extends Queue {
return result;
}
public static Map<String, Object> serializeItemStack(ItemStack itemStack, int slot) {
public static Map<String, Object> serializeItemStack(ItemStack itemStack, String faceData, int slot) {
Map<String, Object> itemMap = new HashMap<>();
if (itemStack != null && !itemStack.getType().equals(Material.AIR)) {
ItemStack item = itemStack.clone();
List<List<Map<String, Object>>> metadata = ItemMetaHandler.seralize(item, null, slot);
List<List<Map<String, Object>>> metadata = ItemMetaHandler.seralize(item, null, faceData, slot);
item.setItemMeta(null);
itemMap.put("0", item.serialize());
itemMap.put("1", metadata);
@ -1269,7 +1269,7 @@ public class Util extends Queue {
List<List<Map<String, Object>>> metadata = (List<List<Map<String, Object>>>) itemMap.get("1");
Object[] populatedStack = Rollback.populateItemStack(item, metadata);
result = (ItemStack) populatedStack[1];
result = (ItemStack) populatedStack[2];
}
return result;
@ -1298,7 +1298,7 @@ public class Util extends Queue {
ItemStack[] inventory = shulkerBox.getSnapshotInventory().getStorageContents();
int slot = 0;
for (ItemStack itemStack : inventory) {
Map<Integer, Object> itemMap = serializeItemStackLegacy(itemStack, slot);
Map<Integer, Object> itemMap = serializeItemStackLegacy(itemStack, null, slot);
if (itemMap.size() > 0) {
meta.add(itemMap);
}

View file

@ -350,7 +350,7 @@ public class EntityUtil {
@SuppressWarnings("unchecked")
List<List<Map<String, Object>>> metadata = (List<List<Map<String, Object>>>) itemMap.get(1);
Object[] populatedStack = Rollback.populateItemStack(result, metadata);
result = (ItemStack) populatedStack[1];
result = (ItemStack) populatedStack[2];
int uses = (int) recipe.get(1);
int maxUses = (int) recipe.get(2);
boolean experienceReward = (boolean) recipe.get(3);
@ -365,7 +365,7 @@ public class EntityUtil {
@SuppressWarnings("unchecked")
List<List<Map<String, Object>>> itemMetaData = (List<List<Map<String, Object>>>) ingredientMap.get(1);
populatedStack = Rollback.populateItemStack(item, itemMetaData);
item = (ItemStack) populatedStack[1];
item = (ItemStack) populatedStack[2];
merchantIngredients.add(item);
}
MerchantRecipe merchantRecipe = new MerchantRecipe(result, uses, maxUses, experienceReward);

View file

@ -109,7 +109,7 @@ public class ItemMetaHandler {
return result.toString();
}
public static List<List<Map<String, Object>>> seralize(ItemStack item, Material type, int slot) {
public static List<List<Map<String, Object>>> seralize(ItemStack item, Material type, String faceData, int slot) {
List<List<Map<String, Object>>> metadata = new ArrayList<>();
List<Map<String, Object>> list = new ArrayList<>();
List<Object> modifiers = new ArrayList<>();
@ -210,7 +210,7 @@ public class ItemMetaHandler {
list = new ArrayList<>();
for (ItemStack chargedProjectile : subMeta.getChargedProjectiles()) {
Map<String, Object> itemMap = Util.serializeItemStack(chargedProjectile, slot);
Map<String, Object> itemMap = Util.serializeItemStack(chargedProjectile, null, slot);
if (itemMap.size() > 0) {
list.add(itemMap);
}
@ -246,6 +246,14 @@ public class ItemMetaHandler {
metadata.add(list);
}
if (faceData != null && faceData.length() > 0) {
Map<String, Object> meta = new HashMap<>();
meta.put("facing", faceData);
list = new ArrayList<>();
list.add(meta);
metadata.add(list);
}
if (modifiers.size() > 0) {
Map<String, Object> meta = new HashMap<>();
meta.put("modifiers", modifiers);