Version control logic, improved the destroy handling hook.

This commit is contained in:
Eloraam 2011-08-20 08:59:05 +00:00
parent 622f536f80
commit 651af86795
4 changed files with 80 additions and 17 deletions

View file

@ -26,9 +26,9 @@ public class ForgeHooks {
static LinkedList<ICraftingHandler> craftingHandlers = new LinkedList<ICraftingHandler>();
public static void onDestroyCurrentItem(EntityPlayer player) {
public static void onDestroyCurrentItem(EntityPlayer player, ItemStack orig) {
for (IDestroyToolHandler handler : destroyToolHandlers) {
handler.onDestroyCurrentItem(player);
handler.onDestroyCurrentItem(player,orig);
}
}
@ -138,6 +138,13 @@ public class ForgeHooks {
// TODO: add other tool tables.
}
public static final int majorVersion=1;
public static final int minorVersion=1;
public static final int revisionVersion=5;
static {
System.out.printf("MinecraftForge V%d.%d.%d Initialized\n",majorVersion,minorVersion,revisionVersion);
}
static boolean toolInit=false;
static HashMap toolClasses=new HashMap();
static HashMap toolHarvestLevels=new HashMap();

View file

@ -4,12 +4,13 @@
*/
package net.minecraft.src.forge;
import net.minecraft.src.ItemStack;
import net.minecraft.src.EntityPlayer;
import net.minecraft.src.EnumStatus;
public interface IDestroyToolHandler {
/** Called when the user's currently equipped item is destroyed.
*/
public void onDestroyCurrentItem(EntityPlayer player);
public void onDestroyCurrentItem(EntityPlayer player, ItemStack orig);
}

View file

@ -166,4 +166,55 @@ public class MinecraftForge {
public static void addPickaxeBlockEffectiveAgainst (Block block) {
setBlockHarvestLevel(block,"pickaxe",0);
}
/**
* Kill minecraft with an error message.
*/
public static void killMinecraft(String modname, String msg) {
throw new RuntimeException(modname+": "+msg);
}
/**
* Version checking. Ensures that a sufficiently recent version of Forge
* is installed. Will result in a fatal error if the major versions
* mismatch or if the version is too old. Will print a warning message if
* the minor versions don't match.
*/
public static void versionDetect(String modname,
int major, int minor, int revision) {
if(major!=ForgeHooks.majorVersion) {
killMinecraft(modname,"MinecraftForge Major Version Mismatch, expecting "+major+".x.x");
} else if(minor!=ForgeHooks.minorVersion) {
if(minor>ForgeHooks.minorVersion) {
killMinecraft(modname,"MinecraftForge Too Old, need at least "+major+"."+minor+"."+revision);
} else {
System.out.println(modname + ": MinecraftForge minor version mismatch, expecting "+major+"."+minor+".x, may lead to unexpected behavior");
}
} else if(revision>ForgeHooks.revisionVersion) {
killMinecraft(modname,"MinecraftForge Too Old, need at least "+major+"."+minor+"."+revision);
}
}
/**
* Strict version checking. Ensures that a sufficiently recent version of
* Forge is installed. Will result in a fatal error if the major or minor
* versions mismatch or if the version is too old. Use this function for
* mods that use recent, new, or unstable APIs to prevent
* incompatibilities.
*/
public static void versionDetectStrict(String modname,
int major, int minor, int revision) {
if(major!=ForgeHooks.majorVersion) {
killMinecraft(modname,"MinecraftForge Major Version Mismatch, expecting "+major+".x.x");
} else if(minor!=ForgeHooks.minorVersion) {
if(minor>ForgeHooks.minorVersion) {
killMinecraft(modname,"MinecraftForge Too Old, need at least "+major+"."+minor+"."+revision);
} else {
killMinecraft(modname,"MinecraftForge minor version mismatch, expecting "+major+"."+minor+".x");
}
} else if(revision>ForgeHooks.revisionVersion) {
killMinecraft(modname,"MinecraftForge Too Old, need at least "+major+"."+minor+"."+revision);
}
}
}

View file

@ -956,7 +956,7 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/EntityLiv
public void writeEntityToNBT(NBTTagCompound nbttagcompound)
diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/EntityPlayer.java ../src_work/minecraft/net/minecraft/src/EntityPlayer.java
--- ../src_base/minecraft/net/minecraft/src/EntityPlayer.java 2011-08-11 17:02:11.000000000 -0400
+++ ../src_work/minecraft/net/minecraft/src/EntityPlayer.java 2011-08-17 19:06:38.000000000 -0400
+++ ../src_work/minecraft/net/minecraft/src/EntityPlayer.java 2011-08-20 03:54:26.000000000 -0400
@@ -6,6 +6,9 @@
import java.util.*;
@ -1023,15 +1023,17 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/EntityPla
int j = 25 - inventory.getTotalArmorValue();
int k = i * j + damageRemainder;
inventory.damageArmor(i);
@@ -523,6 +561,7 @@
@@ -522,7 +560,9 @@
public void destroyCurrentEquippedItem()
{
+ ItemStack orig=inventory.getCurrentItem();
inventory.setInventorySlotContents(inventory.currentItem, null);
+ ForgeHooks.onDestroyCurrentItem(this);
+ ForgeHooks.onDestroyCurrentItem(this,orig);
}
public double getYOffset()
@@ -594,6 +633,10 @@
@@ -594,6 +634,10 @@
public EnumStatus sleepInBedAt(int i, int j, int k)
{
@ -1186,7 +1188,7 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/MovingObj
}
diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/PlayerController.java ../src_work/minecraft/net/minecraft/src/PlayerController.java
--- ../src_base/minecraft/net/minecraft/src/PlayerController.java 2011-08-11 17:02:11.000000000 -0400
+++ ../src_work/minecraft/net/minecraft/src/PlayerController.java 2011-08-17 20:02:41.000000000 -0400
+++ ../src_work/minecraft/net/minecraft/src/PlayerController.java 2011-08-20 03:56:00.000000000 -0400
@@ -3,6 +3,7 @@
// Decompiler options: packimports(3) braces deadcode
@ -1199,7 +1201,7 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/PlayerCon
if(itemstack1.stackSize == 0)
{
entityplayer.inventory.mainInventory[entityplayer.inventory.currentItem] = null;
+ ForgeHooks.onDestroyCurrentItem(entityplayer);
+ ForgeHooks.onDestroyCurrentItem(entityplayer,itemstack1);
}
return true;
} else
@ -1224,7 +1226,7 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/PlayerCon
+ if(!itemstack.useItem(entityplayer, world, i, j, k, l))
+ return false;
+ if(itemstack.stackSize == 0)
+ ForgeHooks.onDestroyCurrentItem(entityplayer);
+ ForgeHooks.onDestroyCurrentItem(entityplayer,itemstack);
+ return true;
}
}
@ -2632,7 +2634,7 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/src/En
public void writeEntityToNBT(NBTTagCompound nbttagcompound)
diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/src/EntityPlayer.java ../src_work/minecraft_server/net/minecraft/src/EntityPlayer.java
--- ../src_base/minecraft_server/net/minecraft/src/EntityPlayer.java 2011-08-11 17:02:12.000000000 -0400
+++ ../src_work/minecraft_server/net/minecraft/src/EntityPlayer.java 2011-08-17 19:06:41.000000000 -0400
+++ ../src_work/minecraft_server/net/minecraft/src/EntityPlayer.java 2011-08-20 03:53:18.000000000 -0400
@@ -6,6 +6,9 @@
import java.util.*;
@ -2699,15 +2701,17 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/src/En
int j = 25 - inventory.getTotalArmorValue();
int k = i * j + damageRemainder;
inventory.damageArmor(i);
@@ -503,6 +541,7 @@
@@ -502,7 +540,9 @@
public void destroyCurrentEquippedItem()
{
+ ItemStack orig=inventory.getCurrentItem();
inventory.setInventorySlotContents(inventory.currentItem, null);
+ ForgeHooks.onDestroyCurrentItem(this);
+ ForgeHooks.onDestroyCurrentItem(this,orig);
}
public double getYOffset()
@@ -568,6 +607,10 @@
@@ -568,6 +608,10 @@
public EnumStatus goToSleep(int i, int j, int k)
{
@ -2775,7 +2779,7 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/src/It
world.setBlockWithNotify(i, j, k, 0);
diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/src/ItemInWorldManager.java ../src_work/minecraft_server/net/minecraft/src/ItemInWorldManager.java
--- ../src_base/minecraft_server/net/minecraft/src/ItemInWorldManager.java 2011-08-11 17:02:12.000000000 -0400
+++ ../src_work/minecraft_server/net/minecraft/src/ItemInWorldManager.java 2011-08-17 20:02:48.000000000 -0400
+++ ../src_work/minecraft_server/net/minecraft/src/ItemInWorldManager.java 2011-08-20 03:56:01.000000000 -0400
@@ -3,6 +3,7 @@
// Decompiler options: packimports(3) braces deadcode
@ -2825,7 +2829,7 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/src/It
if(itemstack1.stackSize == 0)
{
entityplayer.inventory.mainInventory[entityplayer.inventory.currentItem] = null;
+ ForgeHooks.onDestroyCurrentItem(entityplayer);
+ ForgeHooks.onDestroyCurrentItem(entityplayer,itemstack1);
}
return true;
} else
@ -2849,7 +2853,7 @@ diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/src/It
+ if(!itemstack.useItem(entityplayer, world, i, j, k, l))
+ return false;
+ if(itemstack.stackSize == 0)
+ ForgeHooks.onDestroyCurrentItem(entityplayer);
+ ForgeHooks.onDestroyCurrentItem(entityplayer,itemstack);
+ return true;
}
}