Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-26 08:10:11 +01:00
translate ominous banners
Dieser Commit ist enthalten in:
Ursprung
dd745b901f
Commit
d99f498901
@ -38,8 +38,6 @@ import org.geysermc.geyser.inventory.item.BannerPattern;
|
|||||||
import org.geysermc.geyser.inventory.item.DyeColor;
|
import org.geysermc.geyser.inventory.item.DyeColor;
|
||||||
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.GeyserLocale;
|
|
||||||
import org.geysermc.geyser.text.MinecraftLocale;
|
|
||||||
import org.geysermc.geyser.translator.item.BedrockItemBuilder;
|
import org.geysermc.geyser.translator.item.BedrockItemBuilder;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.Holder;
|
import org.geysermc.mcprotocollib.protocol.data.game.Holder;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.component.BannerPatternLayer;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.component.BannerPatternLayer;
|
||||||
@ -61,6 +59,9 @@ public class BannerItem extends BlockItem {
|
|||||||
private static final List<Pair<BannerPattern, DyeColor>> OMINOUS_BANNER_PATTERN;
|
private static final List<Pair<BannerPattern, DyeColor>> OMINOUS_BANNER_PATTERN;
|
||||||
private static final List<NbtMap> OMINOUS_BANNER_PATTERN_BLOCK;
|
private static final List<NbtMap> 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 {
|
static {
|
||||||
// Construct what an ominous banner is supposed to look like
|
// Construct what an ominous banner is supposed to look like
|
||||||
OMINOUS_BANNER_PATTERN = List.of(
|
OMINOUS_BANNER_PATTERN = List.of(
|
||||||
@ -209,16 +210,15 @@ public class BannerItem extends BlockItem {
|
|||||||
if (bedrockTag.getInt("Type") == 1) {
|
if (bedrockTag.getInt("Type") == 1) {
|
||||||
// Ominous banner pattern
|
// Ominous banner pattern
|
||||||
List<BannerPatternLayer> patternLayers = new ArrayList<>();
|
List<BannerPatternLayer> patternLayers = new ArrayList<>();
|
||||||
for (Pair<BannerPattern, DyeColor> pair : OMINOUS_BANNER_PATTERN) {
|
for (int i = 0; i < ominousBannerPattern.length; i++) {
|
||||||
patternLayers.add(new BannerPatternLayer(Holder.ofId(pair.left().ordinal()), pair.right().ordinal()));
|
patternLayers.add(new BannerPatternLayer(Holder.ofId(ominousBannerPattern[i]), OMINOUS_BANNER_PATTERN.get(i).right().ordinal()));
|
||||||
System.out.println("adding: " + pair.left().getJavaIdentifier() + " " + pair.right().name());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
components.put(DataComponentType.BANNER_PATTERNS, patternLayers);
|
components.put(DataComponentType.BANNER_PATTERNS, patternLayers);
|
||||||
components.put(DataComponentType.HIDE_ADDITIONAL_TOOLTIP, Unit.INSTANCE);
|
components.put(DataComponentType.HIDE_ADDITIONAL_TOOLTIP, Unit.INSTANCE);
|
||||||
components.put(DataComponentType.ITEM_NAME, Component.text(
|
components.put(DataComponentType.ITEM_NAME, Component
|
||||||
MinecraftLocale.getLocaleString("block.minecraft.ominous_banner", GeyserLocale.getDefaultLocale())
|
.translatable("block.minecraft.ominous_banner") // thank god this works
|
||||||
).style(Style.style(TextColor.color(16755200)))
|
.style(Style.style(TextColor.color(16755200)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// Bedrock's creative inventory does not support other patterns as of 1.20.5
|
// Bedrock's creative inventory does not support other patterns as of 1.20.5
|
||||||
|
@ -113,12 +113,17 @@ public final class RegistryCache {
|
|||||||
REGISTRIES.put("minecraft:banner_pattern", ((registryCache, entries) -> {
|
REGISTRIES.put("minecraft:banner_pattern", ((registryCache, entries) -> {
|
||||||
// Clear each local cache every time a new registry entry is given to us
|
// Clear each local cache every time a new registry entry is given to us
|
||||||
// (e.g. proxy server switches)
|
// (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++) {
|
for (int i = 0; i < entries.size(); i++) {
|
||||||
RegistryEntry entry = entries.get(i);
|
RegistryEntry entry = entries.get(i);
|
||||||
// This is what Geyser wants to keep as a value for this registry.
|
// This is what Geyser wants to keep as a value for this registry.
|
||||||
T cacheEntry = reader.apply(registryCache.session, entry);
|
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: ");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren