mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
Broken. Supreme pls check?
This commit is contained in:
parent
fda98a7ead
commit
c389e0e170
5 changed files with 109 additions and 16 deletions
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue