Exposed TileEntityData packet to TileEntities. And added helper sender function.
This commit is contained in:
parent
722fe597b8
commit
bb7eaf867f
6 changed files with 124 additions and 25 deletions
|
@ -16,6 +16,7 @@ import net.minecraft.src.ModLoader;
|
|||
import net.minecraft.src.NetworkManager;
|
||||
import net.minecraft.src.Packet;
|
||||
import net.minecraft.src.Packet131MapData;
|
||||
import net.minecraft.src.Packet132TileEntityData;
|
||||
import net.minecraft.src.World;
|
||||
|
||||
import java.util.*;
|
||||
|
@ -1164,6 +1165,32 @@ public class MinecraftForge
|
|||
sendPacket(net, pkt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for wrapping and sending a Packet132TileEntityData packet,
|
||||
* useful so we don't have to edit the packet class itself to add the constructor on the client side.
|
||||
*
|
||||
* @param net The manager to send the packet to
|
||||
* @param x Position X
|
||||
* @param y Position Y
|
||||
* @param z Position Z
|
||||
* @param action Action ID
|
||||
* @param par1 Custom Parameter 1
|
||||
* @param par2 Custom Parameter 2
|
||||
* @param par3 Custom Parameter 3
|
||||
*/
|
||||
public static void sendTileEntityPacket(NetworkManager net, int x, short y, int z, byte action, int par1, int par2, int par3)
|
||||
{
|
||||
Packet132TileEntityData pkt = new Packet132TileEntityData();
|
||||
pkt.xPosition = x;
|
||||
pkt.yPosition = y;
|
||||
pkt.zPosition = z;
|
||||
pkt.actionType = action;
|
||||
pkt.customParam1 = par1;
|
||||
pkt.customParam2 = par2;
|
||||
pkt.customParam3 = par3;
|
||||
sendPacket(net, pkt);
|
||||
}
|
||||
|
||||
private static int isClient = -1;
|
||||
public static boolean isClient()
|
||||
{
|
||||
|
|
|
@ -35,8 +35,9 @@ public class mod_MinecraftForge extends NetworkMod
|
|||
ForgeHooks.networkMods.put(x++, (NetworkMod)mod);
|
||||
}
|
||||
}
|
||||
//Add 131 to C->S list
|
||||
//Add 131 & 132 to C->S list
|
||||
((Set)ModLoader.getPrivateValue(Packet.class, null, 3)).add(131);
|
||||
((Set)ModLoader.getPrivateValue(Packet.class, null, 3)).add(132);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
--- ../src_base/minecraft/net/minecraft/src/NetClientHandler.java 0000-00-00 00:00:00.000000000 -0000
|
||||
+++ ../src_work/minecraft/net/minecraft/src/NetClientHandler.java 0000-00-00 00:00:00.000000000 -0000
|
||||
@@ -15,6 +15,10 @@
|
||||
@@ -14,7 +14,13 @@
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
+import java.util.logging.Level;
|
||||
+
|
||||
import net.minecraft.client.Minecraft;
|
||||
+import net.minecraft.src.forge.ForgeHooks;
|
||||
+import net.minecraft.src.forge.MessageManager;
|
||||
|
@ -11,7 +14,7 @@
|
|||
|
||||
public class NetClientHandler extends NetHandler
|
||||
{
|
||||
@@ -46,6 +50,8 @@
|
||||
@@ -46,6 +52,8 @@
|
||||
this.mc = par1Minecraft;
|
||||
Socket var4 = new Socket(InetAddress.getByName(par2Str), par3);
|
||||
this.netManager = new NetworkManager(var4, "Client", this);
|
||||
|
@ -20,7 +23,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -73,6 +79,30 @@
|
||||
@@ -73,6 +81,30 @@
|
||||
this.mc.thePlayer.entityId = par1Packet1Login.protocolVersion;
|
||||
this.currentServerMaxPlayers = par1Packet1Login.maxPlayers;
|
||||
((PlayerControllerMP)this.mc.playerController).setCreative(par1Packet1Login.serverMode == 1);
|
||||
|
@ -51,7 +54,7 @@
|
|||
ModLoader.serverConnect(this, par1Packet1Login);
|
||||
}
|
||||
|
||||
@@ -545,8 +575,12 @@
|
||||
@@ -545,8 +577,12 @@
|
||||
|
||||
public void handleChat(Packet3Chat par1Packet3Chat)
|
||||
{
|
||||
|
@ -66,7 +69,7 @@
|
|||
}
|
||||
|
||||
public void handleAnimation(Packet18Animation par1Packet18Animation)
|
||||
@@ -633,7 +667,19 @@
|
||||
@@ -633,7 +669,19 @@
|
||||
}
|
||||
else if (par1Packet2Handshake.username.equals("-"))
|
||||
{
|
||||
|
@ -87,7 +90,7 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
@@ -646,7 +692,19 @@
|
||||
@@ -646,7 +694,19 @@
|
||||
|
||||
if (var6.equalsIgnoreCase("ok"))
|
||||
{
|
||||
|
@ -108,7 +111,27 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
@@ -1012,6 +1070,10 @@
|
||||
@@ -939,6 +999,19 @@
|
||||
{
|
||||
((TileEntityMobSpawner)var2).setMobID(EntityList.getStringFromID(par1Packet132TileEntityData.customParam1));
|
||||
}
|
||||
+ else if (var2 != null)
|
||||
+ {
|
||||
+ var2.onDataPacket(netManager, par1Packet132TileEntityData);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ Packet132TileEntityData pkt = par1Packet132TileEntityData;
|
||||
+ ModLoader.getLogger().log(Level.WARNING, String.format(
|
||||
+ "Received a TileEntityData packet for a location that did not have a TileEntity: (%d, %d, %d) %d: %d, %d, %d",
|
||||
+ pkt.xPosition, pkt.yPosition, pkt.zPosition,
|
||||
+ pkt.actionType,
|
||||
+ pkt.customParam1, pkt.customParam2, pkt.customParam3));
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1012,6 +1085,10 @@
|
||||
{
|
||||
ItemMap.getMPMapData(par1Packet131MapData.uniqueID, this.mc.theWorld).func_28171_a(par1Packet131MapData.itemData);
|
||||
}
|
||||
|
@ -119,7 +142,7 @@
|
|||
else
|
||||
{
|
||||
System.out.println("Unknown itemid: " + par1Packet131MapData.uniqueID);
|
||||
@@ -1114,5 +1176,40 @@
|
||||
@@ -1114,5 +1191,40 @@
|
||||
public void handleCustomPayload(Packet250CustomPayload var1)
|
||||
{
|
||||
ModLoader.receivePacket(var1);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- ../src_base/minecraft/net/minecraft/src/TileEntity.java 0000-00-00 00:00:00.000000000 -0000
|
||||
+++ ../src_work/minecraft/net/minecraft/src/TileEntity.java 0000-00-00 00:00:00.000000000 -0000
|
||||
@@ -216,4 +216,13 @@
|
||||
@@ -216,4 +216,24 @@
|
||||
addMapping(TileEntityEnchantmentTable.class, "EnchantTable");
|
||||
addMapping(TileEntityEndPortal.class, "Airportal");
|
||||
}
|
||||
|
@ -13,4 +13,15 @@
|
|||
+ {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Called when you receive a TileEntityData packet for the location this
|
||||
+ * TileEntity is currently in. On the client, the NetworkManager will always
|
||||
+ * be the remote server. On the server, it will be whomever is responsible for
|
||||
+ * sending the packet.
|
||||
+ *
|
||||
+ * @param net The NetworkManager the packet originated from
|
||||
+ * @param pkt The data packet
|
||||
+ */
|
||||
+ public void onDataPacket(NetworkManager net, Packet132TileEntityData pkt){}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
--- ../src_base/minecraft_server/net/minecraft/src/NetServerHandler.java 0000-00-00 00:00:00.000000000 -0000
|
||||
+++ ../src_work/minecraft_server/net/minecraft/src/NetServerHandler.java 0000-00-00 00:00:00.000000000 -0000
|
||||
@@ -6,6 +6,9 @@
|
||||
@@ -2,10 +2,14 @@
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
+import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import cpw.mods.fml.server.FMLServerHandler;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
|
@ -10,7 +15,7 @@
|
|||
|
||||
public class NetServerHandler extends NetHandler implements ICommandListener
|
||||
{
|
||||
@@ -19,7 +22,7 @@
|
||||
@@ -19,7 +23,7 @@
|
||||
public boolean connectionClosed = false;
|
||||
|
||||
/** Reference to the MinecraftServer object. */
|
||||
|
@ -19,7 +24,7 @@
|
|||
|
||||
/** Reference to the EntityPlayerMP object. */
|
||||
private EntityPlayerMP playerEntity;
|
||||
@@ -374,8 +377,11 @@
|
||||
@@ -374,8 +378,11 @@
|
||||
double var10 = this.playerEntity.posY - ((double)var6 + 0.5D) + 1.5D;
|
||||
double var12 = this.playerEntity.posZ - ((double)var7 + 0.5D);
|
||||
double var14 = var8 * var8 + var10 * var10 + var12 * var12;
|
||||
|
@ -32,7 +37,7 @@
|
|||
{
|
||||
return;
|
||||
}
|
||||
@@ -397,7 +403,7 @@
|
||||
@@ -397,7 +404,7 @@
|
||||
|
||||
if (par1Packet14BlockDig.status == 0)
|
||||
{
|
||||
|
@ -41,7 +46,7 @@
|
|||
{
|
||||
this.playerEntity.playerNetServerHandler.sendPacket(new Packet53BlockChange(var5, var6, var7, var2));
|
||||
}
|
||||
@@ -467,8 +473,9 @@
|
||||
@@ -467,8 +474,9 @@
|
||||
{
|
||||
var12 = var11;
|
||||
}
|
||||
|
@ -53,7 +58,7 @@
|
|||
{
|
||||
this.playerEntity.itemInWorldManager.activeBlockOrUseItem(this.playerEntity, var2, var3, var5, var6, var7, var8);
|
||||
}
|
||||
@@ -602,9 +609,13 @@
|
||||
@@ -602,9 +610,13 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -70,7 +75,7 @@
|
|||
}
|
||||
|
||||
this.field_45001_m += 20;
|
||||
@@ -648,6 +659,10 @@
|
||||
@@ -648,6 +660,10 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -81,7 +86,7 @@
|
|||
else
|
||||
{
|
||||
String var3;
|
||||
@@ -765,9 +780,10 @@
|
||||
@@ -765,9 +781,10 @@
|
||||
*/
|
||||
public void handleRespawn(Packet9Respawn par1Packet9Respawn)
|
||||
{
|
||||
|
@ -93,7 +98,7 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
@@ -776,7 +792,7 @@
|
||||
@@ -776,7 +793,7 @@
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -102,20 +107,17 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -969,9 +985,56 @@
|
||||
@@ -969,9 +986,78 @@
|
||||
{
|
||||
this.playerEntity.capabilities.isFlying = par1Packet202PlayerAbilities.isFlying && this.playerEntity.capabilities.allowFlying;
|
||||
}
|
||||
-
|
||||
+
|
||||
+ public EntityPlayerMP getPlayerEntity()
|
||||
+ {
|
||||
+ return playerEntity;
|
||||
+ }
|
||||
+
|
||||
@Override
|
||||
- public void handleCustomPayload(Packet250CustomPayload par1Packet250CustomPayload) {
|
||||
- FMLServerHandler.instance().handlePacket250(par1Packet250CustomPayload, playerEntity);
|
||||
+ @Override
|
||||
+ public void handleCustomPayload(Packet250CustomPayload pkt)
|
||||
+ {
|
||||
+ FMLServerHandler.instance().handlePacket250(pkt, playerEntity);
|
||||
|
@ -160,5 +162,29 @@
|
|||
+ public void handleMapData(Packet131MapData par1Packet131MapData)
|
||||
+ {
|
||||
+ ForgeHooks.onItemDataPacket(netManager, par1Packet131MapData);
|
||||
+ }
|
||||
|
||||
@Override
|
||||
- public void handleCustomPayload(Packet250CustomPayload par1Packet250CustomPayload) {
|
||||
- FMLServerHandler.instance().handlePacket250(par1Packet250CustomPayload, playerEntity);
|
||||
+ public void handleTileEntityData(Packet132TileEntityData pkt)
|
||||
+ {
|
||||
+ World world = this.getPlayerEntity().worldObj;
|
||||
+ if (world.blockExists(pkt.xPosition, pkt.yPosition, pkt.zPosition))
|
||||
+ {
|
||||
+ TileEntity te = world.getBlockTileEntity(pkt.xPosition, pkt.yPosition, pkt.zPosition);
|
||||
+ if (te != null)
|
||||
+ {
|
||||
+ te.onDataPacket(netManager, pkt);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ ModLoader.getLogger().log(Level.WARNING, String.format(
|
||||
+ "Received a TileEntityData packet for a location that did not have a TileEntity: (%d, %d, %d) %d: %d, %d, %d",
|
||||
+ pkt.xPosition, pkt.yPosition, pkt.zPosition,
|
||||
+ pkt.actionType,
|
||||
+ pkt.customParam1, pkt.customParam2, pkt.customParam3));
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- ../src_base/minecraft_server/net/minecraft/src/TileEntity.java 0000-00-00 00:00:00.000000000 -0000
|
||||
+++ ../src_work/minecraft_server/net/minecraft/src/TileEntity.java 0000-00-00 00:00:00.000000000 -0000
|
||||
@@ -204,4 +204,13 @@
|
||||
@@ -204,4 +204,24 @@
|
||||
public static void addNewTileEntityMapping(Class<? extends TileEntity> tileEntityClass, String id) {
|
||||
addMapping(tileEntityClass, id);
|
||||
}
|
||||
|
@ -13,4 +13,15 @@
|
|||
+ {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Called when you receive a TileEntityData packet for the location this
|
||||
+ * TileEntity is currently in. On the client, the NetworkManager will always
|
||||
+ * be the remote server. On the server, it will be whomever is responsible for
|
||||
+ * sending the packet.
|
||||
+ *
|
||||
+ * @param net The NetworkManager the packet originated from
|
||||
+ * @param pkt The data packet
|
||||
+ */
|
||||
+ public void onDataPacket(NetworkManager net, Packet132TileEntityData pkt){}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue