Broken. Supreme pls check?

This commit is contained in:
EOT3000 2019-11-15 22:02:18 -05:00
parent fda98a7ead
commit c389e0e170
5 changed files with 109 additions and 16 deletions

View file

@ -1,9 +1,17 @@
package org.geysermc.connector.utils; package org.geysermc.connector.network.translators;
import com.nukkitx.nbt.tag.CompoundTag; import com.nukkitx.nbt.tag.IntTag;
import com.nukkitx.nbt.tag.StringTag;
import com.nukkitx.nbt.tag.Tag; import com.nukkitx.nbt.tag.Tag;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BlockEntityUtils { public class BlockEntityUtils {
static final Map<String, ExtraDataMapper> MAPPINGS = new HashMap<>();
public static final String CHEST = "Chest"; public static final String CHEST = "Chest";
public static final String ENDER_CHEST = "EnderChest"; public static final String ENDER_CHEST = "EnderChest";
public static final String FURNACE = "Furnace"; public static final String FURNACE = "Furnace";
@ -75,5 +83,29 @@ public class BlockEntityUtils {
return null; return null;
} }
//public static Tag<?> getExtraData(CompoundTag tag) public static List<Tag<?>> getExtraTags(com.github.steveice10.opennbt.tag.builtin.CompoundTag tag) {
List<Tag<?>> list = new ArrayList<>();
try {
MAPPINGS.get(tag.get("id").getValue()).getExtraTags(tag);
} catch (Exception e) {
int x = ((Number) tag.getValue().get("x").getValue()).intValue();
int y = ((Number) tag.getValue().get("y").getValue()).intValue();
int z = ((Number) tag.getValue().get("z").getValue()).intValue();
String id = BlockEntityUtils.getBedrockID((String) tag.get("id").getValue());
list.add(new IntTag("x", x));
list.add(new IntTag("y", y));
list.add(new IntTag("z", z));
list.add(new StringTag("id", id));
}
return list;
}
public static abstract class ExtraDataMapper {
public abstract List<Tag<?>> getExtraTags(com.github.steveice10.opennbt.tag.builtin.CompoundTag tag);
}
} }

View file

@ -48,6 +48,7 @@ import com.nukkitx.protocol.bedrock.packet.*;
import lombok.Getter; import lombok.Getter;
import org.geysermc.connector.network.translators.bedrock.*; import org.geysermc.connector.network.translators.bedrock.*;
import org.geysermc.connector.network.translators.block.BlockTranslator; import org.geysermc.connector.network.translators.block.BlockTranslator;
import org.geysermc.connector.network.translators.blockentity.SignDataMapper;
import org.geysermc.connector.network.translators.inventory.GenericInventoryTranslator; import org.geysermc.connector.network.translators.inventory.GenericInventoryTranslator;
import org.geysermc.connector.network.translators.inventory.InventoryTranslator; import org.geysermc.connector.network.translators.inventory.InventoryTranslator;
import org.geysermc.connector.network.translators.item.ItemTranslator; import org.geysermc.connector.network.translators.item.ItemTranslator;
@ -141,6 +142,7 @@ public class TranslatorsInit {
Registry.registerJava(ServerTeamPacket.class, new JavaTeamTranslator()); Registry.registerJava(ServerTeamPacket.class, new JavaTeamTranslator());
Registry.registerJava(ServerBlockChangePacket.class, new JavaBlockChangeTranslator()); Registry.registerJava(ServerBlockChangePacket.class, new JavaBlockChangeTranslator());
Registry.registerJava(ServerMultiBlockChangePacket.class, new JavaMultiBlockChangeTranslator()); Registry.registerJava(ServerMultiBlockChangePacket.class, new JavaMultiBlockChangeTranslator());
Registry.registerJava(ServerUpdateTileEntityPacket.class, new JavaUpdateTileEntityPacketTranslator());
Registry.registerJava(ServerOpenWindowPacket.class, new OpenWindowPacketTranslator()); Registry.registerJava(ServerOpenWindowPacket.class, new OpenWindowPacketTranslator());
@ -154,6 +156,8 @@ public class TranslatorsInit {
Registry.registerBedrock(InteractPacket.class, new BedrockInteractTranslator()); Registry.registerBedrock(InteractPacket.class, new BedrockInteractTranslator());
Registry.registerBedrock(TextPacket.class, new BedrockTextTranslator()); Registry.registerBedrock(TextPacket.class, new BedrockTextTranslator());
BlockEntityUtils.MAPPINGS.put("minecraft:sign", new SignDataMapper());
itemTranslator = new ItemTranslator(); itemTranslator = new ItemTranslator();
blockTranslator = new BlockTranslator(); blockTranslator = new BlockTranslator();

View file

@ -0,0 +1,35 @@
package org.geysermc.connector.network.translators.blockentity;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.nukkitx.nbt.tag.IntTag;
import com.nukkitx.nbt.tag.StringTag;
import com.nukkitx.nbt.tag.Tag;
import org.geysermc.connector.network.translators.BlockEntityUtils;
import java.util.ArrayList;
import java.util.List;
public class SignDataMapper extends BlockEntityUtils.ExtraDataMapper {
@Override
public List<Tag<?>> getExtraTags(CompoundTag tag) {
List<Tag<?>> list = new ArrayList<>();
list.add(new StringTag("Text", tag.get("Text1").getValue().toString() + "\n" +
tag.get("Text2").getValue().toString() + "\n" +
tag.get("Text3").getValue().toString() + "\n" +
tag.get("Text4").getValue().toString()));
int x = ((Number) tag.getValue().get("x").getValue()).intValue();
int y = ((Number) tag.getValue().get("y").getValue()).intValue();
int z = ((Number) tag.getValue().get("z").getValue()).intValue();
String id = BlockEntityUtils.getBedrockID((String) tag.get("id").getValue());
list.add(new IntTag("x", x));
list.add(new IntTag("y", y));
list.add(new IntTag("z", z));
list.add(new StringTag("id", id));
return list;
}
}

View file

@ -0,0 +1,31 @@
package org.geysermc.connector.network.translators.java.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateTileEntityPacket;
import com.nukkitx.math.vector.Vector3i;
import com.nukkitx.nbt.tag.CompoundTag;
import com.nukkitx.nbt.tag.Tag;
import com.nukkitx.protocol.bedrock.packet.BlockEntityDataPacket;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.network.translators.BlockEntityUtils;
import org.geysermc.connector.network.translators.PacketTranslator;
import java.util.HashMap;
import java.util.Map;
public class JavaUpdateTileEntityPacketTranslator extends PacketTranslator<ServerUpdateTileEntityPacket> {
@Override
public void translate(ServerUpdateTileEntityPacket packet, GeyserSession session) {
BlockEntityDataPacket bedrock = new BlockEntityDataPacket();
Position pos = packet.getPosition();
Map<String, Tag<?>> map = new HashMap<>();
for(Tag<?> tag : BlockEntityUtils.getExtraTags(packet.getNbt())) {
map.put(tag.getName(), tag);
}
bedrock.setData(new CompoundTag("", map));
bedrock.setBlockPosition(Vector3i.from(pos.getX(), pos.getY(), pos.getZ()));
session.getUpstream().sendPacketImmediately(bedrock);
}
}

View file

@ -9,6 +9,7 @@ import com.nukkitx.nbt.stream.NBTOutputStream;
import com.nukkitx.nbt.tag.IntTag; import com.nukkitx.nbt.tag.IntTag;
import com.nukkitx.nbt.tag.StringTag; import com.nukkitx.nbt.tag.StringTag;
import com.nukkitx.nbt.tag.Tag; import com.nukkitx.nbt.tag.Tag;
import org.geysermc.connector.network.translators.BlockEntityUtils;
import org.geysermc.connector.network.translators.TranslatorsInit; import org.geysermc.connector.network.translators.TranslatorsInit;
import org.geysermc.connector.network.translators.block.BlockEntry; import org.geysermc.connector.network.translators.block.BlockEntry;
import org.geysermc.connector.world.chunk.ChunkSection; import org.geysermc.connector.world.chunk.ChunkSection;
@ -38,19 +39,9 @@ public class ChunkUtils {
for (CompoundTag tag : column.getTileEntities()) { for (CompoundTag tag : column.getTileEntities()) {
Map<String, Tag<?>> map = new HashMap<>(); Map<String, Tag<?>> map = new HashMap<>();
int x = ((Number) tag.getValue().get("x").getValue()).intValue(); for(Tag<?> extra : BlockEntityUtils.getExtraTags(tag)) {
int y = ((Number) tag.getValue().get("y").getValue()).intValue(); map.put(extra.getName(), extra);
int z = ((Number) tag.getValue().get("z").getValue()).intValue(); }
String id = BlockEntityUtils.getBedrockID((String) tag.get("id").getValue());
System.out.println(id);
map.put("x", new IntTag("x", x));
map.put("y", new IntTag("y", y));
map.put("z", new IntTag("z", z));
map.put("id", new StringTag("id", id));
nbtStream.write(new com.nukkitx.nbt.tag.CompoundTag("", map)); nbtStream.write(new com.nukkitx.nbt.tag.CompoundTag("", map));
} }