Initial 4096 fix based of mDiyo's work.

This commit is contained in:
LexManos 2012-06-15 21:10:37 -07:00
parent 7aaf3e98d2
commit c3bdc6e583
18 changed files with 284 additions and 39 deletions

View File

@ -38,6 +38,7 @@ public class ForgeHooksClient
{
private static Field textureID = null;
private static boolean textureIDChecked = false;
public static boolean enable4096 = false; //If the server has told us that 4096 is enabled.
public static boolean onBlockHighlight(RenderGlobal render, EntityPlayer player, MovingObjectPosition target, int i, ItemStack itemstack, float partialTicks)
{
@ -575,6 +576,7 @@ public class ForgeHooksClient
*/
public static Packet onSendLogin(Packet1Login pkt)
{
enable4096 = false; //Disable 4096 packet modification untill the server says yes.
pkt.serverMode = ForgePacket.FORGE_ID;
pkt.field_48170_e = ForgeHooks.buildVersion;
return pkt;

View File

@ -160,6 +160,8 @@ public class PacketHandlerClient extends PacketHandlerBase
{
System.out.println("S->C: " + packet.toString(true));
}
ForgeHooksClient.enable4096 = packet.has4096;
ForgeHooks.networkMods.clear();
NetworkMod[] mods = MinecraftForge.getNetworkMods();

View File

@ -12,6 +12,7 @@ import net.minecraft.src.Entity;
import net.minecraft.src.EntityMinecart;
import net.minecraft.src.Item;
import net.minecraft.src.ItemStack;
import net.minecraft.src.Material;
import net.minecraft.src.ModLoader;
import net.minecraft.src.NetworkManager;
import net.minecraft.src.Packet;
@ -20,6 +21,7 @@ import net.minecraft.src.Packet132TileEntityData;
import net.minecraft.src.World;
import net.minecraft.src.forge.oredict.OreDictionary;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.Map.Entry;
@ -1202,6 +1204,35 @@ public class MinecraftForge
return isClient == 1;
}
/**
* Method invoked by FML before any other mods are loaded.
*/
public static void initialize()
{
//Cause the classes to initialize if they already haven't
Block.stone.getTextureFile();
Item.appleGold.getTextureFile();
Block filler = null;
try
{
filler = Block.class.getConstructor(int.class, Material.class).newInstance(256, Material.air);
}catch (Exception e){}
if (filler == null)
{
throw new RuntimeException("Could not create Forge filler block");
}
for (int x = 256; x < 4096; x++)
{
if (Item.itemsList[x - 256] != null)
{
Block.blocksList[x] = filler;
}
}
}
static
{
addDungeonMob("Skeleton", 1.0f);

View File

@ -21,7 +21,6 @@ public abstract class ForgePacket
public Packet getPacket()
{
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
DataOutputStream data = new DataOutputStream(bytes);
try

View File

@ -2,6 +2,7 @@ package net.minecraft.src.forge.packets;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.util.Hashtable;
import java.util.List;
@ -13,6 +14,7 @@ public class PacketModList extends ForgePacket
public String[] Mods;
public Hashtable<Integer, String> ModIDs = new Hashtable<Integer, String>();
public int Length = -1;
public boolean has4096 = false;
public PacketModList(boolean server)
{
@ -39,6 +41,7 @@ public class PacketModList extends ForgePacket
data.writeUTF(entry.getValue());
}
}
data.writeBoolean(true);
}
@Override
@ -64,6 +67,15 @@ public class PacketModList extends ForgePacket
ModIDs.put(data.readInt(), data.readUTF());
}
}
try
{
has4096 = data.readBoolean();
}
catch (EOFException e)
{
has4096 = false;
}
}
@Override

View File

@ -55,6 +55,10 @@ public class PacketHandlerServer extends PacketHandlerBase
net.kickPlayer("Invalid mod list response, Size: " + pkt.Length);
return;
}
if (!pkt.has4096)
{
net.kickPlayer("Must have Forge build #136+ (4096 fix) to connect to this server");
}
if (pkt.Mods.length == 0)
{
ModLoader.getLogger().log(Level.INFO, net.getUsername() + " joined with no mods");

View File

@ -0,0 +1,11 @@
--- ../src_base/minecraft/net/minecraft/src/EntityEnderman.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft/net/minecraft/src/EntityEnderman.java 0000-00-00 00:00:00.000000000 -0000
@@ -2,7 +2,7 @@
public class EntityEnderman extends EntityMob
{
- private static boolean[] canCarryBlocks = new boolean[256];
+ private static boolean[] canCarryBlocks = new boolean[Block.blocksList.length];
/** Is the enderman attacking another entity? */
public boolean isAttacking = false;

View File

@ -14,7 +14,7 @@
{
/** The RNG used by the Item subclasses. */
protected static Random itemRand = new Random();
@@ -188,7 +191,10 @@
@@ -188,14 +191,17 @@
/** full name of item from language file */
private String itemName;
@ -26,6 +26,14 @@
protected Item(int par1)
{
this.shiftedIndex = 256 + par1;
if (itemsList[256 + par1] != null)
{
- System.out.println("CONFLICT @ " + par1);
+ System.out.println("CONFLICT @ " + par1 + " item slot already occupied by " + itemsList[256 + par1] + " while adding " + this);
}
itemsList[256 + par1] = this;
@@ -551,7 +557,7 @@
float var17 = MathHelper.sin(-var5 * 0.017453292F);
float var18 = var15 * var16;

View File

@ -0,0 +1,20 @@
--- ../src_base/minecraft/net/minecraft/src/ItemMap.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft/net/minecraft/src/ItemMap.java 0000-00-00 00:00:00.000000000 -0000
@@ -83,7 +83,7 @@
byte var23 = 0;
byte var24 = 0;
byte var25 = 0;
- int[] var26 = new int[256];
+ int[] var26 = new int[Block.blocksList.length];
Chunk var27 = par1World.getChunkFromBlockCoords(var21, var22);
int var28 = var21 & 15;
int var29 = var22 & 15;
@@ -173,7 +173,7 @@
var33 = 0;
var34 = 0;
- for (var35 = 0; var35 < 256; ++var35)
+ for (var35 = 0; var35 < Block.blocksList.length; ++var35)
{
if (var26[var35] > var33)
{

View File

@ -13,7 +13,7 @@
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
@@ -35,21 +41,27 @@
@@ -35,22 +41,21 @@
public void renderItem(EntityLiving par1EntityLiving, ItemStack par2ItemStack, int par3)
{
GL11.glPushMatrix();
@ -25,7 +25,7 @@
+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile()));
+ ForgeHooksClient.renderEquippedItem(customRenderer, renderBlocksInstance, par1EntityLiving, par2ItemStack);
+ }
+ else if (par2ItemStack.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType()))
+ else if (par2ItemStack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType()))
{
- GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png"));
+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile()));
@ -33,19 +33,19 @@
}
else
{
if (par2ItemStack.itemID < 256)
{
- if (par2ItemStack.itemID < 256)
- {
- GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png"));
+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile()));
}
else
{
- }
- else
- {
- GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/items.png"));
+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile()));
}
- }
+ GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(par2ItemStack.getItem().getTextureFile()));
Tessellator var4 = Tessellator.instance;
@@ -246,8 +258,10 @@
int var5 = par1EntityLiving.getItemIcon(par2ItemStack, par3);
@@ -246,8 +251,10 @@
float var11;
float var13;
@ -57,7 +57,7 @@
GL11.glPushMatrix();
var7 = 0.8F;
var17 = var3.getSwingProgress(par1);
@@ -313,8 +327,15 @@
@@ -313,8 +320,15 @@
var26.addVertexWithUV((double)(128 + var27), (double)(0 - var27), 0.0D, 1.0D, 0.0D);
var26.addVertexWithUV((double)(0 - var27), (double)(0 - var27), 0.0D, 0.0D, 0.0D);
var26.draw();
@ -75,7 +75,7 @@
GL11.glPopMatrix();
}
else if (var14 != null)
@@ -414,12 +435,15 @@
@@ -414,12 +428,15 @@
if (var14.getItem().requiresMultipleRenderPasses())
{
this.renderItem(var3, var14, 0);

View File

@ -0,0 +1,51 @@
--- ../src_base/minecraft/net/minecraft/src/Packet53BlockChange.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft/net/minecraft/src/Packet53BlockChange.java 0000-00-00 00:00:00.000000000 -0000
@@ -4,6 +4,8 @@
import java.io.DataOutputStream;
import java.io.IOException;
+import net.minecraft.src.forge.ForgeHooksClient;
+
public class Packet53BlockChange extends Packet
{
/** Block X position. */
@@ -34,7 +36,14 @@
this.xPosition = par1DataInputStream.readInt();
this.yPosition = par1DataInputStream.read();
this.zPosition = par1DataInputStream.readInt();
- this.type = par1DataInputStream.read();
+ if (ForgeHooksClient.enable4096)
+ {
+ this.type = par1DataInputStream.readInt();
+ }
+ else
+ {
+ this.type = par1DataInputStream.read();
+ }
this.metadata = par1DataInputStream.read();
}
@@ -46,7 +55,14 @@
par1DataOutputStream.writeInt(this.xPosition);
par1DataOutputStream.write(this.yPosition);
par1DataOutputStream.writeInt(this.zPosition);
- par1DataOutputStream.write(this.type);
+ if (ForgeHooksClient.enable4096)
+ {
+ par1DataOutputStream.writeInt(this.type);
+ }
+ else
+ {
+ par1DataOutputStream.write(this.type);
+ }
par1DataOutputStream.write(this.metadata);
}
@@ -63,6 +79,6 @@
*/
public int getPacketSize()
{
- return 11;
+ return ForgeHooksClient.enable4096 ? 14 : 11;
}
}

View File

@ -21,7 +21,7 @@
+ {
+ ;
+ }
+ else if (var10.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType()))
+ else if (var10.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType()))
{
GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F);
- this.loadTexture("/terrain.png");
@ -43,30 +43,37 @@
var15 = var10.getItem().func_46057_a(var10.getItemDamage(), var14);
var16 = 1.0F;
@@ -120,11 +128,11 @@
if (var10.itemID < 256)
{
@@ -117,15 +125,8 @@
{
GL11.glScalef(0.5F, 0.5F, 0.5F);
var14 = var10.getIconIndex();
-
- if (var10.itemID < 256)
- {
- this.loadTexture("/terrain.png");
+ this.loadTexture(Block.blocksList[var10.itemID].getTextureFile());
}
else
{
- }
- else
- {
- this.loadTexture("/gui/items.png");
+ this.loadTexture(Item.itemsList[var10.itemID].getTextureFile());
}
- }
+
+ this.loadTexture(var10.getItem().getTextureFile());
if (this.field_27004_a)
@@ -189,7 +197,7 @@
{
@@ -187,9 +188,9 @@
float var12;
float var13;
if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType()))
- if (par3 < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType()))
+ if (Item.itemsList[par3] instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.blocksList[par3].getRenderType()))
{
- par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/terrain.png"));
+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(Block.blocksList[par3].getTextureFile()));
Block var15 = Block.blocksList[par3];
GL11.glPushMatrix();
GL11.glTranslatef((float)(par6 - 2), (float)(par7 + 3), -3.0F + this.zLevel);
@@ -221,9 +229,9 @@
@@ -221,9 +222,9 @@
if (Item.itemsList[par3].requiresMultipleRenderPasses())
{
GL11.glDisable(GL11.GL_LIGHTING);
@ -78,21 +85,23 @@
{
int var9 = Item.itemsList[par3].func_46057_a(par4, var8);
var10 = Item.itemsList[par3].getColorFromDamage(par4, var8);
@@ -247,11 +255,11 @@
@@ -245,14 +246,7 @@
{
GL11.glDisable(GL11.GL_LIGHTING);
if (par3 < 256)
{
- if (par3 < 256)
- {
- par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/terrain.png"));
+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(Block.blocksList[par3].getTextureFile()));
}
else
{
- }
- else
- {
- par2RenderEngine.bindTexture(par2RenderEngine.getTexture("/gui/items.png"));
+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(Item.itemsList[par3].getTextureFile()));
}
- }
+ par2RenderEngine.bindTexture(par2RenderEngine.getTexture(Item.itemsList[par3].getTextureFile()));
var8 = Item.itemsList[par3].getColorFromDamage(par4, 0);
@@ -279,7 +287,10 @@
float var14 = (float)(var8 >> 16 & 255) / 255.0F;
@@ -279,7 +273,10 @@
{
if (par3ItemStack != null)
{

View File

@ -0,0 +1,14 @@
--- ../src_base/minecraft/net/minecraft/src/StatList.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft/net/minecraft/src/StatList.java 0000-00-00 00:00:00.000000000 -0000
@@ -166,9 +166,9 @@
*/
private static StatBase[] initMinableStats(String par0Str, int par1)
{
- StatBase[] var2 = new StatBase[256];
+ StatBase[] var2 = new StatBase[Block.blocksList.length];
- for (int var3 = 0; var3 < 256; ++var3)
+ for (int var3 = 0; var3 < Block.blocksList.length; ++var3)
{
if (Block.blocksList[var3] != null && Block.blocksList[var3].getEnableStats())
{

View File

@ -0,0 +1,11 @@
--- ../src_base/minecraft_server/net/minecraft/src/EntityEnderman.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft_server/net/minecraft/src/EntityEnderman.java 0000-00-00 00:00:00.000000000 -0000
@@ -2,7 +2,7 @@
public class EntityEnderman extends EntityMob
{
- private static boolean[] canCarryBlocks = new boolean[256];
+ private static boolean[] canCarryBlocks = new boolean[Block.blocksList.length];
/** Is the enderman attacking another entity? */
public boolean isAttacking = false;

View File

@ -23,6 +23,15 @@
protected Item(int par1)
{
@@ -198,7 +204,7 @@
if (itemsList[256 + par1] != null)
{
- System.out.println("CONFLICT @ " + par1);
+ System.out.println("CONFLICT @ " + par1 + " item slot already occupied by " + itemsList[256 + par1] + " while adding " + this);
}
itemsList[256 + par1] = this;
@@ -492,6 +498,10 @@
float var18 = var15 * var16;
float var20 = var14 * var16;

View File

@ -0,0 +1,20 @@
--- ../src_base/minecraft_server/net/minecraft/src/ItemMap.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft_server/net/minecraft/src/ItemMap.java 0000-00-00 00:00:00.000000000 -0000
@@ -68,7 +68,7 @@
byte var23 = 0;
byte var24 = 0;
byte var25 = 0;
- int[] var26 = new int[256];
+ int[] var26 = new int[Block.blocksList.length];
Chunk var27 = par1World.getChunkFromBlockCoords(var21, var22);
int var28 = var21 & 15;
int var29 = var22 & 15;
@@ -158,7 +158,7 @@
var33 = 0;
var34 = 0;
- for (var35 = 0; var35 < 256; ++var35)
+ for (var35 = 0; var35 < Block.blocksList.length; ++var35)
{
if (var26[var35] > var33)
{

View File

@ -0,0 +1,28 @@
--- ../src_base/minecraft_server/net/minecraft/src/Packet53BlockChange.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft_server/net/minecraft/src/Packet53BlockChange.java 0000-00-00 00:00:00.000000000 -0000
@@ -44,7 +44,7 @@
this.xPosition = par1DataInputStream.readInt();
this.yPosition = par1DataInputStream.read();
this.zPosition = par1DataInputStream.readInt();
- this.type = par1DataInputStream.read();
+ this.type = par1DataInputStream.readInt(); //4096
this.metadata = par1DataInputStream.read();
}
@@ -56,7 +56,7 @@
par1DataOutputStream.writeInt(this.xPosition);
par1DataOutputStream.write(this.yPosition);
par1DataOutputStream.writeInt(this.zPosition);
- par1DataOutputStream.write(this.type);
+ par1DataOutputStream.writeInt(this.type); //4096
par1DataOutputStream.write(this.metadata);
}
@@ -73,6 +73,6 @@
*/
public int getPacketSize()
{
- return 11;
+ return 14;
}
}

View File

@ -0,0 +1,14 @@
--- ../src_base/minecraft_server/net/minecraft/src/StatList.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft_server/net/minecraft/src/StatList.java 0000-00-00 00:00:00.000000000 -0000
@@ -166,9 +166,9 @@
*/
private static StatBase[] initMinableStats(String par0Str, int par1)
{
- StatBase[] var2 = new StatBase[256];
+ StatBase[] var2 = new StatBase[Block.blocksList.length];
- for (int var3 = 0; var3 < 256; ++var3)
+ for (int var3 = 0; var3 < Block.blocksList.length; ++var3)
{
if (Block.blocksList[var3] != null && Block.blocksList[var3].getEnableStats())
{