MapItemTranslator: support map tag being of short value (#1475)

GSigns sends this as a short. Who knows why.
This commit is contained in:
Camotoy 2020-10-31 22:38:56 -04:00 committed by GitHub
parent e0f5deb329
commit ca1f87d464
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 10 deletions

View File

@ -25,10 +25,7 @@
package org.geysermc.connector.network.translators.item.translators.nbt; package org.geysermc.connector.network.translators.item.translators.nbt;
import com.github.steveice10.opennbt.tag.builtin.ByteTag; import com.github.steveice10.opennbt.tag.builtin.*;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.github.steveice10.opennbt.tag.builtin.IntTag;
import com.github.steveice10.opennbt.tag.builtin.LongTag;
import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.network.translators.ItemRemapper; import org.geysermc.connector.network.translators.ItemRemapper;
import org.geysermc.connector.network.translators.item.ItemEntry; import org.geysermc.connector.network.translators.item.ItemEntry;
@ -39,14 +36,22 @@ public class MapItemTranslator extends NbtItemStackTranslator {
@Override @Override
public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemEntry itemEntry) { public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemEntry itemEntry) {
IntTag mapId = itemTag.get("map"); // Can be either an IntTag or ShortTag
Tag mapId = itemTag.get("map");
if (mapId == null) return;
if (mapId != null) { int mapValue;
itemTag.put(new LongTag("map_uuid", mapId.getValue())); if (mapId.getValue() instanceof Short) {
itemTag.put(new IntTag("map_name_index", mapId.getValue())); // Convert to int if necessary
itemTag.put(new ByteTag("map_display_players", (byte) 1)); mapValue = (int) (short) mapId.getValue();
itemTag.remove("map"); } else {
mapValue = (int) mapId.getValue();
} }
itemTag.put(new LongTag("map_uuid", mapValue));
itemTag.put(new IntTag("map_name_index", mapValue));
itemTag.put(new ByteTag("map_display_players", (byte) 1));
itemTag.remove("map");
} }
@Override @Override