diff --git a/core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java b/core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java index 2f2d09669..2f5d96b5a 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java @@ -38,8 +38,6 @@ import org.geysermc.geyser.inventory.item.BannerPattern; import org.geysermc.geyser.inventory.item.DyeColor; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.text.GeyserLocale; -import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.protocol.data.game.Holder; import org.geysermc.mcprotocollib.protocol.data.game.item.component.BannerPatternLayer; @@ -61,6 +59,9 @@ public class BannerItem extends BlockItem { private static final List> OMINOUS_BANNER_PATTERN; private static final List OMINOUS_BANNER_PATTERN_BLOCK; + // TODO fix - we somehow need to be able to get the sessions banner pattern registry, which we don't have where we need this :/ + private static final int[] ominousBannerPattern = new int[] { 21, 29, 30, 1, 34, 15, 3, 1 }; + static { // Construct what an ominous banner is supposed to look like OMINOUS_BANNER_PATTERN = List.of( @@ -209,16 +210,15 @@ public class BannerItem extends BlockItem { if (bedrockTag.getInt("Type") == 1) { // Ominous banner pattern List patternLayers = new ArrayList<>(); - for (Pair pair : OMINOUS_BANNER_PATTERN) { - patternLayers.add(new BannerPatternLayer(Holder.ofId(pair.left().ordinal()), pair.right().ordinal())); - System.out.println("adding: " + pair.left().getJavaIdentifier() + " " + pair.right().name()); + for (int i = 0; i < ominousBannerPattern.length; i++) { + patternLayers.add(new BannerPatternLayer(Holder.ofId(ominousBannerPattern[i]), OMINOUS_BANNER_PATTERN.get(i).right().ordinal())); } components.put(DataComponentType.BANNER_PATTERNS, patternLayers); components.put(DataComponentType.HIDE_ADDITIONAL_TOOLTIP, Unit.INSTANCE); - components.put(DataComponentType.ITEM_NAME, Component.text( - MinecraftLocale.getLocaleString("block.minecraft.ominous_banner", GeyserLocale.getDefaultLocale()) - ).style(Style.style(TextColor.color(16755200))) + components.put(DataComponentType.ITEM_NAME, Component + .translatable("block.minecraft.ominous_banner") // thank god this works + .style(Style.style(TextColor.color(16755200))) ); } // Bedrock's creative inventory does not support other patterns as of 1.20.5 diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java index 22fc72cf4..4dfc603ee 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java @@ -113,12 +113,17 @@ public final class RegistryCache { REGISTRIES.put("minecraft:banner_pattern", ((registryCache, entries) -> { // Clear each local cache every time a new registry entry is given to us // (e.g. proxy server switches) - registryCache.bannerPatterns = new Int2ObjectBiMap<>(); + registryCache.bannerPatterns = new Int2ObjectBiMap<>(); // Cannot clear it, must re-create :( for (int i = 0; i < entries.size(); i++) { RegistryEntry entry = entries.get(i); // This is what Geyser wants to keep as a value for this registry. T cacheEntry = reader.apply(registryCache.session, entry); - registryCache.bannerPatterns.put(i, (BannerPattern) cacheEntry); + if (cacheEntry != null) { + registryCache.bannerPatterns.put(i, (BannerPattern) cacheEntry); + } else { + // TODO - seems to be possible with viaversion :/ + GeyserImpl.getInstance().getLogger().warning("Was not able to translate entry: "); + } } })); }