]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/commitdiff
Stop using EntityPlayer
authorIrtimaled <irtimaled@gmail.com>
Sun, 24 Mar 2019 07:28:39 +0000 (00:28 -0700)
committerIrtimaled <irtimaled@gmail.com>
Mon, 25 Mar 2019 03:56:28 +0000 (20:56 -0700)
src/main/java/com/irtimaled/bbor/client/ClientProxy.java
src/main/java/com/irtimaled/bbor/client/PlayerCoords.java
src/main/java/com/irtimaled/bbor/client/events/Render.java
src/main/java/com/irtimaled/bbor/common/CommonProxy.java
src/main/java/com/irtimaled/bbor/common/events/PlayerLoggedIn.java
src/main/java/com/irtimaled/bbor/common/events/PlayerLoggedOut.java
src/main/java/com/irtimaled/bbor/common/events/PlayerSubscribed.java
src/main/java/com/irtimaled/bbor/common/models/ServerPlayer.java [new file with mode: 0644]
src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinEntityRenderer.java
src/main/java/com/irtimaled/bbor/mixin/network/play/client/MixinCPacketCustomPayload.java
src/main/java/com/irtimaled/bbor/mixin/server/management/MixinPlayerList.java

index 6786be54b44fb902547d1915dc898926fdf05ab9..b4933059e2c0b636ad5fadbd52f4ad52bd84ba62 100644 (file)
@@ -8,8 +8,6 @@ import com.irtimaled.bbor.common.EventBus;
 import com.irtimaled.bbor.common.VillageColorCache;
 import com.irtimaled.bbor.config.ConfigManager;
 import com.irtimaled.bbor.config.Setting;
-import net.minecraft.client.Minecraft;
-import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.world.dimension.DimensionType;
 
 import java.net.InetSocketAddress;
@@ -42,7 +40,7 @@ public class ClientProxy extends CommonProxy {
     @Override
     public void init() {
         super.init();
-        EventBus.subscribe(Render.class, e -> render(e.getPartialTicks()));
+        EventBus.subscribe(Render.class, e -> render(e.getDimensionType()));
         EventBus.subscribe(ConnectedToRemoteServer.class, e -> connectedToServer(e.getInternetAddress()));
         EventBus.subscribe(DisconnectedFromRemoteServer.class, e -> disconnectedFromServer());
         EventBus.subscribe(InitializeClientReceived.class, e -> setWorldData(e.getSeed(), e.getSpawnX(), e.getSpawnZ()));
@@ -53,12 +51,9 @@ public class ClientProxy extends CommonProxy {
         KeyListener.init();
     }
 
-    private void render(float partialTicks) {
-        EntityPlayer entityPlayer = Minecraft.getInstance().player;
-        PlayerCoords.setPlayerPosition(partialTicks, entityPlayer);
-
+    private void render(DimensionType dimensionType) {
         if (active) {
-            renderer.render(DimensionType.getById(entityPlayer.dimension), ConfigManager.outerBoxesOnly.get());
+            renderer.render(dimensionType, ConfigManager.outerBoxesOnly.get());
         }
     }
 
index 19a340cb75daeeed12fe8d7cb8547f4fe3f4bc5e..a96924a25daeebb47ec3fdd814bc6682510cce38 100644 (file)
@@ -8,7 +8,7 @@ public class PlayerCoords {
     private static double z;
     private static double activeY;
 
-    static void setPlayerPosition(double partialTicks, EntityPlayer entityPlayer) {
+    public static void setPlayerPosition(double partialTicks, EntityPlayer entityPlayer) {
         x = entityPlayer.lastTickPosX + (entityPlayer.posX - entityPlayer.lastTickPosX) * partialTicks;
         y = entityPlayer.lastTickPosY + (entityPlayer.posY - entityPlayer.lastTickPosY) * partialTicks;
         z = entityPlayer.lastTickPosZ + (entityPlayer.posZ - entityPlayer.lastTickPosZ) * partialTicks;
index 93d47332b76b020e3fbf2bb753203964cc64f172..3b83af090015fd3157d25890db9a703c6855017c 100644 (file)
@@ -1,13 +1,15 @@
 package com.irtimaled.bbor.client.events;
 
+import net.minecraft.world.dimension.DimensionType;
+
 public class Render {
-    private final float partialTicks;
+    private DimensionType dimensionType;
 
-    public Render(float partialTicks) {
-        this.partialTicks = partialTicks;
+    public Render(DimensionType dimensionType) {
+        this.dimensionType = dimensionType;
     }
 
-    public float getPartialTicks() {
-        return partialTicks;
+    public DimensionType getDimensionType() {
+        return dimensionType;
     }
 }
index 0656dcccce8b65c6a9d39b3f13852721ac1a8e46..7a787456c6a1261ca048ad53d0f4e1320a43bc61 100644 (file)
@@ -10,12 +10,7 @@ import com.irtimaled.bbor.common.messages.AddBoundingBox;
 import com.irtimaled.bbor.common.messages.InitializeClient;
 import com.irtimaled.bbor.common.messages.PayloadBuilder;
 import com.irtimaled.bbor.common.messages.RemoveBoundingBox;
-import com.irtimaled.bbor.common.models.BoundingBox;
-import com.irtimaled.bbor.common.models.BoundingBoxMobSpawner;
-import com.irtimaled.bbor.common.models.Coords;
-import com.irtimaled.bbor.common.models.WorldData;
-import io.netty.channel.local.LocalAddress;
-import net.minecraft.entity.player.EntityPlayerMP;
+import com.irtimaled.bbor.common.models.*;
 import net.minecraft.world.World;
 import net.minecraft.world.WorldServer;
 import net.minecraft.world.chunk.Chunk;
@@ -29,8 +24,8 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Consumer;
 
 public class CommonProxy {
-    private Set<EntityPlayerMP> players = new HashSet<>();
-    private Map<EntityPlayerMP, Set<BoundingBox>> playerBoundingBoxesCache = new HashMap<>();
+    private Set<ServerPlayer> players = new HashSet<>();
+    private Map<ServerPlayer, Set<BoundingBox>> playerBoundingBoxesCache = new HashMap<>();
     private Map<DimensionType, VillageProcessor> villageProcessors = new HashMap<>();
     private Map<DimensionType, ChunkProcessor> chunkProcessors = new HashMap<>();
     private WorldData worldData = null;
@@ -81,23 +76,22 @@ public class CommonProxy {
         }
     }
 
-    private void playerLoggedIn(EntityPlayerMP player) {
-        if (player.connection.netManager.getRemoteAddress() instanceof LocalAddress) return;
-        player.connection.sendPacket(InitializeClient.getPayload(worldData).build());
+    private void playerLoggedIn(ServerPlayer player) {
+        player.sendPacket(InitializeClient.getPayload(worldData));
     }
 
-    private void playerLoggedOut(EntityPlayerMP player) {
+    private void playerLoggedOut(ServerPlayer player) {
         players.remove(player);
         playerBoundingBoxesCache.remove(player);
     }
 
     private void sendRemoveBoundingBox(DimensionType dimensionType, BoundingBox boundingBox) {
-        PayloadBuilder payloadBuilder = RemoveBoundingBox.getPayload(dimensionType, boundingBox);
-        if (payloadBuilder == null) return;
+        PayloadBuilder payload = RemoveBoundingBox.getPayload(dimensionType, boundingBox);
+        if (payload == null) return;
 
-        for (EntityPlayerMP player : players) {
-            if (DimensionType.getById(player.dimension) == dimensionType) {
-                player.connection.sendPacket(payloadBuilder.build());
+        for (ServerPlayer player : players) {
+            if (player.getDimensionType() == dimensionType) {
+                player.sendPacket(payload);
 
                 if (playerBoundingBoxesCache.containsKey(player)) {
                     playerBoundingBoxesCache.get(player).remove(boundingBox);
@@ -106,24 +100,24 @@ public class CommonProxy {
         }
     }
 
-    private void sendBoundingBoxes(EntityPlayerMP player) {
-        DimensionType dimensionType = DimensionType.getById(player.dimension);
+    private void sendBoundingBoxes(ServerPlayer player) {
+        DimensionType dimensionType = player.getDimensionType();
         players.add(player);
         sendToPlayer(player, getCache(dimensionType));
     }
 
-    private void sendToPlayer(EntityPlayerMP player, BoundingBoxCache boundingBoxCache) {
+    private void sendToPlayer(ServerPlayer player, BoundingBoxCache boundingBoxCache) {
         if (boundingBoxCache == null) return;
 
         Map<BoundingBox, Set<BoundingBox>> cacheSubset = getBoundingBoxMap(player, boundingBoxCache.getBoundingBoxes());
 
-        DimensionType dimensionType = DimensionType.getById(player.dimension);
+        DimensionType dimensionType = player.getDimensionType();
 
         for (BoundingBox key : cacheSubset.keySet()) {
             Set<BoundingBox> boundingBoxes = cacheSubset.get(key);
-            PayloadBuilder payloadBuilder = AddBoundingBox.getPayload(dimensionType, key, boundingBoxes);
-            if (payloadBuilder != null)
-                player.connection.sendPacket(payloadBuilder.build());
+            PayloadBuilder payload = AddBoundingBox.getPayload(dimensionType, key, boundingBoxes);
+            if (payload != null)
+                player.sendPacket(payload);
 
             if (!playerBoundingBoxesCache.containsKey(player)) {
                 playerBoundingBoxesCache.put(player, new HashSet<>());
@@ -132,7 +126,7 @@ public class CommonProxy {
         }
     }
 
-    private Map<BoundingBox, Set<BoundingBox>> getBoundingBoxMap(EntityPlayerMP player, Map<BoundingBox, Set<BoundingBox>> boundingBoxMap) {
+    private Map<BoundingBox, Set<BoundingBox>> getBoundingBoxMap(ServerPlayer player, Map<BoundingBox, Set<BoundingBox>> boundingBoxMap) {
         Map<BoundingBox, Set<BoundingBox>> cacheSubset = new HashMap<>();
         for (BoundingBox key : boundingBoxMap.keySet()) {
             if (!playerBoundingBoxesCache.containsKey(player) || !playerBoundingBoxesCache.get(player).contains(key)) {
@@ -156,8 +150,8 @@ public class CommonProxy {
     }
 
     private void serverTick() {
-        for (EntityPlayerMP player : players) {
-            DimensionType dimensionType = DimensionType.getById(player.dimension);
+        for (ServerPlayer player : players) {
+            DimensionType dimensionType = player.getDimensionType();
             sendToPlayer(player, getCache(dimensionType));
         }
     }
index 6de9141b0d85e51bb7d1d5574886cb0fc27bd5a9..94e0c4dd3799f42fbd5c6903f0eeecf74f3ff7f8 100644 (file)
@@ -1,15 +1,15 @@
 package com.irtimaled.bbor.common.events;
 
-import net.minecraft.entity.player.EntityPlayerMP;
+import com.irtimaled.bbor.common.models.ServerPlayer;
 
 public class PlayerLoggedIn {
-    private final EntityPlayerMP player;
+    private final ServerPlayer player;
 
-    public PlayerLoggedIn(EntityPlayerMP player) {
+    public PlayerLoggedIn(ServerPlayer player) {
         this.player = player;
     }
 
-    public EntityPlayerMP getPlayer() {
+    public ServerPlayer getPlayer() {
         return player;
     }
 }
index b0f0e9f4184529ca081d3ad65cc35e160261d31f..ec6ce1027008b722c55d673b85235790110b8b1a 100644 (file)
@@ -1,15 +1,15 @@
 package com.irtimaled.bbor.common.events;
 
-import net.minecraft.entity.player.EntityPlayerMP;
+import com.irtimaled.bbor.common.models.ServerPlayer;
 
 public class PlayerLoggedOut {
-    private final EntityPlayerMP player;
+    private final ServerPlayer player;
 
-    public PlayerLoggedOut(EntityPlayerMP player) {
+    public PlayerLoggedOut(ServerPlayer player) {
         this.player = player;
     }
 
-    public EntityPlayerMP getPlayer() {
+    public ServerPlayer getPlayer() {
         return player;
     }
 }
index 5657faec9b3342dca135377e5fb22b9f3b1b4522..d7943d1e4f17ec5336d3084ed068e0b493e08817 100644 (file)
@@ -1,15 +1,15 @@
 package com.irtimaled.bbor.common.events;
 
-import net.minecraft.entity.player.EntityPlayerMP;
+import com.irtimaled.bbor.common.models.ServerPlayer;
 
 public class PlayerSubscribed {
-    private final EntityPlayerMP player;
+    private final ServerPlayer player;
 
-    public PlayerSubscribed(EntityPlayerMP player) {
+    public PlayerSubscribed(ServerPlayer player) {
         this.player = player;
     }
 
-    public EntityPlayerMP getPlayer() {
+    public ServerPlayer getPlayer() {
         return player;
     }
 }
diff --git a/src/main/java/com/irtimaled/bbor/common/models/ServerPlayer.java b/src/main/java/com/irtimaled/bbor/common/models/ServerPlayer.java
new file mode 100644 (file)
index 0000000..de9f852
--- /dev/null
@@ -0,0 +1,33 @@
+package com.irtimaled.bbor.common.models;
+
+import com.irtimaled.bbor.common.messages.PayloadBuilder;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.network.Packet;
+import net.minecraft.world.dimension.DimensionType;
+
+import java.util.function.Consumer;
+
+public class ServerPlayer {
+    private final DimensionType dimensionType;
+    private final Consumer<Packet<?>> packetConsumer;
+    private final int playerId;
+
+    public ServerPlayer(EntityPlayerMP player) {
+        this.dimensionType = DimensionType.getById(player.dimension);
+        this.packetConsumer = player.connection::sendPacket;
+        this.playerId = player.getEntityId();
+    }
+
+    public DimensionType getDimensionType() {
+        return dimensionType;
+    }
+
+    public void sendPacket(PayloadBuilder payloadBuilder) {
+        packetConsumer.accept(payloadBuilder.build());
+    }
+
+    @Override
+    public int hashCode() {
+        return playerId;
+    }
+}
index 05c6881f029f8f1a51d7c9cb8b63949ed8222be8..6c00955ebd001758a7c4bfe42d52562746db0c76 100644 (file)
@@ -1,17 +1,29 @@
 package com.irtimaled.bbor.mixin.client.renderer;
 
+import com.irtimaled.bbor.client.PlayerCoords;
 import com.irtimaled.bbor.client.events.Render;
 import com.irtimaled.bbor.common.EventBus;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityPlayerSP;
 import net.minecraft.client.renderer.EntityRenderer;
+import net.minecraft.world.dimension.DimensionType;
+import org.spongepowered.asm.mixin.Final;
 import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
 import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
 @Mixin(EntityRenderer.class)
 public class MixinEntityRenderer {
+    @Shadow
+    @Final
+    private Minecraft mc;
+
     @Inject(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/profiler/Profiler;endStartSection(Ljava/lang/String;)V", args = "ldc=hand", shift = At.Shift.BEFORE))
     private void render(float partialTicks, long ignored, CallbackInfo ci) {
-        EventBus.publish(new Render(partialTicks));
+        EntityPlayerSP player = this.mc.player;
+        PlayerCoords.setPlayerPosition(partialTicks, player);
+        EventBus.publish(new Render(DimensionType.getById(player.dimension)));
     }
 }
index 9f6693acf4eee0b1802e763b88c6c66fd1b09271..93249604270f5b833f34c2918166392aea8633af 100644 (file)
@@ -3,7 +3,7 @@ package com.irtimaled.bbor.mixin.network.play.client;
 import com.irtimaled.bbor.common.EventBus;
 import com.irtimaled.bbor.common.events.PlayerSubscribed;
 import com.irtimaled.bbor.common.messages.SubscribeToServer;
-import net.minecraft.entity.player.EntityPlayerMP;
+import com.irtimaled.bbor.common.models.ServerPlayer;
 import net.minecraft.network.NetHandlerPlayServer;
 import net.minecraft.network.play.INetHandlerPlayServer;
 import net.minecraft.network.play.client.CPacketCustomPayload;
@@ -21,7 +21,7 @@ public class MixinCPacketCustomPayload {
     @Redirect(method = "processPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/play/INetHandlerPlayServer;processCustomPayload(Lnet/minecraft/network/play/client/CPacketCustomPayload;)V"))
     private void processPacket(INetHandlerPlayServer netHandlerPlayServer, CPacketCustomPayload packet) {
         if (this.channel.toString().equals(SubscribeToServer.NAME)) {
-            EntityPlayerMP player = ((NetHandlerPlayServer) netHandlerPlayServer).player;
+            ServerPlayer player = new ServerPlayer(((NetHandlerPlayServer) netHandlerPlayServer).player);
             EventBus.publish(new PlayerSubscribed(player));
         } else {
             netHandlerPlayServer.processCustomPayload(packet);
index 86cfb4e896ec70e9904d37ee4fc19a80c25ed77a..0b1e00971204da23abe5b01703e7e719a29ecd37 100644 (file)
@@ -3,6 +3,8 @@ package com.irtimaled.bbor.mixin.server.management;
 import com.irtimaled.bbor.common.EventBus;
 import com.irtimaled.bbor.common.events.PlayerLoggedIn;
 import com.irtimaled.bbor.common.events.PlayerLoggedOut;
+import com.irtimaled.bbor.common.models.ServerPlayer;
+import io.netty.channel.local.LocalAddress;
 import net.minecraft.entity.player.EntityPlayerMP;
 import net.minecraft.server.management.PlayerList;
 import org.spongepowered.asm.mixin.Mixin;
@@ -14,11 +16,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 public class MixinPlayerList {
     @Inject(method = "playerLoggedIn", at = @At("RETURN"))
     private void playerLoggedIn(EntityPlayerMP player, CallbackInfo ci) {
-        EventBus.publish(new PlayerLoggedIn(player));
+        if(player.connection.netManager.getRemoteAddress() instanceof LocalAddress) return;
+        EventBus.publish(new PlayerLoggedIn(new ServerPlayer(player)));
     }
 
     @Inject(method = "playerLoggedOut", at = @At("HEAD"))
     private void playerLoggedOut(EntityPlayerMP player, CallbackInfo ci) {
-        EventBus.publish(new PlayerLoggedOut(player));
+        EventBus.publish(new PlayerLoggedOut(new ServerPlayer(player)));
     }
 }