new remapper (:

This commit is contained in:
EOT3000 2019-08-05 22:09:45 -04:00
parent 5318a664b8
commit 7fccb0d69d
2 changed files with 46 additions and 25 deletions

View file

@ -35,6 +35,7 @@ import com.github.steveice10.packetlib.event.session.ConnectedEvent;
import com.github.steveice10.packetlib.event.session.DisconnectedEvent; import com.github.steveice10.packetlib.event.session.DisconnectedEvent;
import com.github.steveice10.packetlib.event.session.PacketReceivedEvent; import com.github.steveice10.packetlib.event.session.PacketReceivedEvent;
import com.github.steveice10.packetlib.event.session.SessionAdapter; import com.github.steveice10.packetlib.event.session.SessionAdapter;
import com.github.steveice10.packetlib.packet.Packet;
import com.github.steveice10.packetlib.tcp.TcpSessionFactory; import com.github.steveice10.packetlib.tcp.TcpSessionFactory;
import com.nukkitx.network.util.DisconnectReason; import com.nukkitx.network.util.DisconnectReason;
import com.nukkitx.protocol.PlayerSession; import com.nukkitx.protocol.PlayerSession;
@ -45,58 +46,71 @@ import com.nukkitx.protocol.bedrock.packet.PlayStatusPacket;
import com.nukkitx.protocol.bedrock.packet.StartGamePacket; import com.nukkitx.protocol.bedrock.packet.StartGamePacket;
import com.nukkitx.protocol.bedrock.packet.TextPacket; import com.nukkitx.protocol.bedrock.packet.TextPacket;
import lombok.Getter; import lombok.Getter;
import org.geysermc.api.Geyser; import lombok.Setter;
import org.geysermc.api.Player; import org.geysermc.api.Player;
import org.geysermc.api.RemoteServer; import org.geysermc.api.RemoteServer;
import org.geysermc.api.session.AuthData; import org.geysermc.api.session.AuthData;
import org.geysermc.api.window.FormWindow; import org.geysermc.api.window.FormWindow;
import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.GeyserConnector;
import org.geysermc.connector.entity.PlayerEntity;
import org.geysermc.connector.entity.type.EntityType;
import org.geysermc.connector.inventory.PlayerInventory;
import org.geysermc.connector.network.session.cache.DataCache;
import org.geysermc.connector.network.session.cache.EntityCache;
import org.geysermc.connector.network.session.cache.InventoryCache; import org.geysermc.connector.network.session.cache.InventoryCache;
import org.geysermc.connector.network.session.cache.ScoreboardCache; import org.geysermc.connector.network.session.cache.ScoreboardCache;
import org.geysermc.connector.network.session.cache.WindowCache; import org.geysermc.connector.network.session.cache.WindowCache;
import org.geysermc.connector.network.translators.Registry; import org.geysermc.connector.network.translators.Registry;
import org.geysermc.connector.utils.Toolbox; import org.geysermc.connector.utils.Toolbox;
import java.util.UUID;
@Getter
public class GeyserSession implements PlayerSession, Player { public class GeyserSession implements PlayerSession, Player {
private GeyserConnector connector; private GeyserConnector connector;
@Getter
private RemoteServer remoteServer; private RemoteServer remoteServer;
@Getter
private BedrockServerSession upstream; private BedrockServerSession upstream;
@Getter
private Client downstream; private Client downstream;
@Getter
private AuthData authenticationData; private AuthData authenticationData;
@Getter private PlayerEntity playerEntity;
private PlayerInventory inventory;
private EntityCache entityCache;
private InventoryCache inventoryCache; private InventoryCache inventoryCache;
@Getter
private WindowCache windowCache; private WindowCache windowCache;
@Getter
private ScoreboardCache scoreboardCache; private ScoreboardCache scoreboardCache;
@Getter private DataCache<Packet> javaPacketCache;
private boolean loggedIn; private boolean loggedIn;
@Setter
private boolean spawned;
private boolean closed; private boolean closed;
public GeyserSession(GeyserConnector connector, BedrockServerSession bedrockServerSession) { public GeyserSession(GeyserConnector connector, BedrockServerSession bedrockServerSession) {
this.connector = connector; this.connector = connector;
this.upstream = bedrockServerSession; this.upstream = bedrockServerSession;
this.entityCache = new EntityCache(this);
this.inventoryCache = new InventoryCache(this); this.inventoryCache = new InventoryCache(this);
this.windowCache = new WindowCache(this); this.windowCache = new WindowCache(this);
this.scoreboardCache = new ScoreboardCache(this); this.scoreboardCache = new ScoreboardCache(this);
this.playerEntity = new PlayerEntity(UUID.randomUUID(), 1, 1, EntityType.PLAYER, new Vector3f(0, 0, 0), new Vector3f(0, 0, 0), new Vector3f(0, 0, 0));
this.inventory = new PlayerInventory();
this.javaPacketCache = new DataCache<Packet>();
this.spawned = false;
this.loggedIn = false; this.loggedIn = false;
this.inventoryCache.getInventories().put(0, inventory);
} }
public void connect(RemoteServer remoteServer) { public void connect(RemoteServer remoteServer) {
@ -107,7 +121,6 @@ public class GeyserSession implements PlayerSession, Player {
if (!connector.getConfig().getRemote().isOnlineMode()) { if (!connector.getConfig().getRemote().isOnlineMode()) {
connector.getLogger().info("Attempting to login using offline mode... authentication is disabled."); connector.getLogger().info("Attempting to login using offline mode... authentication is disabled.");
authenticate(authenticationData.getName()); authenticate(authenticationData.getName());
Geyser.addPlayer(this);
} }
} }
@ -136,18 +149,20 @@ public class GeyserSession implements PlayerSession, Player {
public void connected(ConnectedEvent event) { public void connected(ConnectedEvent event) {
loggedIn = true; loggedIn = true;
connector.getLogger().info(authenticationData.getName() + " (logged in as: " + protocol.getProfile().getName() + ")" + " has connected to remote java server on address " + remoteServer.getAddress()); connector.getLogger().info(authenticationData.getName() + " (logged in as: " + protocol.getProfile().getName() + ")" + " has connected to remote java server on address " + remoteServer.getAddress());
playerEntity.setUuid(protocol.getProfile().getId());
} }
@Override @Override
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());
upstream.disconnect(event.getReason()); disconnect(event.getReason());
} }
@Override @Override
public void packetReceived(PacketReceivedEvent event) { public void packetReceived(PacketReceivedEvent event) {
Registry.JAVA.translate(event.getPacket().getClass(), event.getPacket(), GeyserSession.this); if (!closed)
Registry.JAVA.translate(event.getPacket().getClass(), event.getPacket(), GeyserSession.this);
} }
}); });
@ -167,6 +182,8 @@ public class GeyserSession implements PlayerSession, Player {
upstream.disconnect(reason); upstream.disconnect(reason);
} }
} }
closed = true;
} }
@Override @Override
@ -228,15 +245,15 @@ public class GeyserSession implements PlayerSession, Player {
private void startGame() { private void startGame() {
StartGamePacket startGamePacket = new StartGamePacket(); StartGamePacket startGamePacket = new StartGamePacket();
startGamePacket.setUniqueEntityId(1); // TODO: Cache this value startGamePacket.setUniqueEntityId(playerEntity.getGeyserId());
startGamePacket.setRuntimeEntityId(1); // TODO: Cache this value startGamePacket.setRuntimeEntityId(playerEntity.getGeyserId());
startGamePacket.setPlayerGamemode(0); startGamePacket.setPlayerGamemode(0);
startGamePacket.setPlayerPosition(new Vector3f(0, 0, 0)); startGamePacket.setPlayerPosition(new Vector3f(0, 69, 0));
startGamePacket.setRotation(new Vector2f(1, 1)); startGamePacket.setRotation(new Vector2f(1, 1));
startGamePacket.setSeed(1111); startGamePacket.setSeed(0);
startGamePacket.setDimensionId(0); startGamePacket.setDimensionId(playerEntity.getDimension());
startGamePacket.setGeneratorId(0); startGamePacket.setGeneratorId(1);
startGamePacket.setLevelGamemode(0); startGamePacket.setLevelGamemode(0);
startGamePacket.setDifficulty(1); startGamePacket.setDifficulty(1);
startGamePacket.setDefaultSpawn(new Vector3i(0, 0, 0)); startGamePacket.setDefaultSpawn(new Vector3i(0, 0, 0));
@ -265,7 +282,7 @@ public class GeyserSession implements PlayerSession, Player {
startGamePacket.setFromWorldTemplate(false); startGamePacket.setFromWorldTemplate(false);
startGamePacket.setWorldTemplateOptionLocked(false); startGamePacket.setWorldTemplateOptionLocked(false);
startGamePacket.setLevelId("oerjhii"); startGamePacket.setLevelId("world");
startGamePacket.setWorldName("world"); startGamePacket.setWorldName("world");
startGamePacket.setPremiumWorldTemplateId("00000000-0000-0000-0000-000000000000"); startGamePacket.setPremiumWorldTemplateId("00000000-0000-0000-0000-000000000000");
startGamePacket.setCurrentTick(0); startGamePacket.setCurrentTick(0);

View file

@ -54,7 +54,7 @@ class RemapUtils {
//TODO: add stone support //TODO: add stone support
/*Remapper.predicates.put((x) -> x.getF().contains("oak"), (x, y) -> { /*Remapper.predicates.put((x) -> x.getF().contains("oak"), (x, y) -> {
//System.out.println(x.getIdentifier()); //System.out.println(x.getIdentifier());
//if(customWoodIfNeeded(y)) return; //if(customStoneIfNeeded(y)) return;
if (y.getIdentifier().replaceAll("oak_", "") if (y.getIdentifier().replaceAll("oak_", "")
.equalsIgnoreCase(x.getIdentifier()) && x.getData() == 0) { .equalsIgnoreCase(x.getIdentifier()) && x.getData() == 0) {
@ -87,4 +87,8 @@ class RemapUtils {
} }
return false; return false;
} }
private static boolean customStoneIfNeeded(JavaItem j) {
return false;
}
} }