chunks. Still don't work, but hey, it doesn't crash or hang!

This commit is contained in:
EOT3000 2019-08-08 18:14:08 -04:00
parent 7c807740a4
commit de78c93b72
5 changed files with 100 additions and 12 deletions

View file

@ -158,6 +158,7 @@ public class GeyserSession implements PlayerSession, Player {
public void disconnected(DisconnectedEvent event) { public void disconnected(DisconnectedEvent event) {
loggedIn = false; loggedIn = false;
connector.getLogger().info(authenticationData.getName() + " has disconnected from remote java server on address " + remoteServer.getAddress() + " because of " + event.getReason()); connector.getLogger().info(authenticationData.getName() + " has disconnected from remote java server on address " + remoteServer.getAddress() + " because of " + event.getReason());
event.getCause().printStackTrace();
disconnect(event.getReason()); disconnect(event.getReason());
} }

View file

@ -53,6 +53,7 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.scoreboard.ServerU
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket; import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerSetSlotPacket; import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerSetSlotPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket; import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerChunkDataPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerNotifyClientPacket; import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerNotifyClientPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateTimePacket; import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerUpdateTimePacket;
import com.nukkitx.nbt.CompoundTagBuilder; import com.nukkitx.nbt.CompoundTagBuilder;
@ -94,12 +95,14 @@ import org.geysermc.connector.network.translators.java.entity.spawn.JavaSpawnPla
import org.geysermc.connector.network.translators.java.scoreboard.JavaDisplayScoreboardTranslator; import org.geysermc.connector.network.translators.java.scoreboard.JavaDisplayScoreboardTranslator;
import org.geysermc.connector.network.translators.java.scoreboard.JavaScoreboardObjectiveTranslator; import org.geysermc.connector.network.translators.java.scoreboard.JavaScoreboardObjectiveTranslator;
import org.geysermc.connector.network.translators.java.scoreboard.JavaUpdateScoreTranslator; import org.geysermc.connector.network.translators.java.scoreboard.JavaUpdateScoreTranslator;
import org.geysermc.connector.network.translators.java.world.JavaChunk;
import org.geysermc.connector.network.translators.java.world.JavaNotifyClientTranslator; import org.geysermc.connector.network.translators.java.world.JavaNotifyClientTranslator;
import org.geysermc.connector.network.translators.java.window.JavaOpenWindowTranslator; import org.geysermc.connector.network.translators.java.window.JavaOpenWindowTranslator;
import org.geysermc.connector.network.translators.java.window.JavaSetSlotTranslator; import org.geysermc.connector.network.translators.java.window.JavaSetSlotTranslator;
import org.geysermc.connector.network.translators.java.JavaTitleTranslator; import org.geysermc.connector.network.translators.java.JavaTitleTranslator;
import org.geysermc.connector.network.translators.java.world.JavaUpdateTimeTranslator; import org.geysermc.connector.network.translators.java.world.JavaUpdateTimeTranslator;
import org.geysermc.connector.network.translators.java.window.JavaWindowItemsTranslator; import org.geysermc.connector.network.translators.java.window.JavaWindowItemsTranslator;
import org.geysermc.connector.utils.Chunks;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
@ -158,6 +161,7 @@ public class TranslatorsInit {
Registry.registerJava(ServerPlayerHealthPacket.class, new JavaPlayerHealthTranslator()); Registry.registerJava(ServerPlayerHealthPacket.class, new JavaPlayerHealthTranslator());
Registry.registerJava(ServerNotifyClientPacket.class, new JavaNotifyClientTranslator()); Registry.registerJava(ServerNotifyClientPacket.class, new JavaNotifyClientTranslator());
Registry.registerJava(ServerChunkDataPacket.class, new JavaChunk());
Registry.registerJava(ServerEntityDestroyPacket.class, new JavaEntityDestroyTranslator()); Registry.registerJava(ServerEntityDestroyPacket.class, new JavaEntityDestroyTranslator());
Registry.registerJava(ServerWindowItemsPacket.class, new JavaWindowItemsTranslator()); Registry.registerJava(ServerWindowItemsPacket.class, new JavaWindowItemsTranslator());
Registry.registerJava(ServerOpenWindowPacket.class, new JavaOpenWindowTranslator()); Registry.registerJava(ServerOpenWindowPacket.class, new JavaOpenWindowTranslator());

View file

@ -26,6 +26,7 @@
package org.geysermc.connector.network.translators.item; package org.geysermc.connector.network.translators.item;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
import com.github.steveice10.mc.protocol.data.game.world.block.BlockState;
import com.github.steveice10.mc.protocol.data.message.Message; import com.github.steveice10.mc.protocol.data.message.Message;
import com.github.steveice10.opennbt.tag.builtin.ByteArrayTag; import com.github.steveice10.opennbt.tag.builtin.ByteArrayTag;
import com.github.steveice10.opennbt.tag.builtin.ByteTag; import com.github.steveice10.opennbt.tag.builtin.ByteTag;
@ -53,7 +54,7 @@ import java.util.Map;
public class ItemTranslator { public class ItemTranslator {
public ItemStack translateToJava(ItemData data) { public static ItemStack translateToJava(ItemData data) {
JavaItem javaItem = getJavaItem(data); JavaItem javaItem = getJavaItem(data);
if (data.getTag() == null) { if (data.getTag() == null) {
@ -62,7 +63,7 @@ public class ItemTranslator {
return new ItemStack(javaItem.getId(), data.getCount(), translateToJavaNBT(data.getTag())); return new ItemStack(javaItem.getId(), data.getCount(), translateToJavaNBT(data.getTag()));
} }
public ItemData translateToBedrock(ItemStack stack) { public static ItemData translateToBedrock(ItemStack stack) {
// Most likely air if null // Most likely air if null
if (stack == null) { if (stack == null) {
return ItemData.AIR; return ItemData.AIR;
@ -75,18 +76,24 @@ public class ItemTranslator {
return ItemData.of(bedrockItem.getId(), (short) bedrockItem.getData(), stack.getAmount(), translateToBedrockNBT(stack.getNBT())); return ItemData.of(bedrockItem.getId(), (short) bedrockItem.getData(), stack.getAmount(), translateToBedrockNBT(stack.getNBT()));
} }
public BedrockItem getBedrockItem(ItemStack stack) { public static BedrockItem getBedrockItem(ItemStack stack) {
Map<String, Object> m = Remapper.JAVA_TO_BEDROCK.get(stack.getId()); Map<String, Object> m = Remapper.JAVA_TO_BEDROCK.get(stack.getId());
System.out.println(stack.getId()); System.out.println(stack.getId());
return new BedrockItem((String) m.get("name"), (Integer) m.get("id"), (Integer) m.get("data")); return new BedrockItem((String) m.get("name"), (Integer) m.get("id"), (Integer) m.get("data"));
} }
public JavaItem getJavaItem(ItemData data) { public static JavaItem getJavaItem(ItemData data) {
Map<String, Object> m = Remapper.BEDROCK_TO_JAVA.get(data.getId()).get(data.getDamage()); Map<String, Object> m = Remapper.BEDROCK_TO_JAVA.get(data.getId()).get(data.getDamage());
return new JavaItem((String) m.get("name"), (Integer) m.get("id")); return new JavaItem((String) m.get("name"), (Integer) m.get("id"));
} }
public String getBedrockIdentifier(String javaIdentifier) { public static BedrockItem getBedrockBlock(BlockState stack) {
Map<String, Object> m = Remapper.JAVA_TO_BEDROCK_BLOCKS.get(stack.getId());
System.out.println(stack.getId());
return new BedrockItem((String) m.get("name"), (Integer) m.get("id"), (Integer) m.get("data"));
}
public static String getBedrockIdentifier(String javaIdentifier) {
if (!Remapper.JAVA_TO_BEDROCK.containsKey(javaIdentifier)) { if (!Remapper.JAVA_TO_BEDROCK.containsKey(javaIdentifier)) {
return javaIdentifier; return javaIdentifier;
} }
@ -98,7 +105,7 @@ public class ItemTranslator {
return (String) Remapper.JAVA_TO_BEDROCK.get(javaIdentifier).get("name"); return (String) Remapper.JAVA_TO_BEDROCK.get(javaIdentifier).get("name");
} }
public String getJavaIdentifier(String bedrockIdentifier, int data) { public static String getJavaIdentifier(String bedrockIdentifier, int data) {
if (!Remapper.BEDROCK_TO_JAVA.containsKey(bedrockIdentifier)) { if (!Remapper.BEDROCK_TO_JAVA.containsKey(bedrockIdentifier)) {
return bedrockIdentifier; return bedrockIdentifier;
} }
@ -106,7 +113,7 @@ public class ItemTranslator {
return (String) Remapper.BEDROCK_TO_JAVA.get(bedrockIdentifier).get(data).get("name"); return (String) Remapper.BEDROCK_TO_JAVA.get(bedrockIdentifier).get(data).get("name");
} }
private CompoundTag translateToJavaNBT(com.nukkitx.nbt.tag.CompoundTag tag) { private static CompoundTag translateToJavaNBT(com.nukkitx.nbt.tag.CompoundTag tag) {
CompoundTag javaTag = new CompoundTag(tag.getName()); CompoundTag javaTag = new CompoundTag(tag.getName());
Map<String, Tag> javaValue = javaTag.getValue(); Map<String, Tag> javaValue = javaTag.getValue();
if (tag.getValue() != null && !tag.getValue().isEmpty()) { if (tag.getValue() != null && !tag.getValue().isEmpty()) {
@ -123,7 +130,7 @@ public class ItemTranslator {
return javaTag; return javaTag;
} }
private Tag translateToJavaNBT(com.nukkitx.nbt.tag.Tag tag) { private static Tag translateToJavaNBT(com.nukkitx.nbt.tag.Tag tag) {
if (tag instanceof com.nukkitx.nbt.tag.ByteArrayTag) { if (tag instanceof com.nukkitx.nbt.tag.ByteArrayTag) {
com.nukkitx.nbt.tag.ByteArrayTag byteArrayTag = (com.nukkitx.nbt.tag.ByteArrayTag) tag; com.nukkitx.nbt.tag.ByteArrayTag byteArrayTag = (com.nukkitx.nbt.tag.ByteArrayTag) tag;
return new ByteArrayTag(byteArrayTag.getName(), byteArrayTag.getValue()); return new ByteArrayTag(byteArrayTag.getName(), byteArrayTag.getValue());
@ -197,7 +204,7 @@ public class ItemTranslator {
return null; return null;
} }
private com.nukkitx.nbt.tag.CompoundTag translateToBedrockNBT(CompoundTag tag) { private static com.nukkitx.nbt.tag.CompoundTag translateToBedrockNBT(CompoundTag tag) {
Map<String, com.nukkitx.nbt.tag.Tag<?>> javaValue = new HashMap<String, com.nukkitx.nbt.tag.Tag<?>>(); Map<String, com.nukkitx.nbt.tag.Tag<?>> javaValue = new HashMap<String, com.nukkitx.nbt.tag.Tag<?>>();
if (tag.getValue() != null && !tag.getValue().isEmpty()) { if (tag.getValue() != null && !tag.getValue().isEmpty()) {
for (String str : tag.getValue().keySet()) { for (String str : tag.getValue().keySet()) {
@ -214,7 +221,7 @@ public class ItemTranslator {
return bedrockTag; return bedrockTag;
} }
private com.nukkitx.nbt.tag.Tag translateToBedrockNBT(Tag tag) { private static com.nukkitx.nbt.tag.Tag translateToBedrockNBT(Tag tag) {
if (tag instanceof ByteArrayTag) { if (tag instanceof ByteArrayTag) {
ByteArrayTag byteArrayTag = (ByteArrayTag) tag; ByteArrayTag byteArrayTag = (ByteArrayTag) tag;
return new com.nukkitx.nbt.tag.ByteArrayTag(byteArrayTag.getName(), byteArrayTag.getValue()); return new com.nukkitx.nbt.tag.ByteArrayTag(byteArrayTag.getName(), byteArrayTag.getValue());

View file

@ -0,0 +1,28 @@
package org.geysermc.connector.network.translators.java.world;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerChunkDataPacket;
import com.github.steveice10.packetlib.packet.Packet;
import com.nukkitx.protocol.bedrock.packet.LevelChunkPacket;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.network.translators.PacketTranslator;
import org.geysermc.connector.utils.Chunks;
public class JavaChunk extends PacketTranslator<ServerChunkDataPacket> {
@Override
public void translate(ServerChunkDataPacket packet, GeyserSession session) {
LevelChunkPacket p = new LevelChunkPacket();
Chunks.ChunkData data = Chunks.getData(packet.getColumn());
p.setSubChunksLength(data.count);
p.setData(data.bytes);
p.setChunkX(packet.getColumn().getX());
p.setChunkZ(packet.getColumn().getZ());
System.out.println("sent");
session.getUpstream().sendPacketImmediately(p);
}
}

View file

@ -2,14 +2,18 @@ package org.geysermc.connector.utils;
import com.github.steveice10.mc.protocol.data.game.chunk.Chunk; import com.github.steveice10.mc.protocol.data.game.chunk.Chunk;
import com.github.steveice10.mc.protocol.data.game.chunk.Column; import com.github.steveice10.mc.protocol.data.game.chunk.Column;
import gnu.trove.list.TByteList;
import gnu.trove.list.array.TByteArrayList;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.geysermc.connector.network.translators.item.ItemTranslator;
import java.util.List;
import java.util.Objects; import java.util.Objects;
public class Chunks { public class Chunks {
public ChunkData getData(Column c) { public static ChunkData getData(Column c) {
Objects.requireNonNull(c); Objects.requireNonNull(c);
int count = 0; int count = 0;
@ -20,7 +24,51 @@ public class Chunks {
} }
} }
return null; int block = 0;
TByteList list = new TByteArrayList(4096 * 4);
for(int i = 0; i < 256; i++) {
list.add((byte) 0);
}
for(Chunk chunk : c.getChunks()) {
if (chunk != null) {
list.add((byte) 0);
for (int x = 0; x < 16; x++) {
for (int y = 0; x < 16; x++) {
for (int z = 0; x < 16; x++) {
try {
list.add((byte) ItemTranslator.getBedrockBlock(chunk.getBlocks().get(x, y, z)).getId());
} catch (NullPointerException e) {
list.add((byte) 0);
}
block++;
}
}
}
for (int x = 0; x < 16; x++) {
for (int y = 0; x < 16; x++) {
for (int z = 0; x < 16; x++) {
try {
list.add((byte) ItemTranslator.getBedrockBlock(chunk.getBlocks().get(x, y, z)).getData());
} catch (NullPointerException e) {
list.add((byte) 0);
}
block++;
}
}
}
}
}
list.add((byte) 0);
list.add((byte) 0);
return new ChunkData(count, list.toArray());
} }
@AllArgsConstructor(access = AccessLevel.PACKAGE) @AllArgsConstructor(access = AccessLevel.PACKAGE)