More patches converted.
Refactored some of the events to be a better hiarachy.
This commit is contained in:
parent
80ad4be5b1
commit
31a908b754
55 changed files with 1616 additions and 584 deletions
|
@ -46,6 +46,19 @@ public class ForgeHooksClient
|
||||||
public static TreeSet<TesKey> renderTextures = new TreeSet<TesKey>();
|
public static TreeSet<TesKey> renderTextures = new TreeSet<TesKey>();
|
||||||
public static Tessellator defaultTessellator = null;
|
public static Tessellator defaultTessellator = null;
|
||||||
public static boolean inWorld = false;
|
public static boolean inWorld = false;
|
||||||
|
public static HashMap<TesKey, IRenderContextHandler> renderHandlers = new HashMap<TesKey, IRenderContextHandler>();
|
||||||
|
public static IRenderContextHandler unbindContext = null;
|
||||||
|
|
||||||
|
protected static void registerRenderContextHandler(String texture, int subID, IRenderContextHandler handler)
|
||||||
|
{
|
||||||
|
Integer texID = textures.get(texture);
|
||||||
|
if (texID == null)
|
||||||
|
{
|
||||||
|
texID = ModLoader.getMinecraftInstance().renderEngine.getTexture(texture);
|
||||||
|
textures.put(texture, texID);
|
||||||
|
}
|
||||||
|
renderHandlers.put(new TesKey(texID, subID), handler);
|
||||||
|
}
|
||||||
|
|
||||||
public static void bindTexture(String texture, int subID)
|
public static void bindTexture(String texture, int subID)
|
||||||
{
|
{
|
||||||
|
@ -57,11 +70,11 @@ public class ForgeHooksClient
|
||||||
}
|
}
|
||||||
if (!inWorld)
|
if (!inWorld)
|
||||||
{
|
{
|
||||||
/*if (unbindContext != null)
|
if (unbindContext != null)
|
||||||
{
|
{
|
||||||
unbindContext.afterRenderContext();
|
unbindContext.afterRenderContext();
|
||||||
unbindContext = null;
|
unbindContext = null;
|
||||||
}*/
|
}
|
||||||
if (Tessellator.instance.isDrawing)
|
if (Tessellator.instance.isDrawing)
|
||||||
{
|
{
|
||||||
int mode = Tessellator.instance.drawMode;
|
int mode = Tessellator.instance.drawMode;
|
||||||
|
@ -69,11 +82,11 @@ public class ForgeHooksClient
|
||||||
Tessellator.instance.startDrawing(mode);
|
Tessellator.instance.startDrawing(mode);
|
||||||
}
|
}
|
||||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texID);
|
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texID);
|
||||||
/*unbindContext = renderHandlers.get(new TesKey(texID, subID));
|
unbindContext = renderHandlers.get(new TesKey(texID, subID));
|
||||||
if (unbindContext != null)
|
if (unbindContext != null)
|
||||||
{
|
{
|
||||||
unbindContext.beforeRenderContext();
|
unbindContext.beforeRenderContext();
|
||||||
}*/
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bindTessellator(texID, subID);
|
bindTessellator(texID, subID);
|
||||||
|
@ -91,11 +104,11 @@ public class ForgeHooksClient
|
||||||
{
|
{
|
||||||
int mode = Tessellator.instance.drawMode;
|
int mode = Tessellator.instance.drawMode;
|
||||||
Tessellator.instance.draw();
|
Tessellator.instance.draw();
|
||||||
/*if (unbindContext != null)
|
if (unbindContext != null)
|
||||||
{
|
{
|
||||||
unbindContext.afterRenderContext();
|
unbindContext.afterRenderContext();
|
||||||
unbindContext = null;
|
unbindContext = null;
|
||||||
}*/
|
}
|
||||||
Tessellator.instance.startDrawing(mode);
|
Tessellator.instance.startDrawing(mode);
|
||||||
}
|
}
|
||||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, ModLoader.getMinecraftInstance().renderEngine.getTexture("/terrain.png"));
|
GL11.glBindTexture(GL11.GL_TEXTURE_2D, ModLoader.getMinecraftInstance().renderEngine.getTexture("/terrain.png"));
|
||||||
|
@ -142,20 +155,20 @@ public class ForgeHooksClient
|
||||||
inWorld = false;
|
inWorld = false;
|
||||||
for (TesKey info : renderTextures)
|
for (TesKey info : renderTextures)
|
||||||
{
|
{
|
||||||
//IRenderContextHandler handler = renderHandlers.get(info);
|
IRenderContextHandler handler = renderHandlers.get(info);
|
||||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, info.texture);
|
GL11.glBindTexture(GL11.GL_TEXTURE_2D, info.texture);
|
||||||
Tessellator tess = tessellators.get(info);
|
Tessellator tess = tessellators.get(info);
|
||||||
//if (handler == null)
|
if (handler == null)
|
||||||
//{
|
{
|
||||||
tess.draw();
|
tess.draw();
|
||||||
/*}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Tessellator.instance = tess;
|
Tessellator.instance = tess;
|
||||||
handler.beforeRenderContext();
|
handler.beforeRenderContext();
|
||||||
tess.draw();
|
tess.draw();
|
||||||
handler.afterRenderContext();
|
handler.afterRenderContext();
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, ModLoader.getMinecraftInstance().renderEngine.getTexture("/terrain.png"));
|
GL11.glBindTexture(GL11.GL_TEXTURE_2D, ModLoader.getMinecraftInstance().renderEngine.getTexture("/terrain.png"));
|
||||||
Tessellator.renderingWorldRenderer = false;
|
Tessellator.renderingWorldRenderer = false;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package net.minecraft.src.forge;
|
package net.minecraftforge.client;
|
||||||
|
|
||||||
import net.minecraft.src.EntityItem;
|
import net.minecraft.src.EntityItem;
|
||||||
import net.minecraft.src.EntityLiving;
|
import net.minecraft.src.EntityLiving;
|
|
@ -2,7 +2,7 @@
|
||||||
* This software is provided under the terms of the Minecraft Forge Public
|
* This software is provided under the terms of the Minecraft Forge Public
|
||||||
* License v1.0.
|
* License v1.0.
|
||||||
*/
|
*/
|
||||||
package net.minecraft.src.forge;
|
package net.minecraftforge.client;
|
||||||
|
|
||||||
public interface IRenderContextHandler
|
public interface IRenderContextHandler
|
||||||
{
|
{
|
|
@ -3,7 +3,7 @@
|
||||||
* License v1.0.
|
* License v1.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package net.minecraft.src.forge;
|
package net.minecraftforge.client;
|
||||||
|
|
||||||
import org.lwjgl.opengl.Display;
|
import org.lwjgl.opengl.Display;
|
||||||
|
|
||||||
|
@ -14,18 +14,10 @@ import net.minecraft.src.ItemStack;
|
||||||
import net.minecraft.src.ModLoader;
|
import net.minecraft.src.ModLoader;
|
||||||
import net.minecraft.src.RenderBlocks;
|
import net.minecraft.src.RenderBlocks;
|
||||||
import net.minecraft.src.World;
|
import net.minecraft.src.World;
|
||||||
import net.minecraft.src.forge.IItemRenderer.ItemRenderType;
|
import net.minecraftforge.client.IItemRenderer.ItemRenderType;
|
||||||
|
|
||||||
public class MinecraftForgeClient
|
public class MinecraftForgeClient
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Registers a new block highlight handler.
|
|
||||||
*/
|
|
||||||
public static void registerHighlightHandler(IHighlightHandler handler)
|
|
||||||
{
|
|
||||||
ForgeHooksClient.highlightHandlers.add(handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Register a new render context handler. A render context is a block
|
/** Register a new render context handler. A render context is a block
|
||||||
* of rendering performed with similar OpenGL modes, for example,
|
* of rendering performed with similar OpenGL modes, for example,
|
||||||
* texture name.
|
* texture name.
|
||||||
|
@ -41,74 +33,7 @@ public class MinecraftForgeClient
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a Texture Load Handler
|
* Preload a texture. Textures must be preloaded before the first
|
||||||
* @param handler The handler
|
|
||||||
*/
|
|
||||||
public static void registerTextureLoadHandler(ITextureLoadHandler handler)
|
|
||||||
{
|
|
||||||
ForgeHooksClient.textureLoadHandlers.add(handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a Render Last Handler
|
|
||||||
* @param handler The handler
|
|
||||||
*/
|
|
||||||
public static void registerRenderLastHandler(IRenderWorldLastHandler handler)
|
|
||||||
{
|
|
||||||
ForgeHooksClient.renderWorldLastHandlers.add(handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a Sound Handler
|
|
||||||
* @param handler The handler
|
|
||||||
*/
|
|
||||||
public static void registerSoundHandler(ISoundHandler handler)
|
|
||||||
{
|
|
||||||
ForgeHooksClient.soundHandlers.add(handler);
|
|
||||||
checkMinecraftVersion("Minecraft Minecraft 1.2.5", "Interface check in registerSoundHandler, remove it Mods should be updated");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (handler.getClass().getDeclaredMethod("onPlaySoundAtEntity", Entity.class, String.class, float.class, float.class) != null)
|
|
||||||
{
|
|
||||||
ForgeHooksClient.soundHandlers2.add(handler);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
if (World.class.getName().contains("World"))
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Bind a texture. This is used to bind a texture file when
|
|
||||||
* performing your own rendering, rather than using ITextureProvider.
|
|
||||||
*
|
|
||||||
* This variation is reserved for future expansion.
|
|
||||||
*/
|
|
||||||
public static void bindTexture(String texture, int subid)
|
|
||||||
{
|
|
||||||
ForgeHooksClient.bindTexture(texture, subid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Bind a texture. This is used to bind a texture file when
|
|
||||||
* performing your own rendering, rather than using ITextureProvider.
|
|
||||||
*/
|
|
||||||
public static void bindTexture(String texture)
|
|
||||||
{
|
|
||||||
ForgeHooksClient.bindTexture(texture, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Unbind a texture. This binds the default texture, when you are
|
|
||||||
* finished performing custom rendering.
|
|
||||||
*/
|
|
||||||
public static void unbindTexture()
|
|
||||||
{
|
|
||||||
ForgeHooksClient.unbindTexture();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Preload a texture. Textures must be preloaded before the first
|
|
||||||
* use, or they will cause visual anomalies.
|
* use, or they will cause visual anomalies.
|
||||||
*/
|
*/
|
||||||
public static void preloadTexture(String texture)
|
public static void preloadTexture(String texture)
|
||||||
|
@ -118,14 +43,15 @@ public class MinecraftForgeClient
|
||||||
|
|
||||||
/** Render a block. Render a block which may have a custom texture.
|
/** Render a block. Render a block which may have a custom texture.
|
||||||
*/
|
*/
|
||||||
public static void renderBlock(RenderBlocks render, Block block, int X, int Y, int Z)
|
public static void renderBlock(RenderBlocks render, Block block, int x, int y, int z)
|
||||||
{
|
{
|
||||||
ForgeHooksClient.beforeBlockRender(block, render);
|
ForgeHooksClient.beforeBlockRender(block, render);
|
||||||
render.renderBlockByRenderType(block, X, Y, Z);
|
render.renderBlockByRenderType(block, x, y, z);
|
||||||
ForgeHooksClient.afterBlockRender(block, render);
|
ForgeHooksClient.afterBlockRender(block, render);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get the current render pass.
|
/**
|
||||||
|
* Get the current render pass.
|
||||||
*/
|
*/
|
||||||
public static int getRenderPass()
|
public static int getRenderPass()
|
||||||
{
|
{
|
||||||
|
@ -134,7 +60,8 @@ public class MinecraftForgeClient
|
||||||
|
|
||||||
private static IItemRenderer[] customItemRenderers = new IItemRenderer[Item.itemsList.length];
|
private static IItemRenderer[] customItemRenderers = new IItemRenderer[Item.itemsList.length];
|
||||||
|
|
||||||
/** Register a custom renderer for a specific item. This can be used to
|
/**
|
||||||
|
* Register a custom renderer for a specific item. This can be used to
|
||||||
* render the item in-world as an EntityItem, when the item is equipped, or
|
* render the item in-world as an EntityItem, when the item is equipped, or
|
||||||
* when the item is in an inventory slot.
|
* when the item is in an inventory slot.
|
||||||
* @param itemID The item ID (shifted index) to handle rendering.
|
* @param itemID The item ID (shifted index) to handle rendering.
|
|
@ -18,4 +18,11 @@ public+f sa.c # blocksEffectiveAgainst
|
||||||
public gs.a # efficiencyOnProperMaterial
|
public gs.a # efficiencyOnProperMaterial
|
||||||
public gs.bY # damageVsEntity
|
public gs.bY # damageVsEntity
|
||||||
# EntityEnderman
|
# EntityEnderman
|
||||||
public no.d # EntityEnderman.carriableBlocks
|
public no.d # carriableBlocks
|
||||||
|
# RenderEngine
|
||||||
|
public ave.k # texturePack
|
||||||
|
# RenderGlobal
|
||||||
|
public ava.h # theWorld
|
||||||
|
public ava.i # renderEngine
|
||||||
|
public ava.q # mc
|
||||||
|
public ava.r # globalRenderBlocks
|
||||||
|
|
|
@ -175,16 +175,6 @@ public class ForgeHooks
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
grassList.add(new GrassEntry(Block.plantYellow, 0, 20));
|
|
||||||
grassList.add(new GrassEntry(Block.plantRed, 0, 10));
|
|
||||||
seedList.add(new SeedEntry(new ItemStack(Item.seeds), 10));
|
|
||||||
initTools();
|
|
||||||
System.out.printf("MinecraftForge v%s Initialized\n", ForgeVersion.getVersion());
|
|
||||||
ModLoader.getLogger().info(String.format("MinecraftForge v%s Initialized", ForgeVersion.getVersion()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getTexture(String _default, Object obj)
|
public static String getTexture(String _default, Object obj)
|
||||||
{
|
{
|
||||||
if (obj instanceof Item)
|
if (obj instanceof Item)
|
||||||
|
@ -200,4 +190,32 @@ public class ForgeHooks
|
||||||
return _default;
|
return _default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int getTotalArmorValue(EntityPlayer player)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
for (int x = 0; x < player.inventory.armorInventory.length; x++)
|
||||||
|
{
|
||||||
|
ItemStack stack = player.inventory.armorInventory[x];
|
||||||
|
if (stack != null && stack.getItem() instanceof ISpecialArmor)
|
||||||
|
{
|
||||||
|
ret += ((ISpecialArmor)stack.getItem()).getArmorDisplay(player, stack, x);
|
||||||
|
}
|
||||||
|
else if (stack != null && stack.getItem() instanceof ItemArmor)
|
||||||
|
{
|
||||||
|
ret += ((ItemArmor)stack.getItem()).damageReduceAmount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
grassList.add(new GrassEntry(Block.plantYellow, 0, 20));
|
||||||
|
grassList.add(new GrassEntry(Block.plantRed, 0, 10));
|
||||||
|
seedList.add(new SeedEntry(new ItemStack(Item.seeds), 10));
|
||||||
|
initTools();
|
||||||
|
System.out.printf("MinecraftForge v%s Initialized\n", ForgeVersion.getVersion());
|
||||||
|
ModLoader.getLogger().info(String.format("MinecraftForge v%s Initialized", ForgeVersion.getVersion()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
319
common/net/minecraftforge/common/ISpecialArmor.java
Normal file
319
common/net/minecraftforge/common/ISpecialArmor.java
Normal file
|
@ -0,0 +1,319 @@
|
||||||
|
/**
|
||||||
|
* This software is provided under the terms of the Minecraft Forge Public
|
||||||
|
* License v1.0.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.minecraftforge.common;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import net.minecraft.src.DamageSource;
|
||||||
|
import net.minecraft.src.EntityLiving;
|
||||||
|
import net.minecraft.src.EntityPlayer;
|
||||||
|
import net.minecraft.src.ItemArmor;
|
||||||
|
import net.minecraft.src.ItemStack;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface is to be implemented by ItemArmor classes. It will allow to
|
||||||
|
* modify computation of damage and health loss. Computation will be called
|
||||||
|
* before the actual armor computation, which can then be cancelled.
|
||||||
|
*
|
||||||
|
* @see ItemArmor
|
||||||
|
*/
|
||||||
|
public interface ISpecialArmor
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieves the modifiers to be used when calculating armor damage.
|
||||||
|
*
|
||||||
|
* Armor will higher priority will have damage applied to them before
|
||||||
|
* lower priority ones. If there are multiple pieces of armor with the
|
||||||
|
* same priority, damage will be distributed between them based on there
|
||||||
|
* absorption ratio.
|
||||||
|
*
|
||||||
|
* @param entity The entity wearing the armor.
|
||||||
|
* @param armor The ItemStack of the armor item itself.
|
||||||
|
* @param source The source of the damage, which can be used to alter armor
|
||||||
|
* properties based on the type or source of damage.
|
||||||
|
* @param damage The total damage being applied to the entity
|
||||||
|
* @param slot The armor slot the item is in.
|
||||||
|
* @return A ArmorProperties instance holding information about how the armor effects damage.
|
||||||
|
*/
|
||||||
|
public ArmorProperties getProperties(EntityLiving player, ItemStack armor, DamageSource source, double damage, int slot);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the displayed effective armor.
|
||||||
|
*
|
||||||
|
* @param player The player wearing the armor.
|
||||||
|
* @param armor The ItemStack of the armor item itself.
|
||||||
|
* @param slot The armor slot the item is in.
|
||||||
|
* @return The number of armor points for display, 2 per shield.
|
||||||
|
*/
|
||||||
|
public abstract int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies damage to the ItemStack. The mod is responsible for reducing the
|
||||||
|
* item durability and stack size. If the stack is depleted it will be cleaned
|
||||||
|
* up automatically.
|
||||||
|
*
|
||||||
|
* @param entity The entity wearing the armor
|
||||||
|
* @param armor The ItemStack of the armor item itself.
|
||||||
|
* @param source The source of the damage, which can be used to alter armor
|
||||||
|
* properties based on the type or source of damage.
|
||||||
|
* @param damage The amount of damage being applied to the armor
|
||||||
|
* @param slot The armor slot the item is in.
|
||||||
|
*/
|
||||||
|
public abstract void damageArmor(EntityLiving entity, ItemStack stack, DamageSource source, int damage, int slot);
|
||||||
|
|
||||||
|
public static class ArmorProperties implements Comparable<ArmorProperties>
|
||||||
|
{
|
||||||
|
public int Priority = 0;
|
||||||
|
public int AbsorbMax = Integer.MAX_VALUE;
|
||||||
|
public double AbsorbRatio = 0;
|
||||||
|
public int Slot = 0;
|
||||||
|
private static final boolean DEBUG = false; //Only enable this if you wish to be spamed with debugging information.
|
||||||
|
//Left it in because I figured it'd be useful for modders developing custom armor.
|
||||||
|
|
||||||
|
public ArmorProperties(int priority, double ratio, int max)
|
||||||
|
{
|
||||||
|
Priority = priority;
|
||||||
|
AbsorbRatio = ratio;
|
||||||
|
AbsorbMax = max;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gathers and applies armor reduction to damage being dealt to a entity.
|
||||||
|
*
|
||||||
|
* @param entity The Entity being damage
|
||||||
|
* @param inventory An array of armor items
|
||||||
|
* @param source The damage source type
|
||||||
|
* @param damage The total damage being done
|
||||||
|
* @return The left over damage that has not been absorbed by the armor
|
||||||
|
*/
|
||||||
|
public static int ApplyArmor(EntityLiving entity, ItemStack[] inventory, DamageSource source, double damage)
|
||||||
|
{
|
||||||
|
if (DEBUG)
|
||||||
|
{
|
||||||
|
System.out.println("Start: " + damage + " " + (damage * 25));
|
||||||
|
}
|
||||||
|
damage *= 25;
|
||||||
|
ArrayList<ArmorProperties> dmgVals = new ArrayList<ArmorProperties>();
|
||||||
|
for (int x = 0; x < inventory.length; x++)
|
||||||
|
{
|
||||||
|
ItemStack stack = inventory[x];
|
||||||
|
if (stack == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ArmorProperties prop = null;
|
||||||
|
if (stack.getItem() instanceof ISpecialArmor)
|
||||||
|
{
|
||||||
|
ISpecialArmor armor = (ISpecialArmor)stack.getItem();
|
||||||
|
prop = armor.getProperties(entity, stack, source, damage / 25D, x).copy();
|
||||||
|
}
|
||||||
|
else if (stack.getItem() instanceof ItemArmor && !source.isUnblockable())
|
||||||
|
{
|
||||||
|
ItemArmor armor = (ItemArmor)stack.getItem();
|
||||||
|
prop = new ArmorProperties(0, armor.damageReduceAmount / 25D, armor.getMaxDamage() + 1 - stack.getItemDamage());
|
||||||
|
}
|
||||||
|
if (prop != null)
|
||||||
|
{
|
||||||
|
prop.Slot = x;
|
||||||
|
dmgVals.add(prop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dmgVals.size() > 0)
|
||||||
|
{
|
||||||
|
ArmorProperties[] props = dmgVals.toArray(new ArmorProperties[0]);
|
||||||
|
StandardizeList(props, damage);
|
||||||
|
int level = props[0].Priority;
|
||||||
|
double ratio = 0;
|
||||||
|
for (ArmorProperties prop : props)
|
||||||
|
{
|
||||||
|
if (level != prop.Priority)
|
||||||
|
{
|
||||||
|
damage -= (damage * ratio);
|
||||||
|
ratio = 0;
|
||||||
|
level = prop.Priority;
|
||||||
|
}
|
||||||
|
ratio += prop.AbsorbRatio;
|
||||||
|
|
||||||
|
double absorb = damage * prop.AbsorbRatio;
|
||||||
|
if (absorb > 0)
|
||||||
|
{
|
||||||
|
ItemStack stack = inventory[prop.Slot];
|
||||||
|
int itemDamage = (int)(absorb / 25D < 1 ? 1 : absorb / 25D);
|
||||||
|
if (stack.getItem() instanceof ISpecialArmor)
|
||||||
|
{
|
||||||
|
((ISpecialArmor)stack.getItem()).damageArmor(entity, stack, source, itemDamage, prop.Slot);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (DEBUG)
|
||||||
|
{
|
||||||
|
System.out.println("Item: " + stack.toString() + " Absorbed: " + (absorb / 25D) + " Damaged: " + itemDamage);
|
||||||
|
}
|
||||||
|
stack.damageItem(itemDamage, entity);
|
||||||
|
}
|
||||||
|
if (stack.stackSize <= 0)
|
||||||
|
{
|
||||||
|
if (entity instanceof EntityPlayer)
|
||||||
|
{
|
||||||
|
stack.onItemDestroyedByUse((EntityPlayer)entity);
|
||||||
|
}
|
||||||
|
inventory[prop.Slot] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
damage -= (damage * ratio);
|
||||||
|
}
|
||||||
|
damage += entity.carryoverDamage;
|
||||||
|
if (DEBUG)
|
||||||
|
{
|
||||||
|
System.out.println("Return: " + (int)(damage / 25D) + " " + damage);
|
||||||
|
}
|
||||||
|
entity.carryoverDamage = (int)damage % 25;
|
||||||
|
return (int)(damage / 25D);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts and standardizes the distribution of damage over armor.
|
||||||
|
*
|
||||||
|
* @param armor The armor information
|
||||||
|
* @param damage The total damage being received
|
||||||
|
*/
|
||||||
|
private static void StandardizeList(ArmorProperties[] armor, double damage)
|
||||||
|
{
|
||||||
|
Arrays.sort(armor);
|
||||||
|
|
||||||
|
int start = 0;
|
||||||
|
double total = 0;
|
||||||
|
int priority = armor[0].Priority;
|
||||||
|
int pStart = 0;
|
||||||
|
boolean pChange = false;
|
||||||
|
boolean pFinished = false;
|
||||||
|
|
||||||
|
if (DEBUG)
|
||||||
|
{
|
||||||
|
for (ArmorProperties prop : armor)
|
||||||
|
{
|
||||||
|
System.out.println(prop);
|
||||||
|
}
|
||||||
|
System.out.println("========================");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int x = 0; x < armor.length; x++)
|
||||||
|
{
|
||||||
|
total += armor[x].AbsorbRatio;
|
||||||
|
if (x == armor.length - 1 || armor[x].Priority != priority)
|
||||||
|
{
|
||||||
|
if (armor[x].Priority != priority)
|
||||||
|
{
|
||||||
|
total -= armor[x].AbsorbRatio;
|
||||||
|
x--;
|
||||||
|
pChange = true;
|
||||||
|
}
|
||||||
|
if (total > 1)
|
||||||
|
{
|
||||||
|
for (int y = start; y <= x; y++)
|
||||||
|
{
|
||||||
|
double newRatio = armor[y].AbsorbRatio / total;
|
||||||
|
if (newRatio * damage > armor[y].AbsorbMax)
|
||||||
|
{
|
||||||
|
armor[y].AbsorbRatio = (double)armor[y].AbsorbMax / damage;
|
||||||
|
total = 0;
|
||||||
|
for (int z = pStart; z <= y; z++)
|
||||||
|
{
|
||||||
|
total += armor[z].AbsorbRatio;
|
||||||
|
}
|
||||||
|
start = y + 1;
|
||||||
|
x = y;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
armor[y].AbsorbRatio = newRatio;
|
||||||
|
pFinished = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pChange && pFinished)
|
||||||
|
{
|
||||||
|
damage -= (damage * total);
|
||||||
|
total = 0;
|
||||||
|
start = x + 1;
|
||||||
|
priority = armor[start].Priority;
|
||||||
|
pStart = start;
|
||||||
|
pChange = false;
|
||||||
|
pFinished = false;
|
||||||
|
if (damage <= 0)
|
||||||
|
{
|
||||||
|
for (int y = x + 1; y < armor.length; y++)
|
||||||
|
{
|
||||||
|
armor[y].AbsorbRatio = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int y = start; y <= x; y++)
|
||||||
|
{
|
||||||
|
total -= armor[y].AbsorbRatio;
|
||||||
|
if (damage * armor[y].AbsorbRatio > armor[y].AbsorbMax)
|
||||||
|
{
|
||||||
|
armor[y].AbsorbRatio = (double)armor[y].AbsorbMax / (double)damage;
|
||||||
|
}
|
||||||
|
total += armor[y].AbsorbRatio;
|
||||||
|
}
|
||||||
|
damage -= (damage * total);
|
||||||
|
total = 0;
|
||||||
|
if (x != armor.length - 1)
|
||||||
|
{
|
||||||
|
start = x + 1;
|
||||||
|
priority = armor[start].Priority;
|
||||||
|
pStart = start;
|
||||||
|
pChange = false;
|
||||||
|
if (damage <= 0)
|
||||||
|
{
|
||||||
|
for (int y = x + 1; y < armor.length; y++)
|
||||||
|
{
|
||||||
|
armor[y].AbsorbRatio = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (DEBUG)
|
||||||
|
{
|
||||||
|
for (ArmorProperties prop : armor)
|
||||||
|
{
|
||||||
|
System.out.println(prop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int compareTo(ArmorProperties o)
|
||||||
|
{
|
||||||
|
if (o.Priority != Priority)
|
||||||
|
{
|
||||||
|
return o.Priority - Priority;
|
||||||
|
}
|
||||||
|
double left = ( AbsorbRatio == 0 ? 0 : AbsorbMax * 100.0D / AbsorbRatio);
|
||||||
|
double right = (o.AbsorbRatio == 0 ? 0 : o.AbsorbMax * 100.0D / o.AbsorbRatio);
|
||||||
|
return (int)(left - right);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return String.format("%d, %d, %f, %d", Priority, AbsorbMax, AbsorbRatio, (AbsorbRatio == 0 ? 0 : (int)(AbsorbMax * 100.0D / AbsorbRatio)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArmorProperties copy()
|
||||||
|
{
|
||||||
|
return new ArmorProperties(Priority, AbsorbRatio, AbsorbMax);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,34 +0,0 @@
|
||||||
package net.minecraftforge.event.entity;
|
|
||||||
|
|
||||||
import net.minecraft.src.Entity;
|
|
||||||
import net.minecraft.src.EntityItem;
|
|
||||||
import net.minecraft.src.EntityPlayer;
|
|
||||||
|
|
||||||
public class EntityItemPickupEvent extends EntityEvent
|
|
||||||
{
|
|
||||||
private final EntityItem item;
|
|
||||||
private final EntityPlayer player;
|
|
||||||
|
|
||||||
public EntityItemPickupEvent(EntityItem item, EntityPlayer player)
|
|
||||||
{
|
|
||||||
super(item);
|
|
||||||
this.item = item;
|
|
||||||
this.player = player;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EntityItem getItem()
|
|
||||||
{
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EntityPlayer getPlayer()
|
|
||||||
{
|
|
||||||
return player;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isCancelable()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
package net.minecraftforge.event.entity;
|
|
||||||
|
|
||||||
import net.minecraft.src.Entity;
|
|
||||||
import net.minecraft.src.EntityPlayer;
|
|
||||||
|
|
||||||
public class PlayerEvent extends EntityEvent
|
|
||||||
{
|
|
||||||
private final EntityPlayer player;
|
|
||||||
public PlayerEvent(EntityPlayer player)
|
|
||||||
{
|
|
||||||
super(player);
|
|
||||||
this.player = player;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EntityPlayer getPlayer()
|
|
||||||
{
|
|
||||||
return player;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,6 +3,7 @@ package net.minecraftforge.event.entity;
|
||||||
import net.minecraft.src.EntityPlayer;
|
import net.minecraft.src.EntityPlayer;
|
||||||
import net.minecraft.src.ItemStack;
|
import net.minecraft.src.ItemStack;
|
||||||
import net.minecraft.src.World;
|
import net.minecraft.src.World;
|
||||||
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||||
|
|
||||||
public class UseHoeEvent extends PlayerEvent
|
public class UseHoeEvent extends PlayerEvent
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
package net.minecraftforge.event.entity.living;
|
||||||
|
|
||||||
|
import net.minecraft.src.EntityLiving;
|
||||||
|
import net.minecraftforge.event.entity.EntityEvent;
|
||||||
|
|
||||||
|
public class LivingEvent extends EntityEvent
|
||||||
|
{
|
||||||
|
public final EntityLiving entityLiving;
|
||||||
|
public LivingEvent(EntityLiving entity)
|
||||||
|
{
|
||||||
|
super(entity);
|
||||||
|
entityLiving = entity;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package net.minecraftforge.event.entity.living;
|
||||||
|
|
||||||
|
import net.minecraft.src.EntityLiving;
|
||||||
|
import net.minecraft.src.World;
|
||||||
|
|
||||||
|
public class LivingSpecialSpawnEvent extends LivingEvent
|
||||||
|
{
|
||||||
|
public final World world;
|
||||||
|
public final float x;
|
||||||
|
public final float y;
|
||||||
|
public final float z;
|
||||||
|
private boolean handeled = false;
|
||||||
|
|
||||||
|
public LivingSpecialSpawnEvent(EntityLiving entity, World world, float x, float y, float z)
|
||||||
|
{
|
||||||
|
super(entity);
|
||||||
|
this.world = world;
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.z = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHandeled()
|
||||||
|
{
|
||||||
|
handeled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isHandeled()
|
||||||
|
{
|
||||||
|
return handeled;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
package net.minecraftforge.event.entity;
|
package net.minecraftforge.event.entity.player;
|
||||||
|
|
||||||
import net.minecraft.src.EntityPlayer;
|
import net.minecraft.src.EntityPlayer;
|
||||||
import net.minecraft.src.ItemStack;
|
import net.minecraft.src.ItemStack;
|
||||||
|
|
||||||
public class ArrowLooseEvent extends PlayerEvent
|
public class ArrowLooseEvent extends PlayerEvent
|
||||||
{
|
{
|
||||||
private final ItemStack bow;
|
public final ItemStack bow;
|
||||||
private int charge;
|
public int charge;
|
||||||
|
|
||||||
public ArrowLooseEvent(EntityPlayer player, ItemStack bow, int charge)
|
public ArrowLooseEvent(EntityPlayer player, ItemStack bow, int charge)
|
||||||
{
|
{
|
||||||
|
@ -20,19 +20,4 @@ public class ArrowLooseEvent extends PlayerEvent
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getBow()
|
|
||||||
{
|
|
||||||
return bow;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCharge()
|
|
||||||
{
|
|
||||||
return charge;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCharge(int charge)
|
|
||||||
{
|
|
||||||
this.charge = charge;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,11 +1,11 @@
|
||||||
package net.minecraftforge.event.entity;
|
package net.minecraftforge.event.entity.player;
|
||||||
|
|
||||||
import net.minecraft.src.EntityPlayer;
|
import net.minecraft.src.EntityPlayer;
|
||||||
import net.minecraft.src.ItemStack;
|
import net.minecraft.src.ItemStack;
|
||||||
|
|
||||||
public class ArrowNockEvent extends PlayerEvent
|
public class ArrowNockEvent extends PlayerEvent
|
||||||
{
|
{
|
||||||
private ItemStack result;
|
public ItemStack result;
|
||||||
|
|
||||||
public ArrowNockEvent(EntityPlayer player, ItemStack result)
|
public ArrowNockEvent(EntityPlayer player, ItemStack result)
|
||||||
{
|
{
|
||||||
|
@ -18,14 +18,4 @@ public class ArrowNockEvent extends PlayerEvent
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getResultStack()
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setResultStack(ItemStack result)
|
|
||||||
{
|
|
||||||
this.result = result;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package net.minecraftforge.event.entity;
|
package net.minecraftforge.event.entity.player;
|
||||||
|
|
||||||
import net.minecraft.src.EntityPlayer;
|
import net.minecraft.src.EntityPlayer;
|
||||||
import net.minecraft.src.World;
|
import net.minecraft.src.World;
|
|
@ -0,0 +1,22 @@
|
||||||
|
package net.minecraftforge.event.entity.player;
|
||||||
|
|
||||||
|
import net.minecraft.src.Entity;
|
||||||
|
import net.minecraft.src.EntityItem;
|
||||||
|
import net.minecraft.src.EntityPlayer;
|
||||||
|
|
||||||
|
public class EntityItemPickupEvent extends PlayerEvent
|
||||||
|
{
|
||||||
|
public final EntityItem item;
|
||||||
|
|
||||||
|
public EntityItemPickupEvent(EntityPlayer player, EntityItem item)
|
||||||
|
{
|
||||||
|
super(player);
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelable()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package net.minecraftforge.event.entity;
|
package net.minecraftforge.event.entity.player;
|
||||||
|
|
||||||
import net.minecraft.src.EntityPlayer;
|
import net.minecraft.src.EntityPlayer;
|
||||||
import net.minecraft.src.ItemStack;
|
import net.minecraft.src.ItemStack;
|
||||||
|
@ -7,11 +7,11 @@ import net.minecraft.src.World;
|
||||||
|
|
||||||
public class FillBucketEvent extends PlayerEvent
|
public class FillBucketEvent extends PlayerEvent
|
||||||
{
|
{
|
||||||
private final ItemStack current;
|
public final ItemStack current;
|
||||||
private final World world;
|
public final World world;
|
||||||
private final MovingObjectPosition target;
|
public final MovingObjectPosition target;
|
||||||
|
|
||||||
private ItemStack result;
|
public ItemStack result;
|
||||||
private boolean handeled = false;
|
private boolean handeled = false;
|
||||||
|
|
||||||
public FillBucketEvent(EntityPlayer player, ItemStack current, World world, MovingObjectPosition target)
|
public FillBucketEvent(EntityPlayer player, ItemStack current, World world, MovingObjectPosition target)
|
||||||
|
@ -28,21 +28,6 @@ public class FillBucketEvent extends PlayerEvent
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getCurrentItem()
|
|
||||||
{
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
public World getWorld()
|
|
||||||
{
|
|
||||||
return world;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MovingObjectPosition getTarget()
|
|
||||||
{
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isHandeled()
|
public boolean isHandeled()
|
||||||
{
|
{
|
||||||
return handeled;
|
return handeled;
|
||||||
|
@ -52,15 +37,4 @@ public class FillBucketEvent extends PlayerEvent
|
||||||
{
|
{
|
||||||
handeled = true;
|
handeled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getResult()
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setResult(ItemStack result)
|
|
||||||
{
|
|
||||||
this.result = result;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package net.minecraftforge.event.entity.player;
|
||||||
|
|
||||||
|
import net.minecraft.src.Entity;
|
||||||
|
import net.minecraft.src.EntityPlayer;
|
||||||
|
import net.minecraftforge.event.entity.living.LivingEvent;
|
||||||
|
|
||||||
|
public class PlayerEvent extends LivingEvent
|
||||||
|
{
|
||||||
|
public final EntityPlayer entityPlayer;
|
||||||
|
public PlayerEvent(EntityPlayer player)
|
||||||
|
{
|
||||||
|
super(player);
|
||||||
|
entityPlayer = player;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +0,0 @@
|
||||||
package net.minecraft.src.forge;
|
|
||||||
|
|
||||||
@Deprecated //Now consolidated into IITemRenderer
|
|
||||||
public enum ItemRenderType
|
|
||||||
{
|
|
||||||
ENTITY, // Render type for in-world EntityItems
|
|
||||||
EQUIPPED, // Render type for an item equipped in-hand
|
|
||||||
INVENTORY; // Render type for items shown in a GUI inventory slot
|
|
||||||
}
|
|
|
@ -1,267 +0,0 @@
|
||||||
/**
|
|
||||||
* This software is provided under the terms of the Minecraft Forge Public
|
|
||||||
* License v1.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package net.minecraft.src.forge;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import net.minecraft.src.DamageSource;
|
|
||||||
import net.minecraft.src.EntityLiving;
|
|
||||||
import net.minecraft.src.EntityPlayer;
|
|
||||||
import net.minecraft.src.ItemArmor;
|
|
||||||
import net.minecraft.src.ItemStack;
|
|
||||||
|
|
||||||
public class ArmorProperties implements Comparable<ArmorProperties>
|
|
||||||
{
|
|
||||||
public int Priority = 0;
|
|
||||||
public int AbsorbMax = Integer.MAX_VALUE;
|
|
||||||
public double AbsorbRatio = 0;
|
|
||||||
public int Slot = 0;
|
|
||||||
private static final boolean DEBUG = false; //Only enable this if you wish to be spamed with debugging information.
|
|
||||||
//Left it in because I figured it'd be useful for modders developing custom armor.
|
|
||||||
|
|
||||||
public ArmorProperties(int priority, double ratio, int max)
|
|
||||||
{
|
|
||||||
Priority = priority;
|
|
||||||
AbsorbRatio = ratio;
|
|
||||||
AbsorbMax = max;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gathers and applies armor reduction to damage being dealt to a entity.
|
|
||||||
*
|
|
||||||
* @param entity The Entity being damage
|
|
||||||
* @param inventory An array of armor items
|
|
||||||
* @param source The damage source type
|
|
||||||
* @param damage The total damage being done
|
|
||||||
* @return The left over damage that has not been absorbed by the armor
|
|
||||||
*/
|
|
||||||
public static int ApplyArmor(EntityLiving entity, ItemStack[] inventory, DamageSource source, double damage)
|
|
||||||
{
|
|
||||||
if (DEBUG)
|
|
||||||
{
|
|
||||||
System.out.println("Start: " + damage + " " + (damage * 25));
|
|
||||||
}
|
|
||||||
damage *= 25;
|
|
||||||
ArrayList<ArmorProperties> dmgVals = new ArrayList<ArmorProperties>();
|
|
||||||
for (int x = 0; x < inventory.length; x++)
|
|
||||||
{
|
|
||||||
ItemStack stack = inventory[x];
|
|
||||||
if (stack == null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ArmorProperties prop = null;
|
|
||||||
if (stack.getItem() instanceof ISpecialArmor)
|
|
||||||
{
|
|
||||||
ISpecialArmor armor = (ISpecialArmor)stack.getItem();
|
|
||||||
prop = armor.getProperties(entity, stack, source, damage / 25D, x).copy();
|
|
||||||
}
|
|
||||||
else if (stack.getItem() instanceof ItemArmor && !source.isUnblockable())
|
|
||||||
{
|
|
||||||
ItemArmor armor = (ItemArmor)stack.getItem();
|
|
||||||
prop = new ArmorProperties(0, armor.damageReduceAmount / 25D, armor.getMaxDamage() + 1 - stack.getItemDamage());
|
|
||||||
}
|
|
||||||
if (prop != null)
|
|
||||||
{
|
|
||||||
prop.Slot = x;
|
|
||||||
dmgVals.add(prop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (dmgVals.size() > 0)
|
|
||||||
{
|
|
||||||
ArmorProperties[] props = dmgVals.toArray(new ArmorProperties[0]);
|
|
||||||
StandardizeList(props, damage);
|
|
||||||
int level = props[0].Priority;
|
|
||||||
double ratio = 0;
|
|
||||||
for (ArmorProperties prop : props)
|
|
||||||
{
|
|
||||||
if (level != prop.Priority)
|
|
||||||
{
|
|
||||||
damage -= (damage * ratio);
|
|
||||||
ratio = 0;
|
|
||||||
level = prop.Priority;
|
|
||||||
}
|
|
||||||
ratio += prop.AbsorbRatio;
|
|
||||||
|
|
||||||
double absorb = damage * prop.AbsorbRatio;
|
|
||||||
if (absorb > 0)
|
|
||||||
{
|
|
||||||
ItemStack stack = inventory[prop.Slot];
|
|
||||||
int itemDamage = (int)(absorb / 25D < 1 ? 1 : absorb / 25D);
|
|
||||||
if (stack.getItem() instanceof ISpecialArmor)
|
|
||||||
{
|
|
||||||
((ISpecialArmor)stack.getItem()).damageArmor(entity, stack, source, itemDamage, prop.Slot);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (DEBUG)
|
|
||||||
{
|
|
||||||
System.out.println("Item: " + stack.toString() + " Absorbed: " + (absorb / 25D) + " Damaged: " + itemDamage);
|
|
||||||
}
|
|
||||||
stack.damageItem(itemDamage, entity);
|
|
||||||
}
|
|
||||||
if (stack.stackSize <= 0)
|
|
||||||
{
|
|
||||||
if (entity instanceof EntityPlayer)
|
|
||||||
{
|
|
||||||
stack.onItemDestroyedByUse((EntityPlayer)entity);
|
|
||||||
}
|
|
||||||
inventory[prop.Slot] = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
damage -= (damage * ratio);
|
|
||||||
}
|
|
||||||
damage += entity.carryoverDamage;
|
|
||||||
if (DEBUG)
|
|
||||||
{
|
|
||||||
System.out.println("Return: " + (int)(damage / 25D) + " " + damage);
|
|
||||||
}
|
|
||||||
entity.carryoverDamage = (int)damage % 25;
|
|
||||||
return (int)(damage / 25D);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sorts and standardizes the distribution of damage over armor.
|
|
||||||
*
|
|
||||||
* @param armor The armor information
|
|
||||||
* @param damage The total damage being received
|
|
||||||
*/
|
|
||||||
private static void StandardizeList(ArmorProperties[] armor, double damage)
|
|
||||||
{
|
|
||||||
Arrays.sort(armor);
|
|
||||||
|
|
||||||
int start = 0;
|
|
||||||
double total = 0;
|
|
||||||
int priority = armor[0].Priority;
|
|
||||||
int pStart = 0;
|
|
||||||
boolean pChange = false;
|
|
||||||
boolean pFinished = false;
|
|
||||||
|
|
||||||
if (DEBUG)
|
|
||||||
{
|
|
||||||
for (ArmorProperties prop : armor)
|
|
||||||
{
|
|
||||||
System.out.println(prop);
|
|
||||||
}
|
|
||||||
System.out.println("========================");
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int x = 0; x < armor.length; x++)
|
|
||||||
{
|
|
||||||
total += armor[x].AbsorbRatio;
|
|
||||||
if (x == armor.length - 1 || armor[x].Priority != priority)
|
|
||||||
{
|
|
||||||
if (armor[x].Priority != priority)
|
|
||||||
{
|
|
||||||
total -= armor[x].AbsorbRatio;
|
|
||||||
x--;
|
|
||||||
pChange = true;
|
|
||||||
}
|
|
||||||
if (total > 1)
|
|
||||||
{
|
|
||||||
for (int y = start; y <= x; y++)
|
|
||||||
{
|
|
||||||
double newRatio = armor[y].AbsorbRatio / total;
|
|
||||||
if (newRatio * damage > armor[y].AbsorbMax)
|
|
||||||
{
|
|
||||||
armor[y].AbsorbRatio = (double)armor[y].AbsorbMax / damage;
|
|
||||||
total = 0;
|
|
||||||
for (int z = pStart; z <= y; z++)
|
|
||||||
{
|
|
||||||
total += armor[z].AbsorbRatio;
|
|
||||||
}
|
|
||||||
start = y + 1;
|
|
||||||
x = y;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
armor[y].AbsorbRatio = newRatio;
|
|
||||||
pFinished = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (pChange && pFinished)
|
|
||||||
{
|
|
||||||
damage -= (damage * total);
|
|
||||||
total = 0;
|
|
||||||
start = x + 1;
|
|
||||||
priority = armor[start].Priority;
|
|
||||||
pStart = start;
|
|
||||||
pChange = false;
|
|
||||||
pFinished = false;
|
|
||||||
if (damage <= 0)
|
|
||||||
{
|
|
||||||
for (int y = x + 1; y < armor.length; y++)
|
|
||||||
{
|
|
||||||
armor[y].AbsorbRatio = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (int y = start; y <= x; y++)
|
|
||||||
{
|
|
||||||
total -= armor[y].AbsorbRatio;
|
|
||||||
if (damage * armor[y].AbsorbRatio > armor[y].AbsorbMax)
|
|
||||||
{
|
|
||||||
armor[y].AbsorbRatio = (double)armor[y].AbsorbMax / (double)damage;
|
|
||||||
}
|
|
||||||
total += armor[y].AbsorbRatio;
|
|
||||||
}
|
|
||||||
damage -= (damage * total);
|
|
||||||
total = 0;
|
|
||||||
if (x != armor.length - 1)
|
|
||||||
{
|
|
||||||
start = x + 1;
|
|
||||||
priority = armor[start].Priority;
|
|
||||||
pStart = start;
|
|
||||||
pChange = false;
|
|
||||||
if (damage <= 0)
|
|
||||||
{
|
|
||||||
for (int y = x + 1; y < armor.length; y++)
|
|
||||||
{
|
|
||||||
armor[y].AbsorbRatio = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (DEBUG)
|
|
||||||
{
|
|
||||||
for (ArmorProperties prop : armor)
|
|
||||||
{
|
|
||||||
System.out.println(prop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int compareTo(ArmorProperties o)
|
|
||||||
{
|
|
||||||
if (o.Priority != Priority)
|
|
||||||
{
|
|
||||||
return o.Priority - Priority;
|
|
||||||
}
|
|
||||||
double left = ( AbsorbRatio == 0 ? 0 : AbsorbMax * 100.0D / AbsorbRatio);
|
|
||||||
double right = (o.AbsorbRatio == 0 ? 0 : o.AbsorbMax * 100.0D / o.AbsorbRatio);
|
|
||||||
return (int)(left - right);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return String.format("%d, %d, %f, %d", Priority, AbsorbMax, AbsorbRatio, (AbsorbRatio == 0 ? 0 : (int)(AbsorbMax * 100.0D / AbsorbRatio)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArmorProperties copy()
|
|
||||||
{
|
|
||||||
return new ArmorProperties(Priority, AbsorbRatio, AbsorbMax);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,64 +0,0 @@
|
||||||
/**
|
|
||||||
* This software is provided under the terms of the Minecraft Forge Public
|
|
||||||
* License v1.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package net.minecraft.src.forge;
|
|
||||||
|
|
||||||
import net.minecraft.src.DamageSource;
|
|
||||||
import net.minecraft.src.EntityLiving;
|
|
||||||
import net.minecraft.src.EntityPlayer;
|
|
||||||
import net.minecraft.src.ItemArmor;
|
|
||||||
import net.minecraft.src.ItemStack;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This interface is to be implemented by ItemArmor classes. It will allow to
|
|
||||||
* modify computation of damage and health loss. Computation will be called
|
|
||||||
* before the actual armor computation, which can then be cancelled.
|
|
||||||
*
|
|
||||||
* @see ItemArmor
|
|
||||||
*/
|
|
||||||
public interface ISpecialArmor
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Retrieves the modifiers to be used when calculating armor damage.
|
|
||||||
*
|
|
||||||
* Armor will higher priority will have damage applied to them before
|
|
||||||
* lower priority ones. If there are multiple pieces of armor with the
|
|
||||||
* same priority, damage will be distributed between them based on there
|
|
||||||
* absorption ratio.
|
|
||||||
*
|
|
||||||
* @param entity The entity wearing the armor.
|
|
||||||
* @param armor The ItemStack of the armor item itself.
|
|
||||||
* @param source The source of the damage, which can be used to alter armor
|
|
||||||
* properties based on the type or source of damage.
|
|
||||||
* @param damage The total damage being applied to the entity
|
|
||||||
* @param slot The armor slot the item is in.
|
|
||||||
* @return A ArmorProperties instance holding information about how the armor effects damage.
|
|
||||||
*/
|
|
||||||
public ArmorProperties getProperties(EntityLiving player, ItemStack armor, DamageSource source, double damage, int slot);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the displayed effective armor.
|
|
||||||
*
|
|
||||||
* @param player The player wearing the armor.
|
|
||||||
* @param armor The ItemStack of the armor item itself.
|
|
||||||
* @param slot The armor slot the item is in.
|
|
||||||
* @return The number of armor points for display, 2 per shield.
|
|
||||||
*/
|
|
||||||
public abstract int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Applies damage to the ItemStack. The mod is responsible for reducing the
|
|
||||||
* item durability and stack size. If the stack is depleted it will be cleaned
|
|
||||||
* up automatically.
|
|
||||||
*
|
|
||||||
* @param entity The entity wearing the armor
|
|
||||||
* @param armor The ItemStack of the armor item itself.
|
|
||||||
* @param source The source of the damage, which can be used to alter armor
|
|
||||||
* properties based on the type or source of damage.
|
|
||||||
* @param damage The amount of damage being applied to the armor
|
|
||||||
* @param slot The armor slot the item is in.
|
|
||||||
*/
|
|
||||||
public abstract void damageArmor(EntityLiving entity, ItemStack stack, DamageSource source, int damage, int slot);
|
|
||||||
}
|
|
|
@ -6,7 +6,7 @@
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
+
|
+
|
||||||
+import net.minecraftforge.common.MinecraftForge;
|
+import net.minecraftforge.common.MinecraftForge;
|
||||||
+import net.minecraftforge.event.entity.EntityItemPickupEvent;
|
+import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
|
||||||
|
|
||||||
public class EntityItem extends Entity
|
public class EntityItem extends Entity
|
||||||
{
|
{
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
{
|
{
|
||||||
int var2 = this.item.stackSize;
|
int var2 = this.item.stackSize;
|
||||||
|
|
||||||
+ EntityItemPickupEvent event = new EntityItemPickupEvent(this, par1EntityPlayer);
|
+ EntityItemPickupEvent event = new EntityItemPickupEvent(par1EntityPlayer, this);
|
||||||
+ MinecraftForge.EVENT_BUS.post(event);
|
+ MinecraftForge.EVENT_BUS.post(event);
|
||||||
+
|
+
|
||||||
+ if (delayBeforeCanPickup == 0 && (!event.isCanceled() || item.stackSize <= 0))
|
+ if (delayBeforeCanPickup == 0 && (!event.isCanceled() || item.stackSize <= 0))
|
||||||
|
|
77
patches/common/net/minecraft/src/EntityMooshroom.java.patch
Normal file
77
patches/common/net/minecraft/src/EntityMooshroom.java.patch
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/EntityMooshroom.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/EntityMooshroom.java
|
||||||
|
@@ -1,6 +1,10 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
-public class EntityMooshroom extends EntityCow
|
||||||
|
+import java.util.ArrayList;
|
||||||
|
+
|
||||||
|
+import net.minecraftforge.common.IShearable;
|
||||||
|
+
|
||||||
|
+public class EntityMooshroom extends EntityCow implements IShearable
|
||||||
|
{
|
||||||
|
public EntityMooshroom(World par1World)
|
||||||
|
{
|
||||||
|
@@ -31,31 +35,7 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (var2 != null && var2.itemID == Item.shears.shiftedIndex && this.getGrowingAge() >= 0)
|
||||||
|
- {
|
||||||
|
- this.setDead();
|
||||||
|
- this.worldObj.spawnParticle("largeexplode", this.posX, this.posY + (double)(this.height / 2.0F), this.posZ, 0.0D, 0.0D, 0.0D);
|
||||||
|
-
|
||||||
|
- if (!this.worldObj.isRemote)
|
||||||
|
- {
|
||||||
|
- EntityCow var3 = new EntityCow(this.worldObj);
|
||||||
|
- var3.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
|
||||||
|
- var3.setEntityHealth(this.getHealth());
|
||||||
|
- var3.renderYawOffset = this.renderYawOffset;
|
||||||
|
- this.worldObj.spawnEntityInWorld(var3);
|
||||||
|
-
|
||||||
|
- for (int var4 = 0; var4 < 5; ++var4)
|
||||||
|
- {
|
||||||
|
- this.worldObj.spawnEntityInWorld(new EntityItem(this.worldObj, this.posX, this.posY + (double)this.height, this.posZ, new ItemStack(Block.mushroomRed)));
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return true;
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
- {
|
||||||
|
- return super.interact(par1EntityPlayer);
|
||||||
|
- }
|
||||||
|
+ return super.interact(par1EntityPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -65,4 +45,29 @@
|
||||||
|
{
|
||||||
|
return new EntityMooshroom(this.worldObj);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public boolean isShearable(ItemStack item, World world, int X, int Y, int Z)
|
||||||
|
+ {
|
||||||
|
+ return getGrowingAge() >= 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public ArrayList<ItemStack> onSheared(ItemStack item, World world, int X, int Y, int Z, int fortune)
|
||||||
|
+ {
|
||||||
|
+ setDead();
|
||||||
|
+ EntityCow entitycow = new EntityCow(worldObj);
|
||||||
|
+ entitycow.setLocationAndAngles(posX, posY, posZ, rotationYaw, rotationPitch);
|
||||||
|
+ entitycow.setEntityHealth(getHealth());
|
||||||
|
+ entitycow.renderYawOffset = renderYawOffset;
|
||||||
|
+ worldObj.spawnEntityInWorld(entitycow);
|
||||||
|
+ worldObj.spawnParticle("largeexplode", posX, posY + (double)(height / 2.0F), posZ, 0.0D, 0.0D, 0.0D);
|
||||||
|
+
|
||||||
|
+ ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
|
||||||
|
+ for (int x = 0; x < 5; x++)
|
||||||
|
+ {
|
||||||
|
+ ret.add(new ItemStack(Block.mushroomRed));
|
||||||
|
+ }
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
}
|
62
patches/common/net/minecraft/src/FurnaceRecipes.java.patch
Normal file
62
patches/common/net/minecraft/src/FurnaceRecipes.java.patch
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/FurnaceRecipes.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/FurnaceRecipes.java
|
||||||
|
@@ -1,5 +1,6 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
+import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@@ -10,6 +11,7 @@
|
||||||
|
/** The list of smelting results. */
|
||||||
|
private Map smeltingList = new HashMap();
|
||||||
|
private Map field_77605_c = new HashMap();
|
||||||
|
+ private Map metaSmeltingList = new HashMap();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to call methods addSmelting and getSmeltingResult.
|
||||||
|
@@ -50,7 +52,9 @@
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the smelting result of an item.
|
||||||
|
+ * Deprecated in favor of a metadata sensitive version
|
||||||
|
*/
|
||||||
|
+ @Deprecated
|
||||||
|
public ItemStack getSmeltingResult(int par1)
|
||||||
|
{
|
||||||
|
return (ItemStack)this.smeltingList.get(Integer.valueOf(par1));
|
||||||
|
@@ -65,4 +69,34 @@
|
||||||
|
{
|
||||||
|
return this.field_77605_c.containsKey(Integer.valueOf(par1)) ? ((Float)this.field_77605_c.get(Integer.valueOf(par1))).floatValue() : 0.0F;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Add a metadata-sensitive furnace recipe
|
||||||
|
+ * @param itemID The Item ID
|
||||||
|
+ * @param metadata The Item Metadata
|
||||||
|
+ * @param itemstack The ItemStack for the result
|
||||||
|
+ */
|
||||||
|
+ public void addSmelting(int itemID, int metadata, ItemStack itemstack)
|
||||||
|
+ {
|
||||||
|
+ metaSmeltingList.put(Arrays.asList(itemID, metadata), itemstack);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Used to get the resulting ItemStack form a source ItemStack
|
||||||
|
+ * @param item The Source ItemStack
|
||||||
|
+ * @return The result ItemStack
|
||||||
|
+ */
|
||||||
|
+ public ItemStack getSmeltingResult(ItemStack item)
|
||||||
|
+ {
|
||||||
|
+ if (item == null)
|
||||||
|
+ {
|
||||||
|
+ return null;
|
||||||
|
+ }
|
||||||
|
+ ItemStack ret = (ItemStack)metaSmeltingList.get(Arrays.asList(item.itemID, item.getItemDamage()));
|
||||||
|
+ if (ret != null)
|
||||||
|
+ {
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+ return (ItemStack)smeltingList.get(Integer.valueOf(item.itemID));
|
||||||
|
+ }
|
||||||
|
}
|
|
@ -4,8 +4,8 @@
|
||||||
package net.minecraft.src;
|
package net.minecraft.src;
|
||||||
+
|
+
|
||||||
+import net.minecraftforge.common.MinecraftForge;
|
+import net.minecraftforge.common.MinecraftForge;
|
||||||
+import net.minecraftforge.event.entity.ArrowLooseEvent;
|
+import net.minecraftforge.event.entity.player.ArrowLooseEvent;
|
||||||
+import net.minecraftforge.event.entity.ArrowNockEvent;
|
+import net.minecraftforge.event.entity.player.ArrowNockEvent;
|
||||||
|
|
||||||
public class ItemBow extends Item
|
public class ItemBow extends Item
|
||||||
{
|
{
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
+ {
|
+ {
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
+ var6 = event.getCharge();
|
+ var6 = event.charge;
|
||||||
+
|
+
|
||||||
boolean var5 = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0;
|
boolean var5 = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0;
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
+ MinecraftForge.EVENT_BUS.post(event);
|
+ MinecraftForge.EVENT_BUS.post(event);
|
||||||
+ if (event.isCanceled())
|
+ if (event.isCanceled())
|
||||||
+ {
|
+ {
|
||||||
+ return event.getResultStack();
|
+ return event.result;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(Item.arrow.shiftedIndex))
|
if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(Item.arrow.shiftedIndex))
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
@@ -1,4 +1,6 @@
|
@@ -1,4 +1,6 @@
|
||||||
package net.minecraft.src;
|
package net.minecraft.src;
|
||||||
+
|
+
|
||||||
+import net.minecraftforge.event.entity.FillBucketEvent;
|
+import net.minecraftforge.event.entity.player.FillBucketEvent;
|
||||||
|
|
||||||
public class ItemBucket extends Item
|
public class ItemBucket extends Item
|
||||||
{
|
{
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
+
|
+
|
||||||
+ if (event.isHandeled())
|
+ if (event.isHandeled())
|
||||||
+ {
|
+ {
|
||||||
+ return event.getResult();
|
+ return event.result;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
if (var12.typeOfHit == EnumMovingObjectType.TILE)
|
if (var12.typeOfHit == EnumMovingObjectType.TILE)
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
--- ../src_base/common/net/minecraft/src/SlotCrafting.java
|
--- ../src_base/common/net/minecraft/src/SlotCrafting.java
|
||||||
+++ ../src_work/common/net/minecraft/src/SlotCrafting.java
|
+++ ../src_work/common/net/minecraft/src/SlotCrafting.java
|
||||||
@@ -107,6 +107,7 @@
|
@@ -1,4 +1,6 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
+
|
||||||
|
+import net.minecraftforge.common.ForgeHooks;
|
||||||
|
|
||||||
|
public class SlotCrafting extends Slot
|
||||||
|
{
|
||||||
|
@@ -107,6 +109,7 @@
|
||||||
*/
|
*/
|
||||||
public void onPickupFromSlot(ItemStack par1ItemStack)
|
public void onPickupFromSlot(ItemStack par1ItemStack)
|
||||||
{
|
{
|
||||||
|
@ -8,7 +15,7 @@
|
||||||
this.onCrafting(par1ItemStack);
|
this.onCrafting(par1ItemStack);
|
||||||
|
|
||||||
for (int var2 = 0; var2 < this.craftMatrix.getSizeInventory(); ++var2)
|
for (int var2 = 0; var2 < this.craftMatrix.getSizeInventory(); ++var2)
|
||||||
@@ -119,7 +120,7 @@
|
@@ -119,7 +122,7 @@
|
||||||
|
|
||||||
if (var3.getItem().hasContainerItem())
|
if (var3.getItem().hasContainerItem())
|
||||||
{
|
{
|
||||||
|
|
54
patches/common/net/minecraft/src/SpawnerAnimals.java.patch
Normal file
54
patches/common/net/minecraft/src/SpawnerAnimals.java.patch
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/SpawnerAnimals.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/SpawnerAnimals.java
|
||||||
|
@@ -1,9 +1,14 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
+import java.util.ArrayList;
|
||||||
|
+import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
+
|
||||||
|
+import net.minecraftforge.common.MinecraftForge;
|
||||||
|
+import net.minecraftforge.event.entity.living.LivingSpecialSpawnEvent;
|
||||||
|
|
||||||
|
public final class SpawnerAnimals
|
||||||
|
{
|
||||||
|
@@ -79,6 +84,12 @@
|
||||||
|
if ((!var34.getPeacefulCreature() || par2) && (var34.getPeacefulCreature() || par1) && par0WorldServer.countEntities(var34.getCreatureClass()) <= var34.getMaxNumberOfCreature() * eligibleChunksForSpawning.size() / 256)
|
||||||
|
{
|
||||||
|
Iterator var35 = eligibleChunksForSpawning.keySet().iterator();
|
||||||
|
+ if (mod_MinecraftForge.SPAWNER_MAKE_MORE_RANDOM)
|
||||||
|
+ {
|
||||||
|
+ ArrayList<ChunkCoordIntPair> tmp = new ArrayList(eligibleChunksForSpawning.keySet());
|
||||||
|
+ Collections.shuffle(tmp);
|
||||||
|
+ var35 = tmp.iterator();
|
||||||
|
+ }
|
||||||
|
label108:
|
||||||
|
|
||||||
|
while (var35.hasNext())
|
||||||
|
@@ -207,7 +218,8 @@
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int var5 = par1World.getBlockId(par2, par3 - 1, par4);
|
||||||
|
- return var5 != Block.bedrock.blockID && !par1World.isBlockNormalCube(par2, par3, par4) && !par1World.getBlockMaterial(par2, par3, par4).isLiquid() && !par1World.isBlockNormalCube(par2, par3 + 1, par4);
|
||||||
|
+ boolean spawnBlock = (Block.blocksList[var5] != null && Block.blocksList[var5].canCreatureSpawn(par0EnumCreatureType, par1World, par2, par3 - 1, par4));
|
||||||
|
+ return spawnBlock && var5 != Block.bedrock.blockID && !par1World.isBlockNormalCube(par2, par3, par4) && !par1World.getBlockMaterial(par2, par3, par4).isLiquid() && !par1World.isBlockNormalCube(par2, par3 + 1, par4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -216,6 +228,13 @@
|
||||||
|
*/
|
||||||
|
private static void creatureSpecificInit(EntityLiving par0EntityLiving, World par1World, float par2, float par3, float par4)
|
||||||
|
{
|
||||||
|
+ LivingSpecialSpawnEvent event = new LivingSpecialSpawnEvent(par0EntityLiving, par1World, par2, par3, par4);
|
||||||
|
+ MinecraftForge.EVENT_BUS.post(event);
|
||||||
|
+ if (event.isHandeled())
|
||||||
|
+ {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (par0EntityLiving instanceof EntitySpider && par1World.rand.nextInt(100) == 0)
|
||||||
|
{
|
||||||
|
EntitySkeleton var7 = new EntitySkeleton(par1World);
|
|
@ -0,0 +1,35 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/WorldGenBigMushroom.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/WorldGenBigMushroom.java
|
||||||
|
@@ -54,7 +54,9 @@
|
||||||
|
{
|
||||||
|
var13 = par1World.getBlockId(var11, var9, var12);
|
||||||
|
|
||||||
|
- if (var13 != 0 && var13 != Block.leaves.blockID)
|
||||||
|
+ Block block = Block.blocksList[var13];
|
||||||
|
+
|
||||||
|
+ if (var13 != 0 && block != null && !block.isLeaves(par1World, var11, var9, var12))
|
||||||
|
{
|
||||||
|
var8 = false;
|
||||||
|
}
|
||||||
|
@@ -181,7 +183,9 @@
|
||||||
|
var15 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if ((var15 != 0 || par4 >= par4 + var7 - 1) && !Block.opaqueCubeLookup[par1World.getBlockId(var13, var11, var14)])
|
||||||
|
+ Block block = Block.blocksList[par1World.getBlockId(var13, var11, var14)];
|
||||||
|
+
|
||||||
|
+ if ((var15 != 0 || par4 >= par4 + var7 - 1) && (block == null || block.canBeReplacedByLeaves(par1World, var13, var11, var14)))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, var13, var11, var14, Block.mushroomCapBrown.blockID + var6, var15);
|
||||||
|
}
|
||||||
|
@@ -193,7 +197,9 @@
|
||||||
|
{
|
||||||
|
var12 = par1World.getBlockId(par3, par4 + var11, par5);
|
||||||
|
|
||||||
|
- if (!Block.opaqueCubeLookup[var12])
|
||||||
|
+ Block block = Block.blocksList[var12];
|
||||||
|
+
|
||||||
|
+ if (block == null || block.canBeReplacedByLeaves(par1World, par3, par4 + var11, par5))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, Block.mushroomCapBrown.blockID + var6, 10);
|
||||||
|
}
|
23
patches/common/net/minecraft/src/WorldGenDungeons.java.patch
Normal file
23
patches/common/net/minecraft/src/WorldGenDungeons.java.patch
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/WorldGenDungeons.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/WorldGenDungeons.java
|
||||||
|
@@ -1,6 +1,8 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
+
|
||||||
|
+import net.minecraftforge.common.MinecraftForge;
|
||||||
|
|
||||||
|
public class WorldGenDungeons extends WorldGenerator
|
||||||
|
{
|
||||||
|
@@ -117,9 +119,9 @@
|
||||||
|
|
||||||
|
if (var16 != null)
|
||||||
|
{
|
||||||
|
- for (int var17 = 0; var17 < 8; ++var17)
|
||||||
|
+ for (int var17 = 0; var17 < MinecraftForge.getDungeonLootTries(); ++var17)
|
||||||
|
{
|
||||||
|
- ItemStack var18 = this.pickCheckLootItem(par2Random);
|
||||||
|
+ ItemStack var18 = MinecraftForge.getRandomDungeonLoot(par2Random);
|
||||||
|
|
||||||
|
if (var18 != null)
|
||||||
|
{
|
36
patches/common/net/minecraft/src/WorldGenForest.java.patch
Normal file
36
patches/common/net/minecraft/src/WorldGenForest.java.patch
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/WorldGenForest.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/WorldGenForest.java
|
||||||
|
@@ -43,7 +43,9 @@
|
||||||
|
{
|
||||||
|
var12 = par1World.getBlockId(var10, var8, var11);
|
||||||
|
|
||||||
|
- if (var12 != 0 && var12 != Block.leaves.blockID)
|
||||||
|
+ Block block = Block.blocksList[var12];
|
||||||
|
+
|
||||||
|
+ if (var12 != 0 && (block != null && !block.isLeaves(par1World, var10, var8, var11)))
|
||||||
|
{
|
||||||
|
var7 = false;
|
||||||
|
}
|
||||||
|
@@ -82,7 +84,10 @@
|
||||||
|
{
|
||||||
|
int var15 = var14 - par5;
|
||||||
|
|
||||||
|
- if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var12, var16, var14)])
|
||||||
|
+ Block block = Block.blocksList[par1World.getBlockId(var12, var16, var14)];
|
||||||
|
+
|
||||||
|
+ if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) &&
|
||||||
|
+ (block == null || block.canBeReplacedByLeaves(par1World, var12, var16, var14)))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, var12, var16, var14, Block.leaves.blockID, 2);
|
||||||
|
}
|
||||||
|
@@ -94,7 +99,9 @@
|
||||||
|
{
|
||||||
|
var10 = par1World.getBlockId(par3, par4 + var16, par5);
|
||||||
|
|
||||||
|
- if (var10 == 0 || var10 == Block.leaves.blockID)
|
||||||
|
+ Block block = Block.blocksList[var10];
|
||||||
|
+
|
||||||
|
+ if (var10 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var16, par5))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, par3, par4 + var16, par5, Block.wood.blockID, 2);
|
||||||
|
}
|
36
patches/common/net/minecraft/src/WorldGenMinable.java.patch
Normal file
36
patches/common/net/minecraft/src/WorldGenMinable.java.patch
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/WorldGenMinable.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/WorldGenMinable.java
|
||||||
|
@@ -6,6 +6,7 @@
|
||||||
|
{
|
||||||
|
/** The block ID of the ore to be placed using this generator. */
|
||||||
|
private int minableBlockId;
|
||||||
|
+ private int minableBlockMeta = 0;
|
||||||
|
|
||||||
|
/** The number of blocks to generate. */
|
||||||
|
private int numberOfBlocks;
|
||||||
|
@@ -14,6 +15,12 @@
|
||||||
|
{
|
||||||
|
this.minableBlockId = par1;
|
||||||
|
this.numberOfBlocks = par2;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public WorldGenMinable(int id, int meta, int number)
|
||||||
|
+ {
|
||||||
|
+ this(id, number);
|
||||||
|
+ minableBlockMeta = meta;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
|
||||||
|
@@ -57,9 +64,10 @@
|
||||||
|
{
|
||||||
|
double var45 = ((double)var44 + 0.5D - var24) / (var28 / 2.0D);
|
||||||
|
|
||||||
|
- if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && par1World.getBlockId(var38, var41, var44) == Block.stone.blockID)
|
||||||
|
+ Block block = Block.blocksList[par1World.getBlockId(var38, var41, var44)];
|
||||||
|
+ if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && (block != null && block.isGenMineableReplaceable(par1World, var38, var41, var44)))
|
||||||
|
{
|
||||||
|
- par1World.setBlock(var38, var41, var44, this.minableBlockId);
|
||||||
|
+ par1World.setBlockAndMetadata(var38, var41, var44, this.minableBlockId, minableBlockMeta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
34
patches/common/net/minecraft/src/WorldGenShrub.java.patch
Normal file
34
patches/common/net/minecraft/src/WorldGenShrub.java.patch
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/WorldGenShrub.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/WorldGenShrub.java
|
||||||
|
@@ -17,10 +17,16 @@
|
||||||
|
{
|
||||||
|
int var15;
|
||||||
|
|
||||||
|
- for (boolean var6 = false; ((var15 = par1World.getBlockId(par3, par4, par5)) == 0 || var15 == Block.leaves.blockID) && par4 > 0; --par4)
|
||||||
|
+ Block block = null;
|
||||||
|
+ do
|
||||||
|
{
|
||||||
|
- ;
|
||||||
|
- }
|
||||||
|
+ block = Block.blocksList[par1World.getBlockId(par3, par4, par5)];
|
||||||
|
+ if (block != null && !block.isLeaves(par1World, par3, par4, par5))
|
||||||
|
+ {
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ par4--;
|
||||||
|
+ } while (par4 > 0);
|
||||||
|
|
||||||
|
int var7 = par1World.getBlockId(par3, par4, par5);
|
||||||
|
|
||||||
|
@@ -42,7 +48,10 @@
|
||||||
|
{
|
||||||
|
int var14 = var13 - par5;
|
||||||
|
|
||||||
|
- if ((Math.abs(var12) != var10 || Math.abs(var14) != var10 || par2Random.nextInt(2) != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var11, var8, var13)])
|
||||||
|
+ block = Block.blocksList[par1World.getBlockId(var11, var8, var13)];
|
||||||
|
+
|
||||||
|
+ if ((Math.abs(var12) != var10 || Math.abs(var14) != var10 || par2Random.nextInt(2) != 0) &&
|
||||||
|
+ (block == null || block.canBeReplacedByLeaves(par1World, var11, var8, var13)))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, var11, var8, var13, Block.leaves.blockID, this.field_76527_a);
|
||||||
|
}
|
44
patches/common/net/minecraft/src/WorldGenSwamp.java.patch
Normal file
44
patches/common/net/minecraft/src/WorldGenSwamp.java.patch
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/WorldGenSwamp.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/WorldGenSwamp.java
|
||||||
|
@@ -44,7 +44,7 @@
|
||||||
|
{
|
||||||
|
var12 = par1World.getBlockId(var10, var8, var11);
|
||||||
|
|
||||||
|
- if (var12 != 0 && var12 != Block.leaves.blockID)
|
||||||
|
+ if (var12 != 0 && (Block.blocksList[var12] != null && !Block.blocksList[var12].isLeaves(par1World, var10, var8, var11)))
|
||||||
|
{
|
||||||
|
if (var12 != Block.waterStill.blockID && var12 != Block.waterMoving.blockID)
|
||||||
|
{
|
||||||
|
@@ -91,7 +91,10 @@
|
||||||
|
{
|
||||||
|
int var15 = var14 - par5;
|
||||||
|
|
||||||
|
- if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var12, var16, var14)])
|
||||||
|
+ Block block = Block.blocksList[par1World.getBlockId(var12, var16, var14)];
|
||||||
|
+
|
||||||
|
+ if ((Math.abs(var13) != var11 || Math.abs(var15) != var11 || par2Random.nextInt(2) != 0 && var10 != 0) &&
|
||||||
|
+ (block == null || block.canBeReplacedByLeaves(par1World, var12, var16, var14)))
|
||||||
|
{
|
||||||
|
this.setBlock(par1World, var12, var16, var14, Block.leaves.blockID);
|
||||||
|
}
|
||||||
|
@@ -103,7 +106,9 @@
|
||||||
|
{
|
||||||
|
var10 = par1World.getBlockId(par3, par4 + var16, par5);
|
||||||
|
|
||||||
|
- if (var10 == 0 || var10 == Block.leaves.blockID || var10 == Block.waterMoving.blockID || var10 == Block.waterStill.blockID)
|
||||||
|
+ Block block = Block.blocksList[var10];
|
||||||
|
+
|
||||||
|
+ if (var10 == 0 || (block != null && block.isLeaves(par1World, par3, par4 + var16, par5)) || var10 == Block.waterMoving.blockID || var10 == Block.waterStill.blockID)
|
||||||
|
{
|
||||||
|
this.setBlock(par1World, par3, par4 + var16, par5, Block.wood.blockID);
|
||||||
|
}
|
||||||
|
@@ -118,7 +123,8 @@
|
||||||
|
{
|
||||||
|
for (var13 = par5 - var11; var13 <= par5 + var11; ++var13)
|
||||||
|
{
|
||||||
|
- if (par1World.getBlockId(var12, var16, var13) == Block.leaves.blockID)
|
||||||
|
+ Block block = Block.blocksList[par1World.getBlockId(var12, var16, var13)];
|
||||||
|
+ if (block != null && block.isLeaves(par1World, var12, var16, var13))
|
||||||
|
{
|
||||||
|
if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var12 - 1, var16, var13) == 0)
|
||||||
|
{
|
36
patches/common/net/minecraft/src/WorldGenTaiga1.java.patch
Normal file
36
patches/common/net/minecraft/src/WorldGenTaiga1.java.patch
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/WorldGenTaiga1.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/WorldGenTaiga1.java
|
||||||
|
@@ -41,7 +41,9 @@
|
||||||
|
{
|
||||||
|
var15 = par1World.getBlockId(var13, var11, var14);
|
||||||
|
|
||||||
|
- if (var15 != 0 && var15 != Block.leaves.blockID)
|
||||||
|
+ Block block = Block.blocksList[var15];
|
||||||
|
+
|
||||||
|
+ if (var15 != 0 && (block == null || !block.isLeaves(par1World, var13, var11, var14)))
|
||||||
|
{
|
||||||
|
var10 = false;
|
||||||
|
}
|
||||||
|
@@ -77,7 +79,10 @@
|
||||||
|
{
|
||||||
|
int var17 = var16 - par5;
|
||||||
|
|
||||||
|
- if ((Math.abs(var15) != var18 || Math.abs(var17) != var18 || var18 <= 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var14, var13, var16)])
|
||||||
|
+ Block block = Block.blocksList[par1World.getBlockId(var14, var13, var16)];
|
||||||
|
+
|
||||||
|
+ if ((Math.abs(var15) != var18 || Math.abs(var17) != var18 || var18 <= 0) &&
|
||||||
|
+ (block == null || block.canBeReplacedByLeaves(par1World, var14, var13, var16)))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, var14, var13, var16, Block.leaves.blockID, 1);
|
||||||
|
}
|
||||||
|
@@ -98,7 +103,9 @@
|
||||||
|
{
|
||||||
|
var14 = par1World.getBlockId(par3, par4 + var13, par5);
|
||||||
|
|
||||||
|
- if (var14 == 0 || var14 == Block.leaves.blockID)
|
||||||
|
+ Block block = Block.blocksList[var14];
|
||||||
|
+
|
||||||
|
+ if (var14 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var13, par5))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, par3, par4 + var13, par5, Block.wood.blockID, 1);
|
||||||
|
}
|
36
patches/common/net/minecraft/src/WorldGenTaiga2.java.patch
Normal file
36
patches/common/net/minecraft/src/WorldGenTaiga2.java.patch
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/WorldGenTaiga2.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/WorldGenTaiga2.java
|
||||||
|
@@ -45,7 +45,9 @@
|
||||||
|
{
|
||||||
|
var15 = par1World.getBlockId(var13, var11, var14);
|
||||||
|
|
||||||
|
- if (var15 != 0 && var15 != Block.leaves.blockID)
|
||||||
|
+ Block block = Block.blocksList[var15];
|
||||||
|
+
|
||||||
|
+ if (var15 != 0 && block != null && !block.isLeaves(par1World, var13, var11, var14))
|
||||||
|
{
|
||||||
|
var10 = false;
|
||||||
|
}
|
||||||
|
@@ -87,7 +89,10 @@
|
||||||
|
{
|
||||||
|
int var20 = var19 - par5;
|
||||||
|
|
||||||
|
- if ((Math.abs(var18) != var21 || Math.abs(var20) != var21 || var21 <= 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var17, var16, var19)])
|
||||||
|
+ Block block = Block.blocksList[par1World.getBlockId(var17, var16, var19)];
|
||||||
|
+
|
||||||
|
+ if ((Math.abs(var18) != var21 || Math.abs(var20) != var21 || var21 <= 0) &&
|
||||||
|
+ (block == null || block.canBeReplacedByLeaves(par1World, var17, var16, var19)))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, var17, var16, var19, Block.leaves.blockID, 1);
|
||||||
|
}
|
||||||
|
@@ -117,7 +122,9 @@
|
||||||
|
{
|
||||||
|
var17 = par1World.getBlockId(par3, par4 + var16, par5);
|
||||||
|
|
||||||
|
- if (var17 == 0 || var17 == Block.leaves.blockID)
|
||||||
|
+ Block block = Block.blocksList[var17];
|
||||||
|
+
|
||||||
|
+ if (var17 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var16, par5))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, par3, par4 + var16, par5, Block.wood.blockID, 1);
|
||||||
|
}
|
50
patches/common/net/minecraft/src/WorldGenTrees.java.patch
Normal file
50
patches/common/net/minecraft/src/WorldGenTrees.java.patch
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
--- ../src_base/common/net/minecraft/src/WorldGenTrees.java
|
||||||
|
+++ ../src_work/common/net/minecraft/src/WorldGenTrees.java
|
||||||
|
@@ -64,7 +64,13 @@
|
||||||
|
{
|
||||||
|
var12 = par1World.getBlockId(var10, var8, var11);
|
||||||
|
|
||||||
|
- if (var12 != 0 && var12 != Block.leaves.blockID && var12 != Block.grass.blockID && var12 != Block.dirt.blockID && var12 != Block.wood.blockID)
|
||||||
|
+ Block block = Block.blocksList[var12];
|
||||||
|
+
|
||||||
|
+ if (var12 != 0 &&
|
||||||
|
+ !block.isLeaves(par1World, var10, var8, var11) &&
|
||||||
|
+ var12 != Block.grass.blockID &&
|
||||||
|
+ var12 != Block.dirt.blockID &&
|
||||||
|
+ !block.isWood(par1World, var10, var8, var11))
|
||||||
|
{
|
||||||
|
var7 = false;
|
||||||
|
}
|
||||||
|
@@ -107,7 +113,10 @@
|
||||||
|
{
|
||||||
|
int var17 = var16 - par5;
|
||||||
|
|
||||||
|
- if ((Math.abs(var15) != var13 || Math.abs(var17) != var13 || par2Random.nextInt(2) != 0 && var12 != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(var14, var11, var16)])
|
||||||
|
+ Block block = Block.blocksList[par1World.getBlockId(var14, var11, var16)];
|
||||||
|
+
|
||||||
|
+ if ((Math.abs(var15) != var13 || Math.abs(var17) != var13 || par2Random.nextInt(2) != 0 && var12 != 0) &&
|
||||||
|
+ (block == null || block.canBeReplacedByLeaves(par1World, var14, var11, var16)))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, var14, var11, var16, Block.leaves.blockID, this.metaLeaves);
|
||||||
|
}
|
||||||
|
@@ -119,7 +128,9 @@
|
||||||
|
{
|
||||||
|
var12 = par1World.getBlockId(par3, par4 + var11, par5);
|
||||||
|
|
||||||
|
- if (var12 == 0 || var12 == Block.leaves.blockID)
|
||||||
|
+ Block block = Block.blocksList[var12];
|
||||||
|
+
|
||||||
|
+ if (var12 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var11, par5))
|
||||||
|
{
|
||||||
|
this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, Block.wood.blockID, this.metaWood);
|
||||||
|
|
||||||
|
@@ -159,7 +170,8 @@
|
||||||
|
{
|
||||||
|
for (var15 = par5 - var13; var15 <= par5 + var13; ++var15)
|
||||||
|
{
|
||||||
|
- if (par1World.getBlockId(var14, var11, var15) == Block.leaves.blockID)
|
||||||
|
+ Block block = Block.blocksList[par1World.getBlockId(var14, var11, var15)];
|
||||||
|
+ if (block != null && block.isLeaves(par1World, var14, var11, var15))
|
||||||
|
{
|
||||||
|
if (par2Random.nextInt(4) == 0 && par1World.getBlockId(var14 - 1, var11, var15) == 0)
|
||||||
|
{
|
96
patches/minecraft/net/minecraft/src/Entity.java.patch
Normal file
96
patches/minecraft/net/minecraft/src/Entity.java.patch
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/Entity.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/Entity.java
|
||||||
|
@@ -1,5 +1,6 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
+import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
@@ -180,6 +181,11 @@
|
||||||
|
public boolean isAirBorne;
|
||||||
|
public EnumEntitySize myEntitySize;
|
||||||
|
|
||||||
|
+ /** Forge: Used to store custom data for each entity. */
|
||||||
|
+ private NBTTagCompound customEntityData;
|
||||||
|
+ protected boolean captureDrops = false;
|
||||||
|
+ protected ArrayList<EntityItem> capturedDrops = new ArrayList<EntityItem>();
|
||||||
|
+
|
||||||
|
public Entity(World par1World)
|
||||||
|
{
|
||||||
|
this.entityId = nextEntityID++;
|
||||||
|
@@ -1364,6 +1370,10 @@
|
||||||
|
par1NBTTagCompound.setShort("Fire", (short)this.fire);
|
||||||
|
par1NBTTagCompound.setShort("Air", (short)this.getAir());
|
||||||
|
par1NBTTagCompound.setBoolean("OnGround", this.onGround);
|
||||||
|
+ if (customEntityData != null)
|
||||||
|
+ {
|
||||||
|
+ par1NBTTagCompound.setCompoundTag("ForgeData", customEntityData);
|
||||||
|
+ }
|
||||||
|
this.writeEntityToNBT(par1NBTTagCompound);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1405,6 +1415,10 @@
|
||||||
|
this.onGround = par1NBTTagCompound.getBoolean("OnGround");
|
||||||
|
this.setPosition(this.posX, this.posY, this.posZ);
|
||||||
|
this.setRotation(this.rotationYaw, this.rotationPitch);
|
||||||
|
+ if (par1NBTTagCompound.hasKey("ForgeData"))
|
||||||
|
+ {
|
||||||
|
+ customEntityData = par1NBTTagCompound.getCompoundTag("ForgeData");
|
||||||
|
+ }
|
||||||
|
this.readEntityFromNBT(par1NBTTagCompound);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1490,7 +1504,14 @@
|
||||||
|
{
|
||||||
|
EntityItem var3 = new EntityItem(this.worldObj, this.posX, this.posY + (double)par2, this.posZ, par1ItemStack);
|
||||||
|
var3.delayBeforeCanPickup = 10;
|
||||||
|
- this.worldObj.spawnEntityInWorld(var3);
|
||||||
|
+ if (captureDrops)
|
||||||
|
+ {
|
||||||
|
+ capturedDrops.add(var3);
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ this.worldObj.spawnEntityInWorld(var3);
|
||||||
|
+ }
|
||||||
|
return var3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1813,7 +1834,7 @@
|
||||||
|
*/
|
||||||
|
public boolean isRiding()
|
||||||
|
{
|
||||||
|
- return this.ridingEntity != null || this.getFlag(2);
|
||||||
|
+ return (this.ridingEntity != null && ridingEntity.shouldRiderSit()) || this.getFlag(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -2074,4 +2095,27 @@
|
||||||
|
{
|
||||||
|
return String.format("%s[\'%s\'/%d, l=\'%s\', x=%.2f, y=%.2f, z=%.2f]", new Object[] {this.getClass().getSimpleName(), this.getEntityName(), Integer.valueOf(this.entityId), this.worldObj == null ? "~NULL~" : this.worldObj.getWorldInfo().getWorldName(), Double.valueOf(this.posX), Double.valueOf(this.posY), Double.valueOf(this.posZ)});
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Returns a NBTTagCompound that can be used to store custom data for this entity.
|
||||||
|
+ * It will be written, and read from disc, so it persists over world saves.
|
||||||
|
+ * @return A NBTTagCompound
|
||||||
|
+ */
|
||||||
|
+ public NBTTagCompound getEntityData()
|
||||||
|
+ {
|
||||||
|
+ if (customEntityData == null)
|
||||||
|
+ {
|
||||||
|
+ customEntityData = new NBTTagCompound();
|
||||||
|
+ }
|
||||||
|
+ return customEntityData;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Used in model rendering to determine if the entity riding this entity should be in the 'sitting' position.
|
||||||
|
+ * @return false to prevent an entity that is mounted to this entity from displaying the 'sitting' animation.
|
||||||
|
+ */
|
||||||
|
+ public boolean shouldRiderSit()
|
||||||
|
+ {
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
}
|
|
@ -34,11 +34,13 @@
|
||||||
{
|
{
|
||||||
var2 += (float)(var3 * var3 + 1);
|
var2 += (float)(var3 * var3 + 1);
|
||||||
}
|
}
|
||||||
@@ -1056,6 +1066,7 @@
|
@@ -1055,7 +1065,9 @@
|
||||||
|
*/
|
||||||
public void destroyCurrentEquippedItem()
|
public void destroyCurrentEquippedItem()
|
||||||
{
|
{
|
||||||
|
+ ItemStack oldItem = getCurrentEquippedItem();
|
||||||
this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null);
|
this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null);
|
||||||
+ ForgeHooks.onDestroyCurrentItem(par1EntityPlayer, var5);
|
+ ForgeHooks.onDestroyCurrentItem(this, oldItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
67
patches/minecraft/net/minecraft/src/EntitySheep.java.patch
Normal file
67
patches/minecraft/net/minecraft/src/EntitySheep.java.patch
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/EntitySheep.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/EntitySheep.java
|
||||||
|
@@ -1,8 +1,11 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
+import java.util.ArrayList;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
-public class EntitySheep extends EntityAnimal
|
||||||
|
+import net.minecraftforge.common.IShearable;
|
||||||
|
+
|
||||||
|
+public class EntitySheep extends EntityAnimal implements IShearable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Holds the RGB table of the sheep colors - in OpenGL glColor3f values - used to render the sheep colored fleece.
|
||||||
|
@@ -129,27 +132,6 @@
|
||||||
|
*/
|
||||||
|
public boolean interact(EntityPlayer par1EntityPlayer)
|
||||||
|
{
|
||||||
|
- ItemStack var2 = par1EntityPlayer.inventory.getCurrentItem();
|
||||||
|
-
|
||||||
|
- if (var2 != null && var2.itemID == Item.shears.shiftedIndex && !this.getSheared() && !this.isChild())
|
||||||
|
- {
|
||||||
|
- if (!this.worldObj.isRemote)
|
||||||
|
- {
|
||||||
|
- this.setSheared(true);
|
||||||
|
- int var3 = 1 + this.rand.nextInt(3);
|
||||||
|
-
|
||||||
|
- for (int var4 = 0; var4 < var3; ++var4)
|
||||||
|
- {
|
||||||
|
- EntityItem var5 = this.entityDropItem(new ItemStack(Block.cloth.blockID, 1, this.getFleeceColor()), 1.0F);
|
||||||
|
- var5.motionY += (double)(this.rand.nextFloat() * 0.05F);
|
||||||
|
- var5.motionX += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F);
|
||||||
|
- var5.motionZ += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- var2.damageItem(1, par1EntityPlayer);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
return super.interact(par1EntityPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -282,4 +264,23 @@
|
||||||
|
this.setGrowingAge(var1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public boolean isShearable(ItemStack item, World world, int X, int Y, int Z)
|
||||||
|
+ {
|
||||||
|
+ return !getSheared() && !isChild();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public ArrayList<ItemStack> onSheared(ItemStack item, World world, int X, int Y, int Z, int fortune)
|
||||||
|
+ {
|
||||||
|
+ ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
|
||||||
|
+ setSheared(true);
|
||||||
|
+ int i = 1 + rand.nextInt(3);
|
||||||
|
+ for (int j = 0; j < i; j++)
|
||||||
|
+ {
|
||||||
|
+ ret.add(new ItemStack(Block.cloth.blockID, 1, getFleeceColor()));
|
||||||
|
+ }
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
}
|
20
patches/minecraft/net/minecraft/src/GuiIngame.java.patch
Normal file
20
patches/minecraft/net/minecraft/src/GuiIngame.java.patch
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/GuiIngame.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/GuiIngame.java
|
||||||
|
@@ -4,6 +4,8 @@
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
+import net.minecraftforge.common.ForgeHooks;
|
||||||
|
+
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
import org.lwjgl.opengl.GL12;
|
||||||
|
|
||||||
|
@@ -134,7 +136,7 @@
|
||||||
|
|
||||||
|
var47 = var7 - 39;
|
||||||
|
var22 = var47 - 10;
|
||||||
|
- var23 = this.mc.thePlayer.getTotalArmorValue();
|
||||||
|
+ var23 = ForgeHooks.getTotalArmorValue(mc.thePlayer);
|
||||||
|
int var24 = -1;
|
||||||
|
|
||||||
|
if (this.mc.thePlayer.isPotionActive(Potion.regeneration))
|
|
@ -7,7 +7,7 @@
|
||||||
+
|
+
|
||||||
+import net.minecraftforge.common.ForgeHooks;
|
+import net.minecraftforge.common.ForgeHooks;
|
||||||
+import net.minecraftforge.common.MinecraftForge;
|
+import net.minecraftforge.common.MinecraftForge;
|
||||||
+import net.minecraftforge.event.entity.BonemealEvent;
|
+import net.minecraftforge.event.entity.player.BonemealEvent;
|
||||||
|
|
||||||
public class ItemDye extends Item
|
public class ItemDye extends Item
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/MemoryConnection.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/MemoryConnection.java
|
||||||
|
@@ -6,6 +6,8 @@
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
+
|
||||||
|
+import net.minecraftforge.common.ForgeHooks;
|
||||||
|
|
||||||
|
public class MemoryConnection implements NetworkManager
|
||||||
|
{
|
||||||
|
@@ -106,6 +108,7 @@
|
||||||
|
this.shuttingDown = true;
|
||||||
|
this.shutdownReason = par1Str;
|
||||||
|
this.field_74439_g = par2ArrayOfObj;
|
||||||
|
+ ForgeHooks.onDisconnect(this, par1Str, par2ArrayOfObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -151,4 +154,10 @@
|
||||||
|
this.readPacketCache.add(par1Packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public NetHandler getNetHandler()
|
||||||
|
+ {
|
||||||
|
+ return myNetHandler;
|
||||||
|
+ }
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/NetClientHandler.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/NetClientHandler.java
|
||||||
|
@@ -18,6 +18,8 @@
|
||||||
|
import java.util.Random;
|
||||||
|
import javax.crypto.SecretKey;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
+import net.minecraftforge.common.ForgeHooks;
|
||||||
|
+
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
public class NetClientHandler extends NetHandler
|
||||||
|
@@ -56,6 +58,8 @@
|
||||||
|
this.mc = par1Minecraft;
|
||||||
|
Socket var4 = new Socket(InetAddress.getByName(par2Str), par3);
|
||||||
|
this.netManager = new TcpConnection(var4, "Client", this);
|
||||||
|
+
|
||||||
|
+ ForgeHooks.onConnect(netManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
public NetClientHandler(Minecraft par1Minecraft, IntegratedServer par2IntegratedServer) throws IOException
|
|
@ -0,0 +1,11 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/NetworkManager.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/NetworkManager.java
|
||||||
|
@@ -5,6 +5,8 @@
|
||||||
|
public interface NetworkManager
|
||||||
|
{
|
||||||
|
void setNetHandler(NetHandler var1);
|
||||||
|
+
|
||||||
|
+ NetHandler getNetHandler();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the packet to the correct send queue (chunk data packets go to a separate queue).
|
|
@ -1,6 +1,26 @@
|
||||||
--- ../src_base/minecraft/net/minecraft/src/PlayerControllerMP.java
|
--- ../src_base/minecraft/net/minecraft/src/PlayerControllerMP.java
|
||||||
+++ ../src_work/minecraft/net/minecraft/src/PlayerControllerMP.java
|
+++ ../src_work/minecraft/net/minecraft/src/PlayerControllerMP.java
|
||||||
@@ -112,7 +112,7 @@
|
@@ -1,6 +1,7 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
+import net.minecraftforge.common.ForgeHooks;
|
||||||
|
|
||||||
|
public class PlayerControllerMP
|
||||||
|
{
|
||||||
|
@@ -95,6 +96,11 @@
|
||||||
|
*/
|
||||||
|
public boolean onPlayerDestroyBlock(int par1, int par2, int par3, int par4)
|
||||||
|
{
|
||||||
|
+ ItemStack stack = mc.thePlayer.getCurrentEquippedItem();
|
||||||
|
+ if (stack != null && stack.getItem() != null && stack.getItem().onBlockStartBreak(stack, par1, par2, par3, mc.thePlayer))
|
||||||
|
+ {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
if (this.currentGameType.isAdventure())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
@@ -112,7 +118,7 @@
|
||||||
{
|
{
|
||||||
var5.playAuxSFX(2001, par1, par2, par3, var6.blockID + (var5.getBlockMetadata(par1, par2, par3) << 12));
|
var5.playAuxSFX(2001, par1, par2, par3, var6.blockID + (var5.getBlockMetadata(par1, par2, par3) << 12));
|
||||||
int var7 = var5.getBlockMetadata(par1, par2, par3);
|
int var7 = var5.getBlockMetadata(par1, par2, par3);
|
||||||
|
@ -9,3 +29,33 @@
|
||||||
|
|
||||||
if (var8)
|
if (var8)
|
||||||
{
|
{
|
||||||
|
@@ -290,6 +296,12 @@
|
||||||
|
public boolean onPlayerRightClick(EntityPlayer par1EntityPlayer, World par2World, ItemStack par3ItemStack, int par4, int par5, int par6, int par7, Vec3 par8Vec3)
|
||||||
|
{
|
||||||
|
this.syncCurrentPlayItem();
|
||||||
|
+ if (par3ItemStack != null &&
|
||||||
|
+ par3ItemStack.getItem() != null &&
|
||||||
|
+ par3ItemStack.getItem().onItemUseFirst(par3ItemStack, par1EntityPlayer, par2World, par4, par5, par6, par7))
|
||||||
|
+ {
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
float var9 = (float)par8Vec3.xCoord - (float)par4;
|
||||||
|
float var10 = (float)par8Vec3.yCoord - (float)par5;
|
||||||
|
float var11 = (float)par8Vec3.zCoord - (float)par6;
|
||||||
|
@@ -333,6 +345,16 @@
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return par3ItemStack.tryPlaceItemIntoWorld(par1EntityPlayer, par2World, par4, par5, par6, par7, var9, var10, var11);
|
||||||
|
+
|
||||||
|
+ if (!par3ItemStack.tryPlaceItemIntoWorld(par1EntityPlayer, par2World, par4, par5, par6, par7, var9, var10, var11))
|
||||||
|
+ {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ if (par3ItemStack.stackSize <= 0)
|
||||||
|
+ {
|
||||||
|
+ ForgeHooks.onDestroyCurrentItem(par1EntityPlayer, par3ItemStack);
|
||||||
|
+ }
|
||||||
|
+ return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
41
patches/minecraft/net/minecraft/src/RenderBiped.java.patch
Normal file
41
patches/minecraft/net/minecraft/src/RenderBiped.java.patch
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/RenderBiped.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/RenderBiped.java
|
||||||
|
@@ -1,6 +1,10 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
+import static net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED;
|
||||||
|
+import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.BLOCK_3D;
|
||||||
|
+import net.minecraftforge.client.IItemRenderer;
|
||||||
|
+import net.minecraftforge.client.MinecraftForgeClient;
|
||||||
|
|
||||||
|
public class RenderBiped extends RenderLiving
|
||||||
|
{
|
||||||
|
@@ -31,8 +35,11 @@
|
||||||
|
this.modelBipedMain.bipedRightArm.postRender(0.0625F);
|
||||||
|
GL11.glTranslatef(-0.0625F, 0.4375F, 0.0625F);
|
||||||
|
float var4;
|
||||||
|
-
|
||||||
|
- if (var3.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType()))
|
||||||
|
+
|
||||||
|
+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var3, EQUIPPED);
|
||||||
|
+ boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, var3, BLOCK_3D));
|
||||||
|
+
|
||||||
|
+ if (var3.getItem() instanceof ItemBlock && (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType())))
|
||||||
|
{
|
||||||
|
var4 = 0.5F;
|
||||||
|
GL11.glTranslatef(0.0F, 0.1875F, -0.3125F);
|
||||||
|
@@ -71,8 +78,11 @@
|
||||||
|
this.renderManager.itemRenderer.renderItem(par1EntityLiving, var3, 0);
|
||||||
|
|
||||||
|
if (var3.getItem().requiresMultipleRenderPasses())
|
||||||
|
- {
|
||||||
|
- this.renderManager.itemRenderer.renderItem(par1EntityLiving, var3, 1);
|
||||||
|
+ {
|
||||||
|
+ for (int x = 1; x < var3.getItem().getRenderPasses(var3.getItemDamage()); x++)
|
||||||
|
+ {
|
||||||
|
+ this.renderManager.itemRenderer.renderItem(par1EntityLiving, var3, x);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
GL11.glPopMatrix();
|
28
patches/minecraft/net/minecraft/src/RenderEngine.java.patch
Normal file
28
patches/minecraft/net/minecraft/src/RenderEngine.java.patch
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/RenderEngine.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/RenderEngine.java
|
||||||
|
@@ -14,6 +14,9 @@
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
+
|
||||||
|
+import net.minecraftforge.client.ForgeHooksClient;
|
||||||
|
+
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
public class RenderEngine
|
||||||
|
@@ -155,6 +158,7 @@
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
+ ForgeHooksClient.onTextureLoadPre(par1Str);
|
||||||
|
this.singleIntBuffer.clear();
|
||||||
|
GLAllocation.generateTextureNames(this.singleIntBuffer);
|
||||||
|
int var3 = this.singleIntBuffer.get(0);
|
||||||
|
@@ -198,6 +202,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
this.textureMap.put(par1Str, Integer.valueOf(var3));
|
||||||
|
+ ForgeHooksClient.onTextureLoad(par1Str, var6);
|
||||||
|
return var3;
|
||||||
|
}
|
||||||
|
catch (Exception var5)
|
47
patches/minecraft/net/minecraft/src/RenderGlobal.java.patch
Normal file
47
patches/minecraft/net/minecraft/src/RenderGlobal.java.patch
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/RenderGlobal.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/RenderGlobal.java
|
||||||
|
@@ -1787,6 +1787,7 @@
|
||||||
|
double var17 = this.mc.renderViewEntity.posY - par4;
|
||||||
|
double var19 = this.mc.renderViewEntity.posZ - par6;
|
||||||
|
EntityFX var21 = null;
|
||||||
|
+ Object effectObject = null;
|
||||||
|
|
||||||
|
if (par1Str.equals("hugeexplosion"))
|
||||||
|
{
|
||||||
|
@@ -1906,6 +1907,7 @@
|
||||||
|
else if (par1Str.equals("snowballpoof"))
|
||||||
|
{
|
||||||
|
var21 = new EntityBreakingFX(this.theWorld, par2, par4, par6, Item.snowball);
|
||||||
|
+ effectObject = Item.snowball;
|
||||||
|
}
|
||||||
|
else if (par1Str.equals("dripWater"))
|
||||||
|
{
|
||||||
|
@@ -1922,6 +1924,7 @@
|
||||||
|
else if (par1Str.equals("slime"))
|
||||||
|
{
|
||||||
|
var21 = new EntityBreakingFX(this.theWorld, par2, par4, par6, Item.slimeBall);
|
||||||
|
+ effectObject = Item.slimeBall;
|
||||||
|
}
|
||||||
|
else if (par1Str.equals("heart"))
|
||||||
|
{
|
||||||
|
@@ -1935,17 +1938,19 @@
|
||||||
|
{
|
||||||
|
var24 = Integer.parseInt(par1Str.substring(par1Str.indexOf("_") + 1));
|
||||||
|
var21 = new EntityBreakingFX(this.theWorld, par2, par4, par6, par8, par10, par12, Item.itemsList[var24]);
|
||||||
|
+ effectObject = Item.itemsList[var24];
|
||||||
|
}
|
||||||
|
else if (par1Str.startsWith("tilecrack_"))
|
||||||
|
{
|
||||||
|
var24 = Integer.parseInt(par1Str.substring(par1Str.indexOf("_") + 1));
|
||||||
|
var21 = new EntityDiggingFX(this.theWorld, par2, par4, par6, par8, par10, par12, Block.blocksList[var24], 0, 0);
|
||||||
|
+ effectObject = Block.blocksList[var24];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (var21 != null)
|
||||||
|
{
|
||||||
|
- this.mc.effectRenderer.addEffect((EntityFX)var21);
|
||||||
|
+ this.mc.effectRenderer.addEffect((EntityFX)var21, effectObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (EntityFX)var21;
|
22
patches/minecraft/net/minecraft/src/RenderManager.java.patch
Normal file
22
patches/minecraft/net/minecraft/src/RenderManager.java.patch
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/RenderManager.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/RenderManager.java
|
||||||
|
@@ -124,12 +124,14 @@
|
||||||
|
|
||||||
|
if (par4EntityLiving.isPlayerSleeping())
|
||||||
|
{
|
||||||
|
- int var7 = par1World.getBlockId(MathHelper.floor_double(par4EntityLiving.posX), MathHelper.floor_double(par4EntityLiving.posY), MathHelper.floor_double(par4EntityLiving.posZ));
|
||||||
|
-
|
||||||
|
- if (var7 == Block.bed.blockID)
|
||||||
|
+ int x = MathHelper.floor_double(par4EntityLiving.posX);
|
||||||
|
+ int y = MathHelper.floor_double(par4EntityLiving.posY);
|
||||||
|
+ int z = MathHelper.floor_double(par4EntityLiving.posZ);
|
||||||
|
+ Block block = Block.blocksList[par1World.getBlockId(x, y, z)];
|
||||||
|
+
|
||||||
|
+ if (block != null && block.isBed(par1World, x, y, z, par4EntityLiving))
|
||||||
|
{
|
||||||
|
- int var8 = par1World.getBlockMetadata(MathHelper.floor_double(par4EntityLiving.posX), MathHelper.floor_double(par4EntityLiving.posY), MathHelper.floor_double(par4EntityLiving.posZ));
|
||||||
|
- int var9 = var8 & 3;
|
||||||
|
+ int var9 = block.getBedDirection(par1World, x, y, z);;
|
||||||
|
this.playerViewY = (float)(var9 * 90 + 180);
|
||||||
|
this.playerViewX = 0.0F;
|
||||||
|
}
|
30
patches/minecraft/net/minecraft/src/RenderSnowMan.java.patch
Normal file
30
patches/minecraft/net/minecraft/src/RenderSnowMan.java.patch
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/RenderSnowMan.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/RenderSnowMan.java
|
||||||
|
@@ -1,4 +1,9 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
+
|
||||||
|
+import net.minecraftforge.client.IItemRenderer;
|
||||||
|
+import static net.minecraftforge.client.IItemRenderer.ItemRenderType.*;
|
||||||
|
+import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.*;
|
||||||
|
+import net.minecraftforge.client.MinecraftForgeClient;
|
||||||
|
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
@@ -19,12 +24,15 @@
|
||||||
|
super.renderEquippedItems(par1EntitySnowman, par2);
|
||||||
|
ItemStack var3 = new ItemStack(Block.pumpkin, 1);
|
||||||
|
|
||||||
|
- if (var3 != null && var3.getItem().shiftedIndex < 256)
|
||||||
|
+ if (var3 != null && var3.getItem() instanceof ItemBlock)
|
||||||
|
{
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
this.snowmanModel.field_78195_c.postRender(0.0625F);
|
||||||
|
|
||||||
|
- if (RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType()))
|
||||||
|
+ IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(var3, EQUIPPED);
|
||||||
|
+ boolean is3D = (customRenderer != null && customRenderer.shouldUseRenderHelper(EQUIPPED, var3, BLOCK_3D));
|
||||||
|
+
|
||||||
|
+ if (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType()))
|
||||||
|
{
|
||||||
|
float var4 = 0.625F;
|
||||||
|
GL11.glTranslatef(0.0F, -0.34375F, 0.0F);
|
53
patches/minecraft/net/minecraft/src/SoundPool.java.patch
Normal file
53
patches/minecraft/net/minecraft/src/SoundPool.java.patch
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/SoundPool.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/SoundPool.java
|
||||||
|
@@ -2,6 +2,7 @@
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
+import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
@@ -33,6 +34,26 @@
|
||||||
|
*/
|
||||||
|
public SoundPoolEntry addSound(String par1Str, File par2File)
|
||||||
|
{
|
||||||
|
+ try
|
||||||
|
+ {
|
||||||
|
+ return addSound(par1Str, par2File.toURI().toURL());
|
||||||
|
+ }
|
||||||
|
+ catch (MalformedURLException ex)
|
||||||
|
+ {
|
||||||
|
+ ex.printStackTrace();
|
||||||
|
+ throw new RuntimeException(ex);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * URL version of addSound, as the back-end sound engine has full support for various types of URLs
|
||||||
|
+ *
|
||||||
|
+ * @param par1Str The name of the sound to add
|
||||||
|
+ * @param url The url of the sound resource
|
||||||
|
+ * @return A SoundPoolEntry for the newly added sound
|
||||||
|
+ */
|
||||||
|
+ public SoundPoolEntry addSound(String par1Str, URL url)
|
||||||
|
+ {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String var3 = par1Str;
|
||||||
|
@@ -53,13 +74,13 @@
|
||||||
|
this.nameToSoundPoolEntriesMapping.put(par1Str, new ArrayList());
|
||||||
|
}
|
||||||
|
|
||||||
|
- SoundPoolEntry var4 = new SoundPoolEntry(var3, par2File.toURI().toURL());
|
||||||
|
+ SoundPoolEntry var4 = new SoundPoolEntry(var3, url);
|
||||||
|
((List)this.nameToSoundPoolEntriesMapping.get(par1Str)).add(var4);
|
||||||
|
this.allSoundPoolEntries.add(var4);
|
||||||
|
++this.numberOfSoundPoolEntries;
|
||||||
|
return var4;
|
||||||
|
}
|
||||||
|
- catch (MalformedURLException var5)
|
||||||
|
+ catch (Exception var5)
|
||||||
|
{
|
||||||
|
var5.printStackTrace();
|
||||||
|
throw new RuntimeException(var5);
|
30
patches/minecraft/net/minecraft/src/TcpConnection.java.patch
Normal file
30
patches/minecraft/net/minecraft/src/TcpConnection.java.patch
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/TcpConnection.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/TcpConnection.java
|
||||||
|
@@ -14,6 +14,8 @@
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import javax.crypto.SecretKey;
|
||||||
|
+
|
||||||
|
+import net.minecraftforge.common.ForgeHooks;
|
||||||
|
|
||||||
|
public class TcpConnection implements NetworkManager
|
||||||
|
{
|
||||||
|
@@ -399,6 +401,7 @@
|
||||||
|
{
|
||||||
|
;
|
||||||
|
}
|
||||||
|
+ ForgeHooks.onDisconnect(this, par1Str, par2ArrayOfObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -559,4 +562,10 @@
|
||||||
|
{
|
||||||
|
return par0TcpConnection.writeThread;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public NetHandler getNetHandler()
|
||||||
|
+ {
|
||||||
|
+ return theNetHandler;
|
||||||
|
+ }
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
--- ../src_base/minecraft/net/minecraft/src/TileEntity.java
|
--- ../src_base/minecraft/net/minecraft/src/TileEntity.java
|
||||||
+++ ../src_work/minecraft/net/minecraft/src/TileEntity.java
|
+++ ../src_work/minecraft/net/minecraft/src/TileEntity.java
|
||||||
@@ -243,4 +243,29 @@
|
@@ -243,4 +243,33 @@
|
||||||
addMapping(TileEntityEnchantmentTable.class, "EnchantTable");
|
addMapping(TileEntityEnchantmentTable.class, "EnchantTable");
|
||||||
addMapping(TileEntityEndPortal.class, "Airportal");
|
addMapping(TileEntityEndPortal.class, "Airportal");
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,14 @@
|
||||||
+ * @param net The NetworkManager the packet originated from
|
+ * @param net The NetworkManager the packet originated from
|
||||||
+ * @param pkt The data packet
|
+ * @param pkt The data packet
|
||||||
+ */
|
+ */
|
||||||
+ public void onDataPacket(NetworkManager net, Packet132TileEntityData pkt){}
|
+ public void onDataPacket(NetworkManager net, Packet132TileEntityData pkt)
|
||||||
|
+ {
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
+ * Called when the chunk this TileEntity is on is Unloaded.
|
+ * Called when the chunk this TileEntity is on is Unloaded.
|
||||||
+ */
|
+ */
|
||||||
+ public void onChunkUnload(){}
|
+ public void onChunkUnload()
|
||||||
|
+ {
|
||||||
|
+ }
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
--- ../src_base/minecraft/net/minecraft/src/TileEntityRendererPiston.java
|
||||||
|
+++ ../src_work/minecraft/net/minecraft/src/TileEntityRendererPiston.java
|
||||||
|
@@ -1,6 +1,8 @@
|
||||||
|
package net.minecraft.src;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
+import net.minecraftforge.client.ForgeHooksClient;
|
||||||
|
+
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
public class TileEntityRendererPiston extends TileEntitySpecialRenderer
|
||||||
|
@@ -30,6 +32,7 @@
|
||||||
|
GL11.glShadeModel(GL11.GL_FLAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ ForgeHooksClient.beforeBlockRender(var9, blockRenderer);
|
||||||
|
var10.startDrawingQuads();
|
||||||
|
var10.setTranslation((double)((float)par2 - (float)par1TileEntityPiston.xCoord + par1TileEntityPiston.getOffsetX(par8)), (double)((float)par4 - (float)par1TileEntityPiston.yCoord + par1TileEntityPiston.getOffsetY(par8)), (double)((float)par6 - (float)par1TileEntityPiston.zCoord + par1TileEntityPiston.getOffsetZ(par8)));
|
||||||
|
var10.setColorOpaque(1, 1, 1);
|
||||||
|
@@ -53,6 +56,7 @@
|
||||||
|
|
||||||
|
var10.setTranslation(0.0D, 0.0D, 0.0D);
|
||||||
|
var10.draw();
|
||||||
|
+ ForgeHooksClient.afterBlockRender(var9, blockRenderer);
|
||||||
|
RenderHelper.enableStandardItemLighting();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue