Don't add sculk sensor to creative items without extended height enabled

Fixes #2564
This commit is contained in:
Camotoy 2021-10-04 08:58:33 -04:00
parent a5779a716b
commit 175d9aff48
No known key found for this signature in database
GPG key ID: 7EEFB66FE798081F

View file

@ -42,8 +42,6 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.ints.IntList;
import it.unimi.dsi.fastutil.objects.*; import it.unimi.dsi.fastutil.objects.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.GeyserConnector;
import org.geysermc.connector.network.translators.item.StoredItemMappings; import org.geysermc.connector.network.translators.item.StoredItemMappings;
import org.geysermc.connector.registry.BlockRegistries; import org.geysermc.connector.registry.BlockRegistries;
@ -73,14 +71,7 @@ public class ItemRegistryPopulator {
PALETTE_VERSIONS.put("1_17_30", new PaletteVersion(Bedrock_v465.V465_CODEC.getProtocolVersion(), Collections.emptyMap())); PALETTE_VERSIONS.put("1_17_30", new PaletteVersion(Bedrock_v465.V465_CODEC.getProtocolVersion(), Collections.emptyMap()));
} }
@Getter private record PaletteVersion(int protocolVersion, Map<String, String> additionalTranslatedItems) {
@AllArgsConstructor
private static class PaletteVersion {
private final int protocolVersion;
/**
* Key - item not available in this version. Value - Java replacement item
*/
private final Map<String, String> additionalTranslatedItems;
} }
public static void populate() { public static void populate() {
@ -176,6 +167,10 @@ public class ItemRegistryPopulator {
} }
String identifier = itemNode.get("id").textValue(); String identifier = itemNode.get("id").textValue();
if (identifier.equals("minecraft:sculk_sensor") && !GeyserConnector.getInstance().getConfig().isExtendedWorldHeight()) {
// https://github.com/GeyserMC/Geyser/issues/2564
continue;
}
StartGamePacket.ItemEntry entry = entries.get(identifier); StartGamePacket.ItemEntry entry = entries.get(identifier);
int id = -1; int id = -1;
if (entry != null) { if (entry != null) {
@ -210,7 +205,7 @@ public class ItemRegistryPopulator {
} }
} }
BlockMappings blockMappings = BlockRegistries.BLOCKS.forVersion(palette.getValue().getProtocolVersion()); BlockMappings blockMappings = BlockRegistries.BLOCKS.forVersion(palette.getValue().protocolVersion());
int itemIndex = 0; int itemIndex = 0;
int javaFurnaceMinecartId = 0; int javaFurnaceMinecartId = 0;
@ -227,12 +222,12 @@ public class ItemRegistryPopulator {
javaOnlyItems.add("minecraft:sculk_sensor"); javaOnlyItems.add("minecraft:sculk_sensor");
} }
// Java-only items for this version // Java-only items for this version
javaOnlyItems.addAll(palette.getValue().getAdditionalTranslatedItems().keySet()); javaOnlyItems.addAll(palette.getValue().additionalTranslatedItems().keySet());
for (Map.Entry<String, GeyserMappingItem> entry : items.entrySet()) { for (Map.Entry<String, GeyserMappingItem> entry : items.entrySet()) {
String javaIdentifier = entry.getKey().intern(); String javaIdentifier = entry.getKey().intern();
GeyserMappingItem mappingItem; GeyserMappingItem mappingItem;
String replacementItem = palette.getValue().getAdditionalTranslatedItems().get(javaIdentifier); String replacementItem = palette.getValue().additionalTranslatedItems().get(javaIdentifier);
if (replacementItem != null) { if (replacementItem != null) {
mappingItem = items.get(replacementItem); mappingItem = items.get(replacementItem);
} else { } else {
@ -475,7 +470,7 @@ public class ItemRegistryPopulator {
NbtMapBuilder componentBuilder = NbtMap.builder(); NbtMapBuilder componentBuilder = NbtMap.builder();
// Conveniently, as of 1.16.200, the furnace minecart has a texture AND translation string already. // Conveniently, as of 1.16.200, the furnace minecart has a texture AND translation string already.
// 1.17.30 moves the icon to the item properties section // 1.17.30 moves the icon to the item properties section
(palette.getValue().getProtocolVersion() >= Bedrock_v465.V465_CODEC.getProtocolVersion() ? (palette.getValue().protocolVersion() >= Bedrock_v465.V465_CODEC.getProtocolVersion() ?
itemProperties : componentBuilder).putCompound("minecraft:icon", NbtMap.builder() itemProperties : componentBuilder).putCompound("minecraft:icon", NbtMap.builder()
.putString("texture", "minecart_furnace") .putString("texture", "minecart_furnace")
.putString("frame", "0.000000") .putString("frame", "0.000000")
@ -517,7 +512,7 @@ public class ItemRegistryPopulator {
.furnaceMinecartData(furnaceMinecartData) .furnaceMinecartData(furnaceMinecartData)
.build(); .build();
Registries.ITEMS.register(palette.getValue().getProtocolVersion(), itemMappings); Registries.ITEMS.register(palette.getValue().protocolVersion(), itemMappings);
} }
} }
} }