More conversions, added all the entity living events.

This commit is contained in:
LexManos 2012-08-07 01:24:06 -07:00
parent 4e91293271
commit 41f1a60f32
43 changed files with 1343 additions and 207 deletions

View File

@ -1,16 +1,29 @@
package net.minecraftforge.client; package net.minecraftforge.client;
import java.util.HashMap; import java.util.HashMap;
import java.util.Random;
import java.util.TreeSet; import java.util.TreeSet;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import net.minecraft.client.Minecraft;
import net.minecraft.src.Block; import net.minecraft.src.Block;
import net.minecraft.src.EntityItem;
import net.minecraft.src.EntityLiving;
import net.minecraft.src.Item;
import net.minecraft.src.ItemBlock;
import net.minecraft.src.ItemStack; 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.RenderEngine;
import net.minecraft.src.Tessellator; import net.minecraft.src.Tessellator;
import net.minecraft.src.TexturePackBase;
import net.minecraftforge.client.event.TextureLoadEvent;
import net.minecraftforge.common.IArmorTextureProvider; import net.minecraftforge.common.IArmorTextureProvider;
import net.minecraftforge.common.MinecraftForge;
import static net.minecraftforge.client.IItemRenderer.ItemRenderType.*;
import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.*;
public class ForgeHooksClient public class ForgeHooksClient
{ {
@ -201,4 +214,166 @@ public class ForgeHooksClient
} }
return _default; return _default;
} }
/**
* This is added for Optifine's convenience. And to explode if a ModMaker is developing.
* @param texture
*/
public static void onTextureLoadPre(String texture)
{
if (Tessellator.renderingWorldRenderer)
{
String msg = String.format("Warning: Texture %s not preloaded, will cause render glitches!", texture);
System.out.println(msg);
if (Tessellator.class.getPackage() != null)
{
if (Tessellator.class.getPackage().equals("net.minecraft.src"))
{
Minecraft mc = ModLoader.getMinecraftInstance();
if (mc.ingameGUI != null)
{
mc.ingameGUI.func_73827_b().func_73765_a(msg);
}
}
}
}
}
public static void onTextureLoad(String texture, TexturePackBase pack)
{
MinecraftForge.EVENT_BUS.post(new TextureLoadEvent(texture, pack));
}
public static boolean renderEntityItem(EntityItem entity, ItemStack item, float bobing, float rotation, Random random, RenderEngine engine, RenderBlocks renderBlocks)
{
IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item, ENTITY);
if (customRenderer == null)
{
return false;
}
if (customRenderer.shouldUseRenderHelper(ENTITY, item, ENTITY_ROTATION))
{
GL11.glRotatef(rotation, 0.0F, 1.0F, 0.0F);
}
if (!customRenderer.shouldUseRenderHelper(ENTITY, item, ENTITY_BOBBING))
{
GL11.glTranslatef(0.0F, -bobing, 0.0F);
}
boolean is3D = customRenderer.shouldUseRenderHelper(ENTITY, item, BLOCK_3D);
if (item.getItem() instanceof ItemBlock && (is3D || RenderBlocks.renderItemIn3d(Block.blocksList[item.itemID].getRenderType())))
{
engine.bindTexture(engine.getTexture(item.getItem().getTextureFile()));
int renderType = Block.blocksList[item.itemID].getRenderType();
float scale = (renderType == 1 || renderType == 19 || renderType == 12 || renderType == 2 ? 0.5F : 0.25F);
GL11.glScalef(scale, scale, scale);
int size = entity.item.stackSize;
int count = (size > 20 ? 4 : (size > 5 ? 3 : (size > 1 ? 2 : 1)));
for(int j = 0; j < size; j++)
{
GL11.glPushMatrix();
if (j > 0)
{
GL11.glTranslatef(
((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F,
((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F,
((random.nextFloat() * 2.0F - 1.0F) * 0.2F) / 0.5F);
}
customRenderer.renderItem(ENTITY, item, renderBlocks, entity);
GL11.glPopMatrix();
}
}
else
{
engine.bindTexture(engine.getTexture(item.getItem().getTextureFile()));
GL11.glScalef(0.5F, 0.5F, 0.5F);
customRenderer.renderItem(ENTITY, item, renderBlocks, entity);
}
return true;
}
public static boolean renderInventoryItem(RenderBlocks renderBlocks, RenderEngine engine, ItemStack item, boolean inColor, float zLevel, float x, float y)
{
IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(item, INVENTORY);
if (customRenderer == null)
{
return false;
}
engine.bindTexture(engine.getTexture(Item.itemsList[item.itemID].getTextureFile()));
if (customRenderer.shouldUseRenderHelper(INVENTORY, item, INVENTORY_BLOCK))
{
GL11.glPushMatrix();
GL11.glTranslatef(x - 2, y + 3, -3.0F + zLevel);
GL11.glScalef(10F, 10F, 10F);
GL11.glTranslatef(1.0F, 0.5F, 1.0F);
GL11.glScalef(1.0F, 1.0F, -1F);
GL11.glRotatef(210F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(45F, 0.0F, 1.0F, 0.0F);
if(inColor)
{
int color = Item.itemsList[item.itemID].getColorFromDamage(item.getItemDamage(), 0);
float r = (float)(color >> 16 & 0xff) / 255F;
float g = (float)(color >> 8 & 0xff) / 255F;
float b = (float)(color & 0xff) / 255F;
GL11.glColor4f(r, g, b, 1.0F);
}
GL11.glRotatef(-90F, 0.0F, 1.0F, 0.0F);
renderBlocks.useInventoryTint = inColor;
customRenderer.renderItem(INVENTORY, item, renderBlocks);
renderBlocks.useInventoryTint = true;
GL11.glPopMatrix();
}
else
{
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glPushMatrix();
GL11.glTranslatef(x, y, -3.0F + zLevel);
if (inColor)
{
int color = Item.itemsList[item.itemID].getColorFromDamage(item.getItemDamage(), 0);
float r = (float)(color >> 16 & 255) / 255.0F;
float g = (float)(color >> 8 & 255) / 255.0F;
float b = (float)(color & 255) / 255.0F;
GL11.glColor4f(r, g, b, 1.0F);
}
customRenderer.renderItem(INVENTORY, item, renderBlocks);
GL11.glPopMatrix();
GL11.glEnable(GL11.GL_LIGHTING);
}
return true;
}
public static void renderEquippedItem(IItemRenderer customRenderer, RenderBlocks renderBlocks, EntityLiving entity, ItemStack item)
{
if (customRenderer.shouldUseRenderHelper(EQUIPPED, item, EQUIPPED_BLOCK))
{
GL11.glPushMatrix();
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
customRenderer.renderItem(EQUIPPED, item, renderBlocks, entity);
GL11.glPopMatrix();
}
else
{
GL11.glPushMatrix();
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glTranslatef(0.0F, -0.3F, 0.0F);
GL11.glScalef(1.5F, 1.5F, 1.5F);
GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F);
GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F);
customRenderer.renderItem(EQUIPPED, item, renderBlocks, entity);
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
GL11.glPopMatrix();
}
}
} }

View File

@ -15,6 +15,7 @@ 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.minecraftforge.client.IItemRenderer.ItemRenderType; import net.minecraftforge.client.IItemRenderer.ItemRenderType;
import net.minecraftforge.common.MinecraftForge;
public class MinecraftForgeClient public class MinecraftForgeClient
{ {
@ -82,36 +83,4 @@ public class MinecraftForgeClient
} }
return null; return null;
} }
private static boolean hasInit = false;
public static void init()
{
if (hasInit)
{
return;
}
hasInit = true;
ForgeHooks.setPacketHandler(new PacketHandlerClient());
}
static
{
init();
}
/***
* This is a function that is used to enforce deprecation of code.
* It checks the current Display's title against the passed in argument.
* If they do not match (such is the case in different versionf of MC) it exits the process with a error
*
* @param version The version to find, usually "Minecraft Minecraft 1.2.3"
* @param message The error message to display in the crash log
*/
public static void checkMinecraftVersion(String version, String message)
{
if (!Display.getTitle().equals(version))
{
MinecraftForge.killMinecraft("Minecraft Forge", message.replaceAll("%version%", Display.getTitle()));
}
}
} }

View File

@ -0,0 +1,14 @@
package net.minecraftforge.client.event;
import net.minecraftforge.event.Cancelable;
import net.minecraftforge.event.Event;
@Cancelable
public class ClientChatReceivedEvent extends Event
{
public String message;
public ClientChatReceivedEvent(String message)
{
this.message = message;
}
}

View File

@ -0,0 +1,30 @@
package net.minecraftforge.client.event;
import net.minecraft.src.EntityPlayer;
import net.minecraft.src.ItemStack;
import net.minecraft.src.MovingObjectPosition;
import net.minecraft.src.RenderGlobal;
import net.minecraftforge.event.Cancelable;
import net.minecraftforge.event.Event;
@Cancelable
public class DrawBlockHighlightEvent extends Event
{
public final RenderGlobal context;
public final EntityPlayer player;
public final MovingObjectPosition target;
public final int subID;
public final ItemStack currentItem;
public final float partialTicks;
public DrawBlockHighlightEvent(RenderGlobal context, EntityPlayer player, MovingObjectPosition target, int subID, ItemStack currentItem, float partialTicks)
{
this.context = context;
this.player = player;
this.target = target;
this.subID = subID;
this.currentItem = currentItem;
this.partialTicks= partialTicks;
}
}

View File

@ -0,0 +1,15 @@
package net.minecraftforge.client.event;
import net.minecraft.src.RenderGlobal;
import net.minecraftforge.event.Event;
public class RenderWorldLastEvent extends Event
{
public final RenderGlobal context;
public final float partialTicks;
public RenderWorldLastEvent(RenderGlobal context, float partialTicks)
{
this.context = context;
this.partialTicks = partialTicks;
}
}

View File

@ -0,0 +1,17 @@
package net.minecraftforge.client.event;
import net.minecraft.src.TexturePackBase;
import net.minecraftforge.event.Event;
public class TextureLoadEvent extends Event
{
public final String texture;
public final TexturePackBase pack;
public TextureLoadEvent(String texture, TexturePackBase pack)
{
this.texture = texture;
this.pack = pack;
}
}

View File

@ -0,0 +1,122 @@
package net.minecraftforge.client.event.sound;
import net.minecraft.src.SoundManager;
import net.minecraft.src.SoundPoolEntry;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.Event;
public class SoundEvent extends Event
{
public SoundEvent(){}
public static SoundPoolEntry getResult(SoundResultEvent event)
{
MinecraftForge.EVENT_BUS.post(event);
return event.result;
}
public static abstract class SoundResultEvent extends SoundEvent
{
public final SoundManager manager;
public final SoundPoolEntry source;
public final String name;
public final float volume;
public final float pitch;
public SoundPoolEntry result;
public SoundResultEvent(SoundManager manager, SoundPoolEntry source, String name, float volume, float pitch)
{
this.manager = manager;
this.source = source;
this.name = name;
this.volume = volume;
this.pitch = pitch;
this.result = source;
}
}
/**
* Raised by the SoundManager.loadSoundSettings, this would be a good place for
* adding your custom sounds to the SoundPool.
*/
public static class SoundLoadEvent extends SoundEvent
{
public final SoundManager manager;
public SoundLoadEvent(SoundManager manager)
{
this.manager = manager;
}
}
/**
* This event is raised by the SoundManager when it does its first setup of the
* SoundSystemConfig's codecs, use this function to add your own codecs.
*/
public static class SoundSetupEvent extends SoundEvent
{
public final SoundManager manager;
public SoundSetupEvent(SoundManager manager)
{
this.manager = manager;
}
}
/**
* Raised when the SoundManager tries to play a Background Music file,
* If you return null from this function it will prevent the sound from being played,
* you can return a different entry if you want to change the sound being played.
*/
public static class PlayBackgroundMusicEvent extends SoundResultEvent
{
public PlayBackgroundMusicEvent(SoundManager manager, SoundPoolEntry entry)
{ super(manager, entry, null, 0.0f, 0.0f); }
}
/**
* Raised when the SoundManager tries to play a 'Streaming' file,
* in vanilla it is only the Jukebox that uses this function.
*
* If you return null from this function it will prevent the sound from being played,
* you can return a different entry if you want to change the sound being played.
*
*/
public static class PlayStreamingEvent extends SoundResultEvent
{
public final float x;
public final float y;
public final float z;
public PlayStreamingEvent(SoundManager manager, SoundPoolEntry source, String name, float x, float y, float z)
{
super(manager, source, name, 0.0f, 0.0f);
this.x = x;
this.y = y;
this.z = z;
}
}
/***
* Raised when the SoundManager tries to play a normal sound,
* dogs barking, footsteps, etc. THe majority of all sounds during normal game play.
*
* If you return null from this function it will prevent the sound from being played,
* you can return a different entry if you want to change the sound being played.
*/
public static class PlaySoundEvent extends SoundResultEvent
{
public final float x;
public final float y;
public final float z;
public PlaySoundEvent(SoundManager manager, SoundPoolEntry source, String name, float x, float y, float z, float volume, float pitch)
{
super(manager, source, name, volume, pitch);
this.x = x;
this.y = y;
this.z = z;
}
}
public static class PlaySoundEffectEvent extends SoundResultEvent
{
public PlaySoundEffectEvent(SoundManager manager, SoundPoolEntry source, String name, float volume, float pitch)
{ super(manager, source, name, volume, pitch); }
}
}

View File

@ -0,0 +1,108 @@
/**
* This software is provided under the terms of the Minecraft Forge Public
* License v1.0.
*/
package net.minecraftforge.common;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import net.minecraft.src.Achievement;
public class AchievementPage
{
private String name;
private LinkedList<Achievement> achievements;
public AchievementPage(String name, Achievement... achievements)
{
this.name = name;
this.achievements = new LinkedList<Achievement>(Arrays.asList(achievements));
}
public String getName()
{
return name;
}
public List<Achievement> getAchievements()
{
return achievements;
}
private static LinkedList<AchievementPage> achievementPages = new LinkedList<AchievementPage>();
/**
* Registers an achievement page.
* @param page The page.
*/
public static void registerAchievementPage(AchievementPage page)
{
if (getAchievementPage(page.getName()) != null)
{
throw new RuntimeException("Duplicate achievement page name \"" + page.getName() + "\"!");
}
achievementPages.add(page);
}
/**
* Will return an achievement page by its index on the list.
* @param index The page's index.
* @return the achievement page corresponding to the index or null if invalid index
*/
public static AchievementPage getAchievementPage(int index)
{
return achievementPages.get(index);
}
/**
* Will return an achievement page by its name.
* @param name The page's name.
* @return the achievement page with the given name or null if no such page
*/
public static AchievementPage getAchievementPage(String name)
{
for (AchievementPage page : achievementPages)
{
if (page.getName().equals(name))
{
return page;
}
}
return null;
}
/**
* Will return the list of achievement pages.
* @return the list's size
*/
public static Set<AchievementPage> getAchievementPages()
{
return new HashSet<AchievementPage>(achievementPages);
}
/**
* Will return whether an achievement is in any page or not.
* @param achievement The achievement.
*/
public static boolean isAchievementInPages(Achievement achievement)
{
for (AchievementPage page : achievementPages)
{
if (page.getAchievements().contains(achievement))
{
return true;
}
}
return false;
}
public static String getTitle(int index)
{
return index == -1 ? "Minecraft" : getAchievementPage(index).getName();
}
}

View File

@ -0,0 +1,285 @@
package net.minecraftforge.common;
import java.util.ArrayList;
import java.util.Random;
import net.minecraft.src.Item;
import net.minecraft.src.ItemStack;
import net.minecraft.src.WeightedRandom;
import net.minecraft.src.WeightedRandomItem;
public class DungeonHooks
{
private static int dungeonLootAttempts = 8;
private static ArrayList<DungeonMob> dungeonMobs = new ArrayList<DungeonMob>();
private static ArrayList<DungeonLoot> dungeonLoot = new ArrayList<DungeonLoot>();
/**
* Set the number of item stacks that will be attempted to be added to each Dungeon chest.
* Note: Due to random number generation, you will not always get this amount per chest.
* @param number The maximum number of item stacks to add to a chest.
*/
public static void setDungeonLootTries(int number)
{
dungeonLootAttempts = number;
}
/**
* @return The max number of item stacks found in each dungeon chest.
*/
public static int getDungeonLootTries()
{
return dungeonLootAttempts;
}
/**
* Adds a mob to the possible list of creatures the spawner will create.
* If the mob is already in the spawn list, the rarity will be added to the existing one,
* causing the mob to be more common.
*
* @param name The name of the monster, use the same name used when registering the entity.
* @param rarity The rarity of selecting this mob over others. Must be greater then 0.
* Vanilla Minecraft has the following mobs:
* Spider 100
* Skeleton 100
* Zombie 200
* Meaning, Zombies are twice as common as spiders or skeletons.
* @return The new rarity of the monster,
*/
public static float addDungeonMob(String name, int rarity)
{
if (rarity <= 0)
{
throw new IllegalArgumentException("Rarity must be greater then zero");
}
for (DungeonMob mob : dungeonMobs)
{
if (name.equals(mob.type))
{
return mob.itemWeight += rarity;
}
}
dungeonMobs.add(new DungeonMob(rarity, name));
return rarity;
}
/**
* Will completely remove a Mob from the dungeon spawn list.
*
* @param name The name of the mob to remove
* @return The rarity of the removed mob, prior to being removed.
*/
public static int removeDungeonMob(String name)
{
for (DungeonMob mob : dungeonMobs)
{
if (name.equals(mob.type))
{
dungeonMobs.remove(mob);
return mob.itemWeight;
}
}
return 0;
}
/**
* Gets a random mob name from the list.
* @param rand World generation random number generator
* @return The mob name
*/
public static String getRandomDungeonMob(Random rand)
{
DungeonMob mob = (DungeonMob)WeightedRandom.getRandomItem(rand, dungeonMobs);
if (mob == null)
{
return "";
}
return mob.type;
}
/**
* Adds a item stack to the dungeon loot list with a stack size
* of 1.
*
* @param item The ItemStack to be added to the loot list
* @param rarity The relative chance that this item will spawn, Vanilla has
* most of its items set to 1. Like the saddle, bread, silk, wheat, etc..
* Rarer items are set to lower values, EXA: Golden Apple 0.01
*/
public static void addDungeonLoot(ItemStack item, int rarity)
{
addDungeonLoot(item, rarity, 1, 1);
}
/**
* Adds a item stack, with a range of sizes, to the dungeon loot list.
* If a stack matching the same item, and size range, is already in the list
* the rarities will be added together making the item more common.
*
* @param item The ItemStack to be added to the loot list
* @param rarity The relative chance that this item will spawn, Vanilla has
* most of its items set to 1. Like the saddle, bread, silk, wheat, etc..
* Rarer items are set to lower values, EXA: Golden Apple 0.01
* @param minCount When this item does generate, the minimum number that is in the stack
* @param maxCount When this item does generate, the maximum number that can bein the stack
* @return The new rarity of the loot.
*/
public static float addDungeonLoot(ItemStack item, int rarity, int minCount, int maxCount)
{
for (DungeonLoot loot : dungeonLoot)
{
if (loot.equals(item, minCount, maxCount))
{
return loot.itemWeight += rarity;
}
}
dungeonLoot.add(new DungeonLoot(rarity, item, minCount, maxCount));
return rarity;
}
/**
* Removes a item stack from the dungeon loot list, this will remove all items
* as long as the item stack matches, it will not care about matching the stack
* size ranges perfectly.
*
* @param item The item stack to remove
*/
public static void removeDungeonLoot(ItemStack item)
{
removeDungeonLoot(item, -1, 0);
}
/**
* Removes a item stack from the dungeon loot list. If 'minCount' parameter
* is greater then 0, it will only remove loot items that have the same exact
* stack size range as passed in by parameters.
*
* @param item The item stack to remove
* @param minCount The minimum count for the match check, if less then 0,
* the size check is skipped
* @param maxCount The max count used in match check when 'minCount' is >= 0
*/
public static void removeDungeonLoot(ItemStack item, int minCount, int maxCount)
{
ArrayList<DungeonLoot> lootTmp = (ArrayList<DungeonLoot>)dungeonLoot.clone();
if (minCount < 0)
{
for (DungeonLoot loot : lootTmp)
{
if (loot.equals(item))
{
dungeonLoot.remove(loot);
}
}
}
else
{
for (DungeonLoot loot : lootTmp)
{
if (loot.equals(item, minCount, maxCount))
{
dungeonLoot.remove(loot);
}
}
}
}
/**
* Gets a random item stack to place in a dungeon chest during world generation
* @param rand World generation random number generator
* @return The item stack
*/
public static ItemStack getRandomDungeonLoot(Random rand)
{
DungeonLoot ret = (DungeonLoot)WeightedRandom.getRandomItem(rand, dungeonLoot);
if (ret != null)
{
return ret.generateStack(rand);
}
return null;
}
public static class DungeonLoot extends WeightedRandomItem
{
private ItemStack itemStack;
private int minCount = 1;
private int maxCount = 1;
/**
* @param item A item stack
* @param min Minimum stack size when randomly generating
* @param max Maximum stack size when randomly generating
*/
public DungeonLoot(int weight, ItemStack item, int min, int max)
{
super(weight);
this.itemStack = item;
minCount = min;
maxCount = max;
}
/**
* Grabs a ItemStack ready to be added to the dungeon chest,
* the stack size will be between minCount and maxCount
* @param rand World gen random number generator
* @return The ItemStack to be added to the chest
*/
public ItemStack generateStack(Random rand)
{
ItemStack ret = this.itemStack.copy();
ret.stackSize = minCount + (rand.nextInt(maxCount - minCount + 1));
return ret;
}
public boolean equals(ItemStack item, int min, int max)
{
return (min == minCount && max == maxCount && item.isItemEqual(this.itemStack));
}
public boolean equals(ItemStack item)
{
return item.isItemEqual(this.itemStack);
}
}
public static class DungeonMob extends WeightedRandomItem
{
public String type;
public DungeonMob(int weight, String type)
{
super(weight);
this.type = type;
}
@Override
public boolean equals(Object target)
{
if (target instanceof DungeonMob)
{
return this.type.equals(((DungeonMob)target).type);
}
return false;
}
}
static
{
addDungeonMob("Skeleton", 100);
addDungeonMob("Zombie", 200);
addDungeonMob("Spider", 100);
addDungeonLoot(new ItemStack(Item.saddle), 100 );
addDungeonLoot(new ItemStack(Item.ingotIron), 100, 1, 4);
addDungeonLoot(new ItemStack(Item.bread), 100 );
addDungeonLoot(new ItemStack(Item.wheat), 100, 1, 4);
addDungeonLoot(new ItemStack(Item.gunpowder), 100, 1, 4);
addDungeonLoot(new ItemStack(Item.silk), 100, 1, 4);
addDungeonLoot(new ItemStack(Item.bucketEmpty), 100 );
addDungeonLoot(new ItemStack(Item.appleGold), 001 );
addDungeonLoot(new ItemStack(Item.redstone), 050, 1, 4);
addDungeonLoot(new ItemStack(Item.record13), 005 );
addDungeonLoot(new ItemStack(Item.recordCat), 005 );
addDungeonLoot(new ItemStack(Item.dyePowder, 1, 3), 100 );
}
}

View File

@ -218,4 +218,10 @@ public class ForgeHooks
System.out.printf("MinecraftForge v%s Initialized\n", ForgeVersion.getVersion()); System.out.printf("MinecraftForge v%s Initialized\n", ForgeVersion.getVersion());
ModLoader.getLogger().info(String.format("MinecraftForge v%s Initialized", ForgeVersion.getVersion())); ModLoader.getLogger().info(String.format("MinecraftForge v%s Initialized", ForgeVersion.getVersion()));
} }
public static boolean onEntityInteract(EntityPlayer entityPlayer, Entity par1Entity, boolean b)
{
return false;
}
} }

View File

@ -0,0 +1,215 @@
package net.minecraftforge.common;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import net.minecraft.src.EntityMinecart;
import net.minecraft.src.Item;
import net.minecraft.src.ItemStack;
public class MinecartRegistry
{
private static Map<MinecartKey, ItemStack> itemForMinecart = new HashMap<MinecartKey, ItemStack>();
private static Map<ItemStack, MinecartKey> minecartForItem = new HashMap<ItemStack, MinecartKey>();
/**
* Registers a custom minecart and its corresponding item.
* This should be the item used to place the minecart by the user,
* not the item dropped by the cart.
* @param cart The minecart.
* @param item The item used to place the cart.
*/
public static void registerMinecart(Class<? extends EntityMinecart> cart, ItemStack item)
{
registerMinecart(cart, 0, item);
}
/**
* Registers a minecart and its corresponding item.
* This should be the item used to place the minecart by the user,
* not the item dropped by the cart.
* @param minecart The minecart.
* @param type The minecart type, used to differentiate carts that have the same class.
* @param item The item used to place the cart.
*/
public static void registerMinecart(Class<? extends EntityMinecart> minecart, int type, ItemStack item)
{
MinecartKey key = new MinecartKey(minecart, type);
itemForMinecart.put(key, item);
minecartForItem.put(item, key);
}
/**
* Removes a previously registered Minecart. Useful for replacing the vanilla minecarts.
* @param minecart
* @param type
*/
public static void removeMinecart(Class<? extends EntityMinecart> minecart, int type)
{
MinecartKey key = new MinecartKey(minecart, type);
ItemStack item = itemForMinecart.remove(key);
if (item != null)
{
minecartForItem.remove(item);
}
}
/**
* This function returns an ItemStack that represents this cart.
* The player should be able to use this item to place the minecart.
* This is the item that was registered with the cart via the registerMinecart function,
* but is not necessary the item the cart drops when destroyed.
* @param minecart The cart class
* @return An ItemStack that can be used to place the cart.
*/
public static ItemStack getItemForCart(Class<? extends EntityMinecart> minecart)
{
return getItemForCart(minecart, 0);
}
/**
* This function returns an ItemStack that represents this cart.
* The player should be able to use this item to place the minecart.
* This is the item that was registered with the cart via the registerMinecart function,
* but is not necessary the item the cart drops when destroyed.
* @param minecart The cart class
* @param type The minecartType value
* @return An ItemStack that can be used to place the cart.
*/
public static ItemStack getItemForCart(Class<? extends EntityMinecart> minecart, int type)
{
ItemStack item = itemForMinecart.get(new MinecartKey(minecart, type));
if (item == null)
{
return null;
}
return item.copy();
}
/**
* This function returns an ItemStack that represents this cart.
* The player should be able to use this item to place the minecart.
* This is the item that was registered with the cart via the registerMinecart function,
* but is not necessary the item the cart drops when destroyed.
* @param cart The cart entity
* @return An ItemStack that can be used to place the cart.
*/
public static ItemStack getItemForCart(EntityMinecart cart)
{
return getItemForCart(cart.getClass(), cart.getMinecartType());
}
/**
* The function will return the cart class for a given item.
* If the item was not registered via the registerMinecart function it will return null.
* @param item The item to test.
* @return Cart if mapping exists, null if not.
*/
public static Class<? extends EntityMinecart> getCartClassForItem(ItemStack item)
{
MinecartKey key = null;
for (Map.Entry<ItemStack, MinecartKey> entry : minecartForItem.entrySet())
{
if (entry.getKey().isItemEqual(item))
{
key = entry.getValue();
break;
}
}
if (key != null)
{
return key.minecart;
}
return null;
}
/**
* The function will return the cart type for a given item.
* Will return -1 if the mapping doesn't exist.
* If the item was not registered via the registerMinecart function it will return null.
* @param item The item to test.
* @return the cart minecartType value.
*/
public static int getCartTypeForItem(ItemStack item)
{
MinecartKey key = null;
for (Map.Entry<ItemStack, MinecartKey> entry : minecartForItem.entrySet())
{
if (entry.getKey().isItemEqual(item))
{
key = entry.getValue();
break;
}
}
if (key != null)
{
return key.type;
}
return -1;
}
/**
* Will return a set of all registered minecart items.
* @return a copy of the set of all minecart items
*/
public static Set<ItemStack> getAllCartItems()
{
Set<ItemStack> ret = new HashSet<ItemStack>();
for (ItemStack item : minecartForItem.keySet())
{
ret.add(item.copy());
}
return ret;
}
static
{
registerMinecart(EntityMinecart.class, 0, new ItemStack(Item.minecartEmpty));
registerMinecart(EntityMinecart.class, 1, new ItemStack(Item.minecartCrate));
registerMinecart(EntityMinecart.class, 2, new ItemStack(Item.minecartPowered));
}
public static class MinecartKey
{
public final Class<? extends EntityMinecart> minecart;
public final int type;
public MinecartKey(Class<? extends EntityMinecart> cls, int typtID)
{
minecart = cls;
type = typtID;
}
@Override
public boolean equals(Object obj)
{
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
final MinecartKey other = (MinecartKey)obj;
if (this.minecart != other.minecart && (this.minecart == null || !this.minecart.equals(other.minecart)))
{
return false;
}
return (this.type == other.type);
}
@Override
public int hashCode()
{
int hash = 7;
hash = 59 * hash + (this.minecart != null ? this.minecart.hashCode() : 0);
hash = 59 * hash + this.type;
return hash;
}
}
}

View File

@ -192,7 +192,5 @@ public class MinecraftForge
temp[x] = EntityEnderman.carriableBlocks[x]; temp[x] = EntityEnderman.carriableBlocks[x];
} }
EntityEnderman.carriableBlocks = temp; EntityEnderman.carriableBlocks = temp;
} }
} }

View File

@ -0,0 +1,11 @@
package net.minecraftforge.event;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Retention(value = RUNTIME)
@Target(value = TYPE)
public @interface Cancelable{}

View File

@ -7,11 +7,23 @@ package net.minecraftforge.event;
public class Event public class Event
{ {
private boolean isCanceled = false; private boolean isCanceled = false;
private final boolean isCancelable;
private static ListenerList listeners = new ListenerList(); private static ListenerList listeners = new ListenerList();
public Event() public Event()
{ {
setup(); setup();
Class cls = this.getClass();
boolean found = false;
while (cls != Event.class)
{
if (cls.isAnnotationPresent(Cancelable.class))
{
found = true;
break;
}
}
isCancelable = found;
} }
/** /**
@ -20,7 +32,7 @@ public class Event
*/ */
public boolean isCancelable() public boolean isCancelable()
{ {
return false; return isCancelable;
} }
/** /**

View File

@ -92,12 +92,13 @@ public class EventBus
} }
} }
public void post(Event event) public boolean post(Event event)
{ {
IEventListener[] listeners = event.getListenerList().getListeners(busID); IEventListener[] listeners = event.getListenerList().getListeners(busID);
for (IEventListener listener : listeners) for (IEventListener listener : listeners)
{ {
listener.invoke(event); listener.invoke(event);
} }
return (event.isCancelable() ? event.isCanceled() : false);
} }
} }

View File

@ -3,8 +3,10 @@ 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.Cancelable;
import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerEvent;
@Cancelable
public class UseHoeEvent extends PlayerEvent public class UseHoeEvent extends PlayerEvent
{ {
@ -25,12 +27,6 @@ public class UseHoeEvent extends PlayerEvent
this.y = y; this.y = y;
this.z = z; this.z = z;
} }
@Override
public boolean isCancelable()
{
return true;
}
public boolean isHandeled() public boolean isHandeled()
{ {

View File

@ -0,0 +1,18 @@
package net.minecraftforge.event.entity.living;
import net.minecraft.src.DamageSource;
import net.minecraft.src.EntityLiving;
import net.minecraftforge.event.Cancelable;
@Cancelable
public class LivingAttackEvent extends LivingEvent
{
public final DamageSource source;
public final int ammount;
public LivingAttackEvent(EntityLiving entity, DamageSource source, int ammount)
{
super(entity);
this.source = source;
this.ammount = ammount;
}
}

View File

@ -0,0 +1,17 @@
package net.minecraftforge.event.entity.living;
import net.minecraft.src.DamageSource;
import net.minecraft.src.EntityLiving;
import net.minecraftforge.event.Cancelable;
@Cancelable
public class LivingDeathEvent extends LivingEvent
{
public final DamageSource source;
public LivingDeathEvent(EntityLiving entity, DamageSource source)
{
super(entity);
this.source = source;
}
}

View File

@ -0,0 +1,28 @@
package net.minecraftforge.event.entity.living;
import java.util.ArrayList;
import net.minecraft.src.DamageSource;
import net.minecraft.src.EntityItem;
import net.minecraft.src.EntityLiving;
import net.minecraftforge.event.Cancelable;
@Cancelable
public class LivingDropsEvent extends LivingEvent
{
public final DamageSource source;
public final ArrayList<EntityItem> drops;
public final int lootingLevel;
public final boolean recentlyHit;
public final int specialDropValue;
public LivingDropsEvent(EntityLiving entity, DamageSource source, ArrayList<EntityItem> drops, int lootingLevel, boolean recentlyHit, int specialDropValue)
{
super(entity);
this.source = source;
this.drops = drops;
this.lootingLevel = lootingLevel;
this.recentlyHit = recentlyHit;
this.specialDropValue = specialDropValue;
}
}

View File

@ -1,6 +1,7 @@
package net.minecraftforge.event.entity.living; package net.minecraftforge.event.entity.living;
import net.minecraft.src.EntityLiving; import net.minecraft.src.EntityLiving;
import net.minecraftforge.event.Cancelable;
import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.entity.EntityEvent;
public class LivingEvent extends EntityEvent public class LivingEvent extends EntityEvent
@ -11,4 +12,15 @@ public class LivingEvent extends EntityEvent
super(entity); super(entity);
entityLiving = entity; entityLiving = entity;
} }
@Cancelable
public static class LivingUpdateEvent extends LivingEvent
{
public LivingUpdateEvent(EntityLiving e){ super(e); }
}
public static class LivingJumpEvent extends LivingEvent
{
public LivingJumpEvent(EntityLiving e){ super(e); }
}
} }

View File

@ -0,0 +1,15 @@
package net.minecraftforge.event.entity.living;
import net.minecraft.src.EntityLiving;
import net.minecraftforge.event.Cancelable;
@Cancelable
public class LivingFallEvent extends LivingEvent
{
public float distance;
public LivingFallEvent(EntityLiving entity, float distance)
{
super(entity);
this.distance = distance;
}
}

View File

@ -0,0 +1,19 @@
package net.minecraftforge.event.entity.living;
import net.minecraft.src.DamageSource;
import net.minecraft.src.EntityLiving;
import net.minecraftforge.event.Cancelable;
@Cancelable
public class LivingHurtEvent extends LivingEvent
{
public final DamageSource source;
public int ammount;
public LivingHurtEvent(EntityLiving entity, DamageSource source, int ammount)
{
super(entity);
this.source = source;
this.ammount = ammount;
}
}

View File

@ -0,0 +1,15 @@
package net.minecraftforge.event.entity.living;
import net.minecraft.src.EntityLiving;
public class LivingSetAttackTargetEvent extends LivingEvent
{
public final EntityLiving target;
public LivingSetAttackTargetEvent(EntityLiving entity, EntityLiving target)
{
super(entity);
this.target = target;
}
}

View File

@ -2,7 +2,9 @@ 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;
import net.minecraftforge.event.Cancelable;
@Cancelable
public class ArrowLooseEvent extends PlayerEvent public class ArrowLooseEvent extends PlayerEvent
{ {
public final ItemStack bow; public final ItemStack bow;
@ -14,10 +16,4 @@ public class ArrowLooseEvent extends PlayerEvent
this.bow = bow; this.bow = bow;
this.charge = charge; this.charge = charge;
} }
@Override
public boolean isCancelable()
{
return true;
}
} }

View File

@ -2,7 +2,9 @@ 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;
import net.minecraftforge.event.Cancelable;
@Cancelable
public class ArrowNockEvent extends PlayerEvent public class ArrowNockEvent extends PlayerEvent
{ {
public ItemStack result; public ItemStack result;
@ -12,10 +14,4 @@ public class ArrowNockEvent extends PlayerEvent
super(player); super(player);
this.result = result; this.result = result;
} }
@Override
public boolean isCancelable()
{
return true;
}
} }

View File

@ -2,7 +2,9 @@ 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;
import net.minecraftforge.event.Cancelable;
@Cancelable
public class BonemealEvent extends PlayerEvent public class BonemealEvent extends PlayerEvent
{ {
public final World world; public final World world;
@ -22,12 +24,6 @@ public class BonemealEvent extends PlayerEvent
this.Z = z; this.Z = z;
} }
@Override
public boolean isCancelable()
{
return true;
}
public void setHandeled() public void setHandeled()
{ {
handeled = true; handeled = true;

View File

@ -3,7 +3,9 @@ package net.minecraftforge.event.entity.player;
import net.minecraft.src.Entity; import net.minecraft.src.Entity;
import net.minecraft.src.EntityItem; import net.minecraft.src.EntityItem;
import net.minecraft.src.EntityPlayer; import net.minecraft.src.EntityPlayer;
import net.minecraftforge.event.Cancelable;
@Cancelable
public class EntityItemPickupEvent extends PlayerEvent public class EntityItemPickupEvent extends PlayerEvent
{ {
public final EntityItem item; public final EntityItem item;
@ -13,10 +15,4 @@ public class EntityItemPickupEvent extends PlayerEvent
super(player); super(player);
this.item = item; this.item = item;
} }
@Override
public boolean isCancelable()
{
return true;
}
} }

View File

@ -4,7 +4,9 @@ import net.minecraft.src.EntityPlayer;
import net.minecraft.src.ItemStack; import net.minecraft.src.ItemStack;
import net.minecraft.src.MovingObjectPosition; import net.minecraft.src.MovingObjectPosition;
import net.minecraft.src.World; import net.minecraft.src.World;
import net.minecraftforge.event.Cancelable;
@Cancelable
public class FillBucketEvent extends PlayerEvent public class FillBucketEvent extends PlayerEvent
{ {
public final ItemStack current; public final ItemStack current;
@ -21,12 +23,6 @@ public class FillBucketEvent extends PlayerEvent
this.world = world; this.world = world;
this.target = target; this.target = target;
} }
@Override
public boolean isCancelable()
{
return true;
}
public boolean isHandeled() public boolean isHandeled()
{ {

View File

@ -0,0 +1,15 @@
package net.minecraftforge.event.entity.player;
import net.minecraft.src.EntityPlayer;
import net.minecraft.src.ItemStack;
public class PlayerDestroyItemEvent extends PlayerEvent
{
public final ItemStack original;
public PlayerDestroyItemEvent(EntityPlayer player, ItemStack original)
{
super(player);
this.original = original;
}
}

View File

@ -0,0 +1,21 @@
package net.minecraftforge.event.entity.player;
import net.minecraft.src.EntityPlayer;
import net.minecraft.src.EnumStatus;
public class PlayerSleepInBedEvent extends PlayerEvent
{
public EnumStatus result = null;
public final int x;
public final int y;
public final int z;
public PlayerSleepInBedEvent(EntityPlayer player, int x, int y, int z)
{
super(player);
this.x = x;
this.y = y;
this.z = z;
}
}

View File

@ -2,7 +2,6 @@ package net.minecraftforge.packets;
import net.minecraft.src.NetworkManager; import net.minecraft.src.NetworkManager;
import net.minecraft.src.Packet; import net.minecraft.src.Packet;
import net.minecraft.src.forge.IPacketHandler;
/** /**
* A helper class used to make a shared interface for sending packets, * A helper class used to make a shared interface for sending packets,

View File

@ -1,23 +1,33 @@
--- ../src_base/common/net/minecraft/src/WorldGenDungeons.java --- ../src_base/common/net/minecraft/src/WorldGenDungeons.java
+++ ../src_work/common/net/minecraft/src/WorldGenDungeons.java +++ ../src_work/common/net/minecraft/src/WorldGenDungeons.java
@@ -1,6 +1,8 @@ @@ -1,6 +1,9 @@
package net.minecraft.src; package net.minecraft.src;
import java.util.Random; import java.util.Random;
+ +
+import net.minecraftforge.common.DungeonHooks;
+import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.MinecraftForge;
public class WorldGenDungeons extends WorldGenerator public class WorldGenDungeons extends WorldGenerator
{ {
@@ -117,9 +119,9 @@ @@ -117,9 +120,9 @@
if (var16 != null) if (var16 != null)
{ {
- for (int var17 = 0; var17 < 8; ++var17) - for (int var17 = 0; var17 < 8; ++var17)
+ for (int var17 = 0; var17 < MinecraftForge.getDungeonLootTries(); ++var17) + for (int var17 = 0; var17 < DungeonHooks.getDungeonLootTries(); ++var17)
{ {
- ItemStack var18 = this.pickCheckLootItem(par2Random); - ItemStack var18 = this.pickCheckLootItem(par2Random);
+ ItemStack var18 = MinecraftForge.getRandomDungeonLoot(par2Random); + ItemStack var18 = DungeonHooks.getRandomDungeonLoot(par2Random);
if (var18 != null) if (var18 != null)
{ {
@@ -147,7 +150,7 @@
if (var19 != null)
{
- var19.setMobID(this.pickMobSpawner(par2Random));
+ var19.setMobID(DungeonHooks.getRandomDungeonMob(par2Random));
}
else
{

View File

@ -94,7 +94,7 @@
{ {
ItemStack var8 = this.createStackedBlock(par6); ItemStack var8 = this.createStackedBlock(par6);
@@ -1218,4 +1220,638 @@ @@ -1218,4 +1220,650 @@
canBlockGrass[0] = true; canBlockGrass[0] = true;
StatList.initBreakableStats(); StatList.initBreakableStats();
} }
@ -731,5 +731,17 @@
+ int id = world.getBlockId(x, y, z); + int id = world.getBlockId(x, y, z);
+ return id == Block.fence.blockID || id == Block.netherFence.blockID || id == Block.glass.blockID; + return id == Block.fence.blockID || id == Block.netherFence.blockID || id == Block.glass.blockID;
+ } + }
+ }
+
+
+ /**
+ * Determines if this block should render in this pass.
+ *
+ * @param pass The pass in question
+ * @return True to render
+ */
+ public boolean canRenderInPass(int pass)
+ {
+ return pass == getRenderBlockPass();
+ } + }
} }

View File

@ -1,16 +1,18 @@
--- ../src_base/minecraft/net/minecraft/src/EntityLiving.java --- ../src_base/minecraft/net/minecraft/src/EntityLiving.java
+++ ../src_work/minecraft/net/minecraft/src/EntityLiving.java +++ ../src_work/minecraft/net/minecraft/src/EntityLiving.java
@@ -5,6 +5,9 @@ @@ -5,6 +5,11 @@
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
+ +
+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.living.*;
+import static net.minecraftforge.event.entity.living.LivingEvent.*;
public abstract class EntityLiving extends Entity public abstract class EntityLiving extends Entity
{ {
@@ -310,6 +313,7 @@ @@ -310,6 +315,7 @@
public void setAttackTarget(EntityLiving par1EntityLiving) public void setAttackTarget(EntityLiving par1EntityLiving)
{ {
this.attackTarget = par1EntityLiving; this.attackTarget = par1EntityLiving;
@ -18,7 +20,7 @@
} }
public boolean isExplosiveMob(Class par1Class) public boolean isExplosiveMob(Class par1Class)
@@ -366,6 +370,7 @@ @@ -366,6 +372,7 @@
{ {
this.entityLivingToAttack = par1EntityLiving; this.entityLivingToAttack = par1EntityLiving;
this.revengeTimer = this.entityLivingToAttack != null ? 60 : 0; this.revengeTimer = this.entityLivingToAttack != null ? 60 : 0;
@ -26,11 +28,11 @@
} }
protected void entityInit() protected void entityInit()
@@ -648,6 +653,11 @@ @@ -648,6 +655,11 @@
*/ */
public void onUpdate() public void onUpdate()
{ {
+ if (ForgeHooks.onEntityLivingUpdate(this)) + if (MinecraftForge.EVENT_BUS.post(new LivingUpdateEvent(this)))
+ { + {
+ return; + return;
+ } + }
@ -38,11 +40,11 @@
super.onUpdate(); super.onUpdate();
if (this.arrowHitTempCounter > 0) if (this.arrowHitTempCounter > 0)
@@ -815,6 +825,11 @@ @@ -815,6 +827,11 @@
*/ */
public boolean attackEntityFrom(DamageSource par1DamageSource, int par2) public boolean attackEntityFrom(DamageSource par1DamageSource, int par2)
{ {
+ if (ForgeHooks.onEntityLivingAttacked(this, par1DamageSource, par2)) + if (MinecraftForge.EVENT_BUS.post(new LivingAttackEvent(this, par1DamageSource, par2)))
+ { + {
+ return false; + return false;
+ } + }
@ -50,24 +52,25 @@
if (this.worldObj.isRemote) if (this.worldObj.isRemote)
{ {
return false; return false;
@@ -997,6 +1012,12 @@ @@ -997,6 +1014,13 @@
*/ */
protected void damageEntity(DamageSource par1DamageSource, int par2) protected void damageEntity(DamageSource par1DamageSource, int par2)
{ {
+ par2 = ForgeHooks.onEntityLivingHurt(this, par1DamageSource, par2); + LivingHurtEvent event = new LivingHurtEvent(this, par1DamageSource, par2);
+ if (par2 == 0) + if (MinecraftForge.EVENT_BUS.post(event) || event.ammount== 0)
+ { + {
+ return; + return;
+ } + }
+ par2 = event.ammount;
+ +
par2 = this.applyArmorCalculations(par1DamageSource, par2); par2 = this.applyArmorCalculations(par1DamageSource, par2);
par2 = this.applyPotionDamageCalculations(par1DamageSource, par2); par2 = this.applyPotionDamageCalculations(par1DamageSource, par2);
this.health -= par2; this.health -= par2;
@@ -1060,6 +1081,11 @@ @@ -1060,6 +1084,11 @@
*/ */
public void onDeath(DamageSource par1DamageSource) public void onDeath(DamageSource par1DamageSource)
{ {
+ if (ForgeHooks.onEntityLivingDeath(this, par1DamageSource)) + if (MinecraftForge.EVENT_BUS.post(new LivingDeathEvent(this, par1DamageSource)))
+ { + {
+ return; + return;
+ } + }
@ -75,7 +78,7 @@
Entity var2 = par1DamageSource.getEntity(); Entity var2 = par1DamageSource.getEntity();
if (this.scoreValue >= 0 && var2 != null) if (this.scoreValue >= 0 && var2 != null)
@@ -1083,13 +1109,17 @@ @@ -1083,13 +1112,17 @@
var3 = EnchantmentHelper.getLootingModifier(((EntityPlayer)var2).inventory); var3 = EnchantmentHelper.getLootingModifier(((EntityPlayer)var2).inventory);
} }
@ -94,33 +97,38 @@
if (var4 < 5) if (var4 < 5)
{ {
@@ -1097,6 +1127,13 @@ @@ -1097,6 +1130,16 @@
} }
} }
} }
+ +
+ captureDrops = false; + captureDrops = false;
+ ForgeHooks.onEntityLivingDrops(this, par1DamageSource, capturedDrops, var3, recentlyHit > 0, var4); +
+ for (EntityItem item : capturedDrops) + if (!MinecraftForge.EVENT_BUS.post(new LivingDropsEvent(this, par1DamageSource, capturedDrops, var3, recentlyHit > 0, var4)))
+ { + {
+ worldObj.spawnEntityInWorld(item); + for (EntityItem item : capturedDrops)
+ {
+ worldObj.spawnEntityInWorld(item);
+ }
+ } + }
} }
this.worldObj.setEntityState(this, (byte)3); this.worldObj.setEntityState(this, (byte)3);
@@ -1140,6 +1177,11 @@ @@ -1140,6 +1183,13 @@
*/ */
protected void fall(float par1) protected void fall(float par1)
{ {
+ if (ForgeHooks.onEntityLivingFall(this, par1)) + LivingFallEvent event = new LivingFallEvent(this, par1);
+ if (MinecraftForge.EVENT_BUS.post(event))
+ { + {
+ return; + return;
+ } + }
+ par1 = event.distance;
+ +
super.fall(par1); super.fall(par1);
int var2 = MathHelper.ceiling_float_int(par1 - 3.0F); int var2 = MathHelper.ceiling_float_int(par1 - 3.0F);
@@ -1327,7 +1369,7 @@ @@ -1327,7 +1377,7 @@
int var2 = MathHelper.floor_double(this.boundingBox.minY); int var2 = MathHelper.floor_double(this.boundingBox.minY);
int var3 = MathHelper.floor_double(this.posZ); int var3 = MathHelper.floor_double(this.posZ);
int var4 = this.worldObj.getBlockId(var1, var2, var3); int var4 = this.worldObj.getBlockId(var1, var2, var3);
@ -129,11 +137,11 @@
} }
/** /**
@@ -1590,6 +1632,7 @@ @@ -1590,6 +1640,7 @@
} }
this.isAirBorne = true; this.isAirBorne = true;
+ ForgeHooks.onEntityLivingJump(this); + MinecraftForge.EVENT_BUS.post(new LivingJumpEvent(this));
} }
/** /**

View File

@ -1,6 +1,6 @@
--- ../src_base/minecraft/net/minecraft/src/EntityPlayer.java --- ../src_base/minecraft/net/minecraft/src/EntityPlayer.java
+++ ../src_work/minecraft/net/minecraft/src/EntityPlayer.java +++ ../src_work/minecraft/net/minecraft/src/EntityPlayer.java
@@ -2,6 +2,11 @@ @@ -2,6 +2,15 @@
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -9,10 +9,14 @@
+import net.minecraftforge.common.IGuiHandler; +import net.minecraftforge.common.IGuiHandler;
+import net.minecraftforge.common.ISpecialArmor.ArmorProperties; +import net.minecraftforge.common.ISpecialArmor.ArmorProperties;
+import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
+import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
+import net.minecraftforge.packets.PacketOpenGUI;
public abstract class EntityPlayer extends EntityLiving implements ICommandSender public abstract class EntityPlayer extends EntityLiving implements ICommandSender
{ {
@@ -207,6 +212,7 @@ @@ -207,6 +216,7 @@
if (var1 == this.itemInUse) if (var1 == this.itemInUse)
{ {
@ -20,7 +24,7 @@
if (this.itemInUseCount <= 25 && this.itemInUseCount % 4 == 0) if (this.itemInUseCount <= 25 && this.itemInUseCount % 4 == 0)
{ {
this.updateItemUse(var1, 5); this.updateItemUse(var1, 5);
@@ -607,7 +613,16 @@ @@ -607,7 +617,16 @@
*/ */
public EntityItem dropOneItem() public EntityItem dropOneItem()
{ {
@ -38,7 +42,7 @@
} }
/** /**
@@ -673,13 +688,21 @@ @@ -673,13 +692,21 @@
/** /**
* Returns how strong the player is against the specified block at this moment * Returns how strong the player is against the specified block at this moment
@ -63,15 +67,16 @@
{ {
var2 += (float)(var3 * var3 + 1); var2 += (float)(var3 * var3 + 1);
} }
@@ -972,12 +995,22 @@ @@ -972,12 +999,23 @@
*/ */
protected void damageEntity(DamageSource par1DamageSource, int par2) protected void damageEntity(DamageSource par1DamageSource, int par2)
{ {
+ par2 = ForgeHooks.onEntityLivingHurt(this, par1DamageSource, par2); + LivingHurtEvent event = new LivingHurtEvent(this, par1DamageSource, par2);
+ if (par2 == 0) + if (MinecraftForge.EVENT_BUS.post(event) || event.ammount == 0)
+ { + {
+ return; + return;
+ } + }
+ par2 = event.ammount;
+ +
if (!par1DamageSource.isUnblockable() && this.isBlocking()) if (!par1DamageSource.isUnblockable() && this.isBlocking())
{ {
@ -87,7 +92,7 @@
par2 = this.applyPotionDamageCalculations(par1DamageSource, par2); par2 = this.applyPotionDamageCalculations(par1DamageSource, par2);
this.addExhaustion(par1DamageSource.getHungerDamage()); this.addExhaustion(par1DamageSource.getHungerDamage());
this.health -= par2; this.health -= par2;
@@ -1012,6 +1045,10 @@ @@ -1012,6 +1050,10 @@
public boolean interactWith(Entity par1Entity) public boolean interactWith(Entity par1Entity)
{ {
@ -98,17 +103,17 @@
if (par1Entity.interact(this)) if (par1Entity.interact(this))
{ {
return true; return true;
@@ -1055,7 +1092,9 @@ @@ -1055,7 +1097,9 @@
*/ */
public void destroyCurrentEquippedItem() public void destroyCurrentEquippedItem()
{ {
+ ItemStack oldItem = getCurrentEquippedItem(); + ItemStack orig = getCurrentEquippedItem();
this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null); this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null);
+ ForgeHooks.onDestroyCurrentItem(this, oldItem); + MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(this, orig));
} }
/** /**
@@ -1084,6 +1123,15 @@ @@ -1084,6 +1128,15 @@
*/ */
public void attackTargetEntityWithCurrentItem(Entity par1Entity) public void attackTargetEntityWithCurrentItem(Entity par1Entity)
{ {
@ -124,19 +129,20 @@
if (par1Entity.canAttackWithItem()) if (par1Entity.canAttackWithItem())
{ {
int var2 = this.inventory.getDamageVsEntity(par1Entity); int var2 = this.inventory.getDamageVsEntity(par1Entity);
@@ -1226,6 +1274,11 @@ @@ -1226,6 +1279,12 @@
*/ */
public EnumStatus sleepInBedAt(int par1, int par2, int par3) public EnumStatus sleepInBedAt(int par1, int par2, int par3)
{ {
+ EnumStatus customSleep = ForgeHooks.sleepInBedAt(this, par1, par2, par3); + PlayerSleepInBedEvent event = new PlayerSleepInBedEvent(this, par1, par2, par3);
+ if (customSleep != null) + MinecraftForge.EVENT_BUS.post(event);
+ if (event.result != null)
+ { + {
+ return customSleep; + return event.result;
+ } + }
if (!this.worldObj.isRemote) if (!this.worldObj.isRemote)
{ {
if (this.isPlayerSleeping() || !this.isEntityAlive()) if (this.isPlayerSleeping() || !this.isEntityAlive())
@@ -1265,6 +1318,11 @@ @@ -1265,6 +1324,11 @@
{ {
int var9 = this.worldObj.getBlockMetadata(par1, par2, par3); int var9 = this.worldObj.getBlockMetadata(par1, par2, par3);
int var5 = BlockBed.getDirection(var9); int var5 = BlockBed.getDirection(var9);
@ -148,7 +154,7 @@
float var10 = 0.5F; float var10 = 0.5F;
float var7 = 0.5F; float var7 = 0.5F;
@@ -1334,11 +1392,12 @@ @@ -1334,11 +1398,12 @@
this.resetHeight(); this.resetHeight();
ChunkCoordinates var4 = this.playerLocation; ChunkCoordinates var4 = this.playerLocation;
ChunkCoordinates var5 = this.playerLocation; ChunkCoordinates var5 = this.playerLocation;
@ -166,7 +172,7 @@
if (var5 == null) if (var5 == null)
{ {
@@ -1375,7 +1434,9 @@ @@ -1375,7 +1440,9 @@
*/ */
private boolean isInBed() private boolean isInBed()
{ {
@ -177,7 +183,7 @@
} }
/** /**
@@ -1389,14 +1450,15 @@ @@ -1389,14 +1456,15 @@
var2.loadChunk(par1ChunkCoordinates.posX + 3 >> 4, par1ChunkCoordinates.posZ - 3 >> 4); var2.loadChunk(par1ChunkCoordinates.posX + 3 >> 4, par1ChunkCoordinates.posZ - 3 >> 4);
var2.loadChunk(par1ChunkCoordinates.posX - 3 >> 4, par1ChunkCoordinates.posZ + 3 >> 4); var2.loadChunk(par1ChunkCoordinates.posX - 3 >> 4, par1ChunkCoordinates.posZ + 3 >> 4);
var2.loadChunk(par1ChunkCoordinates.posX + 3 >> 4, par1ChunkCoordinates.posZ + 3 >> 4); var2.loadChunk(par1ChunkCoordinates.posX + 3 >> 4, par1ChunkCoordinates.posZ + 3 >> 4);
@ -196,7 +202,7 @@
return var3; return var3;
} }
} }
@@ -1408,8 +1470,11 @@ @@ -1408,8 +1476,11 @@
{ {
if (this.playerLocation != null) if (this.playerLocation != null)
{ {
@ -210,7 +216,7 @@
switch (var2) switch (var2)
{ {
@@ -1699,6 +1764,7 @@ @@ -1699,6 +1770,7 @@
return 101; return 101;
} }
} }
@ -218,7 +224,7 @@
} }
return var3; return var3;
@@ -1919,4 +1985,50 @@ @@ -1919,4 +1991,50 @@
{ {
return this.theInventoryEnderChest; return this.theInventoryEnderChest;
} }

View File

@ -1,15 +1,18 @@
--- ../src_base/minecraft/net/minecraft/src/EntityRenderer.java --- ../src_base/minecraft/net/minecraft/src/EntityRenderer.java
+++ ../src_work/minecraft/net/minecraft/src/EntityRenderer.java +++ ../src_work/minecraft/net/minecraft/src/EntityRenderer.java
@@ -6,6 +6,8 @@ @@ -6,6 +6,11 @@
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
+import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.client.ForgeHooksClient;
+import net.minecraftforge.client.event.DrawBlockHighlightEvent;
+import net.minecraftforge.client.event.RenderWorldLastEvent;
+import net.minecraftforge.common.MinecraftForge;
+ +
import org.lwjgl.input.Mouse; import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.Display; import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
@@ -289,8 +291,15 @@ @@ -289,8 +294,15 @@
*/ */
private void updateFovModifierHand() private void updateFovModifierHand()
{ {
@ -27,7 +30,7 @@
this.fovModifierHandPrev = this.fovModifierHand; this.fovModifierHandPrev = this.fovModifierHand;
this.fovModifierHand += (this.fovMultiplierTemp - this.fovModifierHand) * 0.5F; this.fovModifierHand += (this.fovMultiplierTemp - this.fovModifierHand) * 0.5F;
} }
@@ -306,7 +315,7 @@ @@ -306,7 +318,7 @@
} }
else else
{ {
@ -36,7 +39,7 @@
float var4 = 70.0F; float var4 = 70.0F;
if (par2) if (par2)
@@ -394,11 +403,14 @@ @@ -394,11 +406,14 @@
if (!this.mc.gameSettings.debugCamEnable) if (!this.mc.gameSettings.debugCamEnable)
{ {
int var10 = this.mc.theWorld.getBlockId(MathHelper.floor_double(var2.posX), MathHelper.floor_double(var2.posY), MathHelper.floor_double(var2.posZ)); int var10 = this.mc.theWorld.getBlockId(MathHelper.floor_double(var2.posX), MathHelper.floor_double(var2.posY), MathHelper.floor_double(var2.posZ));
@ -56,13 +59,13 @@
GL11.glRotatef((float)(var12 * 90), 0.0F, 1.0F, 0.0F); GL11.glRotatef((float)(var12 * 90), 0.0F, 1.0F, 0.0F);
} }
@@ -1034,8 +1046,11 @@ @@ -1034,8 +1049,11 @@
var17 = (EntityPlayer)var4; var17 = (EntityPlayer)var4;
GL11.glDisable(GL11.GL_ALPHA_TEST); GL11.glDisable(GL11.GL_ALPHA_TEST);
this.mc.mcProfiler.endStartSection("outline"); this.mc.mcProfiler.endStartSection("outline");
- var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); - var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1);
- var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); - var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1);
+ if (!ForgeHooksClient.onBlockHighlight(var5, var17, mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1)) + if (!MinecraftForge.EVENT_BUS.post(new DrawBlockHighlightEvent(var5, var17, mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1)))
+ { + {
+ var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); + var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1);
+ var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); + var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1);
@ -70,13 +73,13 @@
GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glEnable(GL11.GL_ALPHA_TEST);
} }
} }
@@ -1099,8 +1114,11 @@ @@ -1099,8 +1117,11 @@
var17 = (EntityPlayer)var4; var17 = (EntityPlayer)var4;
GL11.glDisable(GL11.GL_ALPHA_TEST); GL11.glDisable(GL11.GL_ALPHA_TEST);
this.mc.mcProfiler.endStartSection("outline"); this.mc.mcProfiler.endStartSection("outline");
- var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); - var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1);
- var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); - var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1);
+ if (!ForgeHooksClient.onBlockHighlight(var5, var17, mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1)) + if (!MinecraftForge.EVENT_BUS.post(new DrawBlockHighlightEvent(var5, var17, mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1)))
+ { + {
+ var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); + var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1);
+ var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1); + var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), par1);
@ -84,13 +87,13 @@
GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glEnable(GL11.GL_ALPHA_TEST);
} }
@@ -1124,6 +1142,9 @@ @@ -1124,6 +1145,9 @@
this.setupFog(1, par1); this.setupFog(1, par1);
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
+ +
+ this.mc.mcProfiler.endStartSection("fhooks"); + this.mc.mcProfiler.endStartSection("fhooks");
+ ForgeHooksClient.onRenderWorldLast(var5, par1); + MinecraftForge.EVENT_BUS.post(new RenderWorldLastEvent(var5, par1));
this.mc.mcProfiler.endStartSection("hand"); this.mc.mcProfiler.endStartSection("hand");

View File

@ -1,18 +1,19 @@
--- ../src_base/minecraft/net/minecraft/src/GuiAchievements.java --- ../src_base/minecraft/net/minecraft/src/GuiAchievements.java
+++ ../src_work/minecraft/net/minecraft/src/GuiAchievements.java +++ ../src_work/minecraft/net/minecraft/src/GuiAchievements.java
@@ -1,7 +1,11 @@ @@ -1,7 +1,12 @@
package net.minecraft.src; package net.minecraft.src;
+import java.util.LinkedList; +import java.util.LinkedList;
+import java.util.List; +import java.util.List;
import java.util.Random; import java.util.Random;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
+import net.minecraftforge.common.AchievementPage;
+import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.MinecraftForge;
+ +
import org.lwjgl.input.Mouse; import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12; import org.lwjgl.opengl.GL12;
@@ -41,6 +45,10 @@ @@ -41,6 +46,10 @@
/** Whether the Mouse Button is down or not */ /** Whether the Mouse Button is down or not */
private int isMouseButtonDown = 0; private int isMouseButtonDown = 0;
private StatFileWriter statFileWriter; private StatFileWriter statFileWriter;
@ -23,14 +24,14 @@
public GuiAchievements(StatFileWriter par1StatFileWriter) public GuiAchievements(StatFileWriter par1StatFileWriter)
{ {
@@ -49,6 +57,14 @@ @@ -49,6 +58,14 @@
short var3 = 141; short var3 = 141;
this.field_74117_m = this.guiMapX = this.field_74124_q = (double)(AchievementList.openInventory.displayColumn * 24 - var2 / 2 - 12); this.field_74117_m = this.guiMapX = this.field_74124_q = (double)(AchievementList.openInventory.displayColumn * 24 - var2 / 2 - 12);
this.field_74115_n = this.guiMapY = this.field_74123_r = (double)(AchievementList.openInventory.displayRow * 24 - var3 / 2); this.field_74115_n = this.guiMapY = this.field_74123_r = (double)(AchievementList.openInventory.displayRow * 24 - var3 / 2);
+ minecraftAchievements.clear(); + minecraftAchievements.clear();
+ for (Object achievement : AchievementList.achievementList) + for (Object achievement : AchievementList.achievementList)
+ { + {
+ if (!MinecraftForge.isAchievementInPages((Achievement)achievement)) + if (!AchievementPage.isAchievementInPages((Achievement)achievement))
+ { + {
+ minecraftAchievements.add((Achievement)achievement); + minecraftAchievements.add((Achievement)achievement);
+ } + }
@ -38,15 +39,15 @@
} }
/** /**
@@ -58,6 +74,7 @@ @@ -58,6 +75,7 @@
{ {
this.controlList.clear(); this.controlList.clear();
this.controlList.add(new GuiSmallButton(1, this.width / 2 + 24, this.height / 2 + 74, 80, 20, StatCollector.translateToLocal("gui.done"))); this.controlList.add(new GuiSmallButton(1, this.width / 2 + 24, this.height / 2 + 74, 80, 20, StatCollector.translateToLocal("gui.done")));
+ this.controlList.add(button = new GuiSmallButton(2, (width - achievementsPaneWidth) / 2 + 24, height / 2 + 74, 125, 20, getAchievementPageTitle(currentPage))); + this.controlList.add(button = new GuiSmallButton(2, (width - achievementsPaneWidth) / 2 + 24, height / 2 + 74, 125, 20, AchievementPage.getTitle(currentPage)));
} }
/** /**
@@ -69,6 +86,16 @@ @@ -69,6 +87,16 @@
{ {
this.mc.displayGuiScreen((GuiScreen)null); this.mc.displayGuiScreen((GuiScreen)null);
this.mc.setIngameFocus(); this.mc.setIngameFocus();
@ -55,15 +56,15 @@
+ if (par1GuiButton.id == 2) + if (par1GuiButton.id == 2)
+ { + {
+ currentPage++; + currentPage++;
+ if (currentPage >= MinecraftForge.getAchievementPages().size()) + if (currentPage >= AchievementPage.getAchievementPages().size())
+ { + {
+ currentPage = -1; + currentPage = -1;
+ } + }
+ button.displayString = getAchievementPageTitle(currentPage); + button.displayString = AchievementPage.getTitle(currentPage);
} }
super.actionPerformed(par1GuiButton); super.actionPerformed(par1GuiButton);
@@ -293,11 +320,12 @@ @@ -293,11 +321,12 @@
int var27; int var27;
int var30; int var30;
@ -72,7 +73,7 @@
- Achievement var33 = (Achievement)AchievementList.achievementList.get(var22); - Achievement var33 = (Achievement)AchievementList.achievementList.get(var22);
- -
- if (var33.parentAchievement != null) - if (var33.parentAchievement != null)
+ List<Achievement> achievementList = (currentPage == -1 ? minecraftAchievements : MinecraftForge.getAchievementPage(currentPage).getAchievements()); + List<Achievement> achievementList = (currentPage == -1 ? minecraftAchievements : AchievementPage.getAchievementPage(currentPage).getAchievements());
+ for (var22 = 0; var22 < achievementList.size(); ++var22) + for (var22 = 0; var22 < achievementList.size(); ++var22)
+ { + {
+ Achievement var33 = achievementList.get(var22); + Achievement var33 = achievementList.get(var22);
@ -81,7 +82,7 @@
{ {
var24 = var33.displayColumn * 24 - var4 + 11 + var10; var24 = var33.displayColumn * 24 - var4 + 11 + var10;
var25 = var33.displayRow * 24 - var5 + 11 + var11; var25 = var33.displayRow * 24 - var5 + 11 + var11;
@@ -331,9 +359,9 @@ @@ -331,9 +360,9 @@
int var42; int var42;
int var41; int var41;
@ -94,16 +95,3 @@
var26 = var35.displayColumn * 24 - var4; var26 = var35.displayColumn * 24 - var4;
var27 = var35.displayRow * 24 - var5; var27 = var35.displayRow * 24 - var5;
@@ -457,4 +485,12 @@
{
return true;
}
+
+ /**
+ * FORGE: Gets the name for an achievement page by its index
+ */
+ public static String getAchievementPageTitle(int index)
+ {
+ return index == -1 ? "Minecraft" : MinecraftForge.getAchievementPage(index).getName();
+ }
}

View File

@ -27,7 +27,7 @@
Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21);
return par1World.rayTraceBlocks_do_do(var13, var23, par3, !par3); return par1World.rayTraceBlocks_do_do(var13, var23, par3, !par3);
} }
@@ -625,4 +628,201 @@ @@ -625,4 +628,187 @@
{ {
StatList.initStats(); StatList.initStats();
} }
@ -37,20 +37,6 @@
+ /* =========================================================== FORGE START ===============================================================*/ + /* =========================================================== FORGE START ===============================================================*/
+ public boolean isDefaultTexture = true; + public boolean isDefaultTexture = true;
+ private String currentTexture = "/gui/items.png"; + private String currentTexture = "/gui/items.png";
+ /**
+ * Called when a new CreativeContainer is opened, populate the list
+ * with all of the items for this item you want a player in creative mode
+ * to have access to.
+ *
+ * @param itemList The list of items currently in the creative inventory
+ */
+ public void addCreativeItems(ArrayList itemList)
+ {
+ if (this.shiftedIndex != Item.potion.shiftedIndex && this.shiftedIndex != Item.monsterPlacer.shiftedIndex)
+ {
+ itemList.add(new ItemStack(this, 1));
+ }
+ }
+ +
+ /** + /**
+ * Called when a player drops the item into the world, + * Called when a player drops the item into the world,

View File

@ -30,7 +30,8 @@
+ else if (par2ItemStack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType())) + else if (par2ItemStack.getItem() instanceof ItemBlock && RenderBlocks.renderItemIn3d(Block.blocksList[par2ItemStack.itemID].getRenderType()))
{ {
GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png"));
this.renderBlocksInstance.renderBlockAsItem(var4, par2ItemStack.getItemDamage(), 1.0F); - this.renderBlocksInstance.renderBlockAsItem(var4, par2ItemStack.getItemDamage(), 1.0F);
+ this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[par2ItemStack.itemID], par2ItemStack.getItemDamage(), 1.0F);
} }
else else
{ {

View File

@ -1,16 +1,18 @@
--- ../src_base/minecraft/net/minecraft/src/NetClientHandler.java --- ../src_base/minecraft/net/minecraft/src/NetClientHandler.java
+++ ../src_work/minecraft/net/minecraft/src/NetClientHandler.java +++ ../src_work/minecraft/net/minecraft/src/NetClientHandler.java
@@ -18,6 +18,9 @@ @@ -18,6 +18,11 @@
import java.util.Random; import java.util.Random;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
+import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.client.ForgeHooksClient;
+import net.minecraftforge.client.event.ClientChatReceivedEvent;
+import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.ForgeHooks;
+import net.minecraftforge.common.MinecraftForge;
+ +
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import cpw.mods.fml.common.LoaderException; import cpw.mods.fml.common.LoaderException;
@@ -59,6 +62,8 @@ @@ -59,6 +64,8 @@
this.mc = par1Minecraft; this.mc = par1Minecraft;
Socket var4 = new Socket(InetAddress.getByName(par2Str), par3); Socket var4 = new Socket(InetAddress.getByName(par2Str), par3);
this.netManager = new TcpConnection(var4, "Client", this); this.netManager = new TcpConnection(var4, "Client", this);
@ -19,7 +21,7 @@
} }
public NetClientHandler(Minecraft par1Minecraft, IntegratedServer par2IntegratedServer) throws IOException public NetClientHandler(Minecraft par1Minecraft, IntegratedServer par2IntegratedServer) throws IOException
@@ -159,6 +164,7 @@ @@ -159,6 +166,7 @@
this.currentServerMaxPlayers = par1Packet1Login.maxPlayers; this.currentServerMaxPlayers = par1Packet1Login.maxPlayers;
this.mc.playerController.setGameType(par1Packet1Login.gameType); this.mc.playerController.setGameType(par1Packet1Login.gameType);
this.addToSendQueue(new Packet204ClientInfo(this.mc.gameSettings.language, this.mc.gameSettings.renderDistance, this.mc.gameSettings.chatVisibility, this.mc.gameSettings.chatColours, this.mc.gameSettings.difficulty)); this.addToSendQueue(new Packet204ClientInfo(this.mc.gameSettings.language, this.mc.gameSettings.renderDistance, this.mc.gameSettings.chatVisibility, this.mc.gameSettings.chatColours, this.mc.gameSettings.difficulty));
@ -27,7 +29,7 @@
} }
public void handlePickupSpawn(Packet21PickupSpawn par1Packet21PickupSpawn) public void handlePickupSpawn(Packet21PickupSpawn par1Packet21PickupSpawn)
@@ -586,7 +592,7 @@ @@ -586,7 +594,7 @@
public void handleKickDisconnect(Packet255KickDisconnect par1Packet255KickDisconnect) public void handleKickDisconnect(Packet255KickDisconnect par1Packet255KickDisconnect)
{ {
@ -36,20 +38,20 @@
this.field_72554_f = true; this.field_72554_f = true;
this.mc.loadWorld((WorldClient)null); this.mc.loadWorld((WorldClient)null);
this.mc.displayGuiScreen(new GuiDisconnected("disconnect.disconnected", "disconnect.genericReason", new Object[] {par1Packet255KickDisconnect.reason})); this.mc.displayGuiScreen(new GuiDisconnected("disconnect.disconnected", "disconnect.genericReason", new Object[] {par1Packet255KickDisconnect.reason}));
@@ -650,7 +656,11 @@ @@ -650,7 +658,11 @@
public void handleChat(Packet3Chat par1Packet3Chat) public void handleChat(Packet3Chat par1Packet3Chat)
{ {
- this.mc.ingameGUI.func_73827_b().func_73765_a(par1Packet3Chat.message); - this.mc.ingameGUI.func_73827_b().func_73765_a(par1Packet3Chat.message);
+ par1Packet3Chat.message = ForgeHooks.onClientChatRecv(par1Packet3Chat.message); + ClientChatReceivedEvent event = new ClientChatReceivedEvent(par1Packet3Chat.message);
+ if (par1Packet3Chat.message != null) + if (!MinecraftForge.EVENT_BUS.post(event) && event.message != null)
+ { + {
+ this.mc.ingameGUI.func_73827_b().func_73765_a(par1Packet3Chat.message); + this.mc.ingameGUI.func_73827_b().func_73765_a(event.message);
+ } + }
} }
public void handleAnimation(Packet18Animation par1Packet18Animation) public void handleAnimation(Packet18Animation par1Packet18Animation)
@@ -1005,6 +1015,19 @@ @@ -1005,6 +1017,19 @@
{ {
((TileEntityMobSpawner)var2).readFromNBT(par1Packet132TileEntityData.customParam1); ((TileEntityMobSpawner)var2).readFromNBT(par1Packet132TileEntityData.customParam1);
} }
@ -69,7 +71,7 @@
} }
} }
@@ -1141,6 +1164,10 @@ @@ -1141,6 +1166,10 @@
if (par1Packet131MapData.itemID == Item.map.shiftedIndex) if (par1Packet131MapData.itemID == Item.map.shiftedIndex)
{ {
ItemMap.getMPMapData(par1Packet131MapData.uniqueID, this.mc.theWorld).updateMPMapData(par1Packet131MapData.itemData); ItemMap.getMPMapData(par1Packet131MapData.uniqueID, this.mc.theWorld).updateMPMapData(par1Packet131MapData.itemData);

View File

@ -1,14 +1,16 @@
--- ../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
@@ -1,6 +1,7 @@ @@ -1,6 +1,9 @@
package net.minecraft.src; package net.minecraft.src;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
+import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.ForgeHooks;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
public class PlayerControllerMP public class PlayerControllerMP
{ {
@@ -95,6 +96,11 @@ @@ -95,6 +98,11 @@
*/ */
public boolean onPlayerDestroyBlock(int par1, int par2, int par3, int par4) public boolean onPlayerDestroyBlock(int par1, int par2, int par3, int par4)
{ {
@ -20,7 +22,7 @@
if (this.currentGameType.isAdventure()) if (this.currentGameType.isAdventure())
{ {
return false; return false;
@@ -112,7 +118,7 @@ @@ -112,7 +120,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);
@ -29,7 +31,7 @@
if (var8) if (var8)
{ {
@@ -290,6 +296,12 @@ @@ -290,6 +298,12 @@
public boolean onPlayerRightClick(EntityPlayer par1EntityPlayer, World par2World, ItemStack par3ItemStack, int par4, int par5, int par6, int par7, Vec3 par8Vec3) public boolean onPlayerRightClick(EntityPlayer par1EntityPlayer, World par2World, ItemStack par3ItemStack, int par4, int par5, int par6, int par7, Vec3 par8Vec3)
{ {
this.syncCurrentPlayItem(); this.syncCurrentPlayItem();
@ -42,18 +44,18 @@
float var9 = (float)par8Vec3.xCoord - (float)par4; float var9 = (float)par8Vec3.xCoord - (float)par4;
float var10 = (float)par8Vec3.yCoord - (float)par5; float var10 = (float)par8Vec3.yCoord - (float)par5;
float var11 = (float)par8Vec3.zCoord - (float)par6; float var11 = (float)par8Vec3.zCoord - (float)par6;
@@ -333,6 +345,16 @@ @@ -332,7 +346,15 @@
}
else else
{ {
return par3ItemStack.tryPlaceItemIntoWorld(par1EntityPlayer, par2World, par4, par5, par6, par7, var9, var10, var11); - return par3ItemStack.tryPlaceItemIntoWorld(par1EntityPlayer, par2World, par4, par5, par6, par7, var9, var10, var11);
+
+ if (!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; + return false;
+ } + }
+ if (par3ItemStack.stackSize <= 0) + if (par3ItemStack.stackSize <= 0)
+ { + {
+ ForgeHooks.onDestroyCurrentItem(par1EntityPlayer, par3ItemStack); + MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(par1EntityPlayer, par3ItemStack));
+ } + }
+ return true; + return true;
} }

View File

@ -1,15 +1,20 @@
--- ../src_base/minecraft/net/minecraft/src/SoundManager.java --- ../src_base/minecraft/net/minecraft/src/SoundManager.java
+++ ../src_work/minecraft/net/minecraft/src/SoundManager.java +++ ../src_work/minecraft/net/minecraft/src/SoundManager.java
@@ -2,6 +2,8 @@ @@ -2,6 +2,13 @@
import java.io.File; import java.io.File;
import java.util.Random; import java.util.Random;
+ +
+import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.client.ForgeHooksClient;
+import net.minecraftforge.client.ModCompatibilityClient;
+import net.minecraftforge.client.event.sound.SoundEvent;
+import net.minecraftforge.client.event.sound.SoundEvent.PlayBackgroundMusicEvent;
+import net.minecraftforge.common.MinecraftForge;
+import static net.minecraftforge.client.event.sound.SoundEvent.*;
import paulscode.sound.SoundSystem; import paulscode.sound.SoundSystem;
import paulscode.sound.SoundSystemConfig; import paulscode.sound.SoundSystemConfig;
import paulscode.sound.codecs.CodecJOrbis; import paulscode.sound.codecs.CodecJOrbis;
@@ -37,9 +39,11 @@ @@ -37,9 +44,11 @@
private Random rand = new Random(); private Random rand = new Random();
private int ticksBeforeMusic; private int ticksBeforeMusic;
@ -22,30 +27,30 @@
} }
/** /**
@@ -54,6 +58,8 @@ @@ -54,6 +63,8 @@
{ {
this.tryToSetLibraryAndCodecs(); this.tryToSetLibraryAndCodecs();
} }
+ ModCompatibilityClient.audioModLoad(this); + ModCompatibilityClient.audioModLoad(this);
+ ForgeHooksClient.onLoadSoundSettings(this); + MinecraftForge.EVENT_BUS.post(new SoundLoadEvent(this));
} }
/** /**
@@ -73,6 +79,8 @@ @@ -73,6 +84,8 @@
SoundSystemConfig.setCodec("ogg", CodecJOrbis.class); SoundSystemConfig.setCodec("ogg", CodecJOrbis.class);
SoundSystemConfig.setCodec("mus", CodecMus.class); SoundSystemConfig.setCodec("mus", CodecMus.class);
SoundSystemConfig.setCodec("wav", CodecWav.class); SoundSystemConfig.setCodec("wav", CodecWav.class);
+ ModCompatibilityClient.audioModAddCodecs(); + ModCompatibilityClient.audioModAddCodecs();
+ ForgeHooksClient.onSetupAudio(this); + MinecraftForge.EVENT_BUS.post(new SoundSetupEvent(this));
sndSystem = new SoundSystem(); sndSystem = new SoundSystem();
this.options.soundVolume = var1; this.options.soundVolume = var1;
this.options.musicVolume = var2; this.options.musicVolume = var2;
@@ -161,10 +169,12 @@ @@ -161,10 +174,12 @@
} }
SoundPoolEntry var1 = this.soundPoolMusic.getRandomSound(); SoundPoolEntry var1 = this.soundPoolMusic.getRandomSound();
+ var1 = ModCompatibilityClient.audioModPickBackgroundMusic(this, var1); + var1 = ModCompatibilityClient.audioModPickBackgroundMusic(this, var1);
+ var1 = ForgeHooksClient.onPlayBackgroundMusic(this, var1); + var1 = SoundEvent.getResult(new PlayBackgroundMusicEvent(this, var1));
if (var1 != null) if (var1 != null)
{ {
@ -54,27 +59,27 @@
sndSystem.backgroundMusic("BgMusic", var1.soundUrl, var1.soundName, false); sndSystem.backgroundMusic("BgMusic", var1.soundUrl, var1.soundName, false);
sndSystem.setVolume("BgMusic", this.options.musicVolume); sndSystem.setVolume("BgMusic", this.options.musicVolume);
sndSystem.play("BgMusic"); sndSystem.play("BgMusic");
@@ -214,6 +224,7 @@ @@ -214,6 +229,7 @@
if (par1Str != null) if (par1Str != null)
{ {
SoundPoolEntry var8 = this.soundPoolStreaming.getRandomSoundFromSoundPool(par1Str); SoundPoolEntry var8 = this.soundPoolStreaming.getRandomSoundFromSoundPool(par1Str);
+ var8 = ForgeHooksClient.onPlayStreaming(this, var8, par1Str, par2, par3, par4); + var8 = SoundEvent.getResult(new PlayStreamingEvent(this, var8, par1Str, par2, par3, par4));
if (var8 != null && par5 > 0.0F) if (var8 != null && par5 > 0.0F)
{ {
@@ -239,6 +250,7 @@ @@ -239,6 +255,7 @@
if (loaded && this.options.soundVolume != 0.0F) if (loaded && this.options.soundVolume != 0.0F)
{ {
SoundPoolEntry var7 = this.soundPoolSounds.getRandomSoundFromSoundPool(par1Str); SoundPoolEntry var7 = this.soundPoolSounds.getRandomSoundFromSoundPool(par1Str);
+ var7 = ForgeHooksClient.onPlaySound(this, var7, par1Str, par2, par3, par4, par5, par6); + var7 = SoundEvent.getResult(new PlaySoundEvent(this, var7, par1Str, par2, par3, par4, par5, par6));
if (var7 != null && par5 > 0.0F) if (var7 != null && par5 > 0.0F)
{ {
@@ -274,6 +286,7 @@ @@ -274,6 +291,7 @@
if (loaded && this.options.soundVolume != 0.0F) if (loaded && this.options.soundVolume != 0.0F)
{ {
SoundPoolEntry var4 = this.soundPoolSounds.getRandomSoundFromSoundPool(par1Str); SoundPoolEntry var4 = this.soundPoolSounds.getRandomSoundFromSoundPool(par1Str);
+ var4 = ForgeHooksClient.onPlaySoundEffect(this, var4, par1Str, par2, par3); + var4 = SoundEvent.getResult(new PlaySoundEffectEvent(this, var4, par1Str, par2, par3));
if (var4 != null) if (var4 != null)
{ {

View File

@ -49,7 +49,7 @@
var12 = true; var12 = true;
} }
- else if (var24 == var11) - else if (var24 == var11)
+ if (!ForgeHooksClient.canRenderInPass(var23, var11)) + if (!var23.canRenderInPass(var11))
{ {
- var13 |= var10.renderBlockByRenderType(var23, var17, var15, var16); - var13 |= var10.renderBlockByRenderType(var23, var17, var15, var16);
+ continue; + continue;