diff --git a/forge/forge_client/.classpath b/forge/forge_client/.classpath
new file mode 100755
index 0000000000..fae6017a3b
--- /dev/null
+++ b/forge/forge_client/.classpath
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/forge/forge_client/.project b/forge/forge_client/.project
new file mode 100755
index 0000000000..12d4bdba87
--- /dev/null
+++ b/forge/forge_client/.project
@@ -0,0 +1,29 @@
+
+
+ forge_client
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
+
+ forge_common
+ 2
+ PARENT-1-PROJECT_LOC/forge_common
+
+
+ minecraft
+ 2
+ PARENT-1-WORKSPACE_LOC/src_work/minecraft
+
+
+
diff --git a/forge/forge_common/net/minecraft/src/forge/IBucketHandler.java b/forge/forge_common/net/minecraft/src/forge/IBucketHandler.java
new file mode 100755
index 0000000000..96dd415344
--- /dev/null
+++ b/forge/forge_common/net/minecraft/src/forge/IBucketHandler.java
@@ -0,0 +1,10 @@
+package net.minecraft.src.forge;
+
+import net.minecraft.src.ItemStack;
+import net.minecraft.src.World;
+
+public interface IBucketHandler {
+
+ public ItemStack fillCustomBucket (World w, int i, int j, int k);
+
+}
diff --git a/forge/forge_common/net/minecraft/src/forge/MinecraftForge.java b/forge/forge_common/net/minecraft/src/forge/MinecraftForge.java
new file mode 100755
index 0000000000..2327e2723b
--- /dev/null
+++ b/forge/forge_common/net/minecraft/src/forge/MinecraftForge.java
@@ -0,0 +1,28 @@
+package net.minecraft.src.forge;
+
+import java.util.LinkedList;
+
+import net.minecraft.src.ItemStack;
+import net.minecraft.src.World;
+
+public class MinecraftForge {
+
+ private static LinkedList bucketHandlers = new LinkedList();
+
+ public static ItemStack fillCustomBucket (World w, int i, int j, int k) {
+ for (IBucketHandler handler : bucketHandlers) {
+ ItemStack stack = handler.fillCustomBucket(w, i, j, k);
+
+ if (stack != null) {
+ return stack;
+ }
+ }
+
+ return null;
+ }
+
+ public static void registerCustomBucketHander (IBucketHandler handler) {
+ bucketHandlers.add(handler);
+ }
+
+}
diff --git a/forge/forge_server/.classpath b/forge/forge_server/.classpath
new file mode 100755
index 0000000000..cce36288cd
--- /dev/null
+++ b/forge/forge_server/.classpath
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/forge/forge_server/.project b/forge/forge_server/.project
new file mode 100755
index 0000000000..90891bc878
--- /dev/null
+++ b/forge/forge_server/.project
@@ -0,0 +1,29 @@
+
+
+ forge_server
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
+
+ forge_common
+ 2
+ PARENT-1-PROJECT_LOC/forge_common
+
+
+ minecraft_server
+ 2
+ PARENT-1-WORKSPACE_LOC/src_work/minecraft_server
+
+
+
diff --git a/forge/minecraft.patch b/forge/minecraft.patch
new file mode 100644
index 0000000000..5d1e29efea
--- /dev/null
+++ b/forge/minecraft.patch
@@ -0,0 +1,111 @@
+diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/ItemBucket.java ../src_work/minecraft/net/minecraft/src/ItemBucket.java
+--- ../src_base/minecraft/net/minecraft/src/ItemBucket.java 2011-07-11 21:58:45.174682000 +0200
++++ ../src_work/minecraft/net/minecraft/src/ItemBucket.java 2011-07-14 13:03:34.748396700 +0200
+@@ -6,6 +6,8 @@
+
+ import java.util.Random;
+
++import net.minecraft.src.forge.MinecraftForge;
++
+ // Referenced classes of package net.minecraft.src:
+ // Item, EntityPlayer, Vec3D, MathHelper,
+ // World, MovingObjectPosition, EnumMovingObjectType, Material,
+@@ -55,6 +57,13 @@
+ }
+ if(isFull == 0)
+ {
++ ItemStack customBucket = MinecraftForge.fillCustomBucket(world,
++ i, j, k);
++
++ if (customBucket != null) {
++ return customBucket;
++ }
++
+ if(world.getBlockMaterial(i, j, k) == Material.water && world.getBlockMetadata(i, j, k) == 0)
+ {
+ world.setBlockWithNotify(i, j, k, 0);
+diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/server/MinecraftServer.java ../src_work/minecraft_server/net/minecraft/server/MinecraftServer.java
+--- ../src_base/minecraft_server/net/minecraft/server/MinecraftServer.java 2011-07-11 21:58:45.468698800 +0200
++++ ../src_work/minecraft_server/net/minecraft/server/MinecraftServer.java 2011-07-11 22:00:55.619143000 +0200
+@@ -333,41 +333,22 @@
+ }
+ finally
+ {
+- System.exit(0);
++ try
++ {
++ stopServer();
++ serverStopped = true;
++ }
++ catch(Throwable throwable2)
++ {
++ throwable2.printStackTrace();
++ }
++ finally
++ {
++ System.exit(0);
++ }
+ }
+- break MISSING_BLOCK_LABEL_350;
+- }
+- try
+- {
+- stopServer();
+- serverStopped = true;
+- }
+- catch(Throwable throwable)
+- {
+- throwable.printStackTrace();
+- }
+- finally
+- {
+- System.exit(0);
+- }
+- break MISSING_BLOCK_LABEL_350;
+- Exception exception2;
+- exception2;
+- try
+- {
+- stopServer();
+- serverStopped = true;
+- }
+- catch(Throwable throwable3)
+- {
+- throwable3.printStackTrace();
+- }
+- finally
+- {
+- System.exit(0);
+- }
+- throw exception2;
+ }
++}
+
+ private void doTick()
+ {
+diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/src/ItemBucket.java ../src_work/minecraft_server/net/minecraft/src/ItemBucket.java
+--- ../src_base/minecraft_server/net/minecraft/src/ItemBucket.java 2011-07-11 21:58:45.765715800 +0200
++++ ../src_work/minecraft_server/net/minecraft/src/ItemBucket.java 2011-07-14 13:03:49.701251900 +0200
+@@ -6,6 +6,8 @@
+
+ import java.util.Random;
+
++import net.minecraft.src.forge.MinecraftForge;
++
+ // Referenced classes of package net.minecraft.src:
+ // Item, EntityPlayer, Vec3D, MathHelper,
+ // World, MovingObjectPosition, EnumMovingObjectType, Material,
+@@ -55,6 +57,13 @@
+ }
+ if(isFull == 0)
+ {
++ ItemStack customBucket = MinecraftForge.fillCustomBucket(world,
++ i, j, k);
++
++ if (customBucket != null) {
++ return customBucket;
++ }
++
+ if(world.getBlockMaterial(i, j, k) == Material.water && world.getBlockMetadata(i, j, k) == 0)
+ {
+ world.setBlockWithNotify(i, j, k, 0);
diff --git a/forge/setup.sh b/forge/setup.sh
new file mode 100755
index 0000000000..1ad87c465c
--- /dev/null
+++ b/forge/setup.sh
@@ -0,0 +1,7 @@
+if [ ! -f ../src_base ]; then
+ cp -r ../src ../src_base
+ #patch -p0 < minecraft.patch
+ cp -r ../src ../src_work
+else
+ echo "patch already applied - remove src and src_base and decompile again"
+fi
diff --git a/forge/update_patch.sh b/forge/update_patch.sh
new file mode 100755
index 0000000000..9e9edfbb90
--- /dev/null
+++ b/forge/update_patch.sh
@@ -0,0 +1,5 @@
+rm minecraft.patch
+touch minecraft.patch
+
+diff -u ../src_base ../src_work -r --strip-trailing-cr | tr -d '\r' \
+ >> minecraft.patch