Skip to content

Commit

Permalink
Map new Mace enchantments for Bedrock clients (#4653)
Browse files Browse the repository at this point in the history
* Map new Mace enchantments for Bedrock clients

* Move to using a map for Java-only enchantments.

* Change to using null check for translationKey
  • Loading branch information
Teelair authored May 10, 2024
1 parent e697eb3 commit 7801e35
Showing 1 changed file with 16 additions and 5 deletions.
21 changes: 16 additions & 5 deletions core/src/main/java/org/geysermc/geyser/item/type/Item.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@
import java.util.Map;

public class Item {
/**
* This is a map from Java-only enchantments to their translation keys so that we can
* map these enchantments to Bedrock clients, since they don't actually exist there.
*/
private static final Map<Enchantment.JavaEnchantment, String> ENCHANTMENT_TRANSLATION_KEYS = Map.of(
Enchantment.JavaEnchantment.SWEEPING_EDGE, "enchantment.minecraft.sweeping",
Enchantment.JavaEnchantment.DENSITY, "enchantment.minecraft.density",
Enchantment.JavaEnchantment.BREACH, "enchantment.minecraft.breach",
Enchantment.JavaEnchantment.WIND_BURST, "enchantment.minecraft.wind_burst");

private final String javaIdentifier;
private int javaId = -1;
private final int stackSize;
Expand Down Expand Up @@ -227,8 +237,10 @@ public void translateNbtToJava(@NonNull NbtMap bedrockTag, @NonNull DataComponen
// TODO verify
// TODO streamline Enchantment process
Enchantment.JavaEnchantment enchantment = Enchantment.JavaEnchantment.of(enchantId);
if (enchantment == Enchantment.JavaEnchantment.SWEEPING_EDGE) {
addSweeping(session, builder, level);
String translationKey = ENCHANTMENT_TRANSLATION_KEYS.get(enchantment);
if (translationKey != null) {
String enchantmentTranslation = MinecraftLocale.getLocaleString(translationKey, session.locale());
addJavaOnlyEnchantment(session, builder, enchantmentTranslation, level);
return null;
}
if (enchantment == null) {
Expand All @@ -242,11 +254,10 @@ public void translateNbtToJava(@NonNull NbtMap bedrockTag, @NonNull DataComponen
.build();
}

private void addSweeping(GeyserSession session, BedrockItemBuilder builder, int level) {
String sweepingTranslation = MinecraftLocale.getLocaleString("enchantment.minecraft.sweeping", session.locale());
private void addJavaOnlyEnchantment(GeyserSession session, BedrockItemBuilder builder, String enchantmentName, int level) {
String lvlTranslation = MinecraftLocale.getLocaleString("enchantment.level." + level, session.locale());

builder.getOrCreateLore().add(ChatColor.RESET + ChatColor.GRAY + sweepingTranslation + " " + lvlTranslation);
builder.getOrCreateLore().add(ChatColor.RESET + ChatColor.GRAY + enchantmentName + " " + lvlTranslation);
}

/* Translation methods end */
Expand Down

0 comments on commit 7801e35

Please sign in to comment.