Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-27 16:40:14 +01:00
show sweeping edge enchantment (#3615)
Dieser Commit ist enthalten in:
Ursprung
96260cc358
Commit
7474d2c745
@ -25,11 +25,14 @@
|
|||||||
|
|
||||||
package org.geysermc.geyser.translator.inventory.item.nbt;
|
package org.geysermc.geyser.translator.inventory.item.nbt;
|
||||||
|
|
||||||
|
import com.github.steveice10.mc.protocol.data.game.Identifier;
|
||||||
import com.github.steveice10.opennbt.tag.builtin.*;
|
import com.github.steveice10.opennbt.tag.builtin.*;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.inventory.item.Enchantment;
|
import org.geysermc.geyser.inventory.item.Enchantment;
|
||||||
import org.geysermc.geyser.registry.type.ItemMapping;
|
import org.geysermc.geyser.registry.type.ItemMapping;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
import org.geysermc.geyser.text.ChatColor;
|
||||||
|
import org.geysermc.geyser.text.MinecraftLocale;
|
||||||
import org.geysermc.geyser.translator.inventory.item.ItemRemapper;
|
import org.geysermc.geyser.translator.inventory.item.ItemRemapper;
|
||||||
import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator;
|
import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator;
|
||||||
|
|
||||||
@ -43,28 +46,27 @@ public class EnchantmentTranslator extends NbtItemStackTranslator {
|
|||||||
@Override
|
@Override
|
||||||
public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) {
|
public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) {
|
||||||
List<Tag> newTags = new ArrayList<>();
|
List<Tag> newTags = new ArrayList<>();
|
||||||
Tag enchantmentTag = itemTag.get("Enchantments");
|
Tag enchantmentTag = itemTag.remove("Enchantments");
|
||||||
if (enchantmentTag instanceof ListTag listTag) {
|
if (enchantmentTag instanceof ListTag listTag) {
|
||||||
for (Tag tag : listTag.getValue()) {
|
for (Tag tag : listTag.getValue()) {
|
||||||
if (!(tag instanceof CompoundTag)) continue;
|
if (!(tag instanceof CompoundTag)) continue;
|
||||||
|
CompoundTag bedrockTag = remapEnchantment(session, (CompoundTag) tag, itemTag);
|
||||||
CompoundTag bedrockTag = remapEnchantment((CompoundTag) tag);
|
if (bedrockTag != null) {
|
||||||
newTags.add(bedrockTag);
|
newTags.add(bedrockTag);
|
||||||
}
|
}
|
||||||
itemTag.remove("Enchantments");
|
}
|
||||||
}
|
}
|
||||||
enchantmentTag = itemTag.get("StoredEnchantments");
|
|
||||||
if (enchantmentTag instanceof ListTag listTag) {
|
// TODO consolidate this into EnchantedBookTranslator
|
||||||
for (Tag tag : listTag.getValue()) {
|
enchantmentTag = itemTag.remove("StoredEnchantments");
|
||||||
if (!(tag instanceof CompoundTag)) continue;
|
if (enchantmentTag instanceof ListTag listTag) {
|
||||||
|
for (Tag tag : listTag.getValue()) {
|
||||||
CompoundTag bedrockTag = remapEnchantment((CompoundTag) tag);
|
if (!(tag instanceof CompoundTag)) continue;
|
||||||
|
CompoundTag bedrockTag = remapEnchantment(session, (CompoundTag) tag, itemTag);
|
||||||
if (bedrockTag != null) {
|
if (bedrockTag != null) {
|
||||||
bedrockTag.put(new ShortTag("GeyserStoredEnchantment", (short) 0));
|
|
||||||
newTags.add(bedrockTag);
|
newTags.add(bedrockTag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
itemTag.remove("StoredEnchantments");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!newTags.isEmpty()) {
|
if (!newTags.isEmpty()) {
|
||||||
@ -99,7 +101,6 @@ public class EnchantmentTranslator extends NbtItemStackTranslator {
|
|||||||
javaValue.put("lvl", new IntTag("lvl", levelTag != null ? levelTag.getValue() : 1));
|
javaValue.put("lvl", new IntTag("lvl", levelTag != null ? levelTag.getValue() : 1));
|
||||||
javaTag.setValue(javaValue);
|
javaTag.setValue(javaValue);
|
||||||
|
|
||||||
|
|
||||||
if (geyserStoredEnchantmentTag != null) {
|
if (geyserStoredEnchantmentTag != null) {
|
||||||
tagValue.remove("GeyserStoredEnchantment");
|
tagValue.remove("GeyserStoredEnchantment");
|
||||||
storedEnchantments.add(javaTag);
|
storedEnchantments.add(javaTag);
|
||||||
@ -120,13 +121,20 @@ public class EnchantmentTranslator extends NbtItemStackTranslator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private CompoundTag remapEnchantment(CompoundTag tag) {
|
private CompoundTag remapEnchantment(GeyserSession session, CompoundTag tag, CompoundTag rootTag) {
|
||||||
Tag javaEnchId = tag.get("id");
|
Tag javaEnchId = tag.get("id");
|
||||||
if (!(javaEnchId instanceof StringTag))
|
if (!(javaEnchId instanceof StringTag))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
Enchantment enchantment = Enchantment.getByJavaIdentifier(((StringTag) javaEnchId).getValue());
|
Enchantment enchantment = Enchantment.getByJavaIdentifier(((StringTag) javaEnchId).getValue());
|
||||||
if (enchantment == null) {
|
if (enchantment == null) {
|
||||||
|
if (Identifier.formalize((String) javaEnchId.getValue()).equals("minecraft:sweeping")) {
|
||||||
|
Tag javaEnchLvl = tag.get("lvl");
|
||||||
|
int sweepingLvl = javaEnchLvl != null && javaEnchLvl.getValue() instanceof Number lvl ? lvl.intValue() : 0;
|
||||||
|
|
||||||
|
addSweeping(session, rootTag, sweepingLvl);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
GeyserImpl.getInstance().getLogger().debug("Unknown Java enchantment while NBT item translating: " + javaEnchId.getValue());
|
GeyserImpl.getInstance().getLogger().debug("Unknown Java enchantment while NBT item translating: " + javaEnchId.getValue());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -140,4 +148,21 @@ public class EnchantmentTranslator extends NbtItemStackTranslator {
|
|||||||
return bedrockTag;
|
return bedrockTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addSweeping(GeyserSession session, CompoundTag itemTag, int level) {
|
||||||
|
CompoundTag displayTag = itemTag.get("display");
|
||||||
|
if (displayTag == null) {
|
||||||
|
displayTag = new CompoundTag("display");
|
||||||
|
itemTag.put(displayTag);
|
||||||
|
}
|
||||||
|
ListTag loreTag = displayTag.get("Lore");
|
||||||
|
if (loreTag == null) {
|
||||||
|
loreTag = new ListTag("Lore");
|
||||||
|
displayTag.put(loreTag);
|
||||||
|
}
|
||||||
|
|
||||||
|
String sweepingTranslation = MinecraftLocale.getLocaleString("enchantment.minecraft.sweeping", session.locale());
|
||||||
|
String lvlTranslation = MinecraftLocale.getLocaleString("enchantment.level." + level, session.locale());
|
||||||
|
|
||||||
|
loreTag.add(new StringTag("", ChatColor.RESET + ChatColor.GRAY + sweepingTranslation + " " + lvlTranslation));
|
||||||
|
}
|
||||||
}
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren