3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-11-03 14:50:19 +01:00

Fix fishing rod durability (fixes #1964)

Dieser Commit ist enthalten in:
Camotoy 2021-06-21 18:51:43 -04:00
Ursprung 3a2cff7864
Commit 65c52f9ff0
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 7EEFB66FE798081F
5 geänderte Dateien mit 85 neuen und 55 gelöschten Zeilen

Datei anzeigen

@ -56,6 +56,7 @@ import org.geysermc.connector.network.translators.inventory.translators.furnace.
import org.geysermc.connector.network.translators.inventory.translators.furnace.FurnaceInventoryTranslator;
import org.geysermc.connector.network.translators.inventory.translators.furnace.SmokerInventoryTranslator;
import org.geysermc.connector.utils.InventoryUtils;
import org.geysermc.connector.utils.ItemUtils;
import java.util.*;
@ -865,7 +866,7 @@ public abstract class InventoryTranslator {
if (itemStack.getNbt() != null) {
Tag damage = itemStack.getNbt().get("Damage");
if (damage instanceof IntTag) {
durability = ((IntTag) damage).getValue();
durability = ItemUtils.getCorrectBedrockDurability(itemStack.getJavaId(), ((IntTag) damage).getValue());
}
}

Datei anzeigen

@ -98,6 +98,10 @@ public class ItemRegistry {
* Crossbow item entry, used in PillagerEntity.java
*/
public static ItemEntry CROSSBOW;
/**
* Fishing rod item entry, used in ItemUtils.java
*/
public static ItemEntry FISHING_ROD;
/**
* Empty item bucket, used in BedrockInventoryTransactionTranslator.java
*/
@ -438,6 +442,9 @@ public class ItemRegistry {
case "minecraft:egg":
EGG = itemEntry;
break;
case "minecraft:fishing_rod":
FISHING_ROD = itemEntry;
break;
case "minecraft:shield":
SHIELD = itemEntry;
break;

Datei anzeigen

@ -226,14 +226,14 @@ public abstract class ItemTranslator {
public ItemStack translateToJava(ItemData itemData, ItemEntry itemEntry) {
if (itemData == null) return null;
if (itemData.getTag() == null) {
return new ItemStack(itemEntry.getJavaId(), itemData.getCount(), new com.github.steveice10.opennbt.tag.builtin.CompoundTag(""));
return new ItemStack(itemEntry.getJavaId(), itemData.getCount(), new CompoundTag(""));
}
return new ItemStack(itemEntry.getJavaId(), itemData.getCount(), this.translateToJavaNBT("", itemData.getTag()));
}
public abstract List<ItemEntry> getAppliedItems();
public NbtMap translateNbtToBedrock(com.github.steveice10.opennbt.tag.builtin.CompoundTag tag) {
public NbtMap translateNbtToBedrock(CompoundTag tag) {
NbtMapBuilder builder = NbtMap.builder();
if (tag.getValue() != null && !tag.getValue().isEmpty()) {
for (String str : tag.getValue().keySet()) {
@ -248,7 +248,7 @@ public abstract class ItemTranslator {
return builder.build();
}
private Object translateToBedrockNBT(com.github.steveice10.opennbt.tag.builtin.Tag tag) {
private Object translateToBedrockNBT(Tag tag) {
if (tag instanceof ByteArrayTag) {
return ((ByteArrayTag) tag).getValue();
}

Datei anzeigen

@ -25,15 +25,13 @@
package org.geysermc.connector.network.translators.item.translators.nbt;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.github.steveice10.opennbt.tag.builtin.ListTag;
import com.github.steveice10.opennbt.tag.builtin.StringTag;
import com.github.steveice10.opennbt.tag.builtin.Tag;
import com.github.steveice10.opennbt.tag.builtin.*;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.network.translators.ItemRemapper;
import org.geysermc.connector.network.translators.chat.MessageTranslator;
import org.geysermc.connector.network.translators.item.ItemEntry;
import org.geysermc.connector.network.translators.item.NbtItemStackTranslator;
import org.geysermc.connector.utils.ItemUtils;
import java.util.ArrayList;
import java.util.List;
@ -43,6 +41,16 @@ public class BasicItemTranslator extends NbtItemStackTranslator {
@Override
public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemEntry itemEntry) {
Tag damage = itemTag.get("Damage");
if (damage instanceof IntTag) {
int originalDurability = ((IntTag) damage).getValue();
int durability = ItemUtils.getCorrectBedrockDurability(itemEntry.getJavaId(), originalDurability);
if (durability != originalDurability) {
// Fix damage tag inconsistencies
itemTag.put(new IntTag("Damage", durability));
}
}
CompoundTag displayTag = itemTag.get("display");
if (displayTag == null) {
return;

Datei anzeigen

@ -26,6 +26,7 @@
package org.geysermc.connector.utils;
import com.github.steveice10.opennbt.tag.builtin.*;
import org.geysermc.connector.network.translators.item.ItemRegistry;
public class ItemUtils {
@ -44,4 +45,17 @@ public class ItemUtils {
}
return 0;
}
/**
* @return the correct Bedrock durability for this item.
*/
public static int getCorrectBedrockDurability(int javaId, int original) {
if (javaId == ItemRegistry.FISHING_ROD.getJavaId()) {
// Java durability: 64
// Bedrock durability : 384
// 384 / 64 = 6
return original * 6;
}
return original;
}
}