diff --git a/minecraft_server/.classpath b/minecraft_server/.classpath
new file mode 100644
index 0000000..ef38e05
--- /dev/null
+++ b/minecraft_server/.classpath
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/minecraft_server/.project b/minecraft_server/.project
new file mode 100644
index 0000000..85c1741
--- /dev/null
+++ b/minecraft_server/.project
@@ -0,0 +1,53 @@
+
+
+ Minecraft Server
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
+
+ libraries
+ 2
+ $%7BPARENT-1-PROJECT_LOC%7D/libraries
+
+
+
+
+ -1002749744921918690
+
+ 9
+
+ org.eclipse.ui.ide.multiFilter
+ 1.0-name-matches-false-false-src
+
+
+
+ -1002749744921918689
+
+ 9
+
+ org.eclipse.ui.ide.multiFilter
+ 1.0-name-matches-false-false-jars
+
+
+
+ -1002749744921918688
+
+ 9
+
+ org.eclipse.ui.ide.multiFilter
+ 1.0-name-matches-false-false-source
+
+
+
+
diff --git a/minecraft_server/Server.launch b/minecraft_server/Server.launch
new file mode 100644
index 0000000..9c41d48
--- /dev/null
+++ b/minecraft_server/Server.launch
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/minecraft_server/jars/deobfuscated-source.jar b/minecraft_server/jars/deobfuscated-source.jar
new file mode 100644
index 0000000..90c8d04
Binary files /dev/null and b/minecraft_server/jars/deobfuscated-source.jar differ
diff --git a/minecraft_server/jars/deobfuscated.jar b/minecraft_server/jars/deobfuscated.jar
new file mode 100644
index 0000000..c4df5e4
Binary files /dev/null and b/minecraft_server/jars/deobfuscated.jar differ
diff --git a/minecraft_server/src/net/minecraft/server/MinecraftServer.java b/minecraft_server/src/net/minecraft/server/MinecraftServer.java
new file mode 100644
index 0000000..2b48668
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/server/MinecraftServer.java
@@ -0,0 +1,502 @@
+package net.minecraft.server;
+
+import java.awt.GraphicsEnvironment;
+import java.io.File;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import net.minecraft.src.AxisAlignedBB;
+import net.minecraft.src.ConsoleLogManager;
+import net.minecraft.src.EntityPlayerMP;
+import net.minecraft.src.EntityTracker;
+import net.minecraft.src.ICommandListener;
+import net.minecraft.src.IProgressUpdate;
+import net.minecraft.src.IUpdatePlayerListBox;
+import net.minecraft.src.Item;
+import net.minecraft.src.ItemStack;
+import net.minecraft.src.NetworkListenThread;
+import net.minecraft.src.Packet3Chat;
+import net.minecraft.src.Packet4UpdateTime;
+import net.minecraft.src.PropertyManager;
+import net.minecraft.src.ServerCommand;
+import net.minecraft.src.ServerConfigurationManager;
+import net.minecraft.src.ServerGUI;
+import net.minecraft.src.ThreadCommandReader;
+import net.minecraft.src.ThreadServerApplication;
+import net.minecraft.src.ThreadSleepForever;
+import net.minecraft.src.Vec3D;
+import net.minecraft.src.WorldManager;
+import net.minecraft.src.WorldServer;
+
+public class MinecraftServer implements ICommandListener, Runnable {
+ public static Logger logger = Logger.getLogger("Minecraft");
+ public static HashMap field_6037_b = new HashMap();
+ public NetworkListenThread field_6036_c;
+ public PropertyManager propertyManagerObj;
+ public WorldServer worldMngr;
+ public ServerConfigurationManager configManager;
+ private boolean field_6025_n = true;
+ public boolean field_6032_g = false;
+ int field_9014_h = 0;
+ public String field_9013_i;
+ public int field_9012_j;
+ private List field_9010_p = new ArrayList();
+ private List commands = Collections.synchronizedList(new ArrayList());
+ public EntityTracker field_6028_k;
+ public boolean onlineMode;
+ public boolean noAnimals;
+ public boolean field_9011_n;
+
+ public MinecraftServer() {
+ new ThreadSleepForever(this);
+ }
+
+ private boolean func_6008_d() throws UnknownHostException {
+ ThreadCommandReader var1 = new ThreadCommandReader(this);
+ var1.setDaemon(true);
+ var1.start();
+ ConsoleLogManager.init();
+ logger.info("Starting minecraft server version 0.2.8");
+ if(Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) {
+ logger.warning("**** NOT ENOUGH RAM!");
+ logger.warning("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\"");
+ }
+
+ logger.info("Loading properties");
+ this.propertyManagerObj = new PropertyManager(new File("server.properties"));
+ String var2 = this.propertyManagerObj.getStringProperty("server-ip", "");
+ this.onlineMode = this.propertyManagerObj.getBooleanProperty("online-mode", true);
+ this.noAnimals = this.propertyManagerObj.getBooleanProperty("spawn-animals", true);
+ this.field_9011_n = this.propertyManagerObj.getBooleanProperty("pvp", true);
+ InetAddress var3 = null;
+ if(var2.length() > 0) {
+ var3 = InetAddress.getByName(var2);
+ }
+
+ int var4 = this.propertyManagerObj.getIntProperty("server-port", 25565);
+ logger.info("Starting Minecraft server on " + (var2.length() == 0 ? "*" : var2) + ":" + var4);
+
+ try {
+ this.field_6036_c = new NetworkListenThread(this, var3, var4);
+ } catch (IOException var6) {
+ logger.warning("**** FAILED TO BIND TO PORT!");
+ logger.log(Level.WARNING, "The exception was: " + var6.toString());
+ logger.warning("Perhaps a server is already running on that port?");
+ return false;
+ }
+
+ if(!this.onlineMode) {
+ logger.warning("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!");
+ logger.warning("The server will make no attempt to authenticate usernames. Beware.");
+ logger.warning("While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose.");
+ logger.warning("To change this, set \"online-mode\" to \"true\" in the server.settings file.");
+ }
+
+ this.configManager = new ServerConfigurationManager(this);
+ this.field_6028_k = new EntityTracker(this);
+ String var5 = this.propertyManagerObj.getStringProperty("level-name", "world");
+ logger.info("Preparing level \"" + var5 + "\"");
+ this.func_6017_c(var5);
+ logger.info("Done! For help, type \"help\" or \"?\"");
+ return true;
+ }
+
+ private void func_6017_c(String var1) {
+ logger.info("Preparing start region");
+ this.worldMngr = new WorldServer(this, new File("."), var1, this.propertyManagerObj.getBooleanProperty("hellworld", false) ? -1 : 0);
+ this.worldMngr.func_4072_a(new WorldManager(this));
+ this.worldMngr.monstersEnabled = this.propertyManagerObj.getBooleanProperty("spawn-monsters", true) ? 1 : 0;
+ this.configManager.setPlayerManager(this.worldMngr);
+ byte var2 = 10;
+
+ for(int var3 = -var2; var3 <= var2; ++var3) {
+ this.func_6019_a("Preparing spawn area", (var3 + var2) * 100 / (var2 + var2 + 1));
+
+ for(int var4 = -var2; var4 <= var2; ++var4) {
+ if(!this.field_6025_n) {
+ return;
+ }
+
+ this.worldMngr.A.loadChunk((this.worldMngr.spawnX >> 4) + var3, (this.worldMngr.spawnZ >> 4) + var4);
+ }
+ }
+
+ this.func_6011_e();
+ }
+
+ private void func_6019_a(String var1, int var2) {
+ this.field_9013_i = var1;
+ this.field_9012_j = var2;
+ System.out.println(var1 + ": " + var2 + "%");
+ }
+
+ private void func_6011_e() {
+ this.field_9013_i = null;
+ this.field_9012_j = 0;
+ }
+
+ private void saveServerWorld() {
+ logger.info("Saving chunks");
+ this.worldMngr.func_485_a(true, (IProgressUpdate)null);
+ }
+
+ private void func_6013_g() {
+ logger.info("Stopping server");
+ if(this.configManager != null) {
+ this.configManager.savePlayerStates();
+ }
+
+ if(this.worldMngr != null) {
+ this.saveServerWorld();
+ }
+
+ }
+
+ public void func_6016_a() {
+ this.field_6025_n = false;
+ }
+
+ public void run() {
+ try {
+ if(this.func_6008_d()) {
+ long var1 = System.currentTimeMillis();
+ long var3 = 0L;
+
+ while(this.field_6025_n) {
+ long var5 = System.currentTimeMillis();
+ long var7 = var5 - var1;
+ if(var7 > 2000L) {
+ logger.warning("Can\'t keep up! Did the system time change, or is the server overloaded?");
+ var7 = 2000L;
+ }
+
+ if(var7 < 0L) {
+ logger.warning("Time ran backwards! Did the system time change?");
+ var7 = 0L;
+ }
+
+ var3 += var7;
+ var1 = var5;
+
+ while(var3 > 50L) {
+ var3 -= 50L;
+ this.func_6018_h();
+ }
+
+ Thread.sleep(1L);
+ }
+ } else {
+ while(this.field_6025_n) {
+ this.commandLineParser();
+
+ try {
+ Thread.sleep(10L);
+ } catch (InterruptedException var15) {
+ var15.printStackTrace();
+ }
+ }
+ }
+ } catch (Exception var16) {
+ var16.printStackTrace();
+ logger.log(Level.SEVERE, "Unexpected exception", var16);
+
+ while(this.field_6025_n) {
+ this.commandLineParser();
+
+ try {
+ Thread.sleep(10L);
+ } catch (InterruptedException var14) {
+ var14.printStackTrace();
+ }
+ }
+ } finally {
+ this.func_6013_g();
+ this.field_6032_g = true;
+ System.exit(0);
+ }
+
+ }
+
+ private void func_6018_h() {
+ ArrayList var1 = new ArrayList();
+ Iterator var2 = field_6037_b.keySet().iterator();
+
+ while(var2.hasNext()) {
+ String var3 = (String)var2.next();
+ int var4 = ((Integer)field_6037_b.get(var3)).intValue();
+ if(var4 > 0) {
+ field_6037_b.put(var3, Integer.valueOf(var4 - 1));
+ } else {
+ var1.add(var3);
+ }
+ }
+
+ int var6;
+ for(var6 = 0; var6 < var1.size(); ++var6) {
+ field_6037_b.remove(var1.get(var6));
+ }
+
+ AxisAlignedBB.clearBoundingBoxPool();
+ Vec3D.initialize();
+ ++this.field_9014_h;
+ if(this.field_9014_h % 20 == 0) {
+ this.configManager.sendPacketToAllPlayers(new Packet4UpdateTime(this.worldMngr.worldTime));
+ }
+
+ this.worldMngr.tick();
+
+ while(this.worldMngr.func_6156_d()) {
+ }
+
+ this.worldMngr.func_459_b();
+ this.field_6036_c.func_715_a();
+ this.configManager.func_637_b();
+ this.field_6028_k.func_607_a();
+
+ for(var6 = 0; var6 < this.field_9010_p.size(); ++var6) {
+ ((IUpdatePlayerListBox)this.field_9010_p.get(var6)).update();
+ }
+
+ try {
+ this.commandLineParser();
+ } catch (Exception var5) {
+ logger.log(Level.WARNING, "Unexpected exception while parsing console command", var5);
+ }
+
+ }
+
+ public void addCommand(String var1, ICommandListener var2) {
+ this.commands.add(new ServerCommand(var1, var2));
+ }
+
+ public void commandLineParser() {
+ while(this.commands.size() > 0) {
+ ServerCommand var1 = (ServerCommand)this.commands.remove(0);
+ String var2 = var1.command;
+ ICommandListener var3 = var1.commandListener;
+ String var4 = var3.getUsername();
+ if(!var2.toLowerCase().startsWith("help") && !var2.toLowerCase().startsWith("?")) {
+ if(var2.toLowerCase().startsWith("list")) {
+ var3.log("Connected players: " + this.configManager.getPlayerList());
+ } else if(var2.toLowerCase().startsWith("stop")) {
+ this.func_6014_a(var4, "Stopping the server..");
+ this.field_6025_n = false;
+ } else if(var2.toLowerCase().startsWith("save-all")) {
+ this.func_6014_a(var4, "Forcing save..");
+ this.worldMngr.func_485_a(true, (IProgressUpdate)null);
+ this.func_6014_a(var4, "Save complete.");
+ } else if(var2.toLowerCase().startsWith("save-off")) {
+ this.func_6014_a(var4, "Disabling level saving..");
+ this.worldMngr.field_816_A = true;
+ } else if(var2.toLowerCase().startsWith("save-on")) {
+ this.func_6014_a(var4, "Enabling level saving..");
+ this.worldMngr.field_816_A = false;
+ } else {
+ String var11;
+ if(var2.toLowerCase().startsWith("op ")) {
+ var11 = var2.substring(var2.indexOf(" ")).trim();
+ this.configManager.opPlayer(var11);
+ this.func_6014_a(var4, "Opping " + var11);
+ this.configManager.sendChatMessageToPlayer(var11, "\u00a7eYou are now op!");
+ } else if(var2.toLowerCase().startsWith("deop ")) {
+ var11 = var2.substring(var2.indexOf(" ")).trim();
+ this.configManager.deopPlayer(var11);
+ this.configManager.sendChatMessageToPlayer(var11, "\u00a7eYou are no longer op!");
+ this.func_6014_a(var4, "De-opping " + var11);
+ } else if(var2.toLowerCase().startsWith("ban-ip ")) {
+ var11 = var2.substring(var2.indexOf(" ")).trim();
+ this.configManager.banIP(var11);
+ this.func_6014_a(var4, "Banning ip " + var11);
+ } else if(var2.toLowerCase().startsWith("pardon-ip ")) {
+ var11 = var2.substring(var2.indexOf(" ")).trim();
+ this.configManager.unbanIP(var11);
+ this.func_6014_a(var4, "Pardoning ip " + var11);
+ } else {
+ EntityPlayerMP var12;
+ if(var2.toLowerCase().startsWith("ban ")) {
+ var11 = var2.substring(var2.indexOf(" ")).trim();
+ this.configManager.banPlayer(var11);
+ this.func_6014_a(var4, "Banning " + var11);
+ var12 = this.configManager.getPlayerEntity(var11);
+ if(var12 != null) {
+ var12.field_421_a.func_43_c("Banned by admin");
+ }
+ } else if(var2.toLowerCase().startsWith("pardon ")) {
+ var11 = var2.substring(var2.indexOf(" ")).trim();
+ this.configManager.unbanPlayer(var11);
+ this.func_6014_a(var4, "Pardoning " + var11);
+ } else if(var2.toLowerCase().startsWith("kick ")) {
+ var11 = var2.substring(var2.indexOf(" ")).trim();
+ var12 = null;
+
+ for(int var13 = 0; var13 < this.configManager.playerEntities.size(); ++var13) {
+ EntityPlayerMP var14 = (EntityPlayerMP)this.configManager.playerEntities.get(var13);
+ if(var14.username.equalsIgnoreCase(var11)) {
+ var12 = var14;
+ }
+ }
+
+ if(var12 != null) {
+ var12.field_421_a.func_43_c("Kicked by admin");
+ this.func_6014_a(var4, "Kicking " + var12.username);
+ } else {
+ var3.log("Can\'t find user " + var11 + ". No kick.");
+ }
+ } else {
+ String[] var5;
+ EntityPlayerMP var7;
+ if(var2.toLowerCase().startsWith("tp ")) {
+ var5 = var2.split(" ");
+ if(var5.length == 3) {
+ var12 = this.configManager.getPlayerEntity(var5[1]);
+ var7 = this.configManager.getPlayerEntity(var5[2]);
+ if(var12 == null) {
+ var3.log("Can\'t find user " + var5[1] + ". No tp.");
+ } else if(var7 == null) {
+ var3.log("Can\'t find user " + var5[2] + ". No tp.");
+ } else {
+ var12.field_421_a.func_41_a(var7.posX, var7.posY, var7.posZ, var7.rotationYaw, var7.rotationPitch);
+ this.func_6014_a(var4, "Teleporting " + var5[1] + " to " + var5[2] + ".");
+ }
+ } else {
+ var3.log("Syntax error, please provice a source and a target.");
+ }
+ } else if(var2.toLowerCase().startsWith("give ")) {
+ var5 = var2.split(" ");
+ if(var5.length != 3 && var5.length != 4) {
+ return;
+ }
+
+ String var6 = var5[1];
+ var7 = this.configManager.getPlayerEntity(var6);
+ if(var7 != null) {
+ try {
+ int var8 = Integer.parseInt(var5[2]);
+ if(Item.itemsList[var8] != null) {
+ this.func_6014_a(var4, "Giving " + var7.username + " some " + var8);
+ int var9 = 1;
+ if(var5.length > 3) {
+ var9 = this.func_6020_b(var5[3], 1);
+ }
+
+ if(var9 < 1) {
+ var9 = 1;
+ }
+
+ if(var9 > 64) {
+ var9 = 64;
+ }
+
+ var7.func_161_a(new ItemStack(var8, var9));
+ } else {
+ var3.log("There\'s no item with id " + var8);
+ }
+ } catch (NumberFormatException var10) {
+ var3.log("There\'s no item with id " + var5[2]);
+ }
+ } else {
+ var3.log("Can\'t find user " + var6);
+ }
+ } else if(var2.toLowerCase().startsWith("say ")) {
+ var2 = var2.substring(var2.indexOf(" ")).trim();
+ logger.info("[" + var4 + "] " + var2);
+ this.configManager.sendPacketToAllPlayers(new Packet3Chat("\u00a7d[Server] " + var2));
+ } else if(var2.toLowerCase().startsWith("tell ")) {
+ var5 = var2.split(" ");
+ if(var5.length >= 3) {
+ var2 = var2.substring(var2.indexOf(" ")).trim();
+ var2 = var2.substring(var2.indexOf(" ")).trim();
+ logger.info("[" + var4 + "->" + var5[1] + "] " + var2);
+ var2 = "\u00a77" + var4 + " whispers " + var2;
+ logger.info(var2);
+ if(!this.configManager.sendPacketToPlayer(var5[1], new Packet3Chat(var2))) {
+ var3.log("There\'s no player by that name online.");
+ }
+ }
+ } else {
+ logger.info("Unknown console command. Type \"help\" for help.");
+ }
+ }
+ }
+ }
+ } else {
+ var3.log("To run the server without a gui, start it like this:");
+ var3.log(" java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui");
+ var3.log("Console commands:");
+ var3.log(" help or ? shows this message");
+ var3.log(" kick removes a player from the server");
+ var3.log(" ban bans a player from the server");
+ var3.log(" pardon pardons a banned player so that they can connect again");
+ var3.log(" ban-ip bans an IP address from the server");
+ var3.log(" pardon-ip pardons a banned IP address so that they can connect again");
+ var3.log(" op turns a player into an op");
+ var3.log(" deop removes op status from a player");
+ var3.log(" tp moves one player to the same location as another player");
+ var3.log(" give [num] gives a player a resource");
+ var3.log(" tell sends a private message to a player");
+ var3.log(" stop gracefully stops the server");
+ var3.log(" save-all forces a server-wide level save");
+ var3.log(" save-off disables terrain saving (useful for backup scripts)");
+ var3.log(" save-on re-enables terrain saving");
+ var3.log(" list lists all currently connected players");
+ var3.log(" say broadcasts a message to all players");
+ }
+ }
+
+ }
+
+ private void func_6014_a(String var1, String var2) {
+ String var3 = var1 + ": " + var2;
+ this.configManager.sendChatMessageToAllPlayers("\u00a77(" + var3 + ")");
+ logger.info(var3);
+ }
+
+ private int func_6020_b(String var1, int var2) {
+ try {
+ return Integer.parseInt(var1);
+ } catch (NumberFormatException var4) {
+ return var2;
+ }
+ }
+
+ public void func_6022_a(IUpdatePlayerListBox var1) {
+ this.field_9010_p.add(var1);
+ }
+
+ public static void main(String[] var0) {
+ try {
+ MinecraftServer var1 = new MinecraftServer();
+ if(!GraphicsEnvironment.isHeadless() && (var0.length <= 0 || !var0[0].equals("nogui"))) {
+ ServerGUI.initGui(var1);
+ }
+
+ (new ThreadServerApplication("Server thread", var1)).start();
+ } catch (Exception var2) {
+ logger.log(Level.SEVERE, "Failed to start the minecraft server", var2);
+ }
+
+ }
+
+ public File getFile(String var1) {
+ return new File(var1);
+ }
+
+ public void log(String var1) {
+ logger.info(var1);
+ }
+
+ public String getUsername() {
+ return "CONSOLE";
+ }
+
+ public static boolean func_6015_a(MinecraftServer var0) {
+ return var0.field_6025_n;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/AxisAlignedBB.java b/minecraft_server/src/net/minecraft/src/AxisAlignedBB.java
new file mode 100644
index 0000000..66e970c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/AxisAlignedBB.java
@@ -0,0 +1,340 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AxisAlignedBB {
+ private static List boundingBoxes = new ArrayList();
+ private static int numBoundingBoxesInUse = 0;
+ public double minX;
+ public double minY;
+ public double minZ;
+ public double maxX;
+ public double maxY;
+ public double maxZ;
+
+ public static AxisAlignedBB getBoundingBox(double var0, double var2, double var4, double var6, double var8, double var10) {
+ return new AxisAlignedBB(var0, var2, var4, var6, var8, var10);
+ }
+
+ public static void clearBoundingBoxPool() {
+ numBoundingBoxesInUse = 0;
+ }
+
+ public static AxisAlignedBB getBoundingBoxFromPool(double var0, double var2, double var4, double var6, double var8, double var10) {
+ if(numBoundingBoxesInUse >= boundingBoxes.size()) {
+ boundingBoxes.add(getBoundingBox(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D));
+ }
+
+ return ((AxisAlignedBB)boundingBoxes.get(numBoundingBoxesInUse++)).setBounds(var0, var2, var4, var6, var8, var10);
+ }
+
+ private AxisAlignedBB(double var1, double var3, double var5, double var7, double var9, double var11) {
+ this.minX = var1;
+ this.minY = var3;
+ this.minZ = var5;
+ this.maxX = var7;
+ this.maxY = var9;
+ this.maxZ = var11;
+ }
+
+ public AxisAlignedBB setBounds(double var1, double var3, double var5, double var7, double var9, double var11) {
+ this.minX = var1;
+ this.minY = var3;
+ this.minZ = var5;
+ this.maxX = var7;
+ this.maxY = var9;
+ this.maxZ = var11;
+ return this;
+ }
+
+ public AxisAlignedBB addCoord(double var1, double var3, double var5) {
+ double var7 = this.minX;
+ double var9 = this.minY;
+ double var11 = this.minZ;
+ double var13 = this.maxX;
+ double var15 = this.maxY;
+ double var17 = this.maxZ;
+ if(var1 < 0.0D) {
+ var7 += var1;
+ }
+
+ if(var1 > 0.0D) {
+ var13 += var1;
+ }
+
+ if(var3 < 0.0D) {
+ var9 += var3;
+ }
+
+ if(var3 > 0.0D) {
+ var15 += var3;
+ }
+
+ if(var5 < 0.0D) {
+ var11 += var5;
+ }
+
+ if(var5 > 0.0D) {
+ var17 += var5;
+ }
+
+ return getBoundingBoxFromPool(var7, var9, var11, var13, var15, var17);
+ }
+
+ public AxisAlignedBB expands(double var1, double var3, double var5) {
+ double var7 = this.minX - var1;
+ double var9 = this.minY - var3;
+ double var11 = this.minZ - var5;
+ double var13 = this.maxX + var1;
+ double var15 = this.maxY + var3;
+ double var17 = this.maxZ + var5;
+ return getBoundingBoxFromPool(var7, var9, var11, var13, var15, var17);
+ }
+
+ public AxisAlignedBB getOffsetBoundingBox(double var1, double var3, double var5) {
+ return getBoundingBoxFromPool(this.minX + var1, this.minY + var3, this.minZ + var5, this.maxX + var1, this.maxY + var3, this.maxZ + var5);
+ }
+
+ public double func_710_a(AxisAlignedBB var1, double var2) {
+ if(var1.maxY > this.minY && var1.minY < this.maxY) {
+ if(var1.maxZ > this.minZ && var1.minZ < this.maxZ) {
+ double var4;
+ if(var2 > 0.0D && var1.maxX <= this.minX) {
+ var4 = this.minX - var1.maxX;
+ if(var4 < var2) {
+ var2 = var4;
+ }
+ }
+
+ if(var2 < 0.0D && var1.minX >= this.maxX) {
+ var4 = this.maxX - var1.minX;
+ if(var4 > var2) {
+ var2 = var4;
+ }
+ }
+
+ return var2;
+ } else {
+ return var2;
+ }
+ } else {
+ return var2;
+ }
+ }
+
+ public double func_701_b(AxisAlignedBB var1, double var2) {
+ if(var1.maxX > this.minX && var1.minX < this.maxX) {
+ if(var1.maxZ > this.minZ && var1.minZ < this.maxZ) {
+ double var4;
+ if(var2 > 0.0D && var1.maxY <= this.minY) {
+ var4 = this.minY - var1.maxY;
+ if(var4 < var2) {
+ var2 = var4;
+ }
+ }
+
+ if(var2 < 0.0D && var1.minY >= this.maxY) {
+ var4 = this.maxY - var1.minY;
+ if(var4 > var2) {
+ var2 = var4;
+ }
+ }
+
+ return var2;
+ } else {
+ return var2;
+ }
+ } else {
+ return var2;
+ }
+ }
+
+ public double func_709_c(AxisAlignedBB var1, double var2) {
+ if(var1.maxX > this.minX && var1.minX < this.maxX) {
+ if(var1.maxY > this.minY && var1.minY < this.maxY) {
+ double var4;
+ if(var2 > 0.0D && var1.maxZ <= this.minZ) {
+ var4 = this.minZ - var1.maxZ;
+ if(var4 < var2) {
+ var2 = var4;
+ }
+ }
+
+ if(var2 < 0.0D && var1.minZ >= this.maxZ) {
+ var4 = this.maxZ - var1.minZ;
+ if(var4 > var2) {
+ var2 = var4;
+ }
+ }
+
+ return var2;
+ } else {
+ return var2;
+ }
+ } else {
+ return var2;
+ }
+ }
+
+ public boolean intersectsWith(AxisAlignedBB var1) {
+ return var1.maxX > this.minX && var1.minX < this.maxX ? (var1.maxY > this.minY && var1.minY < this.maxY ? var1.maxZ > this.minZ && var1.minZ < this.maxZ : false) : false;
+ }
+
+ public AxisAlignedBB offset(double var1, double var3, double var5) {
+ this.minX += var1;
+ this.minY += var3;
+ this.minZ += var5;
+ this.maxX += var1;
+ this.maxY += var3;
+ this.maxZ += var5;
+ return this;
+ }
+
+ public AxisAlignedBB func_694_e(double var1, double var3, double var5) {
+ double var7 = this.minX;
+ double var9 = this.minY;
+ double var11 = this.minZ;
+ double var13 = this.maxX;
+ double var15 = this.maxY;
+ double var17 = this.maxZ;
+ if(var1 < 0.0D) {
+ var7 -= var1;
+ }
+
+ if(var1 > 0.0D) {
+ var13 -= var1;
+ }
+
+ if(var3 < 0.0D) {
+ var9 -= var3;
+ }
+
+ if(var3 > 0.0D) {
+ var15 -= var3;
+ }
+
+ if(var5 < 0.0D) {
+ var11 -= var5;
+ }
+
+ if(var5 > 0.0D) {
+ var17 -= var5;
+ }
+
+ return getBoundingBoxFromPool(var7, var9, var11, var13, var15, var17);
+ }
+
+ public AxisAlignedBB copy() {
+ return getBoundingBoxFromPool(this.minX, this.minY, this.minZ, this.maxX, this.maxY, this.maxZ);
+ }
+
+ public MovingObjectPosition func_706_a(Vec3D var1, Vec3D var2) {
+ Vec3D var3 = var1.getIntermediateWithXValue(var2, this.minX);
+ Vec3D var4 = var1.getIntermediateWithXValue(var2, this.maxX);
+ Vec3D var5 = var1.getIntermediateWithYValue(var2, this.minY);
+ Vec3D var6 = var1.getIntermediateWithYValue(var2, this.maxY);
+ Vec3D var7 = var1.getIntermediateWithZValue(var2, this.minZ);
+ Vec3D var8 = var1.getIntermediateWithZValue(var2, this.maxZ);
+ if(!this.isVecInYZ(var3)) {
+ var3 = null;
+ }
+
+ if(!this.isVecInYZ(var4)) {
+ var4 = null;
+ }
+
+ if(!this.isVecInXZ(var5)) {
+ var5 = null;
+ }
+
+ if(!this.isVecInXZ(var6)) {
+ var6 = null;
+ }
+
+ if(!this.isVecInXY(var7)) {
+ var7 = null;
+ }
+
+ if(!this.isVecInXY(var8)) {
+ var8 = null;
+ }
+
+ Vec3D var9 = null;
+ if(var3 != null && (var9 == null || var1.squareDistanceTo(var3) < var1.squareDistanceTo(var9))) {
+ var9 = var3;
+ }
+
+ if(var4 != null && (var9 == null || var1.squareDistanceTo(var4) < var1.squareDistanceTo(var9))) {
+ var9 = var4;
+ }
+
+ if(var5 != null && (var9 == null || var1.squareDistanceTo(var5) < var1.squareDistanceTo(var9))) {
+ var9 = var5;
+ }
+
+ if(var6 != null && (var9 == null || var1.squareDistanceTo(var6) < var1.squareDistanceTo(var9))) {
+ var9 = var6;
+ }
+
+ if(var7 != null && (var9 == null || var1.squareDistanceTo(var7) < var1.squareDistanceTo(var9))) {
+ var9 = var7;
+ }
+
+ if(var8 != null && (var9 == null || var1.squareDistanceTo(var8) < var1.squareDistanceTo(var9))) {
+ var9 = var8;
+ }
+
+ if(var9 == null) {
+ return null;
+ } else {
+ byte var10 = -1;
+ if(var9 == var3) {
+ var10 = 4;
+ }
+
+ if(var9 == var4) {
+ var10 = 5;
+ }
+
+ if(var9 == var5) {
+ var10 = 0;
+ }
+
+ if(var9 == var6) {
+ var10 = 1;
+ }
+
+ if(var9 == var7) {
+ var10 = 2;
+ }
+
+ if(var9 == var8) {
+ var10 = 3;
+ }
+
+ return new MovingObjectPosition(0, 0, 0, var10, var9);
+ }
+ }
+
+ private boolean isVecInYZ(Vec3D var1) {
+ return var1 == null ? false : var1.yCoord >= this.minY && var1.yCoord <= this.maxY && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ;
+ }
+
+ private boolean isVecInXZ(Vec3D var1) {
+ return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ;
+ }
+
+ private boolean isVecInXY(Vec3D var1) {
+ return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.yCoord >= this.minY && var1.yCoord <= this.maxY;
+ }
+
+ public void setBB(AxisAlignedBB var1) {
+ this.minX = var1.minX;
+ this.minY = var1.minY;
+ this.minZ = var1.minZ;
+ this.maxX = var1.maxX;
+ this.maxY = var1.maxY;
+ this.maxZ = var1.maxZ;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Block.java b/minecraft_server/src/net/minecraft/src/Block.java
new file mode 100644
index 0000000..618e47e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Block.java
@@ -0,0 +1,455 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+public class Block {
+ public static final StepSound soundPowderFootstep = new StepSound("stone", 1.0F, 1.0F);
+ public static final StepSound soundWoodFootstep = new StepSound("wood", 1.0F, 1.0F);
+ public static final StepSound soundGravelFootstep = new StepSound("gravel", 1.0F, 1.0F);
+ public static final StepSound soundGrassFootstep = new StepSound("grass", 1.0F, 1.0F);
+ public static final StepSound soundStoneFootstep = new StepSound("stone", 1.0F, 1.0F);
+ public static final StepSound soundMetalFootstep = new StepSound("stone", 1.0F, 1.5F);
+ public static final StepSound soundGlassFootstep = new StepSoundStone("stone", 1.0F, 1.0F);
+ public static final StepSound soundClothFootstep = new StepSound("cloth", 1.0F, 1.0F);
+ public static final StepSound soundSandFootstep = new StepSoundSand("sand", 1.0F, 1.0F);
+ public static final Block[] blocksList = new Block[256];
+ public static final boolean[] tickOnLoad = new boolean[256];
+ public static final boolean[] field_540_p = new boolean[256];
+ public static final boolean[] isBlockContainer = new boolean[256];
+ public static final int[] lightOpacity = new int[256];
+ public static final boolean[] field_537_s = new boolean[256];
+ public static final int[] lightValue = new int[256];
+ public static final Block stone = (new BlockStone(1, 1)).setHardness(1.5F).setResistance(10.0F).setStepSound(soundStoneFootstep);
+ public static final BlockGrass grass = (BlockGrass)(new BlockGrass(2)).setHardness(0.6F).setStepSound(soundGrassFootstep);
+ public static final Block dirt = (new BlockDirt(3, 2)).setHardness(0.5F).setStepSound(soundGravelFootstep);
+ public static final Block cobblestone = (new Block(4, 16, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep);
+ public static final Block planks = (new Block(5, 4, Material.wood)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep);
+ public static final Block sapling = (new BlockSapling(6, 15)).setHardness(0.0F).setStepSound(soundGrassFootstep);
+ public static final Block bedrock = (new Block(7, 17, Material.rock)).setHardness(-1.0F).setResistance(6000000.0F).setStepSound(soundStoneFootstep);
+ public static final Block waterStill = (new BlockFlowing(8, Material.water)).setHardness(100.0F).setLightOpacity(3);
+ public static final Block waterMoving = (new BlockStationary(9, Material.water)).setHardness(100.0F).setLightOpacity(3);
+ public static final Block lavaStill = (new BlockFlowing(10, Material.lava)).setHardness(0.0F).setLightValue(1.0F).setLightOpacity(255);
+ public static final Block lavaMoving = (new BlockStationary(11, Material.lava)).setHardness(100.0F).setLightValue(1.0F).setLightOpacity(255);
+ public static final Block sand = (new BlockSand(12, 18)).setHardness(0.5F).setStepSound(soundSandFootstep);
+ public static final Block gravel = (new BlockGravel(13, 19)).setHardness(0.6F).setStepSound(soundGravelFootstep);
+ public static final Block oreGold = (new BlockOre(14, 32)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep);
+ public static final Block oreIron = (new BlockOre(15, 33)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep);
+ public static final Block oreCoal = (new BlockOre(16, 34)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep);
+ public static final Block wood = (new BlockLog(17)).setHardness(2.0F).setStepSound(soundWoodFootstep);
+ public static final BlockLeaves leaves = (BlockLeaves)(new BlockLeaves(18, 52)).setHardness(0.2F).setLightOpacity(1).setStepSound(soundGrassFootstep);
+ public static final Block sponge = (new BlockSponge(19)).setHardness(0.6F).setStepSound(soundGrassFootstep);
+ public static final Block glass = (new BlockGlass(20, 49, Material.field_4216_o, false)).setHardness(0.3F).setStepSound(soundGlassFootstep);
+ public static final Block field_9042_N = null;
+ public static final Block field_9041_O = null;
+ public static final Block field_9040_P = null;
+ public static final Block field_9039_Q = null;
+ public static final Block field_9038_R = null;
+ public static final Block field_9037_S = null;
+ public static final Block field_9036_T = null;
+ public static final Block field_9034_U = null;
+ public static final Block field_9033_V = null;
+ public static final Block field_9032_W = null;
+ public static final Block field_9031_X = null;
+ public static final Block field_9030_Y = null;
+ public static final Block field_9029_Z = null;
+ public static final Block field_9049_aa = null;
+ public static final Block cloth = (new Block(35, 64, Material.field_4217_k)).setHardness(0.8F).setStepSound(soundClothFootstep);
+ public static final Block field_9048_ac = null;
+ public static final BlockFlower plantYellow = (BlockFlower)(new BlockFlower(37, 13)).setHardness(0.0F).setStepSound(soundGrassFootstep);
+ public static final BlockFlower plantRed = (BlockFlower)(new BlockFlower(38, 12)).setHardness(0.0F).setStepSound(soundGrassFootstep);
+ public static final BlockFlower mushroomBrown = (BlockFlower)(new BlockMushroom(39, 29)).setHardness(0.0F).setStepSound(soundGrassFootstep).setLightValue(2.0F / 16.0F);
+ public static final BlockFlower mushroomRed = (BlockFlower)(new BlockMushroom(40, 28)).setHardness(0.0F).setStepSound(soundGrassFootstep);
+ public static final Block blockGold = (new BlockOreBlock(41, 39)).setHardness(3.0F).setResistance(10.0F).setStepSound(soundMetalFootstep);
+ public static final Block blockSteel = (new BlockOreBlock(42, 38)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep);
+ public static final Block stairDouble = (new BlockStep(43, true)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep);
+ public static final Block stairSingle = (new BlockStep(44, false)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep);
+ public static final Block brick = (new Block(45, 7, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep);
+ public static final Block tnt = (new BlockTNT(46, 8)).setHardness(0.0F).setStepSound(soundGrassFootstep);
+ public static final Block bookShelf = (new BlockBookshelf(47, 35)).setHardness(1.5F).setStepSound(soundWoodFootstep);
+ public static final Block cobblestoneMossy = (new Block(48, 36, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep);
+ public static final Block obsidian = (new BlockObsidian(49, 37)).setHardness(10.0F).setResistance(2000.0F).setStepSound(soundStoneFootstep);
+ public static final Block torchWood = (new BlockTorch(50, 80)).setHardness(0.0F).setLightValue(15.0F / 16.0F).setStepSound(soundWoodFootstep);
+ public static final BlockFire fire = (BlockFire)((BlockFire)(new BlockFire(51, 31)).setHardness(0.0F).setLightValue(1.0F).setStepSound(soundWoodFootstep));
+ public static final Block mobSpawner = (new BlockMobSpawner(52, 65)).setHardness(5.0F).setStepSound(soundMetalFootstep);
+ public static final Block stairCompactPlanks = new BlockStairs(53, planks);
+ public static final Block crate = (new BlockChest(54)).setHardness(2.5F).setStepSound(soundWoodFootstep);
+ public static final Block redstoneWire = (new BlockRedstoneWire(55, 84)).setHardness(0.0F).setStepSound(soundPowderFootstep);
+ public static final Block oreDiamond = (new BlockOre(56, 50)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep);
+ public static final Block blockDiamond = (new BlockOreBlock(57, 40)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep);
+ public static final Block workbench = (new BlockWorkbench(58)).setHardness(2.5F).setStepSound(soundWoodFootstep);
+ public static final Block crops = (new BlockCrops(59, 88)).setHardness(0.0F).setStepSound(soundGrassFootstep);
+ public static final Block tilledField = (new BlockSoil(60)).setHardness(0.6F).setStepSound(soundGravelFootstep);
+ public static final Block stoneOvenIdle = (new BlockFurnace(61, false)).setHardness(3.5F).setStepSound(soundStoneFootstep);
+ public static final Block stoneOvenActive = (new BlockFurnace(62, true)).setHardness(3.5F).setStepSound(soundStoneFootstep).setLightValue(14.0F / 16.0F);
+ public static final Block signPost = (new BlockSign(63, TileEntitySign.class, true)).setHardness(1.0F).setStepSound(soundWoodFootstep);
+ public static final Block doorWood = (new BlockDoor(64, Material.wood)).setHardness(3.0F).setStepSound(soundWoodFootstep);
+ public static final Block ladder = (new BlockLadder(65, 83)).setHardness(0.4F).setStepSound(soundWoodFootstep);
+ public static final Block minecartTrack = (new BlockMinecartTrack(66, 128)).setHardness(0.7F).setStepSound(soundMetalFootstep);
+ public static final Block stairCompactCobblestone = new BlockStairs(67, cobblestone);
+ public static final Block signWall = (new BlockSign(68, TileEntitySign.class, false)).setHardness(1.0F).setStepSound(soundWoodFootstep);
+ public static final Block lever = (new BlockLever(69, 96)).setHardness(0.5F).setStepSound(soundWoodFootstep);
+ public static final Block pressurePlateStone = (new BlockPressurePlate(70, stone.blockIndexInTexture, EnumMobType.mobs)).setHardness(0.5F).setStepSound(soundStoneFootstep);
+ public static final Block doorSteel = (new BlockDoor(71, Material.iron)).setHardness(5.0F).setStepSound(soundMetalFootstep);
+ public static final Block pressurePlatePlanks = (new BlockPressurePlate(72, planks.blockIndexInTexture, EnumMobType.everything)).setHardness(0.5F).setStepSound(soundWoodFootstep);
+ public static final Block oreRedstone = (new BlockRedstoneOre(73, 51, false)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep);
+ public static final Block oreRedstoneGlowing = (new BlockRedstoneOre(74, 51, true)).setLightValue(10.0F / 16.0F).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep);
+ public static final Block torchRedstoneIdle = (new BlockRedstoneTorch(75, 115, false)).setHardness(0.0F).setStepSound(soundWoodFootstep);
+ public static final Block torchRedstoneActive = (new BlockRedstoneTorch(76, 99, true)).setHardness(0.0F).setLightValue(0.5F).setStepSound(soundWoodFootstep);
+ public static final Block button = (new BlockButton(77, stone.blockIndexInTexture)).setHardness(0.5F).setStepSound(soundStoneFootstep);
+ public static final Block snow = (new BlockSnow(78, 66)).setHardness(0.1F).setStepSound(soundClothFootstep);
+ public static final Block ice = (new BlockIce(79, 67)).setHardness(0.5F).setLightOpacity(3).setStepSound(soundGlassFootstep);
+ public static final Block blockSnow = (new BlockSnowBlock(80, 66)).setHardness(0.2F).setStepSound(soundClothFootstep);
+ public static final Block cactus = (new BlockCactus(81, 70)).setHardness(0.4F).setStepSound(soundClothFootstep);
+ public static final Block blockClay = (new BlockClay(82, 72)).setHardness(0.6F).setStepSound(soundGravelFootstep);
+ public static final Block reed = (new BlockReed(83, 73)).setHardness(0.0F).setStepSound(soundGrassFootstep);
+ public static final Block jukebox = (new BlockJukeBox(84, 74)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep);
+ public static final Block field_9050_aZ = (new BlockFence(85, 4)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep);
+ public static final Block pumpkin = (new BlockPumpkin(86, 102, false)).setHardness(1.0F).setStepSound(soundWoodFootstep);
+ public static final Block bloodStone = (new BlockBloodStone(87, 103)).setHardness(0.4F).setStepSound(soundStoneFootstep);
+ public static final Block slowSand = (new BlockSlowSand(88, 104)).setHardness(0.5F).setStepSound(soundSandFootstep);
+ public static final Block lightStone = (new BlockLightStone(89, 105, Material.field_4216_o)).setHardness(0.3F).setStepSound(soundGlassFootstep).setLightValue(1.0F);
+ public static final BlockPortal portal = (BlockPortal)((BlockPortal)(new BlockPortal(90, 14)).setHardness(-1.0F).setStepSound(soundGlassFootstep).setLightValue(12.0F / 16.0F));
+ public static final Block field_9035_bf = (new BlockPumpkin(91, 102, true)).setHardness(1.0F).setStepSound(soundWoodFootstep).setLightValue(1.0F);
+ public int blockIndexInTexture;
+ public final int blockID;
+ protected float blockHardness;
+ protected float blockResistance;
+ public double minX;
+ public double minY;
+ public double minZ;
+ public double maxX;
+ public double maxY;
+ public double maxZ;
+ public StepSound stepSound;
+ public float field_554_bm;
+ public final Material blockMaterial;
+ public float slipperiness;
+
+ protected Block(int var1, Material var2) {
+ this.stepSound = soundPowderFootstep;
+ this.field_554_bm = 1.0F;
+ this.slipperiness = 0.6F;
+ if(blocksList[var1] != null) {
+ throw new IllegalArgumentException("Slot " + var1 + " is already occupied by " + blocksList[var1] + " when adding " + this);
+ } else {
+ this.blockMaterial = var2;
+ blocksList[var1] = this;
+ this.blockID = var1;
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ field_540_p[var1] = this.allowsAttachment();
+ lightOpacity[var1] = this.allowsAttachment() ? 255 : 0;
+ field_537_s[var1] = this.unusedMethod();
+ isBlockContainer[var1] = false;
+ }
+ }
+
+ protected Block(int var1, int var2, Material var3) {
+ this(var1, var3);
+ this.blockIndexInTexture = var2;
+ }
+
+ protected Block setStepSound(StepSound var1) {
+ this.stepSound = var1;
+ return this;
+ }
+
+ protected Block setLightOpacity(int var1) {
+ lightOpacity[this.blockID] = var1;
+ return this;
+ }
+
+ protected Block setLightValue(float var1) {
+ lightValue[this.blockID] = (int)(15.0F * var1);
+ return this;
+ }
+
+ protected Block setResistance(float var1) {
+ this.blockResistance = var1 * 3.0F;
+ return this;
+ }
+
+ private boolean unusedMethod() {
+ return false;
+ }
+
+ protected Block setHardness(float var1) {
+ this.blockHardness = var1;
+ if(this.blockResistance < var1 * 5.0F) {
+ this.blockResistance = var1 * 5.0F;
+ }
+
+ return this;
+ }
+
+ protected void setTickOnLoad(boolean var1) {
+ tickOnLoad[this.blockID] = var1;
+ }
+
+ public void setBlockBounds(float var1, float var2, float var3, float var4, float var5, float var6) {
+ this.minX = (double)var1;
+ this.minY = (double)var2;
+ this.minZ = (double)var3;
+ this.maxX = (double)var4;
+ this.maxY = (double)var5;
+ this.maxZ = (double)var6;
+ }
+
+ public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ return var5 == 0 && this.minY > 0.0D ? true : (var5 == 1 && this.maxY < 1.0D ? true : (var5 == 2 && this.minZ > 0.0D ? true : (var5 == 3 && this.maxZ < 1.0D ? true : (var5 == 4 && this.minX > 0.0D ? true : (var5 == 5 && this.maxX < 1.0D ? true : !var1.doesBlockAllowAttachment(var2, var3, var4))))));
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return this.blockIndexInTexture;
+ }
+
+ public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) {
+ AxisAlignedBB var7 = this.getCollisionBoundingBoxFromPool(var1, var2, var3, var4);
+ if(var7 != null && var5.intersectsWith(var7)) {
+ var6.add(var7);
+ }
+
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return AxisAlignedBB.getBoundingBoxFromPool((double)var2 + this.minX, (double)var3 + this.minY, (double)var4 + this.minZ, (double)var2 + this.maxX, (double)var3 + this.maxY, (double)var4 + this.maxZ);
+ }
+
+ public boolean allowsAttachment() {
+ return true;
+ }
+
+ public boolean canCollideCheck(int var1, boolean var2) {
+ return this.isCollidable();
+ }
+
+ public boolean isCollidable() {
+ return true;
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ }
+
+ public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) {
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ }
+
+ public int tickRate() {
+ return 10;
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ }
+
+ public int quantityDropped(Random var1) {
+ return 1;
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return this.blockID;
+ }
+
+ public float func_254_a(EntityPlayer var1) {
+ return this.blockHardness < 0.0F ? 0.0F : (!var1.func_167_b(this) ? 1.0F / this.blockHardness / 100.0F : var1.getCurrentPlayerStrVsBlock(this) / this.blockHardness / 30.0F);
+ }
+
+ public void dropBlockAsItem(World var1, int var2, int var3, int var4, int var5) {
+ this.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, 1.0F);
+ }
+
+ public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) {
+ if(!var1.multiplayerWorld) {
+ int var7 = this.quantityDropped(var1.rand);
+
+ for(int var8 = 0; var8 < var7; ++var8) {
+ if(var1.rand.nextFloat() <= var6) {
+ int var9 = this.idDropped(var5, var1.rand);
+ if(var9 > 0) {
+ float var10 = 0.7F;
+ double var11 = (double)(var1.rand.nextFloat() * var10) + (double)(1.0F - var10) * 0.5D;
+ double var13 = (double)(var1.rand.nextFloat() * var10) + (double)(1.0F - var10) * 0.5D;
+ double var15 = (double)(var1.rand.nextFloat() * var10) + (double)(1.0F - var10) * 0.5D;
+ EntityItem var17 = new EntityItem(var1, (double)var2 + var11, (double)var3 + var13, (double)var4 + var15, new ItemStack(var9));
+ var17.field_433_ad = 10;
+ var1.entityJoinedWorld(var17);
+ }
+ }
+ }
+
+ }
+ }
+
+ public float func_226_a(Entity var1) {
+ return this.blockResistance / 5.0F;
+ }
+
+ public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) {
+ this.setBlockBoundsBasedOnState(var1, var2, var3, var4);
+ var5 = var5.addVector((double)(-var2), (double)(-var3), (double)(-var4));
+ var6 = var6.addVector((double)(-var2), (double)(-var3), (double)(-var4));
+ Vec3D var7 = var5.getIntermediateWithXValue(var6, this.minX);
+ Vec3D var8 = var5.getIntermediateWithXValue(var6, this.maxX);
+ Vec3D var9 = var5.getIntermediateWithYValue(var6, this.minY);
+ Vec3D var10 = var5.getIntermediateWithYValue(var6, this.maxY);
+ Vec3D var11 = var5.getIntermediateWithZValue(var6, this.minZ);
+ Vec3D var12 = var5.getIntermediateWithZValue(var6, this.maxZ);
+ if(!this.isVecInsideYZBounds(var7)) {
+ var7 = null;
+ }
+
+ if(!this.isVecInsideYZBounds(var8)) {
+ var8 = null;
+ }
+
+ if(!this.isVecInsideXZBounds(var9)) {
+ var9 = null;
+ }
+
+ if(!this.isVecInsideXZBounds(var10)) {
+ var10 = null;
+ }
+
+ if(!this.isVecInsideXYBounds(var11)) {
+ var11 = null;
+ }
+
+ if(!this.isVecInsideXYBounds(var12)) {
+ var12 = null;
+ }
+
+ Vec3D var13 = null;
+ if(var7 != null && (var13 == null || var5.distanceTo(var7) < var5.distanceTo(var13))) {
+ var13 = var7;
+ }
+
+ if(var8 != null && (var13 == null || var5.distanceTo(var8) < var5.distanceTo(var13))) {
+ var13 = var8;
+ }
+
+ if(var9 != null && (var13 == null || var5.distanceTo(var9) < var5.distanceTo(var13))) {
+ var13 = var9;
+ }
+
+ if(var10 != null && (var13 == null || var5.distanceTo(var10) < var5.distanceTo(var13))) {
+ var13 = var10;
+ }
+
+ if(var11 != null && (var13 == null || var5.distanceTo(var11) < var5.distanceTo(var13))) {
+ var13 = var11;
+ }
+
+ if(var12 != null && (var13 == null || var5.distanceTo(var12) < var5.distanceTo(var13))) {
+ var13 = var12;
+ }
+
+ if(var13 == null) {
+ return null;
+ } else {
+ byte var14 = -1;
+ if(var13 == var7) {
+ var14 = 4;
+ }
+
+ if(var13 == var8) {
+ var14 = 5;
+ }
+
+ if(var13 == var9) {
+ var14 = 0;
+ }
+
+ if(var13 == var10) {
+ var14 = 1;
+ }
+
+ if(var13 == var11) {
+ var14 = 2;
+ }
+
+ if(var13 == var12) {
+ var14 = 3;
+ }
+
+ return new MovingObjectPosition(var2, var3, var4, var14, var13.addVector((double)var2, (double)var3, (double)var4));
+ }
+ }
+
+ private boolean isVecInsideYZBounds(Vec3D var1) {
+ return var1 == null ? false : var1.yCoord >= this.minY && var1.yCoord <= this.maxY && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ;
+ }
+
+ private boolean isVecInsideXZBounds(Vec3D var1) {
+ return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ;
+ }
+
+ private boolean isVecInsideXYBounds(Vec3D var1) {
+ return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.yCoord >= this.minY && var1.yCoord <= this.maxY;
+ }
+
+ public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) {
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockId(var2, var3, var4);
+ return var5 == 0 || blocksList[var5].blockMaterial.getIsLiquid();
+ }
+
+ public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ return false;
+ }
+
+ public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) {
+ }
+
+ public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) {
+ }
+
+ public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ }
+
+ public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3D var6) {
+ }
+
+ public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
+ }
+
+ public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ return false;
+ }
+
+ public boolean canProvidePower() {
+ return false;
+ }
+
+ public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) {
+ }
+
+ public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) {
+ return false;
+ }
+
+ public void func_12007_g(World var1, int var2, int var3, int var4, int var5) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var5);
+ }
+
+ public boolean canBlockStay(World var1, int var2, int var3, int var4) {
+ return true;
+ }
+
+ public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) {
+ }
+
+ static {
+ for(int var0 = 0; var0 < 256; ++var0) {
+ if(blocksList[var0] != null) {
+ Item.itemsList[var0] = new ItemBlock(var0 - 256);
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockBloodStone.java b/minecraft_server/src/net/minecraft/src/BlockBloodStone.java
new file mode 100644
index 0000000..4416764
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockBloodStone.java
@@ -0,0 +1,7 @@
+package net.minecraft.src;
+
+public class BlockBloodStone extends Block {
+ public BlockBloodStone(int var1, int var2) {
+ super(var1, var2, Material.rock);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockBookshelf.java b/minecraft_server/src/net/minecraft/src/BlockBookshelf.java
new file mode 100644
index 0000000..35e3631
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockBookshelf.java
@@ -0,0 +1,17 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockBookshelf extends Block {
+ public BlockBookshelf(int var1, int var2) {
+ super(var1, var2, Material.wood);
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return var1 <= 1 ? 4 : this.blockIndexInTexture;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 0;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockBreakable.java b/minecraft_server/src/net/minecraft/src/BlockBreakable.java
new file mode 100644
index 0000000..aa20ce1
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockBreakable.java
@@ -0,0 +1,19 @@
+package net.minecraft.src;
+
+public class BlockBreakable extends Block {
+ private boolean field_6084_a;
+
+ protected BlockBreakable(int var1, int var2, Material var3, boolean var4) {
+ super(var1, var2, var3);
+ this.field_6084_a = var4;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockId(var2, var3, var4);
+ return !this.field_6084_a && var6 == this.blockID ? false : super.isSideInsideCoordinate(var1, var2, var3, var4, var5);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockButton.java b/minecraft_server/src/net/minecraft/src/BlockButton.java
new file mode 100644
index 0000000..9053848
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockButton.java
@@ -0,0 +1,225 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockButton extends Block {
+ protected BlockButton(int var1, int var2) {
+ super(var1, var2, Material.circuits);
+ this.setTickOnLoad(true);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public int tickRate() {
+ return 20;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return var1.doesBlockAllowAttachment(var2 - 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2 + 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 - 1) ? true : var1.doesBlockAllowAttachment(var2, var3, var4 + 1)));
+ }
+
+ public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ int var7 = var6 & 8;
+ var6 &= 7;
+ if(var5 == 2 && var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ var6 = 4;
+ }
+
+ if(var5 == 3 && var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ var6 = 3;
+ }
+
+ if(var5 == 4 && var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ var6 = 2;
+ }
+
+ if(var5 == 5 && var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ var6 = 1;
+ }
+
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + var7);
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 1);
+ } else if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 2);
+ } else if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 3);
+ } else if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 4);
+ }
+
+ this.func_322_g(var1, var2, var3, var4);
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ if(this.func_322_g(var1, var2, var3, var4)) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4) & 7;
+ boolean var7 = false;
+ if(!var1.doesBlockAllowAttachment(var2 - 1, var3, var4) && var6 == 1) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2 + 1, var3, var4) && var6 == 2) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2, var3, var4 - 1) && var6 == 3) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2, var3, var4 + 1) && var6 == 4) {
+ var7 = true;
+ }
+
+ if(var7) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+ }
+
+ }
+
+ private boolean func_322_g(World var1, int var2, int var3, int var4) {
+ if(!this.canPlaceBlockAt(var1, var2, var3, var4)) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ int var6 = var5 & 7;
+ boolean var7 = (var5 & 8) > 0;
+ float var8 = 6.0F / 16.0F;
+ float var9 = 10.0F / 16.0F;
+ float var10 = 3.0F / 16.0F;
+ float var11 = 2.0F / 16.0F;
+ if(var7) {
+ var11 = 1.0F / 16.0F;
+ }
+
+ if(var6 == 1) {
+ this.setBlockBounds(0.0F, var8, 0.5F - var10, var11, var9, 0.5F + var10);
+ } else if(var6 == 2) {
+ this.setBlockBounds(1.0F - var11, var8, 0.5F - var10, 1.0F, var9, 0.5F + var10);
+ } else if(var6 == 3) {
+ this.setBlockBounds(0.5F - var10, var8, 0.0F, 0.5F + var10, var9, var11);
+ } else if(var6 == 4) {
+ this.setBlockBounds(0.5F - var10, var8, 1.0F - var11, 0.5F + var10, var9, 1.0F);
+ }
+
+ }
+
+ public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ this.blockActivated(var1, var2, var3, var4, var5);
+ }
+
+ public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ if(var1.multiplayerWorld) {
+ return true;
+ } else {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ int var7 = var6 & 7;
+ int var8 = 8 - (var6 & 8);
+ if(var8 == 0) {
+ return true;
+ } else {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + var8);
+ var1.func_519_b(var2, var3, var4, var2, var3, var4);
+ var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, 0.6F);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ if(var7 == 1) {
+ var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID);
+ } else if(var7 == 2) {
+ var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID);
+ } else if(var7 == 3) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID);
+ } else if(var7 == 4) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID);
+ } else {
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ }
+
+ var1.scheduleBlockUpdate(var2, var3, var4, this.blockID);
+ return true;
+ }
+ }
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ if((var5 & 8) > 0) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ int var6 = var5 & 7;
+ if(var6 == 1) {
+ var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID);
+ } else if(var6 == 2) {
+ var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID);
+ } else if(var6 == 3) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID);
+ } else if(var6 == 4) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID);
+ } else {
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ }
+ }
+
+ super.onBlockRemoval(var1, var2, var3, var4);
+ }
+
+ public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ return (var1.getBlockMetadata(var2, var3, var4) & 8) > 0;
+ }
+
+ public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if((var6 & 8) == 0) {
+ return false;
+ } else {
+ int var7 = var6 & 7;
+ return var7 == 5 && var5 == 1 ? true : (var7 == 4 && var5 == 2 ? true : (var7 == 3 && var5 == 3 ? true : (var7 == 2 && var5 == 4 ? true : var7 == 1 && var5 == 5)));
+ }
+ }
+
+ public boolean canProvidePower() {
+ return true;
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(!var1.multiplayerWorld) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if((var6 & 8) != 0) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6 & 7);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ int var7 = var6 & 7;
+ if(var7 == 1) {
+ var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID);
+ } else if(var7 == 2) {
+ var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID);
+ } else if(var7 == 3) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID);
+ } else if(var7 == 4) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID);
+ } else {
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ }
+
+ var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, 0.5F);
+ var1.func_519_b(var2, var3, var4, var2, var3, var4);
+ }
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockCactus.java b/minecraft_server/src/net/minecraft/src/BlockCactus.java
new file mode 100644
index 0000000..319818e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockCactus.java
@@ -0,0 +1,73 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockCactus extends Block {
+ protected BlockCactus(int var1, int var2) {
+ super(var1, var2, Material.field_4214_u);
+ this.setTickOnLoad(true);
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(var1.getBlockId(var2, var3 + 1, var4) == 0) {
+ int var6;
+ for(var6 = 1; var1.getBlockId(var2, var3 - var6, var4) == this.blockID; ++var6) {
+ }
+
+ if(var6 < 3) {
+ int var7 = var1.getBlockMetadata(var2, var3, var4);
+ if(var7 == 15) {
+ var1.setBlockWithNotify(var2, var3 + 1, var4, this.blockID);
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 0);
+ } else {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + 1);
+ }
+ }
+ }
+
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ float var5 = 1.0F / 16.0F;
+ return AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var5), (double)var3, (double)((float)var4 + var5), (double)((float)(var2 + 1) - var5), (double)((float)(var3 + 1) - var5), (double)((float)(var4 + 1) - var5));
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return var1 == 1 ? this.blockIndexInTexture - 1 : (var1 == 0 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture);
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return !super.canPlaceBlockAt(var1, var2, var3, var4) ? false : this.canBlockStay(var1, var2, var3, var4);
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ if(!this.canBlockStay(var1, var2, var3, var4)) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ }
+
+ public boolean canBlockStay(World var1, int var2, int var3, int var4) {
+ if(var1.getBlockMaterial(var2 - 1, var3, var4).func_216_a()) {
+ return false;
+ } else if(var1.getBlockMaterial(var2 + 1, var3, var4).func_216_a()) {
+ return false;
+ } else if(var1.getBlockMaterial(var2, var3, var4 - 1).func_216_a()) {
+ return false;
+ } else if(var1.getBlockMaterial(var2, var3, var4 + 1).func_216_a()) {
+ return false;
+ } else {
+ int var5 = var1.getBlockId(var2, var3 - 1, var4);
+ return var5 == Block.cactus.blockID || var5 == Block.sand.blockID;
+ }
+ }
+
+ public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) {
+ var5.attackEntity((Entity)null, 1);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockChest.java b/minecraft_server/src/net/minecraft/src/BlockChest.java
new file mode 100644
index 0000000..3a8290d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockChest.java
@@ -0,0 +1,109 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockChest extends BlockContainer {
+ private Random field_656_a = new Random();
+
+ protected BlockChest(int var1) {
+ super(var1, Material.wood);
+ this.blockIndexInTexture = 26;
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return var1 == 1 ? this.blockIndexInTexture - 1 : (var1 == 0 ? this.blockIndexInTexture - 1 : (var1 == 3 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture));
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ int var5 = 0;
+ if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) {
+ ++var5;
+ }
+
+ if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) {
+ ++var5;
+ }
+
+ if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) {
+ ++var5;
+ }
+
+ if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) {
+ ++var5;
+ }
+
+ return var5 > 1 ? false : (this.isThereANeighborChest(var1, var2 - 1, var3, var4) ? false : (this.isThereANeighborChest(var1, var2 + 1, var3, var4) ? false : (this.isThereANeighborChest(var1, var2, var3, var4 - 1) ? false : !this.isThereANeighborChest(var1, var2, var3, var4 + 1))));
+ }
+
+ private boolean isThereANeighborChest(World var1, int var2, int var3, int var4) {
+ return var1.getBlockId(var2, var3, var4) != this.blockID ? false : (var1.getBlockId(var2 - 1, var3, var4) == this.blockID ? true : (var1.getBlockId(var2 + 1, var3, var4) == this.blockID ? true : (var1.getBlockId(var2, var3, var4 - 1) == this.blockID ? true : var1.getBlockId(var2, var3, var4 + 1) == this.blockID)));
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ TileEntityChest var5 = (TileEntityChest)var1.getBlock(var2, var3, var4);
+
+ for(int var6 = 0; var6 < var5.func_83_a(); ++var6) {
+ ItemStack var7 = var5.getStackInSlot(var6);
+ if(var7 != null) {
+ float var8 = this.field_656_a.nextFloat() * 0.8F + 0.1F;
+ float var9 = this.field_656_a.nextFloat() * 0.8F + 0.1F;
+ float var10 = this.field_656_a.nextFloat() * 0.8F + 0.1F;
+
+ while(var7.stackSize > 0) {
+ int var11 = this.field_656_a.nextInt(21) + 10;
+ if(var11 > var7.stackSize) {
+ var11 = var7.stackSize;
+ }
+
+ var7.stackSize -= var11;
+ EntityItem var12 = new EntityItem(var1, (double)((float)var2 + var8), (double)((float)var3 + var9), (double)((float)var4 + var10), new ItemStack(var7.itemID, var11, var7.itemDamage));
+ float var13 = 0.05F;
+ var12.motionX = (double)((float)this.field_656_a.nextGaussian() * var13);
+ var12.motionY = (double)((float)this.field_656_a.nextGaussian() * var13 + 0.2F);
+ var12.motionZ = (double)((float)this.field_656_a.nextGaussian() * var13);
+ var1.entityJoinedWorld(var12);
+ }
+ }
+ }
+
+ super.onBlockRemoval(var1, var2, var3, var4);
+ }
+
+ public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ Object var6 = (TileEntityChest)var1.getBlock(var2, var3, var4);
+ if(var1.doesBlockAllowAttachment(var2, var3 + 1, var4)) {
+ return true;
+ } else if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID && var1.doesBlockAllowAttachment(var2 - 1, var3 + 1, var4)) {
+ return true;
+ } else if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID && var1.doesBlockAllowAttachment(var2 + 1, var3 + 1, var4)) {
+ return true;
+ } else if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID && var1.doesBlockAllowAttachment(var2, var3 + 1, var4 - 1)) {
+ return true;
+ } else if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID && var1.doesBlockAllowAttachment(var2, var3 + 1, var4 + 1)) {
+ return true;
+ } else {
+ if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) {
+ var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlock(var2 - 1, var3, var4), (IInventory)var6);
+ }
+
+ if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) {
+ var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlock(var2 + 1, var3, var4));
+ }
+
+ if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) {
+ var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlock(var2, var3, var4 - 1), (IInventory)var6);
+ }
+
+ if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) {
+ var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlock(var2, var3, var4 + 1));
+ }
+
+ var5.func_166_a((IInventory)var6);
+ return true;
+ }
+ }
+
+ protected TileEntity func_294_a_() {
+ return new TileEntityChest();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockClay.java b/minecraft_server/src/net/minecraft/src/BlockClay.java
new file mode 100644
index 0000000..0cb08f3
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockClay.java
@@ -0,0 +1,17 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockClay extends Block {
+ public BlockClay(int var1, int var2) {
+ super(var1, var2, Material.clay);
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Item.clay.swiftedIndex;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 4;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockContainer.java b/minecraft_server/src/net/minecraft/src/BlockContainer.java
new file mode 100644
index 0000000..93f4685
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockContainer.java
@@ -0,0 +1,24 @@
+package net.minecraft.src;
+
+public abstract class BlockContainer extends Block {
+ protected BlockContainer(int var1, Material var2) {
+ super(var1, var2);
+ isBlockContainer[var1] = true;
+ }
+
+ protected BlockContainer(int var1, int var2, Material var3) {
+ super(var1, var2, var3);
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ super.onBlockAdded(var1, var2, var3, var4);
+ var1.func_473_a(var2, var3, var4, this.func_294_a_());
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ super.onBlockRemoval(var1, var2, var3, var4);
+ var1.func_513_l(var2, var3, var4);
+ }
+
+ protected abstract TileEntity func_294_a_();
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockCrops.java b/minecraft_server/src/net/minecraft/src/BlockCrops.java
new file mode 100644
index 0000000..8aa6755
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockCrops.java
@@ -0,0 +1,98 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockCrops extends BlockFlower {
+ protected BlockCrops(int var1, int var2) {
+ super(var1, var2);
+ this.blockIndexInTexture = var2;
+ this.setTickOnLoad(true);
+ float var3 = 0.5F;
+ this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 0.25F, 0.5F + var3);
+ }
+
+ protected boolean canThisPlantGrowOnThisBlockID(int var1) {
+ return var1 == Block.tilledField.blockID;
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ super.updateTick(var1, var2, var3, var4, var5);
+ if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if(var6 < 7) {
+ float var7 = this.getGrowthRate(var1, var2, var3, var4);
+ if(var5.nextInt((int)(100.0F / var7)) == 0) {
+ ++var6;
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6);
+ }
+ }
+ }
+
+ }
+
+ private float getGrowthRate(World var1, int var2, int var3, int var4) {
+ float var5 = 1.0F;
+ int var6 = var1.getBlockId(var2, var3, var4 - 1);
+ int var7 = var1.getBlockId(var2, var3, var4 + 1);
+ int var8 = var1.getBlockId(var2 - 1, var3, var4);
+ int var9 = var1.getBlockId(var2 + 1, var3, var4);
+ int var10 = var1.getBlockId(var2 - 1, var3, var4 - 1);
+ int var11 = var1.getBlockId(var2 + 1, var3, var4 - 1);
+ int var12 = var1.getBlockId(var2 + 1, var3, var4 + 1);
+ int var13 = var1.getBlockId(var2 - 1, var3, var4 + 1);
+ boolean var14 = var8 == this.blockID || var9 == this.blockID;
+ boolean var15 = var6 == this.blockID || var7 == this.blockID;
+ boolean var16 = var10 == this.blockID || var11 == this.blockID || var12 == this.blockID || var13 == this.blockID;
+
+ for(int var17 = var2 - 1; var17 <= var2 + 1; ++var17) {
+ for(int var18 = var4 - 1; var18 <= var4 + 1; ++var18) {
+ int var19 = var1.getBlockId(var17, var3 - 1, var18);
+ float var20 = 0.0F;
+ if(var19 == Block.tilledField.blockID) {
+ var20 = 1.0F;
+ if(var1.getBlockMetadata(var17, var3 - 1, var18) > 0) {
+ var20 = 3.0F;
+ }
+ }
+
+ if(var17 != var2 || var18 != var4) {
+ var20 /= 4.0F;
+ }
+
+ var5 += var20;
+ }
+ }
+
+ if(var16 || var14 && var15) {
+ var5 /= 2.0F;
+ }
+
+ return var5;
+ }
+
+ public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) {
+ super.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5);
+ if(!var1.multiplayerWorld) {
+ for(int var6 = 0; var6 < 3; ++var6) {
+ if(var1.rand.nextInt(15) <= var5) {
+ float var7 = 0.7F;
+ float var8 = var1.rand.nextFloat() * var7 + (1.0F - var7) * 0.5F;
+ float var9 = var1.rand.nextFloat() * var7 + (1.0F - var7) * 0.5F;
+ float var10 = var1.rand.nextFloat() * var7 + (1.0F - var7) * 0.5F;
+ EntityItem var11 = new EntityItem(var1, (double)((float)var2 + var8), (double)((float)var3 + var9), (double)((float)var4 + var10), new ItemStack(Item.seeds));
+ var11.field_433_ad = 10;
+ var1.entityJoinedWorld(var11);
+ }
+ }
+ }
+
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return var1 == 7 ? Item.wheat.swiftedIndex : -1;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockDirt.java b/minecraft_server/src/net/minecraft/src/BlockDirt.java
new file mode 100644
index 0000000..4deab61
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockDirt.java
@@ -0,0 +1,7 @@
+package net.minecraft.src;
+
+public class BlockDirt extends Block {
+ protected BlockDirt(int var1, int var2) {
+ super(var1, var2, Material.ground);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockDoor.java b/minecraft_server/src/net/minecraft/src/BlockDoor.java
new file mode 100644
index 0000000..f62ca84
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockDoor.java
@@ -0,0 +1,162 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockDoor extends Block {
+ protected BlockDoor(int var1, Material var2) {
+ super(var1, var2);
+ this.blockIndexInTexture = 97;
+ if(var2 == Material.iron) {
+ ++this.blockIndexInTexture;
+ }
+
+ float var3 = 0.5F;
+ float var4 = 1.0F;
+ this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var4, 0.5F + var3);
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ this.setBlockBoundsBasedOnState(var1, var2, var3, var4);
+ return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4);
+ }
+
+ public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
+ this.func_273_b(this.func_271_d(var1.getBlockMetadata(var2, var3, var4)));
+ }
+
+ public void func_273_b(int var1) {
+ float var2 = 3.0F / 16.0F;
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F);
+ if(var1 == 0) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var2);
+ }
+
+ if(var1 == 1) {
+ this.setBlockBounds(1.0F - var2, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ }
+
+ if(var1 == 2) {
+ this.setBlockBounds(0.0F, 0.0F, 1.0F - var2, 1.0F, 1.0F, 1.0F);
+ }
+
+ if(var1 == 3) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, var2, 1.0F, 1.0F);
+ }
+
+ }
+
+ public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ this.blockActivated(var1, var2, var3, var4, var5);
+ }
+
+ public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ if(this.blockMaterial == Material.iron) {
+ return true;
+ } else {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if((var6 & 8) != 0) {
+ if(var1.getBlockId(var2, var3 - 1, var4) == this.blockID) {
+ this.blockActivated(var1, var2, var3 - 1, var4, var5);
+ }
+
+ return true;
+ } else {
+ if(var1.getBlockId(var2, var3 + 1, var4) == this.blockID) {
+ var1.setBlockMetadataWithNotify(var2, var3 + 1, var4, (var6 ^ 4) + 8);
+ }
+
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6 ^ 4);
+ var1.func_519_b(var2, var3 - 1, var4, var2, var3, var4);
+ if(Math.random() < 0.5D) {
+ var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.door_open", 1.0F, var1.rand.nextFloat() * 0.1F + 0.9F);
+ } else {
+ var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.door_close", 1.0F, var1.rand.nextFloat() * 0.1F + 0.9F);
+ }
+
+ return true;
+ }
+ }
+ }
+
+ public void func_272_a(World var1, int var2, int var3, int var4, boolean var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if((var6 & 8) != 0) {
+ if(var1.getBlockId(var2, var3 - 1, var4) == this.blockID) {
+ this.func_272_a(var1, var2, var3 - 1, var4, var5);
+ }
+
+ } else {
+ boolean var7 = (var1.getBlockMetadata(var2, var3, var4) & 4) > 0;
+ if(var7 != var5) {
+ if(var1.getBlockId(var2, var3 + 1, var4) == this.blockID) {
+ var1.setBlockMetadataWithNotify(var2, var3 + 1, var4, (var6 ^ 4) + 8);
+ }
+
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6 ^ 4);
+ var1.func_519_b(var2, var3 - 1, var4, var2, var3, var4);
+ if(Math.random() < 0.5D) {
+ var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.door_open", 1.0F, var1.rand.nextFloat() * 0.1F + 0.9F);
+ } else {
+ var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.door_close", 1.0F, var1.rand.nextFloat() * 0.1F + 0.9F);
+ }
+
+ }
+ }
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if((var6 & 8) != 0) {
+ if(var1.getBlockId(var2, var3 - 1, var4) != this.blockID) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ if(var5 > 0 && Block.blocksList[var5].canProvidePower()) {
+ this.onNeighborBlockChange(var1, var2, var3 - 1, var4, var5);
+ }
+ } else {
+ boolean var7 = false;
+ if(var1.getBlockId(var2, var3 + 1, var4) != this.blockID) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ var7 = true;
+ if(var1.getBlockId(var2, var3 + 1, var4) == this.blockID) {
+ var1.setBlockWithNotify(var2, var3 + 1, var4, 0);
+ }
+ }
+
+ if(var7) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var6);
+ } else if(var5 > 0 && Block.blocksList[var5].canProvidePower()) {
+ boolean var8 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4) || var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4);
+ this.func_272_a(var1, var2, var3, var4, var8);
+ }
+ }
+
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return (var1 & 8) != 0 ? 0 : (this.blockMaterial == Material.iron ? Item.doorSteel.swiftedIndex : Item.doorWood.swiftedIndex);
+ }
+
+ public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) {
+ this.setBlockBoundsBasedOnState(var1, var2, var3, var4);
+ return super.collisionRayTrace(var1, var2, var3, var4, var5, var6);
+ }
+
+ public int func_271_d(int var1) {
+ return (var1 & 4) == 0 ? var1 - 1 & 3 : var1 & 3;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return var3 >= 127 ? false : var1.doesBlockAllowAttachment(var2, var3 - 1, var4) && super.canPlaceBlockAt(var1, var2, var3, var4) && super.canPlaceBlockAt(var1, var2, var3 + 1, var4);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockFence.java b/minecraft_server/src/net/minecraft/src/BlockFence.java
new file mode 100644
index 0000000..c4cd8d2
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockFence.java
@@ -0,0 +1,21 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+
+public class BlockFence extends Block {
+ public BlockFence(int var1, int var2) {
+ super(var1, var2, Material.wood);
+ }
+
+ public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) {
+ var6.add(AxisAlignedBB.getBoundingBoxFromPool((double)var2, (double)var3, (double)var4, (double)(var2 + 1), (double)var3 + 1.5D, (double)(var4 + 1)));
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return var1.getBlockId(var2, var3 - 1, var4) == this.blockID ? false : (!var1.getBlockMaterial(var2, var3 - 1, var4).func_216_a() ? false : super.canPlaceBlockAt(var1, var2, var3, var4));
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockFire.java b/minecraft_server/src/net/minecraft/src/BlockFire.java
new file mode 100644
index 0000000..6fcab61
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockFire.java
@@ -0,0 +1,155 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockFire extends Block {
+ private int[] chanceToEncourageFire = new int[256];
+ private int[] abilityToCatchFire = new int[256];
+
+ protected BlockFire(int var1, int var2) {
+ super(var1, var2, Material.fire);
+ this.setBurnRate(Block.planks.blockID, 5, 20);
+ this.setBurnRate(Block.wood.blockID, 5, 5);
+ this.setBurnRate(Block.leaves.blockID, 30, 60);
+ this.setBurnRate(Block.bookShelf.blockID, 30, 20);
+ this.setBurnRate(Block.tnt.blockID, 15, 100);
+ this.setBurnRate(Block.cloth.blockID, 30, 60);
+ this.setTickOnLoad(true);
+ }
+
+ private void setBurnRate(int var1, int var2, int var3) {
+ this.chanceToEncourageFire[var1] = var2;
+ this.abilityToCatchFire[var1] = var3;
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 0;
+ }
+
+ public int tickRate() {
+ return 10;
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ boolean var6 = var1.getBlockId(var2, var3 - 1, var4) == Block.bloodStone.blockID;
+ int var7 = var1.getBlockMetadata(var2, var3, var4);
+ if(var7 < 15) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + 1);
+ var1.scheduleBlockUpdate(var2, var3, var4, this.blockID);
+ }
+
+ if(!var6 && !this.func_268_g(var1, var2, var3, var4)) {
+ if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4) || var7 > 3) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ } else if(!var6 && !this.canBlockCatchFire(var1, var2, var3 - 1, var4) && var7 == 15 && var5.nextInt(4) == 0) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ } else {
+ if(var7 % 2 == 0 && var7 > 2) {
+ this.tryToCatchBlockOnFire(var1, var2 + 1, var3, var4, 300, var5);
+ this.tryToCatchBlockOnFire(var1, var2 - 1, var3, var4, 300, var5);
+ this.tryToCatchBlockOnFire(var1, var2, var3 - 1, var4, 250, var5);
+ this.tryToCatchBlockOnFire(var1, var2, var3 + 1, var4, 250, var5);
+ this.tryToCatchBlockOnFire(var1, var2, var3, var4 - 1, 300, var5);
+ this.tryToCatchBlockOnFire(var1, var2, var3, var4 + 1, 300, var5);
+
+ for(int var8 = var2 - 1; var8 <= var2 + 1; ++var8) {
+ for(int var9 = var4 - 1; var9 <= var4 + 1; ++var9) {
+ for(int var10 = var3 - 1; var10 <= var3 + 4; ++var10) {
+ if(var8 != var2 || var10 != var3 || var9 != var4) {
+ int var11 = 100;
+ if(var10 > var3 + 1) {
+ var11 += (var10 - (var3 + 1)) * 100;
+ }
+
+ int var12 = this.getChanceOfNeighborsEncouragingFire(var1, var8, var10, var9);
+ if(var12 > 0 && var5.nextInt(var11) <= var12) {
+ var1.setBlockWithNotify(var8, var10, var9, this.blockID);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+ }
+
+ private void tryToCatchBlockOnFire(World var1, int var2, int var3, int var4, int var5, Random var6) {
+ int var7 = this.abilityToCatchFire[var1.getBlockId(var2, var3, var4)];
+ if(var6.nextInt(var5) < var7) {
+ boolean var8 = var1.getBlockId(var2, var3, var4) == Block.tnt.blockID;
+ if(var6.nextInt(2) == 0) {
+ var1.setBlockWithNotify(var2, var3, var4, this.blockID);
+ } else {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ if(var8) {
+ Block.tnt.onBlockDestroyedByPlayer(var1, var2, var3, var4, 0);
+ }
+ }
+
+ }
+
+ private boolean func_268_g(World var1, int var2, int var3, int var4) {
+ return this.canBlockCatchFire(var1, var2 + 1, var3, var4) ? true : (this.canBlockCatchFire(var1, var2 - 1, var3, var4) ? true : (this.canBlockCatchFire(var1, var2, var3 - 1, var4) ? true : (this.canBlockCatchFire(var1, var2, var3 + 1, var4) ? true : (this.canBlockCatchFire(var1, var2, var3, var4 - 1) ? true : this.canBlockCatchFire(var1, var2, var3, var4 + 1)))));
+ }
+
+ private int getChanceOfNeighborsEncouragingFire(World var1, int var2, int var3, int var4) {
+ byte var5 = 0;
+ if(var1.getBlockId(var2, var3, var4) != 0) {
+ return 0;
+ } else {
+ int var6 = this.getChanceToEncourageFire(var1, var2 + 1, var3, var4, var5);
+ var6 = this.getChanceToEncourageFire(var1, var2 - 1, var3, var4, var6);
+ var6 = this.getChanceToEncourageFire(var1, var2, var3 - 1, var4, var6);
+ var6 = this.getChanceToEncourageFire(var1, var2, var3 + 1, var4, var6);
+ var6 = this.getChanceToEncourageFire(var1, var2, var3, var4 - 1, var6);
+ var6 = this.getChanceToEncourageFire(var1, var2, var3, var4 + 1, var6);
+ return var6;
+ }
+ }
+
+ public boolean isCollidable() {
+ return false;
+ }
+
+ public boolean canBlockCatchFire(IBlockAccess var1, int var2, int var3, int var4) {
+ return this.chanceToEncourageFire[var1.getBlockId(var2, var3, var4)] > 0;
+ }
+
+ public int getChanceToEncourageFire(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = this.chanceToEncourageFire[var1.getBlockId(var2, var3, var4)];
+ return var6 > var5 ? var6 : var5;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return var1.doesBlockAllowAttachment(var2, var3 - 1, var4) || this.func_268_g(var1, var2, var3, var4);
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4) && !this.func_268_g(var1, var2, var3, var4)) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ if(var1.getBlockId(var2, var3 - 1, var4) != Block.obsidian.blockID || !Block.portal.tryToCreatePortal(var1, var2, var3, var4)) {
+ if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4) && !this.func_268_g(var1, var2, var3, var4)) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ } else {
+ var1.scheduleBlockUpdate(var2, var3, var4, this.blockID);
+ }
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockFlower.java b/minecraft_server/src/net/minecraft/src/BlockFlower.java
new file mode 100644
index 0000000..c3e1abe
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockFlower.java
@@ -0,0 +1,50 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockFlower extends Block {
+ protected BlockFlower(int var1, int var2) {
+ super(var1, Material.plants);
+ this.blockIndexInTexture = var2;
+ this.setTickOnLoad(true);
+ float var3 = 0.2F;
+ this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 3.0F, 0.5F + var3);
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4));
+ }
+
+ protected boolean canThisPlantGrowOnThisBlockID(int var1) {
+ return var1 == Block.grass.blockID || var1 == Block.dirt.blockID || var1 == Block.tilledField.blockID;
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ super.onNeighborBlockChange(var1, var2, var3, var4, var5);
+ this.func_276_g(var1, var2, var3, var4);
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ this.func_276_g(var1, var2, var3, var4);
+ }
+
+ protected final void func_276_g(World var1, int var2, int var3, int var4) {
+ if(!this.canBlockStay(var1, var2, var3, var4)) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ }
+
+ public boolean canBlockStay(World var1, int var2, int var3, int var4) {
+ return (var1.getBlockLightValue(var2, var3, var4) >= 8 || var1.canBlockSeeTheSky(var2, var3, var4)) && this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4));
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockFlowing.java b/minecraft_server/src/net/minecraft/src/BlockFlowing.java
new file mode 100644
index 0000000..68d6f61
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockFlowing.java
@@ -0,0 +1,263 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockFlowing extends BlockFluids {
+ int field_659_a = 0;
+ boolean[] field_658_b = new boolean[4];
+ int[] field_660_c = new int[4];
+
+ protected BlockFlowing(int var1, Material var2) {
+ super(var1, var2);
+ }
+
+ private void func_15003_i(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ var1.func_470_a(var2, var3, var4, this.blockID + 1, var5);
+ var1.func_519_b(var2, var3, var4, var2, var3, var4);
+ var1.func_521_f(var2, var3, var4);
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ int var6 = this.func_301_g(var1, var2, var3, var4);
+ byte var7 = 1;
+ if(this.blockMaterial == Material.lava && !var1.field_4272_q.field_6166_d) {
+ var7 = 2;
+ }
+
+ boolean var8 = true;
+ int var10;
+ if(var6 > 0) {
+ byte var9 = -100;
+ this.field_659_a = 0;
+ int var12 = this.func_307_e(var1, var2 - 1, var3, var4, var9);
+ var12 = this.func_307_e(var1, var2 + 1, var3, var4, var12);
+ var12 = this.func_307_e(var1, var2, var3, var4 - 1, var12);
+ var12 = this.func_307_e(var1, var2, var3, var4 + 1, var12);
+ var10 = var12 + var7;
+ if(var10 >= 8 || var12 < 0) {
+ var10 = -1;
+ }
+
+ if(this.func_301_g(var1, var2, var3 + 1, var4) >= 0) {
+ int var11 = this.func_301_g(var1, var2, var3 + 1, var4);
+ if(var11 >= 8) {
+ var10 = var11;
+ } else {
+ var10 = var11 + 8;
+ }
+ }
+
+ if(this.field_659_a >= 2 && this.blockMaterial == Material.water) {
+ if(var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) {
+ var10 = 0;
+ } else if(var1.getBlockMaterial(var2, var3 - 1, var4) == this.blockMaterial && var1.getBlockMetadata(var2, var3, var4) == 0) {
+ var10 = 0;
+ }
+ }
+
+ if(this.blockMaterial == Material.lava && var6 < 8 && var10 < 8 && var10 > var6 && var5.nextInt(4) != 0) {
+ var10 = var6;
+ var8 = false;
+ }
+
+ if(var10 != var6) {
+ var6 = var10;
+ if(var10 < 0) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ } else {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var10);
+ var1.scheduleBlockUpdate(var2, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ }
+ } else if(var8) {
+ this.func_15003_i(var1, var2, var3, var4);
+ }
+ } else {
+ this.func_15003_i(var1, var2, var3, var4);
+ }
+
+ if(this.func_312_l(var1, var2, var3 - 1, var4)) {
+ if(var6 >= 8) {
+ var1.func_507_b(var2, var3 - 1, var4, this.blockID, var6);
+ } else {
+ var1.func_507_b(var2, var3 - 1, var4, this.blockID, var6 + 8);
+ }
+ } else if(var6 >= 0 && (var6 == 0 || this.func_309_k(var1, var2, var3 - 1, var4))) {
+ boolean[] var13 = this.func_4035_j(var1, var2, var3, var4);
+ var10 = var6 + var7;
+ if(var6 >= 8) {
+ var10 = 1;
+ }
+
+ if(var10 >= 8) {
+ return;
+ }
+
+ if(var13[0]) {
+ this.func_311_f(var1, var2 - 1, var3, var4, var10);
+ }
+
+ if(var13[1]) {
+ this.func_311_f(var1, var2 + 1, var3, var4, var10);
+ }
+
+ if(var13[2]) {
+ this.func_311_f(var1, var2, var3, var4 - 1, var10);
+ }
+
+ if(var13[3]) {
+ this.func_311_f(var1, var2, var3, var4 + 1, var10);
+ }
+ }
+
+ }
+
+ private void func_311_f(World var1, int var2, int var3, int var4, int var5) {
+ if(this.func_312_l(var1, var2, var3, var4)) {
+ int var6 = var1.getBlockId(var2, var3, var4);
+ if(var6 > 0) {
+ if(this.blockMaterial == Material.lava) {
+ this.func_300_h(var1, var2, var3, var4);
+ } else {
+ Block.blocksList[var6].dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ }
+ }
+
+ var1.func_507_b(var2, var3, var4, this.blockID, var5);
+ }
+
+ }
+
+ private int func_4034_a(World var1, int var2, int var3, int var4, int var5, int var6) {
+ int var7 = 1000;
+
+ for(int var8 = 0; var8 < 4; ++var8) {
+ if((var8 != 0 || var6 != 1) && (var8 != 1 || var6 != 0) && (var8 != 2 || var6 != 3) && (var8 != 3 || var6 != 2)) {
+ int var9 = var2;
+ int var11 = var4;
+ if(var8 == 0) {
+ var9 = var2 - 1;
+ }
+
+ if(var8 == 1) {
+ ++var9;
+ }
+
+ if(var8 == 2) {
+ var11 = var4 - 1;
+ }
+
+ if(var8 == 3) {
+ ++var11;
+ }
+
+ if(!this.func_309_k(var1, var9, var3, var11) && (var1.getBlockMaterial(var9, var3, var11) != this.blockMaterial || var1.getBlockMetadata(var9, var3, var11) != 0)) {
+ if(!this.func_309_k(var1, var9, var3 - 1, var11)) {
+ return var5;
+ }
+
+ if(var5 < 4) {
+ int var12 = this.func_4034_a(var1, var9, var3, var11, var5 + 1, var8);
+ if(var12 < var7) {
+ var7 = var12;
+ }
+ }
+ }
+ }
+ }
+
+ return var7;
+ }
+
+ private boolean[] func_4035_j(World var1, int var2, int var3, int var4) {
+ int var5;
+ int var6;
+ for(var5 = 0; var5 < 4; ++var5) {
+ this.field_660_c[var5] = 1000;
+ var6 = var2;
+ int var8 = var4;
+ if(var5 == 0) {
+ var6 = var2 - 1;
+ }
+
+ if(var5 == 1) {
+ ++var6;
+ }
+
+ if(var5 == 2) {
+ var8 = var4 - 1;
+ }
+
+ if(var5 == 3) {
+ ++var8;
+ }
+
+ if(!this.func_309_k(var1, var6, var3, var8) && (var1.getBlockMaterial(var6, var3, var8) != this.blockMaterial || var1.getBlockMetadata(var6, var3, var8) != 0)) {
+ if(!this.func_309_k(var1, var6, var3 - 1, var8)) {
+ this.field_660_c[var5] = 0;
+ } else {
+ this.field_660_c[var5] = this.func_4034_a(var1, var6, var3, var8, 1, var5);
+ }
+ }
+ }
+
+ var5 = this.field_660_c[0];
+
+ for(var6 = 1; var6 < 4; ++var6) {
+ if(this.field_660_c[var6] < var5) {
+ var5 = this.field_660_c[var6];
+ }
+ }
+
+ for(var6 = 0; var6 < 4; ++var6) {
+ this.field_658_b[var6] = this.field_660_c[var6] == var5;
+ }
+
+ return this.field_658_b;
+ }
+
+ private boolean func_309_k(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockId(var2, var3, var4);
+ if(var5 != Block.doorWood.blockID && var5 != Block.doorSteel.blockID && var5 != Block.signPost.blockID && var5 != Block.ladder.blockID && var5 != Block.reed.blockID) {
+ if(var5 == 0) {
+ return false;
+ } else {
+ Material var6 = Block.blocksList[var5].blockMaterial;
+ return var6.func_216_a();
+ }
+ } else {
+ return true;
+ }
+ }
+
+ protected int func_307_e(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = this.func_301_g(var1, var2, var3, var4);
+ if(var6 < 0) {
+ return var5;
+ } else {
+ if(var6 == 0) {
+ ++this.field_659_a;
+ }
+
+ if(var6 >= 8) {
+ var6 = 0;
+ }
+
+ return var5 >= 0 && var6 >= var5 ? var5 : var6;
+ }
+ }
+
+ private boolean func_312_l(World var1, int var2, int var3, int var4) {
+ Material var5 = var1.getBlockMaterial(var2, var3, var4);
+ return var5 == this.blockMaterial ? false : (var5 == Material.lava ? false : !this.func_309_k(var1, var2, var3, var4));
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ super.onBlockAdded(var1, var2, var3, var4);
+ if(var1.getBlockId(var2, var3, var4) == this.blockID) {
+ var1.scheduleBlockUpdate(var2, var3, var4, this.blockID);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockFluids.java b/minecraft_server/src/net/minecraft/src/BlockFluids.java
new file mode 100644
index 0000000..7161b77
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockFluids.java
@@ -0,0 +1,221 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public abstract class BlockFluids extends Block {
+ protected BlockFluids(int var1, Material var2) {
+ super(var1, (var2 == Material.lava ? 14 : 12) * 16 + 13, var2);
+ float var3 = 0.0F;
+ float var4 = 0.0F;
+ this.setBlockBounds(0.0F + var4, 0.0F + var3, 0.0F + var4, 1.0F + var4, 1.0F + var3, 1.0F + var4);
+ this.setTickOnLoad(true);
+ }
+
+ public static float setFluidHeight(int var0) {
+ if(var0 >= 8) {
+ var0 = 0;
+ }
+
+ float var1 = (float)(var0 + 1) / 9.0F;
+ return var1;
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return var1 != 0 && var1 != 1 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture;
+ }
+
+ protected int func_301_g(World var1, int var2, int var3, int var4) {
+ return var1.getBlockMaterial(var2, var3, var4) != this.blockMaterial ? -1 : var1.getBlockMetadata(var2, var3, var4);
+ }
+
+ protected int func_303_b(IBlockAccess var1, int var2, int var3, int var4) {
+ if(var1.getBlockMaterial(var2, var3, var4) != this.blockMaterial) {
+ return -1;
+ } else {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ if(var5 >= 8) {
+ var5 = 0;
+ }
+
+ return var5;
+ }
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean canCollideCheck(int var1, boolean var2) {
+ return var2 && var1 == 0;
+ }
+
+ public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ Material var6 = var1.getBlockMaterial(var2, var3, var4);
+ return var6 == this.blockMaterial ? false : (var6 == Material.ice ? false : (var5 == 1 ? true : super.isSideInsideCoordinate(var1, var2, var3, var4, var5)));
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return 0;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 0;
+ }
+
+ private Vec3D func_298_c(IBlockAccess var1, int var2, int var3, int var4) {
+ Vec3D var5 = Vec3D.createVector(0.0D, 0.0D, 0.0D);
+ int var6 = this.func_303_b(var1, var2, var3, var4);
+
+ for(int var7 = 0; var7 < 4; ++var7) {
+ int var8 = var2;
+ int var10 = var4;
+ if(var7 == 0) {
+ var8 = var2 - 1;
+ }
+
+ if(var7 == 1) {
+ var10 = var4 - 1;
+ }
+
+ if(var7 == 2) {
+ ++var8;
+ }
+
+ if(var7 == 3) {
+ ++var10;
+ }
+
+ int var11 = this.func_303_b(var1, var8, var3, var10);
+ int var12;
+ if(var11 < 0) {
+ if(!var1.getBlockMaterial(var8, var3, var10).func_218_c()) {
+ var11 = this.func_303_b(var1, var8, var3 - 1, var10);
+ if(var11 >= 0) {
+ var12 = var11 - (var6 - 8);
+ var5 = var5.addVector((double)((var8 - var2) * var12), (double)((var3 - var3) * var12), (double)((var10 - var4) * var12));
+ }
+ }
+ } else if(var11 >= 0) {
+ var12 = var11 - var6;
+ var5 = var5.addVector((double)((var8 - var2) * var12), (double)((var3 - var3) * var12), (double)((var10 - var4) * var12));
+ }
+ }
+
+ if(var1.getBlockMetadata(var2, var3, var4) >= 8) {
+ boolean var13 = false;
+ if(var13 || this.isSideInsideCoordinate(var1, var2, var3, var4 - 1, 2)) {
+ var13 = true;
+ }
+
+ if(var13 || this.isSideInsideCoordinate(var1, var2, var3, var4 + 1, 3)) {
+ var13 = true;
+ }
+
+ if(var13 || this.isSideInsideCoordinate(var1, var2 - 1, var3, var4, 4)) {
+ var13 = true;
+ }
+
+ if(var13 || this.isSideInsideCoordinate(var1, var2 + 1, var3, var4, 5)) {
+ var13 = true;
+ }
+
+ if(var13 || this.isSideInsideCoordinate(var1, var2, var3 + 1, var4 - 1, 2)) {
+ var13 = true;
+ }
+
+ if(var13 || this.isSideInsideCoordinate(var1, var2, var3 + 1, var4 + 1, 3)) {
+ var13 = true;
+ }
+
+ if(var13 || this.isSideInsideCoordinate(var1, var2 - 1, var3 + 1, var4, 4)) {
+ var13 = true;
+ }
+
+ if(var13 || this.isSideInsideCoordinate(var1, var2 + 1, var3 + 1, var4, 5)) {
+ var13 = true;
+ }
+
+ if(var13) {
+ var5 = var5.normalize().addVector(0.0D, -6.0D, 0.0D);
+ }
+ }
+
+ var5 = var5.normalize();
+ return var5;
+ }
+
+ public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3D var6) {
+ Vec3D var7 = this.func_298_c(var1, var2, var3, var4);
+ var6.xCoord += var7.xCoord;
+ var6.yCoord += var7.yCoord;
+ var6.zCoord += var7.zCoord;
+ }
+
+ public int tickRate() {
+ return this.blockMaterial == Material.water ? 5 : (this.blockMaterial == Material.lava ? 30 : 0);
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ super.updateTick(var1, var2, var3, var4, var5);
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ this.func_302_i(var1, var2, var3, var4);
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ this.func_302_i(var1, var2, var3, var4);
+ }
+
+ private void func_302_i(World var1, int var2, int var3, int var4) {
+ if(var1.getBlockId(var2, var3, var4) == this.blockID) {
+ if(this.blockMaterial == Material.lava) {
+ boolean var5 = false;
+ if(var5 || var1.getBlockMaterial(var2, var3, var4 - 1) == Material.water) {
+ var5 = true;
+ }
+
+ if(var5 || var1.getBlockMaterial(var2, var3, var4 + 1) == Material.water) {
+ var5 = true;
+ }
+
+ if(var5 || var1.getBlockMaterial(var2 - 1, var3, var4) == Material.water) {
+ var5 = true;
+ }
+
+ if(var5 || var1.getBlockMaterial(var2 + 1, var3, var4) == Material.water) {
+ var5 = true;
+ }
+
+ if(var5 || var1.getBlockMaterial(var2, var3 + 1, var4) == Material.water) {
+ var5 = true;
+ }
+
+ if(var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if(var6 == 0) {
+ var1.setBlockWithNotify(var2, var3, var4, Block.obsidian.blockID);
+ } else if(var6 <= 4) {
+ var1.setBlockWithNotify(var2, var3, var4, Block.cobblestone.blockID);
+ }
+
+ this.func_300_h(var1, var2, var3, var4);
+ }
+ }
+
+ }
+ }
+
+ protected void func_300_h(World var1, int var2, int var3, int var4) {
+ var1.playSoundEffect((double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), "random.fizz", 0.5F, 2.6F + (var1.rand.nextFloat() - var1.rand.nextFloat()) * 0.8F);
+
+ for(int var5 = 0; var5 < 8; ++var5) {
+ var1.spawnParticle("largesmoke", (double)var2 + Math.random(), (double)var3 + 1.2D, (double)var4 + Math.random(), 0.0D, 0.0D, 0.0D);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockFurnace.java b/minecraft_server/src/net/minecraft/src/BlockFurnace.java
new file mode 100644
index 0000000..a7070dc
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockFurnace.java
@@ -0,0 +1,94 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockFurnace extends BlockContainer {
+ private final boolean field_655_a;
+
+ protected BlockFurnace(int var1, boolean var2) {
+ super(var1, Material.rock);
+ this.field_655_a = var2;
+ this.blockIndexInTexture = 45;
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Block.stoneOvenIdle.blockID;
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ super.onBlockAdded(var1, var2, var3, var4);
+ this.func_296_g(var1, var2, var3, var4);
+ }
+
+ private void func_296_g(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockId(var2, var3, var4 - 1);
+ int var6 = var1.getBlockId(var2, var3, var4 + 1);
+ int var7 = var1.getBlockId(var2 - 1, var3, var4);
+ int var8 = var1.getBlockId(var2 + 1, var3, var4);
+ byte var9 = 3;
+ if(Block.field_540_p[var5] && !Block.field_540_p[var6]) {
+ var9 = 3;
+ }
+
+ if(Block.field_540_p[var6] && !Block.field_540_p[var5]) {
+ var9 = 2;
+ }
+
+ if(Block.field_540_p[var7] && !Block.field_540_p[var8]) {
+ var9 = 5;
+ }
+
+ if(Block.field_540_p[var8] && !Block.field_540_p[var7]) {
+ var9 = 4;
+ }
+
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var9);
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return var1 == 1 ? Block.stone.blockID : (var1 == 0 ? Block.stone.blockID : (var1 == 3 ? this.blockIndexInTexture - 1 : this.blockIndexInTexture));
+ }
+
+ public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ TileEntityFurnace var6 = (TileEntityFurnace)var1.getBlock(var2, var3, var4);
+ var5.func_170_a(var6);
+ return true;
+ }
+
+ public static void func_295_a(boolean var0, World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ TileEntity var6 = var1.getBlock(var2, var3, var4);
+ if(var0) {
+ var1.setBlockWithNotify(var2, var3, var4, Block.stoneOvenActive.blockID);
+ } else {
+ var1.setBlockWithNotify(var2, var3, var4, Block.stoneOvenIdle.blockID);
+ }
+
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var5);
+ var1.func_473_a(var2, var3, var4, var6);
+ }
+
+ protected TileEntity func_294_a_() {
+ return new TileEntityFurnace();
+ }
+
+ public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) {
+ int var6 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
+ if(var6 == 0) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 2);
+ }
+
+ if(var6 == 1) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 5);
+ }
+
+ if(var6 == 2) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 3);
+ }
+
+ if(var6 == 3) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 4);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockGlass.java b/minecraft_server/src/net/minecraft/src/BlockGlass.java
new file mode 100644
index 0000000..9101b2a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockGlass.java
@@ -0,0 +1,13 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockGlass extends BlockBreakable {
+ public BlockGlass(int var1, int var2, Material var3, boolean var4) {
+ super(var1, var2, var3, var4);
+ }
+
+ public int quantityDropped(Random var1) {
+ return 0;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockGrass.java b/minecraft_server/src/net/minecraft/src/BlockGrass.java
new file mode 100644
index 0000000..bca87ca
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockGrass.java
@@ -0,0 +1,33 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockGrass extends Block {
+ protected BlockGrass(int var1) {
+ super(var1, Material.ground);
+ this.blockIndexInTexture = 3;
+ this.setTickOnLoad(true);
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(var1.getBlockLightValue(var2, var3 + 1, var4) < 4 && var1.getBlockMaterial(var2, var3 + 1, var4).getCanBlockGrass()) {
+ if(var5.nextInt(4) != 0) {
+ return;
+ }
+
+ var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID);
+ } else if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9) {
+ int var6 = var2 + var5.nextInt(3) - 1;
+ int var7 = var3 + var5.nextInt(5) - 3;
+ int var8 = var4 + var5.nextInt(3) - 1;
+ if(var1.getBlockId(var6, var7, var8) == Block.dirt.blockID && var1.getBlockLightValue(var6, var7 + 1, var8) >= 4 && !var1.getBlockMaterial(var6, var7 + 1, var8).getCanBlockGrass()) {
+ var1.setBlockWithNotify(var6, var7, var8, Block.grass.blockID);
+ }
+ }
+
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Block.dirt.idDropped(0, var2);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockGravel.java b/minecraft_server/src/net/minecraft/src/BlockGravel.java
new file mode 100644
index 0000000..9b56bb4
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockGravel.java
@@ -0,0 +1,13 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockGravel extends BlockSand {
+ public BlockGravel(int var1, int var2) {
+ super(var1, var2);
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return var2.nextInt(10) == 0 ? Item.flint.swiftedIndex : this.blockID;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockIce.java b/minecraft_server/src/net/minecraft/src/BlockIce.java
new file mode 100644
index 0000000..d48062b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockIce.java
@@ -0,0 +1,35 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockIce extends BlockBreakable {
+ public BlockIce(int var1, int var2) {
+ super(var1, var2, Material.ice, false);
+ this.slipperiness = 0.98F;
+ this.setTickOnLoad(true);
+ }
+
+ public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ return super.isSideInsideCoordinate(var1, var2, var3, var4, 1 - var5);
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ Material var5 = var1.getBlockMaterial(var2, var3 - 1, var4);
+ if(var5.func_218_c() || var5.getIsLiquid()) {
+ var1.setBlockWithNotify(var2, var3, var4, Block.waterStill.blockID);
+ }
+
+ }
+
+ public int quantityDropped(Random var1) {
+ return 0;
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(var1.getSavedLightValue(EnumSkyBlock.Block, var2, var3, var4) > 11 - Block.lightOpacity[this.blockID]) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, Block.waterMoving.blockID);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockJukeBox.java b/minecraft_server/src/net/minecraft/src/BlockJukeBox.java
new file mode 100644
index 0000000..d3e8cbc
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockJukeBox.java
@@ -0,0 +1,44 @@
+package net.minecraft.src;
+
+public class BlockJukeBox extends Block {
+ protected BlockJukeBox(int var1, int var2) {
+ super(var1, var2, Material.wood);
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return this.blockIndexInTexture + (var1 == 1 ? 1 : 0);
+ }
+
+ public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if(var6 > 0) {
+ this.ejectRecord(var1, var2, var3, var4, var6);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public void ejectRecord(World var1, int var2, int var3, int var4, int var5) {
+ var1.playRecord((String)null, var2, var3, var4);
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 0);
+ int var6 = Item.record13.swiftedIndex + var5 - 1;
+ float var7 = 0.7F;
+ double var8 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D;
+ double var10 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.2D + 0.6D;
+ double var12 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D;
+ EntityItem var14 = new EntityItem(var1, (double)var2 + var8, (double)var3 + var10, (double)var4 + var12, new ItemStack(var6));
+ var14.field_433_ad = 10;
+ var1.entityJoinedWorld(var14);
+ }
+
+ public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) {
+ if(!var1.multiplayerWorld) {
+ if(var5 > 0) {
+ this.ejectRecord(var1, var2, var3, var4, var5);
+ }
+
+ super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6);
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockLadder.java b/minecraft_server/src/net/minecraft/src/BlockLadder.java
new file mode 100644
index 0000000..b4e807d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockLadder.java
@@ -0,0 +1,91 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockLadder extends Block {
+ protected BlockLadder(int var1, int var2) {
+ super(var1, var2, Material.circuits);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ float var6 = 2.0F / 16.0F;
+ if(var5 == 2) {
+ this.setBlockBounds(0.0F, 0.0F, 1.0F - var6, 1.0F, 1.0F, 1.0F);
+ }
+
+ if(var5 == 3) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var6);
+ }
+
+ if(var5 == 4) {
+ this.setBlockBounds(1.0F - var6, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ }
+
+ if(var5 == 5) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, var6, 1.0F, 1.0F);
+ }
+
+ return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4);
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return var1.doesBlockAllowAttachment(var2 - 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2 + 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 - 1) ? true : var1.doesBlockAllowAttachment(var2, var3, var4 + 1)));
+ }
+
+ public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if((var6 == 0 || var5 == 2) && var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ var6 = 2;
+ }
+
+ if((var6 == 0 || var5 == 3) && var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ var6 = 3;
+ }
+
+ if((var6 == 0 || var5 == 4) && var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ var6 = 4;
+ }
+
+ if((var6 == 0 || var5 == 5) && var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ var6 = 5;
+ }
+
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6);
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ boolean var7 = false;
+ if(var6 == 2 && var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ var7 = true;
+ }
+
+ if(var6 == 3 && var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ var7 = true;
+ }
+
+ if(var6 == 4 && var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ var7 = true;
+ }
+
+ if(var6 == 5 && var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ var7 = true;
+ }
+
+ if(!var7) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var6);
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ super.onNeighborBlockChange(var1, var2, var3, var4, var5);
+ }
+
+ public int quantityDropped(Random var1) {
+ return 1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockLeaves.java b/minecraft_server/src/net/minecraft/src/BlockLeaves.java
new file mode 100644
index 0000000..46cfa28
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockLeaves.java
@@ -0,0 +1,116 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockLeaves extends BlockLeavesBase {
+ private int baseIndexInPNG;
+ private int field_663_c = 0;
+
+ protected BlockLeaves(int var1, int var2) {
+ super(var1, var2, Material.field_4218_h, false);
+ this.baseIndexInPNG = var2;
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ if(this == null) {
+ this.field_663_c = 0;
+ this.func_316_g(var1, var2, var3, var4);
+ super.onNeighborBlockChange(var1, var2, var3, var4, var5);
+ }
+ }
+
+ public void func_6089_e(World var1, int var2, int var3, int var4, int var5) {
+ if(var1.getBlockId(var2, var3, var4) == this.blockID) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if(var6 != 0 && var6 == var5 - 1) {
+ this.func_316_g(var1, var2, var3, var4);
+ }
+ }
+ }
+
+ public void func_316_g(World var1, int var2, int var3, int var4) {
+ if(this == null) {
+ if(this.field_663_c++ < 100) {
+ int var5 = var1.getBlockMaterial(var2, var3 - 1, var4).func_216_a() ? 16 : 0;
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if(var6 == 0) {
+ var6 = 1;
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 1);
+ }
+
+ var5 = this.func_6090_f(var1, var2, var3 - 1, var4, var5);
+ var5 = this.func_6090_f(var1, var2, var3, var4 - 1, var5);
+ var5 = this.func_6090_f(var1, var2, var3, var4 + 1, var5);
+ var5 = this.func_6090_f(var1, var2 - 1, var3, var4, var5);
+ var5 = this.func_6090_f(var1, var2 + 1, var3, var4, var5);
+ int var7 = var5 - 1;
+ if(var7 < 10) {
+ var7 = 1;
+ }
+
+ if(var7 != var6) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var7);
+ this.func_6089_e(var1, var2, var3 - 1, var4, var6);
+ this.func_6089_e(var1, var2, var3 + 1, var4, var6);
+ this.func_6089_e(var1, var2, var3, var4 - 1, var6);
+ this.func_6089_e(var1, var2, var3, var4 + 1, var6);
+ this.func_6089_e(var1, var2 - 1, var3, var4, var6);
+ this.func_6089_e(var1, var2 + 1, var3, var4, var6);
+ }
+
+ }
+ }
+ }
+
+ private int func_6090_f(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockId(var2, var3, var4);
+ if(var6 == Block.wood.blockID) {
+ return 16;
+ } else {
+ if(var6 == this.blockID) {
+ int var7 = var1.getBlockMetadata(var2, var3, var4);
+ if(var7 != 0 && var7 > var5) {
+ return var7;
+ }
+ }
+
+ return var5;
+ }
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(this == null) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if(var6 == 0) {
+ this.field_663_c = 0;
+ this.func_316_g(var1, var2, var3, var4);
+ } else if(var6 == 1) {
+ this.func_6091_h(var1, var2, var3, var4);
+ } else if(var5.nextInt(10) == 0) {
+ this.func_316_g(var1, var2, var3, var4);
+ }
+
+ }
+ }
+
+ private void func_6091_h(World var1, int var2, int var3, int var4) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ public int quantityDropped(Random var1) {
+ return var1.nextInt(20) == 0 ? 1 : 0;
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Block.sapling.blockID;
+ }
+
+ public boolean allowsAttachment() {
+ return !this.graphicsLevel;
+ }
+
+ public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) {
+ super.onEntityWalking(var1, var2, var3, var4, var5);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockLeavesBase.java b/minecraft_server/src/net/minecraft/src/BlockLeavesBase.java
new file mode 100644
index 0000000..75ac015
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockLeavesBase.java
@@ -0,0 +1,19 @@
+package net.minecraft.src;
+
+public class BlockLeavesBase extends Block {
+ protected boolean graphicsLevel;
+
+ protected BlockLeavesBase(int var1, int var2, Material var3, boolean var4) {
+ super(var1, var2, var3);
+ this.graphicsLevel = var4;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockId(var2, var3, var4);
+ return !this.graphicsLevel && var6 == this.blockID ? false : super.isSideInsideCoordinate(var1, var2, var3, var4, var5);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockLever.java b/minecraft_server/src/net/minecraft/src/BlockLever.java
new file mode 100644
index 0000000..aabef18
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockLever.java
@@ -0,0 +1,192 @@
+package net.minecraft.src;
+
+public class BlockLever extends Block {
+ protected BlockLever(int var1, int var2) {
+ super(var1, var2, Material.circuits);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return var1.doesBlockAllowAttachment(var2 - 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2 + 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 - 1) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 + 1) ? true : var1.doesBlockAllowAttachment(var2, var3 - 1, var4))));
+ }
+
+ public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ int var7 = var6 & 8;
+ var6 &= 7;
+ if(var5 == 1 && var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) {
+ var6 = 5 + var1.rand.nextInt(2);
+ }
+
+ if(var5 == 2 && var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ var6 = 4;
+ }
+
+ if(var5 == 3 && var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ var6 = 3;
+ }
+
+ if(var5 == 4 && var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ var6 = 2;
+ }
+
+ if(var5 == 5 && var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ var6 = 1;
+ }
+
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + var7);
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 1);
+ } else if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 2);
+ } else if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 3);
+ } else if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 4);
+ } else if(var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 5 + var1.rand.nextInt(2));
+ }
+
+ this.func_274_g(var1, var2, var3, var4);
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ if(this.func_274_g(var1, var2, var3, var4)) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4) & 7;
+ boolean var7 = false;
+ if(!var1.doesBlockAllowAttachment(var2 - 1, var3, var4) && var6 == 1) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2 + 1, var3, var4) && var6 == 2) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2, var3, var4 - 1) && var6 == 3) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2, var3, var4 + 1) && var6 == 4) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4) && var6 == 5) {
+ var7 = true;
+ }
+
+ if(var7) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+ }
+
+ }
+
+ private boolean func_274_g(World var1, int var2, int var3, int var4) {
+ if(!this.canPlaceBlockAt(var1, var2, var3, var4)) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4) & 7;
+ float var6 = 3.0F / 16.0F;
+ if(var5 == 1) {
+ this.setBlockBounds(0.0F, 0.2F, 0.5F - var6, var6 * 2.0F, 0.8F, 0.5F + var6);
+ } else if(var5 == 2) {
+ this.setBlockBounds(1.0F - var6 * 2.0F, 0.2F, 0.5F - var6, 1.0F, 0.8F, 0.5F + var6);
+ } else if(var5 == 3) {
+ this.setBlockBounds(0.5F - var6, 0.2F, 0.0F, 0.5F + var6, 0.8F, var6 * 2.0F);
+ } else if(var5 == 4) {
+ this.setBlockBounds(0.5F - var6, 0.2F, 1.0F - var6 * 2.0F, 0.5F + var6, 0.8F, 1.0F);
+ } else {
+ var6 = 0.25F;
+ this.setBlockBounds(0.5F - var6, 0.0F, 0.5F - var6, 0.5F + var6, 0.6F, 0.5F + var6);
+ }
+
+ }
+
+ public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ this.blockActivated(var1, var2, var3, var4, var5);
+ }
+
+ public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ if(var1.multiplayerWorld) {
+ return true;
+ } else {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ int var7 = var6 & 7;
+ int var8 = 8 - (var6 & 8);
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + var8);
+ var1.func_519_b(var2, var3, var4, var2, var3, var4);
+ var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, var8 > 0 ? 0.6F : 0.5F);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ if(var7 == 1) {
+ var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID);
+ } else if(var7 == 2) {
+ var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID);
+ } else if(var7 == 3) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID);
+ } else if(var7 == 4) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID);
+ } else {
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ }
+
+ return true;
+ }
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ if((var5 & 8) > 0) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ int var6 = var5 & 7;
+ if(var6 == 1) {
+ var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID);
+ } else if(var6 == 2) {
+ var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID);
+ } else if(var6 == 3) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID);
+ } else if(var6 == 4) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID);
+ } else {
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ }
+ }
+
+ super.onBlockRemoval(var1, var2, var3, var4);
+ }
+
+ public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ return (var1.getBlockMetadata(var2, var3, var4) & 8) > 0;
+ }
+
+ public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if((var6 & 8) == 0) {
+ return false;
+ } else {
+ int var7 = var6 & 7;
+ return var7 == 5 && var5 == 1 ? true : (var7 == 4 && var5 == 2 ? true : (var7 == 3 && var5 == 3 ? true : (var7 == 2 && var5 == 4 ? true : var7 == 1 && var5 == 5)));
+ }
+ }
+
+ public boolean canProvidePower() {
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockLightStone.java b/minecraft_server/src/net/minecraft/src/BlockLightStone.java
new file mode 100644
index 0000000..b33203c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockLightStone.java
@@ -0,0 +1,13 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockLightStone extends Block {
+ public BlockLightStone(int var1, int var2, Material var3) {
+ super(var1, var2, var3);
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Item.lightStoneDust.swiftedIndex;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockLog.java b/minecraft_server/src/net/minecraft/src/BlockLog.java
new file mode 100644
index 0000000..161c1ae
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockLog.java
@@ -0,0 +1,22 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockLog extends Block {
+ protected BlockLog(int var1) {
+ super(var1, Material.wood);
+ this.blockIndexInTexture = 20;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 1;
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Block.wood.blockID;
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return var1 == 1 ? 21 : (var1 == 0 ? 21 : 20);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockMinecartTrack.java b/minecraft_server/src/net/minecraft/src/BlockMinecartTrack.java
new file mode 100644
index 0000000..4779247
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockMinecartTrack.java
@@ -0,0 +1,89 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockMinecartTrack extends Block {
+ protected BlockMinecartTrack(int var1, int var2) {
+ super(var1, var2, Material.circuits);
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) {
+ this.setBlockBoundsBasedOnState(var1, var2, var3, var4);
+ return super.collisionRayTrace(var1, var2, var3, var4, var5, var6);
+ }
+
+ public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ if(var5 >= 2 && var5 <= 5) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 10.0F / 16.0F, 1.0F);
+ } else {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F);
+ }
+
+ }
+
+ public int quantityDropped(Random var1) {
+ return 1;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return var1.doesBlockAllowAttachment(var2, var3 - 1, var4);
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ if(!var1.multiplayerWorld) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 15);
+ this.func_4038_g(var1, var2, var3, var4);
+ }
+
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ if(!var1.multiplayerWorld) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ boolean var7 = false;
+ if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) {
+ var7 = true;
+ }
+
+ if(var6 == 2 && !var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ var7 = true;
+ }
+
+ if(var6 == 3 && !var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ var7 = true;
+ }
+
+ if(var6 == 4 && !var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ var7 = true;
+ }
+
+ if(var6 == 5 && !var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ var7 = true;
+ }
+
+ if(var7) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ } else if(var5 > 0 && Block.blocksList[var5].canProvidePower() && MinecartTrackLogic.func_600_a(new MinecartTrackLogic(this, var1, var2, var3, var4)) == 3) {
+ this.func_4038_g(var1, var2, var3, var4);
+ }
+
+ }
+ }
+
+ private void func_4038_g(World var1, int var2, int var3, int var4) {
+ if(!var1.multiplayerWorld) {
+ (new MinecartTrackLogic(this, var1, var2, var3, var4)).func_596_a(var1.isBlockIndirectlyGettingPowered(var2, var3, var4));
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockMobSpawner.java b/minecraft_server/src/net/minecraft/src/BlockMobSpawner.java
new file mode 100644
index 0000000..7393e1b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockMobSpawner.java
@@ -0,0 +1,25 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockMobSpawner extends BlockContainer {
+ protected BlockMobSpawner(int var1, int var2) {
+ super(var1, var2, Material.rock);
+ }
+
+ protected TileEntity func_294_a_() {
+ return new TileEntityMobSpawner();
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return 0;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 0;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockMushroom.java b/minecraft_server/src/net/minecraft/src/BlockMushroom.java
new file mode 100644
index 0000000..7ea5402
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockMushroom.java
@@ -0,0 +1,17 @@
+package net.minecraft.src;
+
+public class BlockMushroom extends BlockFlower {
+ protected BlockMushroom(int var1, int var2) {
+ super(var1, var2);
+ float var3 = 0.2F;
+ this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 2.0F, 0.5F + var3);
+ }
+
+ protected boolean canThisPlantGrowOnThisBlockID(int var1) {
+ return Block.field_540_p[var1];
+ }
+
+ public boolean canBlockStay(World var1, int var2, int var3, int var4) {
+ return var1.getBlockLightValue(var2, var3, var4) <= 13 && this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4));
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockObsidian.java b/minecraft_server/src/net/minecraft/src/BlockObsidian.java
new file mode 100644
index 0000000..bb6bcf1
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockObsidian.java
@@ -0,0 +1,17 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockObsidian extends BlockStone {
+ public BlockObsidian(int var1, int var2) {
+ super(var1, var2);
+ }
+
+ public int quantityDropped(Random var1) {
+ return 1;
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Block.obsidian.blockID;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockOre.java b/minecraft_server/src/net/minecraft/src/BlockOre.java
new file mode 100644
index 0000000..663ff3c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockOre.java
@@ -0,0 +1,17 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockOre extends Block {
+ public BlockOre(int var1, int var2) {
+ super(var1, var2, Material.rock);
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return this.blockID == Block.oreCoal.blockID ? Item.coal.swiftedIndex : (this.blockID == Block.oreDiamond.blockID ? Item.diamond.swiftedIndex : this.blockID);
+ }
+
+ public int quantityDropped(Random var1) {
+ return 1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockOreBlock.java b/minecraft_server/src/net/minecraft/src/BlockOreBlock.java
new file mode 100644
index 0000000..d8464b3
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockOreBlock.java
@@ -0,0 +1,12 @@
+package net.minecraft.src;
+
+public class BlockOreBlock extends Block {
+ public BlockOreBlock(int var1, int var2) {
+ super(var1, Material.iron);
+ this.blockIndexInTexture = var2;
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return this.blockIndexInTexture - 16;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockPortal.java b/minecraft_server/src/net/minecraft/src/BlockPortal.java
new file mode 100644
index 0000000..fc03147
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockPortal.java
@@ -0,0 +1,130 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockPortal extends BlockBreakable {
+ public BlockPortal(int var1, int var2) {
+ super(var1, var2, Material.field_4212_x, false);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
+ float var5;
+ float var6;
+ if(var1.getBlockId(var2 - 1, var3, var4) != this.blockID && var1.getBlockId(var2 + 1, var3, var4) != this.blockID) {
+ var5 = 2.0F / 16.0F;
+ var6 = 0.5F;
+ this.setBlockBounds(0.5F - var5, 0.0F, 0.5F - var6, 0.5F + var5, 1.0F, 0.5F + var6);
+ } else {
+ var5 = 0.5F;
+ var6 = 2.0F / 16.0F;
+ this.setBlockBounds(0.5F - var5, 0.0F, 0.5F - var6, 0.5F + var5, 1.0F, 0.5F + var6);
+ }
+
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean tryToCreatePortal(World var1, int var2, int var3, int var4) {
+ byte var5 = 0;
+ byte var6 = 0;
+ if(var1.getBlockId(var2 - 1, var3, var4) == Block.obsidian.blockID || var1.getBlockId(var2 + 1, var3, var4) == Block.obsidian.blockID) {
+ var5 = 1;
+ }
+
+ if(var1.getBlockId(var2, var3, var4 - 1) == Block.obsidian.blockID || var1.getBlockId(var2, var3, var4 + 1) == Block.obsidian.blockID) {
+ var6 = 1;
+ }
+
+ System.out.println(var5 + ", " + var6);
+ if(var5 == var6) {
+ return false;
+ } else {
+ if(var1.getBlockId(var2 - var5, var3, var4 - var6) == 0) {
+ var2 -= var5;
+ var4 -= var6;
+ }
+
+ int var7;
+ int var8;
+ for(var7 = -1; var7 <= 2; ++var7) {
+ for(var8 = -1; var8 <= 3; ++var8) {
+ boolean var9 = var7 == -1 || var7 == 2 || var8 == -1 || var8 == 3;
+ if(var7 != -1 && var7 != 2 || var8 != -1 && var8 != 3) {
+ int var10 = var1.getBlockId(var2 + var5 * var7, var3 + var8, var4 + var6 * var7);
+ if(var9) {
+ if(var10 != Block.obsidian.blockID) {
+ return false;
+ }
+ } else if(var10 != 0 && var10 != Block.fire.blockID) {
+ return false;
+ }
+ }
+ }
+ }
+
+ var1.field_808_h = true;
+
+ for(var7 = 0; var7 < 2; ++var7) {
+ for(var8 = 0; var8 < 3; ++var8) {
+ var1.setBlockWithNotify(var2 + var5 * var7, var3 + var8, var4 + var6 * var7, Block.portal.blockID);
+ }
+ }
+
+ var1.field_808_h = false;
+ return true;
+ }
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ byte var6 = 0;
+ byte var7 = 1;
+ if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID || var1.getBlockId(var2 + 1, var3, var4) == this.blockID) {
+ var6 = 1;
+ var7 = 0;
+ }
+
+ int var8;
+ for(var8 = var3; var1.getBlockId(var2, var8 - 1, var4) == this.blockID; --var8) {
+ }
+
+ if(var1.getBlockId(var2, var8 - 1, var4) != Block.obsidian.blockID) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ } else {
+ int var9;
+ for(var9 = 1; var9 < 4 && var1.getBlockId(var2, var8 + var9, var4) == this.blockID; ++var9) {
+ }
+
+ if(var9 == 3 && var1.getBlockId(var2, var8 + var9, var4) == Block.obsidian.blockID) {
+ boolean var10 = var1.getBlockId(var2 - 1, var3, var4) == this.blockID || var1.getBlockId(var2 + 1, var3, var4) == this.blockID;
+ boolean var11 = var1.getBlockId(var2, var3, var4 - 1) == this.blockID || var1.getBlockId(var2, var3, var4 + 1) == this.blockID;
+ if(var10 && var11) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ } else if((var1.getBlockId(var2 + var6, var3, var4 + var7) != Block.obsidian.blockID || var1.getBlockId(var2 - var6, var3, var4 - var7) != this.blockID) && (var1.getBlockId(var2 - var6, var3, var4 - var7) != Block.obsidian.blockID || var1.getBlockId(var2 + var6, var3, var4 + var7) != this.blockID)) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+ } else {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+ }
+ }
+
+ public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ return true;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 0;
+ }
+
+ public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) {
+ if(!var1.multiplayerWorld) {
+ var5.func_4042_C();
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockPressurePlate.java b/minecraft_server/src/net/minecraft/src/BlockPressurePlate.java
new file mode 100644
index 0000000..1fd833c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockPressurePlate.java
@@ -0,0 +1,140 @@
+package net.minecraft.src;
+
+import java.util.List;
+import java.util.Random;
+
+public class BlockPressurePlate extends Block {
+ private EnumMobType triggerMobType;
+
+ protected BlockPressurePlate(int var1, int var2, EnumMobType var3) {
+ super(var1, var2, Material.rock);
+ this.triggerMobType = var3;
+ this.setTickOnLoad(true);
+ float var4 = 1.0F / 16.0F;
+ this.setBlockBounds(var4, 0.0F, var4, 1.0F - var4, 0.03125F, 1.0F - var4);
+ }
+
+ public int tickRate() {
+ return 20;
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return var1.doesBlockAllowAttachment(var2, var3 - 1, var4);
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ boolean var6 = false;
+ if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) {
+ var6 = true;
+ }
+
+ if(var6) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(!var1.multiplayerWorld) {
+ if(var1.getBlockMetadata(var2, var3, var4) != 0) {
+ this.func_318_g(var1, var2, var3, var4);
+ }
+ }
+ }
+
+ public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) {
+ if(!var1.multiplayerWorld) {
+ if(var1.getBlockMetadata(var2, var3, var4) != 1) {
+ this.func_318_g(var1, var2, var3, var4);
+ }
+ }
+ }
+
+ private void func_318_g(World var1, int var2, int var3, int var4) {
+ boolean var5 = var1.getBlockMetadata(var2, var3, var4) == 1;
+ boolean var6 = false;
+ float var7 = 2.0F / 16.0F;
+ List var8 = null;
+ if(this.triggerMobType == EnumMobType.everything) {
+ var8 = var1.getEntitiesWithinAABBExcludingEntity((Entity)null, AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var7), (double)var3, (double)((float)var4 + var7), (double)((float)(var2 + 1) - var7), (double)var3 + 0.25D, (double)((float)(var4 + 1) - var7)));
+ }
+
+ if(this.triggerMobType == EnumMobType.mobs) {
+ var8 = var1.getEntitiesWithinAABB(EntityLiving.class, AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var7), (double)var3, (double)((float)var4 + var7), (double)((float)(var2 + 1) - var7), (double)var3 + 0.25D, (double)((float)(var4 + 1) - var7)));
+ }
+
+ if(this.triggerMobType == EnumMobType.players) {
+ var8 = var1.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var7), (double)var3, (double)((float)var4 + var7), (double)((float)(var2 + 1) - var7), (double)var3 + 0.25D, (double)((float)(var4 + 1) - var7)));
+ }
+
+ if(var8.size() > 0) {
+ var6 = true;
+ }
+
+ if(var6 && !var5) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 1);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ var1.func_519_b(var2, var3, var4, var2, var3, var4);
+ var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.1D, (double)var4 + 0.5D, "random.click", 0.3F, 0.6F);
+ }
+
+ if(!var6 && var5) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 0);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ var1.func_519_b(var2, var3, var4, var2, var3, var4);
+ var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.1D, (double)var4 + 0.5D, "random.click", 0.3F, 0.5F);
+ }
+
+ if(var6) {
+ var1.scheduleBlockUpdate(var2, var3, var4, this.blockID);
+ }
+
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ if(var5 > 0) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ }
+
+ super.onBlockRemoval(var1, var2, var3, var4);
+ }
+
+ public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
+ boolean var5 = var1.getBlockMetadata(var2, var3, var4) == 1;
+ float var6 = 1.0F / 16.0F;
+ if(var5) {
+ this.setBlockBounds(var6, 0.0F, var6, 1.0F - var6, 0.03125F, 1.0F - var6);
+ } else {
+ this.setBlockBounds(var6, 0.0F, var6, 1.0F - var6, 1.0F / 16.0F, 1.0F - var6);
+ }
+
+ }
+
+ public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ return var1.getBlockMetadata(var2, var3, var4) > 0;
+ }
+
+ public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) {
+ return var1.getBlockMetadata(var2, var3, var4) == 0 ? false : var5 == 1;
+ }
+
+ public boolean canProvidePower() {
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockPumpkin.java b/minecraft_server/src/net/minecraft/src/BlockPumpkin.java
new file mode 100644
index 0000000..dcc2af1
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockPumpkin.java
@@ -0,0 +1,30 @@
+package net.minecraft.src;
+
+public class BlockPumpkin extends Block {
+ private boolean field_4086_a;
+
+ protected BlockPumpkin(int var1, int var2, boolean var3) {
+ super(var1, Material.field_4213_w);
+ this.blockIndexInTexture = var2;
+ this.setTickOnLoad(true);
+ this.field_4086_a = var3;
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return var1 == 1 ? this.blockIndexInTexture : (var1 == 0 ? this.blockIndexInTexture : (var1 == 3 ? this.blockIndexInTexture + 1 + 16 : this.blockIndexInTexture + 16));
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ super.onBlockAdded(var1, var2, var3, var4);
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockId(var2, var3, var4);
+ return (var5 == 0 || Block.blocksList[var5].blockMaterial.getIsLiquid()) && var1.doesBlockAllowAttachment(var2, var3 - 1, var4);
+ }
+
+ public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) {
+ int var6 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockRedstoneOre.java b/minecraft_server/src/net/minecraft/src/BlockRedstoneOre.java
new file mode 100644
index 0000000..5899894
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockRedstoneOre.java
@@ -0,0 +1,97 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockRedstoneOre extends Block {
+ private boolean field_665_a;
+
+ public BlockRedstoneOre(int var1, int var2, boolean var3) {
+ super(var1, var2, Material.rock);
+ if(var3) {
+ this.setTickOnLoad(true);
+ }
+
+ this.field_665_a = var3;
+ }
+
+ public int tickRate() {
+ return 30;
+ }
+
+ public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ this.func_321_g(var1, var2, var3, var4);
+ super.onBlockClicked(var1, var2, var3, var4, var5);
+ }
+
+ public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) {
+ this.func_321_g(var1, var2, var3, var4);
+ super.onEntityWalking(var1, var2, var3, var4, var5);
+ }
+
+ public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ this.func_321_g(var1, var2, var3, var4);
+ return super.blockActivated(var1, var2, var3, var4, var5);
+ }
+
+ private void func_321_g(World var1, int var2, int var3, int var4) {
+ this.func_320_h(var1, var2, var3, var4);
+ if(this.blockID == Block.oreRedstone.blockID) {
+ var1.setBlockWithNotify(var2, var3, var4, Block.oreRedstoneGlowing.blockID);
+ }
+
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(this.blockID == Block.oreRedstoneGlowing.blockID) {
+ var1.setBlockWithNotify(var2, var3, var4, Block.oreRedstone.blockID);
+ }
+
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Item.redstone.swiftedIndex;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 4 + var1.nextInt(2);
+ }
+
+ private void func_320_h(World var1, int var2, int var3, int var4) {
+ Random var5 = var1.rand;
+ double var6 = 1.0D / 16.0D;
+
+ for(int var8 = 0; var8 < 6; ++var8) {
+ double var9 = (double)((float)var2 + var5.nextFloat());
+ double var11 = (double)((float)var3 + var5.nextFloat());
+ double var13 = (double)((float)var4 + var5.nextFloat());
+ if(var8 == 0 && !var1.doesBlockAllowAttachment(var2, var3 + 1, var4)) {
+ var11 = (double)(var3 + 1) + var6;
+ }
+
+ if(var8 == 1 && !var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) {
+ var11 = (double)(var3 + 0) - var6;
+ }
+
+ if(var8 == 2 && !var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ var13 = (double)(var4 + 1) + var6;
+ }
+
+ if(var8 == 3 && !var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ var13 = (double)(var4 + 0) - var6;
+ }
+
+ if(var8 == 4 && !var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ var9 = (double)(var2 + 1) + var6;
+ }
+
+ if(var8 == 5 && !var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ var9 = (double)(var2 + 0) - var6;
+ }
+
+ if(var9 < (double)var2 || var9 > (double)(var2 + 1) || var11 < 0.0D || var11 > (double)(var3 + 1) || var13 < (double)var4 || var13 > (double)(var4 + 1)) {
+ var1.spawnParticle("reddust", var9, var11, var13, 0.0D, 0.0D, 0.0D);
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockRedstoneTorch.java b/minecraft_server/src/net/minecraft/src/BlockRedstoneTorch.java
new file mode 100644
index 0000000..232002b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockRedstoneTorch.java
@@ -0,0 +1,126 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+public class BlockRedstoneTorch extends BlockTorch {
+ private boolean torchActive = false;
+ private static List torchUpdates = new ArrayList();
+
+ private boolean func_280_a(World var1, int var2, int var3, int var4, boolean var5) {
+ if(var5) {
+ torchUpdates.add(new RedstoneUpdateInfo(var2, var3, var4, var1.worldTime));
+ }
+
+ int var6 = 0;
+
+ for(int var7 = 0; var7 < torchUpdates.size(); ++var7) {
+ RedstoneUpdateInfo var8 = (RedstoneUpdateInfo)torchUpdates.get(var7);
+ if(var8.field_775_a == var2 && var8.field_774_b == var3 && var8.field_777_c == var4) {
+ ++var6;
+ if(var6 >= 8) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ protected BlockRedstoneTorch(int var1, int var2, boolean var3) {
+ super(var1, var2);
+ this.torchActive = var3;
+ this.setTickOnLoad(true);
+ }
+
+ public int tickRate() {
+ return 2;
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ if(var1.getBlockMetadata(var2, var3, var4) == 0) {
+ super.onBlockAdded(var1, var2, var3, var4);
+ }
+
+ if(this.torchActive) {
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID);
+ }
+
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ if(this.torchActive) {
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID);
+ }
+
+ }
+
+ public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ if(!this.torchActive) {
+ return false;
+ } else {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ return var6 == 5 && var5 == 1 ? false : (var6 == 3 && var5 == 3 ? false : (var6 == 4 && var5 == 2 ? false : (var6 == 1 && var5 == 5 ? false : var6 != 2 || var5 != 4)));
+ }
+ }
+
+ private boolean func_15001_g(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ return var5 == 5 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3 - 1, var4, 0) ? true : (var5 == 3 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 - 1, 2) ? true : (var5 == 4 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 + 1, 3) ? true : (var5 == 1 && var1.isBlockIndirectlyProvidingPowerTo(var2 - 1, var3, var4, 4) ? true : var5 == 2 && var1.isBlockIndirectlyProvidingPowerTo(var2 + 1, var3, var4, 5))));
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ boolean var6 = this.func_15001_g(var1, var2, var3, var4);
+
+ while(torchUpdates.size() > 0 && var1.worldTime - ((RedstoneUpdateInfo)torchUpdates.get(0)).field_776_d > 100L) {
+ torchUpdates.remove(0);
+ }
+
+ if(this.torchActive) {
+ if(var6) {
+ var1.func_507_b(var2, var3, var4, Block.torchRedstoneIdle.blockID, var1.getBlockMetadata(var2, var3, var4));
+ if(this.func_280_a(var1, var2, var3, var4, true)) {
+ var1.playSoundEffect((double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), "random.fizz", 0.5F, 2.6F + (var1.rand.nextFloat() - var1.rand.nextFloat()) * 0.8F);
+
+ for(int var7 = 0; var7 < 5; ++var7) {
+ double var8 = (double)var2 + var5.nextDouble() * 0.6D + 0.2D;
+ double var10 = (double)var3 + var5.nextDouble() * 0.6D + 0.2D;
+ double var12 = (double)var4 + var5.nextDouble() * 0.6D + 0.2D;
+ var1.spawnParticle("smoke", var8, var10, var12, 0.0D, 0.0D, 0.0D);
+ }
+ }
+ }
+ } else if(!var6 && !this.func_280_a(var1, var2, var3, var4, false)) {
+ var1.func_507_b(var2, var3, var4, Block.torchRedstoneActive.blockID, var1.getBlockMetadata(var2, var3, var4));
+ }
+
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ super.onNeighborBlockChange(var1, var2, var3, var4, var5);
+ var1.scheduleBlockUpdate(var2, var3, var4, this.blockID);
+ }
+
+ public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) {
+ return var5 == 0 ? this.isPoweringTo(var1, var2, var3, var4, var5) : false;
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Block.torchRedstoneActive.blockID;
+ }
+
+ public boolean canProvidePower() {
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockRedstoneWire.java b/minecraft_server/src/net/minecraft/src/BlockRedstoneWire.java
new file mode 100644
index 0000000..6ce3aff
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockRedstoneWire.java
@@ -0,0 +1,286 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockRedstoneWire extends Block {
+ private boolean field_652_a = true;
+
+ public BlockRedstoneWire(int var1, int var2) {
+ super(var1, var2, Material.circuits);
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F / 16.0F, 1.0F);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return var1.doesBlockAllowAttachment(var2, var3 - 1, var4);
+ }
+
+ private void func_292_g(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ int var6 = 0;
+ this.field_652_a = false;
+ boolean var7 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4);
+ this.field_652_a = true;
+ int var8;
+ int var9;
+ int var10;
+ if(var7) {
+ var6 = 15;
+ } else {
+ for(var8 = 0; var8 < 4; ++var8) {
+ var9 = var2;
+ var10 = var4;
+ if(var8 == 0) {
+ var9 = var2 - 1;
+ }
+
+ if(var8 == 1) {
+ ++var9;
+ }
+
+ if(var8 == 2) {
+ var10 = var4 - 1;
+ }
+
+ if(var8 == 3) {
+ ++var10;
+ }
+
+ var6 = this.func_290_f(var1, var9, var3, var10, var6);
+ if(var1.doesBlockAllowAttachment(var9, var3, var10) && !var1.doesBlockAllowAttachment(var2, var3 + 1, var4)) {
+ var6 = this.func_290_f(var1, var9, var3 + 1, var10, var6);
+ } else if(!var1.doesBlockAllowAttachment(var9, var3, var10)) {
+ var6 = this.func_290_f(var1, var9, var3 - 1, var10, var6);
+ }
+ }
+
+ if(var6 > 0) {
+ --var6;
+ } else {
+ var6 = 0;
+ }
+ }
+
+ if(var5 != var6) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6);
+ var1.func_519_b(var2, var3, var4, var2, var3, var4);
+ if(var6 > 0) {
+ --var6;
+ }
+
+ for(var8 = 0; var8 < 4; ++var8) {
+ var9 = var2;
+ var10 = var4;
+ int var11 = var3 - 1;
+ if(var8 == 0) {
+ var9 = var2 - 1;
+ }
+
+ if(var8 == 1) {
+ ++var9;
+ }
+
+ if(var8 == 2) {
+ var10 = var4 - 1;
+ }
+
+ if(var8 == 3) {
+ ++var10;
+ }
+
+ if(var1.doesBlockAllowAttachment(var9, var3, var10)) {
+ var11 += 2;
+ }
+
+ int var12 = this.func_290_f(var1, var9, var3, var10, -1);
+ if(var12 >= 0 && var12 != var6) {
+ this.func_292_g(var1, var9, var3, var10);
+ }
+
+ var12 = this.func_290_f(var1, var9, var11, var10, -1);
+ if(var12 >= 0 && var12 != var6) {
+ this.func_292_g(var1, var9, var11, var10);
+ }
+ }
+
+ if(var5 == 0 || var6 == 0) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID);
+ }
+ }
+
+ }
+
+ private void func_291_h(World var1, int var2, int var3, int var4) {
+ if(var1.getBlockId(var2, var3, var4) == this.blockID) {
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID);
+ }
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ super.onBlockAdded(var1, var2, var3, var4);
+ if(!var1.multiplayerWorld) {
+ this.func_292_g(var1, var2, var3, var4);
+ var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ this.func_291_h(var1, var2 - 1, var3, var4);
+ this.func_291_h(var1, var2 + 1, var3, var4);
+ this.func_291_h(var1, var2, var3, var4 - 1);
+ this.func_291_h(var1, var2, var3, var4 + 1);
+ if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ this.func_291_h(var1, var2 - 1, var3 + 1, var4);
+ } else {
+ this.func_291_h(var1, var2 - 1, var3 - 1, var4);
+ }
+
+ if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ this.func_291_h(var1, var2 + 1, var3 + 1, var4);
+ } else {
+ this.func_291_h(var1, var2 + 1, var3 - 1, var4);
+ }
+
+ if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ this.func_291_h(var1, var2, var3 + 1, var4 - 1);
+ } else {
+ this.func_291_h(var1, var2, var3 - 1, var4 - 1);
+ }
+
+ if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ this.func_291_h(var1, var2, var3 + 1, var4 + 1);
+ } else {
+ this.func_291_h(var1, var2, var3 - 1, var4 + 1);
+ }
+
+ }
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ super.onBlockRemoval(var1, var2, var3, var4);
+ if(!var1.multiplayerWorld) {
+ var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID);
+ var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
+ this.func_292_g(var1, var2, var3, var4);
+ this.func_291_h(var1, var2 - 1, var3, var4);
+ this.func_291_h(var1, var2 + 1, var3, var4);
+ this.func_291_h(var1, var2, var3, var4 - 1);
+ this.func_291_h(var1, var2, var3, var4 + 1);
+ if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ this.func_291_h(var1, var2 - 1, var3 + 1, var4);
+ } else {
+ this.func_291_h(var1, var2 - 1, var3 - 1, var4);
+ }
+
+ if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ this.func_291_h(var1, var2 + 1, var3 + 1, var4);
+ } else {
+ this.func_291_h(var1, var2 + 1, var3 - 1, var4);
+ }
+
+ if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ this.func_291_h(var1, var2, var3 + 1, var4 - 1);
+ } else {
+ this.func_291_h(var1, var2, var3 - 1, var4 - 1);
+ }
+
+ if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ this.func_291_h(var1, var2, var3 + 1, var4 + 1);
+ } else {
+ this.func_291_h(var1, var2, var3 - 1, var4 + 1);
+ }
+
+ }
+ }
+
+ private int func_290_f(World var1, int var2, int var3, int var4, int var5) {
+ if(var1.getBlockId(var2, var3, var4) != this.blockID) {
+ return var5;
+ } else {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ return var6 > var5 ? var6 : var5;
+ }
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ if(!var1.multiplayerWorld) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ boolean var7 = this.canPlaceBlockAt(var1, var2, var3, var4);
+ if(!var7) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var6);
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ } else {
+ this.func_292_g(var1, var2, var3, var4);
+ }
+
+ super.onNeighborBlockChange(var1, var2, var3, var4, var5);
+ }
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Item.redstone.swiftedIndex;
+ }
+
+ public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) {
+ return !this.field_652_a ? false : this.isPoweringTo(var1, var2, var3, var4, var5);
+ }
+
+ public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ if(!this.field_652_a) {
+ return false;
+ } else if(var1.getBlockMetadata(var2, var3, var4) == 0) {
+ return false;
+ } else if(var5 == 1) {
+ return true;
+ } else {
+ boolean var6 = func_293_b(var1, var2 - 1, var3, var4) || !var1.doesBlockAllowAttachment(var2 - 1, var3, var4) && func_293_b(var1, var2 - 1, var3 - 1, var4);
+ boolean var7 = func_293_b(var1, var2 + 1, var3, var4) || !var1.doesBlockAllowAttachment(var2 + 1, var3, var4) && func_293_b(var1, var2 + 1, var3 - 1, var4);
+ boolean var8 = func_293_b(var1, var2, var3, var4 - 1) || !var1.doesBlockAllowAttachment(var2, var3, var4 - 1) && func_293_b(var1, var2, var3 - 1, var4 - 1);
+ boolean var9 = func_293_b(var1, var2, var3, var4 + 1) || !var1.doesBlockAllowAttachment(var2, var3, var4 + 1) && func_293_b(var1, var2, var3 - 1, var4 + 1);
+ if(!var1.doesBlockAllowAttachment(var2, var3 + 1, var4)) {
+ if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4) && func_293_b(var1, var2 - 1, var3 + 1, var4)) {
+ var6 = true;
+ }
+
+ if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4) && func_293_b(var1, var2 + 1, var3 + 1, var4)) {
+ var7 = true;
+ }
+
+ if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1) && func_293_b(var1, var2, var3 + 1, var4 - 1)) {
+ var8 = true;
+ }
+
+ if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1) && func_293_b(var1, var2, var3 + 1, var4 + 1)) {
+ var9 = true;
+ }
+ }
+
+ return !var8 && !var7 && !var6 && !var9 && var5 >= 2 && var5 <= 5 ? true : (var5 == 2 && var8 && !var6 && !var7 ? true : (var5 == 3 && var9 && !var6 && !var7 ? true : (var5 == 4 && var6 && !var8 && !var9 ? true : var5 == 5 && var7 && !var8 && !var9)));
+ }
+ }
+
+ public boolean canProvidePower() {
+ return this.field_652_a;
+ }
+
+ public static boolean func_293_b(IBlockAccess var0, int var1, int var2, int var3) {
+ int var4 = var0.getBlockId(var1, var2, var3);
+ return var4 == Block.redstoneWire.blockID ? true : (var4 == 0 ? false : Block.blocksList[var4].canProvidePower());
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockReed.java b/minecraft_server/src/net/minecraft/src/BlockReed.java
new file mode 100644
index 0000000..344c0e8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockReed.java
@@ -0,0 +1,65 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockReed extends Block {
+ protected BlockReed(int var1, int var2) {
+ super(var1, Material.plants);
+ this.blockIndexInTexture = var2;
+ float var3 = 6.0F / 16.0F;
+ this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 1.0F, 0.5F + var3);
+ this.setTickOnLoad(true);
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(var1.getBlockId(var2, var3 + 1, var4) == 0) {
+ int var6;
+ for(var6 = 1; var1.getBlockId(var2, var3 - var6, var4) == this.blockID; ++var6) {
+ }
+
+ if(var6 < 3) {
+ int var7 = var1.getBlockMetadata(var2, var3, var4);
+ if(var7 == 15) {
+ var1.setBlockWithNotify(var2, var3 + 1, var4, this.blockID);
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 0);
+ } else {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + 1);
+ }
+ }
+ }
+
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockId(var2, var3 - 1, var4);
+ return var5 == this.blockID ? true : (var5 != Block.grass.blockID && var5 != Block.dirt.blockID ? false : (var1.getBlockMaterial(var2 - 1, var3 - 1, var4) == Material.water ? true : (var1.getBlockMaterial(var2 + 1, var3 - 1, var4) == Material.water ? true : (var1.getBlockMaterial(var2, var3 - 1, var4 - 1) == Material.water ? true : var1.getBlockMaterial(var2, var3 - 1, var4 + 1) == Material.water))));
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ this.func_4037_g(var1, var2, var3, var4);
+ }
+
+ protected final void func_4037_g(World var1, int var2, int var3, int var4) {
+ if(!this.canBlockStay(var1, var2, var3, var4)) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ }
+
+ public boolean canBlockStay(World var1, int var2, int var3, int var4) {
+ return this.canPlaceBlockAt(var1, var2, var3, var4);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Item.reed.swiftedIndex;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockSand.java b/minecraft_server/src/net/minecraft/src/BlockSand.java
new file mode 100644
index 0000000..b8eb3c7
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockSand.java
@@ -0,0 +1,53 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockSand extends Block {
+ public static boolean fallInstantly = false;
+
+ public BlockSand(int var1, int var2) {
+ super(var1, var2, Material.sand);
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ var1.scheduleBlockUpdate(var2, var3, var4, this.blockID);
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ var1.scheduleBlockUpdate(var2, var3, var4, this.blockID);
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ this.tryToFall(var1, var2, var3, var4);
+ }
+
+ private void tryToFall(World var1, int var2, int var3, int var4) {
+ if(canFallBelow(var1, var2, var3 - 1, var4) && var3 >= 0) {
+ EntityFallingSand var8 = new EntityFallingSand(var1, (float)var2 + 0.5F, (float)var3 + 0.5F, (float)var4 + 0.5F, this.blockID);
+ if(fallInstantly) {
+ while(!var8.field_304_B) {
+ var8.onUpdate();
+ }
+ } else {
+ var1.entityJoinedWorld(var8);
+ }
+ }
+
+ }
+
+ public int tickRate() {
+ return 3;
+ }
+
+ public static boolean canFallBelow(World var0, int var1, int var2, int var3) {
+ int var4 = var0.getBlockId(var1, var2, var3);
+ if(var4 == 0) {
+ return true;
+ } else if(var4 == Block.fire.blockID) {
+ return true;
+ } else {
+ Material var5 = Block.blocksList[var4].blockMaterial;
+ return var5 == Material.water ? true : var5 == Material.lava;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockSapling.java b/minecraft_server/src/net/minecraft/src/BlockSapling.java
new file mode 100644
index 0000000..ccacbf0
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockSapling.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockSapling extends BlockFlower {
+ protected BlockSapling(int var1, int var2) {
+ super(var1, var2);
+ float var3 = 0.4F;
+ this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 2.0F, 0.5F + var3);
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ super.updateTick(var1, var2, var3, var4, var5);
+ if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9 && var5.nextInt(5) == 0) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if(var6 < 15) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + 1);
+ } else {
+ var1.setBlock(var2, var3, var4, 0);
+ Object var7 = new WorldGenTrees();
+ if(var5.nextInt(10) == 0) {
+ var7 = new WorldGenBigTree();
+ }
+
+ if(!((WorldGenerator)var7).generate(var1, var5, var2, var3, var4)) {
+ var1.setBlock(var2, var3, var4, this.blockID);
+ }
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockSign.java b/minecraft_server/src/net/minecraft/src/BlockSign.java
new file mode 100644
index 0000000..6d58453
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockSign.java
@@ -0,0 +1,100 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockSign extends BlockContainer {
+ private Class field_654_a;
+ private boolean field_653_b;
+
+ protected BlockSign(int var1, Class var2, boolean var3) {
+ super(var1, Material.wood);
+ this.field_653_b = var3;
+ this.blockIndexInTexture = 4;
+ this.field_654_a = var2;
+ float var4 = 0.25F;
+ float var5 = 1.0F;
+ this.setBlockBounds(0.5F - var4, 0.0F, 0.5F - var4, 0.5F + var4, var5, 0.5F + var4);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
+ if(!this.field_653_b) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ float var6 = 9.0F / 32.0F;
+ float var7 = 25.0F / 32.0F;
+ float var8 = 0.0F;
+ float var9 = 1.0F;
+ float var10 = 2.0F / 16.0F;
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ if(var5 == 2) {
+ this.setBlockBounds(var8, var6, 1.0F - var10, var9, var7, 1.0F);
+ }
+
+ if(var5 == 3) {
+ this.setBlockBounds(var8, var6, 0.0F, var9, var7, var10);
+ }
+
+ if(var5 == 4) {
+ this.setBlockBounds(1.0F - var10, var6, var8, 1.0F, var7, var9);
+ }
+
+ if(var5 == 5) {
+ this.setBlockBounds(0.0F, var6, var8, var10, var7, var9);
+ }
+
+ }
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ protected TileEntity func_294_a_() {
+ try {
+ return (TileEntity)this.field_654_a.newInstance();
+ } catch (Exception var2) {
+ throw new RuntimeException(var2);
+ }
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Item.sign.swiftedIndex;
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ boolean var6 = false;
+ if(this.field_653_b) {
+ if(!var1.getBlockMaterial(var2, var3 - 1, var4).func_216_a()) {
+ var6 = true;
+ }
+ } else {
+ int var7 = var1.getBlockMetadata(var2, var3, var4);
+ var6 = true;
+ if(var7 == 2 && var1.getBlockMaterial(var2, var3, var4 + 1).func_216_a()) {
+ var6 = false;
+ }
+
+ if(var7 == 3 && var1.getBlockMaterial(var2, var3, var4 - 1).func_216_a()) {
+ var6 = false;
+ }
+
+ if(var7 == 4 && var1.getBlockMaterial(var2 + 1, var3, var4).func_216_a()) {
+ var6 = false;
+ }
+
+ if(var7 == 5 && var1.getBlockMaterial(var2 - 1, var3, var4).func_216_a()) {
+ var6 = false;
+ }
+ }
+
+ if(var6) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ super.onNeighborBlockChange(var1, var2, var3, var4, var5);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockSlowSand.java b/minecraft_server/src/net/minecraft/src/BlockSlowSand.java
new file mode 100644
index 0000000..a0fbffa
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockSlowSand.java
@@ -0,0 +1,17 @@
+package net.minecraft.src;
+
+public class BlockSlowSand extends Block {
+ public BlockSlowSand(int var1, int var2) {
+ super(var1, var2, Material.sand);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ float var5 = 2.0F / 16.0F;
+ return AxisAlignedBB.getBoundingBoxFromPool((double)var2, (double)var3, (double)var4, (double)(var2 + 1), (double)((float)(var3 + 1) - var5), (double)(var4 + 1));
+ }
+
+ public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) {
+ var5.motionX *= 0.4D;
+ var5.motionZ *= 0.4D;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockSnow.java b/minecraft_server/src/net/minecraft/src/BlockSnow.java
new file mode 100644
index 0000000..f6620b2
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockSnow.java
@@ -0,0 +1,71 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockSnow extends Block {
+ protected BlockSnow(int var1, int var2) {
+ super(var1, var2, Material.snow);
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F);
+ this.setTickOnLoad(true);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockId(var2, var3 - 1, var4);
+ return var5 != 0 && Block.blocksList[var5].allowsAttachment() ? var1.getBlockMaterial(var2, var3 - 1, var4).func_218_c() : false;
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ this.func_275_g(var1, var2, var3, var4);
+ }
+
+ private boolean func_275_g(World var1, int var2, int var3, int var4) {
+ if(!this.canPlaceBlockAt(var1, var2, var3, var4)) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ public void func_12007_g(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = Item.snowball.swiftedIndex;
+ float var7 = 0.7F;
+ double var8 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D;
+ double var10 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D;
+ double var12 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D;
+ EntityItem var14 = new EntityItem(var1, (double)var2 + var8, (double)var3 + var10, (double)var4 + var12, new ItemStack(var6));
+ var14.field_433_ad = 10;
+ var1.entityJoinedWorld(var14);
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Item.snowball.swiftedIndex;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 0;
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(var1.getSavedLightValue(EnumSkyBlock.Block, var2, var3, var4) > 11) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ }
+
+ public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ Material var6 = var1.getBlockMaterial(var2, var3, var4);
+ return var5 == 1 ? true : (var6 == this.blockMaterial ? false : super.isSideInsideCoordinate(var1, var2, var3, var4, var5));
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockSnowBlock.java b/minecraft_server/src/net/minecraft/src/BlockSnowBlock.java
new file mode 100644
index 0000000..0a4c7a6
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockSnowBlock.java
@@ -0,0 +1,26 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockSnowBlock extends Block {
+ protected BlockSnowBlock(int var1, int var2) {
+ super(var1, var2, Material.builtSnow);
+ this.setTickOnLoad(true);
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Item.snowball.swiftedIndex;
+ }
+
+ public int quantityDropped(Random var1) {
+ return 4;
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(var1.getSavedLightValue(EnumSkyBlock.Block, var2, var3, var4) > 11) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockSoil.java b/minecraft_server/src/net/minecraft/src/BlockSoil.java
new file mode 100644
index 0000000..f53db8d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockSoil.java
@@ -0,0 +1,85 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockSoil extends Block {
+ protected BlockSoil(int var1) {
+ super(var1, Material.ground);
+ this.blockIndexInTexture = 87;
+ this.setTickOnLoad(true);
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 15.0F / 16.0F, 1.0F);
+ this.setLightOpacity(255);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return AxisAlignedBB.getBoundingBoxFromPool((double)(var2 + 0), (double)(var3 + 0), (double)(var4 + 0), (double)(var2 + 1), (double)(var3 + 1), (double)(var4 + 1));
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(var5.nextInt(5) == 0) {
+ if(this.func_283_h(var1, var2, var3, var4)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 7);
+ } else {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if(var6 > 0) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6 - 1);
+ } else if(!this.func_282_g(var1, var2, var3, var4)) {
+ var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID);
+ }
+ }
+ }
+
+ }
+
+ public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) {
+ if(var1.rand.nextInt(4) == 0) {
+ var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID);
+ }
+
+ }
+
+ private boolean func_282_g(World var1, int var2, int var3, int var4) {
+ byte var5 = 0;
+
+ for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) {
+ for(int var7 = var4 - var5; var7 <= var4 + var5; ++var7) {
+ if(var1.getBlockId(var6, var3 + 1, var7) == Block.crops.blockID) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ private boolean func_283_h(World var1, int var2, int var3, int var4) {
+ for(int var5 = var2 - 4; var5 <= var2 + 4; ++var5) {
+ for(int var6 = var3; var6 <= var3 + 1; ++var6) {
+ for(int var7 = var4 - 4; var7 <= var4 + 4; ++var7) {
+ if(var1.getBlockMaterial(var5, var6, var7) == Material.water) {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ super.onNeighborBlockChange(var1, var2, var3, var4, var5);
+ Material var6 = var1.getBlockMaterial(var2, var3 + 1, var4);
+ if(var6.func_216_a()) {
+ var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID);
+ }
+
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Block.dirt.idDropped(0, var2);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockSponge.java b/minecraft_server/src/net/minecraft/src/BlockSponge.java
new file mode 100644
index 0000000..5e6c41d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockSponge.java
@@ -0,0 +1,35 @@
+package net.minecraft.src;
+
+public class BlockSponge extends Block {
+ protected BlockSponge(int var1) {
+ super(var1, Material.sponge);
+ this.blockIndexInTexture = 48;
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ byte var5 = 2;
+
+ for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) {
+ for(int var7 = var3 - var5; var7 <= var3 + var5; ++var7) {
+ for(int var8 = var4 - var5; var8 <= var4 + var5; ++var8) {
+ if(var1.getBlockMaterial(var6, var7, var8) == Material.water) {
+ }
+ }
+ }
+ }
+
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ byte var5 = 2;
+
+ for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) {
+ for(int var7 = var3 - var5; var7 <= var3 + var5; ++var7) {
+ for(int var8 = var4 - var5; var8 <= var4 + var5; ++var8) {
+ var1.notifyBlocksOfNeighborChange(var6, var7, var8, var1.getBlockId(var6, var7, var8));
+ }
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockStairs.java b/minecraft_server/src/net/minecraft/src/BlockStairs.java
new file mode 100644
index 0000000..b6b122e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockStairs.java
@@ -0,0 +1,156 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+public class BlockStairs extends Block {
+ private Block field_651_a;
+
+ protected BlockStairs(int var1, Block var2) {
+ super(var1, var2.blockIndexInTexture, var2.blockMaterial);
+ this.field_651_a = var2;
+ this.setHardness(var2.blockHardness);
+ this.setResistance(var2.blockResistance / 3.0F);
+ this.setStepSound(var2.stepSound);
+ }
+
+ public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4);
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ return super.isSideInsideCoordinate(var1, var2, var3, var4, var5);
+ }
+
+ public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) {
+ int var7 = var1.getBlockMetadata(var2, var3, var4);
+ if(var7 == 0) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 0.5F, 1.0F);
+ super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
+ this.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
+ } else if(var7 == 1) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 1.0F);
+ super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
+ this.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
+ super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
+ } else if(var7 == 2) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 0.5F);
+ super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
+ this.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 1.0F, 1.0F);
+ super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
+ } else if(var7 == 3) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F);
+ super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
+ this.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 0.5F, 1.0F);
+ super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
+ }
+
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ }
+
+ public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ this.field_651_a.onBlockClicked(var1, var2, var3, var4, var5);
+ }
+
+ public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) {
+ this.field_651_a.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5);
+ }
+
+ public float func_226_a(Entity var1) {
+ return this.field_651_a.func_226_a(var1);
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return this.field_651_a.idDropped(var1, var2);
+ }
+
+ public int quantityDropped(Random var1) {
+ return this.field_651_a.quantityDropped(var1);
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return this.field_651_a.getBlockTextureFromSide(var1);
+ }
+
+ public int tickRate() {
+ return this.field_651_a.tickRate();
+ }
+
+ public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3D var6) {
+ this.field_651_a.velocityToAddToEntity(var1, var2, var3, var4, var5, var6);
+ }
+
+ public boolean isCollidable() {
+ return this.field_651_a.isCollidable();
+ }
+
+ public boolean canCollideCheck(int var1, boolean var2) {
+ return this.field_651_a.canCollideCheck(var1, var2);
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return this.field_651_a.canPlaceBlockAt(var1, var2, var3, var4);
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ this.onNeighborBlockChange(var1, var2, var3, var4, 0);
+ this.field_651_a.onBlockAdded(var1, var2, var3, var4);
+ }
+
+ public void onBlockRemoval(World var1, int var2, int var3, int var4) {
+ this.field_651_a.onBlockRemoval(var1, var2, var3, var4);
+ }
+
+ public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) {
+ this.field_651_a.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6);
+ }
+
+ public void dropBlockAsItem(World var1, int var2, int var3, int var4, int var5) {
+ this.field_651_a.dropBlockAsItem(var1, var2, var3, var4, var5);
+ }
+
+ public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) {
+ this.field_651_a.onEntityWalking(var1, var2, var3, var4, var5);
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ this.field_651_a.updateTick(var1, var2, var3, var4, var5);
+ }
+
+ public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ return this.field_651_a.blockActivated(var1, var2, var3, var4, var5);
+ }
+
+ public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) {
+ this.field_651_a.onBlockDestroyedByExplosion(var1, var2, var3, var4);
+ }
+
+ public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) {
+ int var6 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
+ if(var6 == 0) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 2);
+ }
+
+ if(var6 == 1) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 1);
+ }
+
+ if(var6 == 2) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 3);
+ }
+
+ if(var6 == 3) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 0);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockStationary.java b/minecraft_server/src/net/minecraft/src/BlockStationary.java
new file mode 100644
index 0000000..2b5b3c9
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockStationary.java
@@ -0,0 +1,57 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockStationary extends BlockFluids {
+ protected BlockStationary(int var1, Material var2) {
+ super(var1, var2);
+ this.setTickOnLoad(false);
+ if(var2 == Material.lava) {
+ this.setTickOnLoad(true);
+ }
+
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ super.onNeighborBlockChange(var1, var2, var3, var4, var5);
+ if(var1.getBlockId(var2, var3, var4) == this.blockID) {
+ this.func_15002_i(var1, var2, var3, var4);
+ }
+
+ }
+
+ private void func_15002_i(World var1, int var2, int var3, int var4) {
+ int var5 = var1.getBlockMetadata(var2, var3, var4);
+ var1.field_808_h = true;
+ var1.func_470_a(var2, var3, var4, this.blockID - 1, var5);
+ var1.func_519_b(var2, var3, var4, var2, var3, var4);
+ var1.scheduleBlockUpdate(var2, var3, var4, this.blockID - 1);
+ var1.field_808_h = false;
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ if(this.blockMaterial == Material.lava) {
+ int var6 = var5.nextInt(3);
+
+ for(int var7 = 0; var7 < var6; ++var7) {
+ var2 += var5.nextInt(3) - 1;
+ ++var3;
+ var4 += var5.nextInt(3) - 1;
+ int var8 = var1.getBlockId(var2, var3, var4);
+ if(var8 == 0) {
+ if(this.func_4033_j(var1, var2 - 1, var3, var4) || this.func_4033_j(var1, var2 + 1, var3, var4) || this.func_4033_j(var1, var2, var3, var4 - 1) || this.func_4033_j(var1, var2, var3, var4 + 1) || this.func_4033_j(var1, var2, var3 - 1, var4) || this.func_4033_j(var1, var2, var3 + 1, var4)) {
+ var1.setBlockWithNotify(var2, var3, var4, Block.fire.blockID);
+ return;
+ }
+ } else if(Block.blocksList[var8].blockMaterial.func_218_c()) {
+ return;
+ }
+ }
+ }
+
+ }
+
+ private boolean func_4033_j(World var1, int var2, int var3, int var4) {
+ return var1.getBlockMaterial(var2, var3, var4).getBurning();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockStep.java b/minecraft_server/src/net/minecraft/src/BlockStep.java
new file mode 100644
index 0000000..14a8b34
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockStep.java
@@ -0,0 +1,55 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockStep extends Block {
+ private boolean field_666_a;
+
+ public BlockStep(int var1, boolean var2) {
+ super(var1, 6, Material.rock);
+ this.field_666_a = var2;
+ if(!var2) {
+ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
+ }
+
+ this.setLightOpacity(255);
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return var1 <= 1 ? 6 : 5;
+ }
+
+ public boolean allowsAttachment() {
+ return this.field_666_a;
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ if(this == Block.stairSingle) {
+ }
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ if(this != Block.stairSingle) {
+ super.onBlockAdded(var1, var2, var3, var4);
+ }
+
+ int var5 = var1.getBlockId(var2, var3 - 1, var4);
+ if(var5 == stairSingle.blockID) {
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ var1.setBlockWithNotify(var2, var3 - 1, var4, Block.stairDouble.blockID);
+ }
+
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Block.stairSingle.blockID;
+ }
+
+ public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) {
+ if(this != Block.stairSingle) {
+ super.isSideInsideCoordinate(var1, var2, var3, var4, var5);
+ }
+
+ return var5 == 1 ? true : (!super.isSideInsideCoordinate(var1, var2, var3, var4, var5) ? false : (var5 == 0 ? true : var1.getBlockId(var2, var3, var4) != this.blockID));
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockStone.java b/minecraft_server/src/net/minecraft/src/BlockStone.java
new file mode 100644
index 0000000..5b460b7
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockStone.java
@@ -0,0 +1,13 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockStone extends Block {
+ public BlockStone(int var1, int var2) {
+ super(var1, var2, Material.rock);
+ }
+
+ public int idDropped(int var1, Random var2) {
+ return Block.cobblestone.blockID;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockTNT.java b/minecraft_server/src/net/minecraft/src/BlockTNT.java
new file mode 100644
index 0000000..6f5fb9f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockTNT.java
@@ -0,0 +1,39 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockTNT extends Block {
+ public BlockTNT(int var1, int var2) {
+ super(var1, var2, Material.tnt);
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return var1 == 0 ? this.blockIndexInTexture + 2 : (var1 == 1 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture);
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ if(var5 > 0 && Block.blocksList[var5].canProvidePower() && var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) {
+ this.onBlockDestroyedByPlayer(var1, var2, var3, var4, 0);
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+
+ }
+
+ public int quantityDropped(Random var1) {
+ return 0;
+ }
+
+ public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) {
+ EntityTNTPrimed var5 = new EntityTNTPrimed(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F));
+ var5.fuse = var1.rand.nextInt(var5.fuse / 4) + var5.fuse / 8;
+ var1.entityJoinedWorld(var5);
+ }
+
+ public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) {
+ if(!var1.multiplayerWorld) {
+ EntityTNTPrimed var6 = new EntityTNTPrimed(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F));
+ var1.entityJoinedWorld(var6);
+ var1.playSoundAtEntity(var6, "random.fuse", 1.0F, 1.0F);
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockTorch.java b/minecraft_server/src/net/minecraft/src/BlockTorch.java
new file mode 100644
index 0000000..3493a53
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockTorch.java
@@ -0,0 +1,132 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class BlockTorch extends Block {
+ protected BlockTorch(int var1, int var2) {
+ super(var1, var2, Material.circuits);
+ this.setTickOnLoad(true);
+ }
+
+ public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
+ return null;
+ }
+
+ public boolean allowsAttachment() {
+ return false;
+ }
+
+ public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
+ return var1.doesBlockAllowAttachment(var2 - 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2 + 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 - 1) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 + 1) ? true : var1.doesBlockAllowAttachment(var2, var3 - 1, var4))));
+ }
+
+ public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ if(var5 == 1 && var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) {
+ var6 = 5;
+ }
+
+ if(var5 == 2 && var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ var6 = 4;
+ }
+
+ if(var5 == 3 && var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ var6 = 3;
+ }
+
+ if(var5 == 4 && var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ var6 = 2;
+ }
+
+ if(var5 == 5 && var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ var6 = 1;
+ }
+
+ var1.setBlockMetadataWithNotify(var2, var3, var4, var6);
+ }
+
+ public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
+ super.updateTick(var1, var2, var3, var4, var5);
+ if(var1.getBlockMetadata(var2, var3, var4) == 0) {
+ this.onBlockAdded(var1, var2, var3, var4);
+ }
+
+ }
+
+ public void onBlockAdded(World var1, int var2, int var3, int var4) {
+ if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 1);
+ } else if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 2);
+ } else if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 3);
+ } else if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 4);
+ } else if(var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) {
+ var1.setBlockMetadataWithNotify(var2, var3, var4, 5);
+ }
+
+ this.func_279_g(var1, var2, var3, var4);
+ }
+
+ public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
+ if(this.func_279_g(var1, var2, var3, var4)) {
+ int var6 = var1.getBlockMetadata(var2, var3, var4);
+ boolean var7 = false;
+ if(!var1.doesBlockAllowAttachment(var2 - 1, var3, var4) && var6 == 1) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2 + 1, var3, var4) && var6 == 2) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2, var3, var4 - 1) && var6 == 3) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2, var3, var4 + 1) && var6 == 4) {
+ var7 = true;
+ }
+
+ if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4) && var6 == 5) {
+ var7 = true;
+ }
+
+ if(var7) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ }
+ }
+
+ }
+
+ private boolean func_279_g(World var1, int var2, int var3, int var4) {
+ if(!this.canPlaceBlockAt(var1, var2, var3, var4)) {
+ this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
+ var1.setBlockWithNotify(var2, var3, var4, 0);
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) {
+ int var7 = var1.getBlockMetadata(var2, var3, var4) & 7;
+ float var8 = 0.15F;
+ if(var7 == 1) {
+ this.setBlockBounds(0.0F, 0.2F, 0.5F - var8, var8 * 2.0F, 0.8F, 0.5F + var8);
+ } else if(var7 == 2) {
+ this.setBlockBounds(1.0F - var8 * 2.0F, 0.2F, 0.5F - var8, 1.0F, 0.8F, 0.5F + var8);
+ } else if(var7 == 3) {
+ this.setBlockBounds(0.5F - var8, 0.2F, 0.0F, 0.5F + var8, 0.8F, var8 * 2.0F);
+ } else if(var7 == 4) {
+ this.setBlockBounds(0.5F - var8, 0.2F, 1.0F - var8 * 2.0F, 0.5F + var8, 0.8F, 1.0F);
+ } else {
+ var8 = 0.1F;
+ this.setBlockBounds(0.5F - var8, 0.0F, 0.5F - var8, 0.5F + var8, 0.6F, 0.5F + var8);
+ }
+
+ return super.collisionRayTrace(var1, var2, var3, var4, var5, var6);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/BlockWorkbench.java b/minecraft_server/src/net/minecraft/src/BlockWorkbench.java
new file mode 100644
index 0000000..3a25677
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/BlockWorkbench.java
@@ -0,0 +1,17 @@
+package net.minecraft.src;
+
+public class BlockWorkbench extends Block {
+ protected BlockWorkbench(int var1) {
+ super(var1, Material.wood);
+ this.blockIndexInTexture = 59;
+ }
+
+ public int getBlockTextureFromSide(int var1) {
+ return var1 == 1 ? this.blockIndexInTexture - 16 : (var1 == 0 ? Block.planks.getBlockTextureFromSide(0) : (var1 != 2 && var1 != 4 ? this.blockIndexInTexture : this.blockIndexInTexture + 1));
+ }
+
+ public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
+ var5.func_174_A();
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Chunk.java b/minecraft_server/src/net/minecraft/src/Chunk.java
new file mode 100644
index 0000000..63ee72c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Chunk.java
@@ -0,0 +1,575 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+public class Chunk {
+ public static boolean field_694_a;
+ public byte[] blocks;
+ public boolean field_692_c;
+ public World worldObj;
+ public NibbleArray data;
+ public NibbleArray skylightMap;
+ public NibbleArray blocklightMap;
+ public byte[] heightMap;
+ public int field_686_i;
+ public final int xPosition;
+ public final int zPosition;
+ public Map field_683_l;
+ public List[] entities;
+ public boolean isTerrainPopulated;
+ public boolean isModified;
+ public boolean field_679_p;
+ public boolean field_678_q;
+ public boolean field_677_r;
+ public long field_676_s;
+
+ public Chunk(World var1, int var2, int var3) {
+ this.field_683_l = new HashMap();
+ this.entities = new List[8];
+ this.isTerrainPopulated = false;
+ this.isModified = false;
+ this.field_678_q = false;
+ this.field_677_r = false;
+ this.field_676_s = 0L;
+ this.worldObj = var1;
+ this.xPosition = var2;
+ this.zPosition = var3;
+ this.heightMap = new byte[256];
+
+ for(int var4 = 0; var4 < this.entities.length; ++var4) {
+ this.entities[var4] = new ArrayList();
+ }
+
+ }
+
+ public Chunk(World var1, byte[] var2, int var3, int var4) {
+ this(var1, var3, var4);
+ this.blocks = var2;
+ this.data = new NibbleArray(var2.length);
+ this.skylightMap = new NibbleArray(var2.length);
+ this.blocklightMap = new NibbleArray(var2.length);
+ }
+
+ public boolean func_351_a(int var1, int var2) {
+ return var1 == this.xPosition && var2 == this.zPosition;
+ }
+
+ public int getHeightValue(int var1, int var2) {
+ return this.heightMap[var2 << 4 | var1] & 255;
+ }
+
+ public void func_348_a() {
+ }
+
+ public void func_353_b() {
+ int var1 = 127;
+
+ int var2;
+ int var3;
+ for(var2 = 0; var2 < 16; ++var2) {
+ for(var3 = 0; var3 < 16; ++var3) {
+ this.heightMap[var3 << 4 | var2] = -128;
+ this.func_339_g(var2, 127, var3);
+ if((this.heightMap[var3 << 4 | var2] & 255) < var1) {
+ var1 = this.heightMap[var3 << 4 | var2] & 255;
+ }
+ }
+ }
+
+ this.field_686_i = var1;
+
+ for(var2 = 0; var2 < 16; ++var2) {
+ for(var3 = 0; var3 < 16; ++var3) {
+ this.func_333_c(var2, var3);
+ }
+ }
+
+ this.isModified = true;
+ }
+
+ public void func_4053_c() {
+ byte var1 = 32;
+
+ for(int var2 = 0; var2 < 16; ++var2) {
+ for(int var3 = 0; var3 < 16; ++var3) {
+ int var4 = var2 << 11 | var3 << 7;
+
+ int var5;
+ int var6;
+ for(var5 = 0; var5 < 128; ++var5) {
+ var6 = Block.lightValue[this.blocks[var4 + var5]];
+ if(var6 > 0) {
+ this.blocklightMap.setNibble(var2, var5, var3, var6);
+ }
+ }
+
+ var5 = 15;
+
+ for(var6 = var1 - 2; var6 < 128 && var5 > 0; this.blocklightMap.setNibble(var2, var6, var3, var5)) {
+ ++var6;
+ byte var7 = this.blocks[var4 + var6];
+ int var8 = Block.lightOpacity[var7];
+ int var9 = Block.lightValue[var7];
+ if(var8 == 0) {
+ var8 = 1;
+ }
+
+ var5 -= var8;
+ if(var9 > var5) {
+ var5 = var9;
+ }
+
+ if(var5 < 0) {
+ var5 = 0;
+ }
+ }
+ }
+ }
+
+ this.worldObj.func_483_a(EnumSkyBlock.Block, this.xPosition * 16, var1 - 1, this.zPosition * 16, this.xPosition * 16 + 16, var1 + 1, this.zPosition * 16 + 16);
+ this.isModified = true;
+ }
+
+ private void func_333_c(int var1, int var2) {
+ int var3 = this.getHeightValue(var1, var2);
+ int var4 = this.xPosition * 16 + var1;
+ int var5 = this.zPosition * 16 + var2;
+ this.func_355_f(var4 - 1, var5, var3);
+ this.func_355_f(var4 + 1, var5, var3);
+ this.func_355_f(var4, var5 - 1, var3);
+ this.func_355_f(var4, var5 + 1, var3);
+ }
+
+ private void func_355_f(int var1, int var2, int var3) {
+ int var4 = this.worldObj.getHeightValue(var1, var2);
+ if(var4 > var3) {
+ this.worldObj.func_483_a(EnumSkyBlock.Sky, var1, var3, var2, var1, var4, var2);
+ } else if(var4 < var3) {
+ this.worldObj.func_483_a(EnumSkyBlock.Sky, var1, var4, var2, var1, var3, var2);
+ }
+
+ this.isModified = true;
+ }
+
+ private void func_339_g(int var1, int var2, int var3) {
+ int var4 = this.heightMap[var3 << 4 | var1] & 255;
+ int var5 = var4;
+ if(var2 > var4) {
+ var5 = var2;
+ }
+
+ for(int var6 = var1 << 11 | var3 << 7; var5 > 0 && Block.lightOpacity[this.blocks[var6 + var5 - 1]] == 0; --var5) {
+ }
+
+ if(var5 != var4) {
+ this.worldObj.func_498_f(var1, var3, var5, var4);
+ this.heightMap[var3 << 4 | var1] = (byte)var5;
+ int var7;
+ int var8;
+ int var9;
+ if(var5 < this.field_686_i) {
+ this.field_686_i = var5;
+ } else {
+ var7 = 127;
+
+ for(var8 = 0; var8 < 16; ++var8) {
+ for(var9 = 0; var9 < 16; ++var9) {
+ if((this.heightMap[var9 << 4 | var8] & 255) < var7) {
+ var7 = this.heightMap[var9 << 4 | var8] & 255;
+ }
+ }
+ }
+
+ this.field_686_i = var7;
+ }
+
+ var7 = this.xPosition * 16 + var1;
+ var8 = this.zPosition * 16 + var3;
+ if(var5 < var4) {
+ for(var9 = var5; var9 < var4; ++var9) {
+ this.skylightMap.setNibble(var1, var9, var3, 15);
+ }
+ } else {
+ this.worldObj.func_483_a(EnumSkyBlock.Sky, var7, var4, var8, var7, var5, var8);
+
+ for(var9 = var4; var9 < var5; ++var9) {
+ this.skylightMap.setNibble(var1, var9, var3, 0);
+ }
+ }
+
+ var9 = 15;
+
+ int var10;
+ for(var10 = var5; var5 > 0 && var9 > 0; this.skylightMap.setNibble(var1, var5, var3, var9)) {
+ --var5;
+ int var11 = Block.lightOpacity[this.getBlockID(var1, var5, var3)];
+ if(var11 == 0) {
+ var11 = 1;
+ }
+
+ var9 -= var11;
+ if(var9 < 0) {
+ var9 = 0;
+ }
+ }
+
+ while(var5 > 0 && Block.lightOpacity[this.getBlockID(var1, var5 - 1, var3)] == 0) {
+ --var5;
+ }
+
+ if(var5 != var10) {
+ this.worldObj.func_483_a(EnumSkyBlock.Sky, var7 - 1, var5, var8 - 1, var7 + 1, var10, var8 + 1);
+ }
+
+ this.isModified = true;
+ }
+ }
+
+ public int getBlockID(int var1, int var2, int var3) {
+ return this.blocks[var1 << 11 | var3 << 7 | var2];
+ }
+
+ public boolean setBlockIDWithMetadata(int var1, int var2, int var3, int var4, int var5) {
+ byte var6 = (byte)var4;
+ int var7 = this.heightMap[var3 << 4 | var1] & 255;
+ int var8 = this.blocks[var1 << 11 | var3 << 7 | var2] & 255;
+ if(var8 == var4 && this.data.getNibble(var1, var2, var3) == var5) {
+ return false;
+ } else {
+ int var9 = this.xPosition * 16 + var1;
+ int var10 = this.zPosition * 16 + var3;
+ this.blocks[var1 << 11 | var3 << 7 | var2] = var6;
+ if(var8 != 0 && !this.worldObj.multiplayerWorld) {
+ Block.blocksList[var8].onBlockRemoval(this.worldObj, var9, var2, var10);
+ }
+
+ this.data.setNibble(var1, var2, var3, var5);
+ if(!this.worldObj.field_4272_q.field_4306_c) {
+ if(Block.lightOpacity[var6] != 0) {
+ if(var2 >= var7) {
+ this.func_339_g(var1, var2 + 1, var3);
+ }
+ } else if(var2 == var7 - 1) {
+ this.func_339_g(var1, var2, var3);
+ }
+
+ this.worldObj.func_483_a(EnumSkyBlock.Sky, var9, var2, var10, var9, var2, var10);
+ }
+
+ this.worldObj.func_483_a(EnumSkyBlock.Block, var9, var2, var10, var9, var2, var10);
+ this.func_333_c(var1, var3);
+ if(var4 != 0) {
+ Block.blocksList[var4].onBlockAdded(this.worldObj, var9, var2, var10);
+ }
+
+ this.data.setNibble(var1, var2, var3, var5);
+ this.isModified = true;
+ return true;
+ }
+ }
+
+ public boolean setBlockID(int var1, int var2, int var3, int var4) {
+ byte var5 = (byte)var4;
+ int var6 = this.heightMap[var3 << 4 | var1] & 255;
+ int var7 = this.blocks[var1 << 11 | var3 << 7 | var2] & 255;
+ if(var7 == var4) {
+ return false;
+ } else {
+ int var8 = this.xPosition * 16 + var1;
+ int var9 = this.zPosition * 16 + var3;
+ this.blocks[var1 << 11 | var3 << 7 | var2] = var5;
+ if(var7 != 0) {
+ Block.blocksList[var7].onBlockRemoval(this.worldObj, var8, var2, var9);
+ }
+
+ this.data.setNibble(var1, var2, var3, 0);
+ if(Block.lightOpacity[var5] != 0) {
+ if(var2 >= var6) {
+ this.func_339_g(var1, var2 + 1, var3);
+ }
+ } else if(var2 == var6 - 1) {
+ this.func_339_g(var1, var2, var3);
+ }
+
+ this.worldObj.func_483_a(EnumSkyBlock.Sky, var8, var2, var9, var8, var2, var9);
+ this.worldObj.func_483_a(EnumSkyBlock.Block, var8, var2, var9, var8, var2, var9);
+ this.func_333_c(var1, var3);
+ if(var4 != 0 && !this.worldObj.multiplayerWorld) {
+ Block.blocksList[var4].onBlockAdded(this.worldObj, var8, var2, var9);
+ }
+
+ this.isModified = true;
+ return true;
+ }
+ }
+
+ public int getBlockMetadata(int var1, int var2, int var3) {
+ return this.data.getNibble(var1, var2, var3);
+ }
+
+ public void setBlockMetadata(int var1, int var2, int var3, int var4) {
+ this.isModified = true;
+ this.data.setNibble(var1, var2, var3, var4);
+ }
+
+ public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) {
+ return var1 == EnumSkyBlock.Sky ? this.skylightMap.getNibble(var2, var3, var4) : (var1 == EnumSkyBlock.Block ? this.blocklightMap.getNibble(var2, var3, var4) : 0);
+ }
+
+ public void setLightValue(EnumSkyBlock var1, int var2, int var3, int var4, int var5) {
+ this.isModified = true;
+ if(var1 == EnumSkyBlock.Sky) {
+ this.skylightMap.setNibble(var2, var3, var4, var5);
+ } else {
+ if(var1 != EnumSkyBlock.Block) {
+ return;
+ }
+
+ this.blocklightMap.setNibble(var2, var3, var4, var5);
+ }
+
+ }
+
+ public int getBlockLightValue(int var1, int var2, int var3, int var4) {
+ int var5 = this.skylightMap.getNibble(var1, var2, var3);
+ if(var5 > 0) {
+ field_694_a = true;
+ }
+
+ var5 -= var4;
+ int var6 = this.blocklightMap.getNibble(var1, var2, var3);
+ if(var6 > var5) {
+ var5 = var6;
+ }
+
+ return var5;
+ }
+
+ public void addEntity(Entity var1) {
+ if(!this.field_678_q) {
+ this.field_677_r = true;
+ int var2 = MathHelper.floor_double(var1.posX / 16.0D);
+ int var3 = MathHelper.floor_double(var1.posZ / 16.0D);
+ if(var2 != this.xPosition || var3 != this.zPosition) {
+ System.out.println("Wrong location! " + var1);
+ Thread.dumpStack();
+ }
+
+ int var4 = MathHelper.floor_double(var1.posY / 16.0D);
+ if(var4 < 0) {
+ var4 = 0;
+ }
+
+ if(var4 >= this.entities.length) {
+ var4 = this.entities.length - 1;
+ }
+
+ var1.field_276_Z = true;
+ var1.field_307_aa = this.xPosition;
+ var1.field_305_ab = var4;
+ var1.field_303_ac = this.zPosition;
+ this.entities[var4].add(var1);
+ }
+ }
+
+ public void func_350_b(Entity var1) {
+ this.func_332_a(var1, var1.field_305_ab);
+ }
+
+ public void func_332_a(Entity var1, int var2) {
+ if(var2 < 0) {
+ var2 = 0;
+ }
+
+ if(var2 >= this.entities.length) {
+ var2 = this.entities.length - 1;
+ }
+
+ this.entities[var2].remove(var1);
+ }
+
+ public boolean canBlockSeeTheSky(int var1, int var2, int var3) {
+ return var2 >= (this.heightMap[var3 << 4 | var1] & 255);
+ }
+
+ public TileEntity func_338_d(int var1, int var2, int var3) {
+ ChunkPosition var4 = new ChunkPosition(var1, var2, var3);
+ TileEntity var5 = (TileEntity)this.field_683_l.get(var4);
+ if(var5 == null) {
+ int var6 = this.getBlockID(var1, var2, var3);
+ if(!Block.isBlockContainer[var6]) {
+ return null;
+ }
+
+ BlockContainer var7 = (BlockContainer)Block.blocksList[var6];
+ var7.onBlockAdded(this.worldObj, this.xPosition * 16 + var1, var2, this.zPosition * 16 + var3);
+ var5 = (TileEntity)this.field_683_l.get(var4);
+ }
+
+ return var5;
+ }
+
+ public void func_349_a(TileEntity var1) {
+ int var2 = var1.xCoord - this.xPosition * 16;
+ int var3 = var1.yCoord;
+ int var4 = var1.zCoord - this.zPosition * 16;
+ this.func_352_a(var2, var3, var4, var1);
+ }
+
+ public void func_352_a(int var1, int var2, int var3, TileEntity var4) {
+ ChunkPosition var5 = new ChunkPosition(var1, var2, var3);
+ var4.worldObj = this.worldObj;
+ var4.xCoord = this.xPosition * 16 + var1;
+ var4.yCoord = var2;
+ var4.zCoord = this.zPosition * 16 + var3;
+ if(this.getBlockID(var1, var2, var3) != 0 && Block.blocksList[this.getBlockID(var1, var2, var3)] instanceof BlockContainer) {
+ if(this.field_692_c) {
+ if(this.field_683_l.get(var5) != null) {
+ this.worldObj.field_814_b.remove(this.field_683_l.get(var5));
+ }
+
+ this.worldObj.field_814_b.add(var4);
+ }
+
+ this.field_683_l.put(var5, var4);
+ } else {
+ System.out.println("Attempted to place a tile entity where there was no entity tile!");
+ }
+ }
+
+ public void func_359_e(int var1, int var2, int var3) {
+ ChunkPosition var4 = new ChunkPosition(var1, var2, var3);
+ if(this.field_692_c) {
+ this.worldObj.field_814_b.remove(this.field_683_l.remove(var4));
+ }
+
+ }
+
+ public void func_358_c() {
+ this.field_692_c = true;
+ this.worldObj.field_814_b.addAll(this.field_683_l.values());
+
+ for(int var1 = 0; var1 < this.entities.length; ++var1) {
+ this.worldObj.func_464_a(this.entities[var1]);
+ }
+
+ }
+
+ public void func_331_d() {
+ this.field_692_c = false;
+ this.worldObj.field_814_b.removeAll(this.field_683_l.values());
+
+ for(int var1 = 0; var1 < this.entities.length; ++var1) {
+ this.worldObj.func_461_b(this.entities[var1]);
+ }
+
+ }
+
+ public void func_336_e() {
+ this.isModified = true;
+ }
+
+ public void getEntitiesWithinAABBForEntity(Entity var1, AxisAlignedBB var2, List var3) {
+ int var4 = MathHelper.floor_double((var2.minY - 2.0D) / 16.0D);
+ int var5 = MathHelper.floor_double((var2.maxY + 2.0D) / 16.0D);
+ if(var4 < 0) {
+ var4 = 0;
+ }
+
+ if(var5 >= this.entities.length) {
+ var5 = this.entities.length - 1;
+ }
+
+ for(int var6 = var4; var6 <= var5; ++var6) {
+ List var7 = this.entities[var6];
+
+ for(int var8 = 0; var8 < var7.size(); ++var8) {
+ Entity var9 = (Entity)var7.get(var8);
+ if(var9 != var1 && var9.boundingBox.intersectsWith(var2)) {
+ var3.add(var9);
+ }
+ }
+ }
+
+ }
+
+ public void getEntitiesOfTypeWithinAAAB(Class var1, AxisAlignedBB var2, List var3) {
+ int var4 = MathHelper.floor_double((var2.minY - 2.0D) / 16.0D);
+ int var5 = MathHelper.floor_double((var2.maxY + 2.0D) / 16.0D);
+ if(var4 < 0) {
+ var4 = 0;
+ }
+
+ if(var5 >= this.entities.length) {
+ var5 = this.entities.length - 1;
+ }
+
+ for(int var6 = var4; var6 <= var5; ++var6) {
+ List var7 = this.entities[var6];
+
+ for(int var8 = 0; var8 < var7.size(); ++var8) {
+ Entity var9 = (Entity)var7.get(var8);
+ if(var1.isAssignableFrom(var9.getClass()) && var9.boundingBox.intersectsWith(var2)) {
+ var3.add(var9);
+ }
+ }
+ }
+
+ }
+
+ public boolean func_347_a(boolean var1) {
+ return this.field_679_p ? false : (this.field_677_r && this.worldObj.worldTime != this.field_676_s ? true : this.isModified);
+ }
+
+ public int func_340_a(byte[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) {
+ int var9;
+ int var10;
+ int var11;
+ int var12;
+ for(var9 = var2; var9 < var5; ++var9) {
+ for(var10 = var4; var10 < var7; ++var10) {
+ var11 = var9 << 11 | var10 << 7 | var3;
+ var12 = var6 - var3;
+ System.arraycopy(this.blocks, var11, var1, var8, var12);
+ var8 += var12;
+ }
+ }
+
+ for(var9 = var2; var9 < var5; ++var9) {
+ for(var10 = var4; var10 < var7; ++var10) {
+ var11 = (var9 << 11 | var10 << 7 | var3) >> 1;
+ var12 = (var6 - var3) / 2;
+ System.arraycopy(this.data.data, var11, var1, var8, var12);
+ var8 += var12;
+ }
+ }
+
+ for(var9 = var2; var9 < var5; ++var9) {
+ for(var10 = var4; var10 < var7; ++var10) {
+ var11 = (var9 << 11 | var10 << 7 | var3) >> 1;
+ var12 = (var6 - var3) / 2;
+ System.arraycopy(this.blocklightMap.data, var11, var1, var8, var12);
+ var8 += var12;
+ }
+ }
+
+ for(var9 = var2; var9 < var5; ++var9) {
+ for(var10 = var4; var10 < var7; ++var10) {
+ var11 = (var9 << 11 | var10 << 7 | var3) >> 1;
+ var12 = (var6 - var3) / 2;
+ System.arraycopy(this.skylightMap.data, var11, var1, var8, var12);
+ var8 += var12;
+ }
+ }
+
+ return var8;
+ }
+
+ public Random func_334_a(long var1) {
+ return new Random(this.worldObj.randomSeed + (long)(this.xPosition * this.xPosition * 4987142) + (long)(this.xPosition * 5947611) + (long)(this.zPosition * this.zPosition) * 4392871L + (long)(this.zPosition * 389711) ^ var1);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ChunkCache.java b/minecraft_server/src/net/minecraft/src/ChunkCache.java
new file mode 100644
index 0000000..98add77
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ChunkCache.java
@@ -0,0 +1,58 @@
+package net.minecraft.src;
+
+public class ChunkCache implements IBlockAccess {
+ private int field_823_a;
+ private int field_822_b;
+ private Chunk[][] field_825_c;
+ private World worldObj;
+
+ public ChunkCache(World var1, int var2, int var3, int var4, int var5, int var6, int var7) {
+ this.worldObj = var1;
+ this.field_823_a = var2 >> 4;
+ this.field_822_b = var4 >> 4;
+ int var8 = var5 >> 4;
+ int var9 = var7 >> 4;
+ this.field_825_c = new Chunk[var8 - this.field_823_a + 1][var9 - this.field_822_b + 1];
+
+ for(int var10 = this.field_823_a; var10 <= var8; ++var10) {
+ for(int var11 = this.field_822_b; var11 <= var9; ++var11) {
+ this.field_825_c[var10 - this.field_823_a][var11 - this.field_822_b] = var1.getChunkFromChunkCoords(var10, var11);
+ }
+ }
+
+ }
+
+ public int getBlockId(int var1, int var2, int var3) {
+ if(var2 < 0) {
+ return 0;
+ } else if(var2 >= 128) {
+ return 0;
+ } else {
+ int var4 = (var1 >> 4) - this.field_823_a;
+ int var5 = (var3 >> 4) - this.field_822_b;
+ return this.field_825_c[var4][var5].getBlockID(var1 & 15, var2, var3 & 15);
+ }
+ }
+
+ public int getBlockMetadata(int var1, int var2, int var3) {
+ if(var2 < 0) {
+ return 0;
+ } else if(var2 >= 128) {
+ return 0;
+ } else {
+ int var4 = (var1 >> 4) - this.field_823_a;
+ int var5 = (var3 >> 4) - this.field_822_b;
+ return this.field_825_c[var4][var5].getBlockMetadata(var1 & 15, var2, var3 & 15);
+ }
+ }
+
+ public Material getBlockMaterial(int var1, int var2, int var3) {
+ int var4 = this.getBlockId(var1, var2, var3);
+ return var4 == 0 ? Material.air : Block.blocksList[var4].blockMaterial;
+ }
+
+ public boolean doesBlockAllowAttachment(int var1, int var2, int var3) {
+ Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)];
+ return var4 == null ? false : var4.allowsAttachment();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ChunkCoordIntPair.java b/minecraft_server/src/net/minecraft/src/ChunkCoordIntPair.java
new file mode 100644
index 0000000..aa92fc9
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ChunkCoordIntPair.java
@@ -0,0 +1,28 @@
+package net.minecraft.src;
+
+public class ChunkCoordIntPair {
+ public int field_152_a;
+ public int field_151_b;
+
+ public ChunkCoordIntPair(int var1, int var2) {
+ this.field_152_a = var1;
+ this.field_151_b = var2;
+ }
+
+ public int hashCode() {
+ return this.field_152_a << 8 | this.field_151_b;
+ }
+
+ public boolean equals(Object var1) {
+ ChunkCoordIntPair var2 = (ChunkCoordIntPair)var1;
+ return var2.field_152_a == this.field_152_a && var2.field_151_b == this.field_151_b;
+ }
+
+ public double func_73_a(Entity var1) {
+ double var2 = (double)(this.field_152_a * 16 + 8);
+ double var4 = (double)(this.field_151_b * 16 + 8);
+ double var6 = var2 - var1.posX;
+ double var8 = var4 - var1.posZ;
+ return var6 * var6 + var8 * var8;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ChunkCoordinates.java b/minecraft_server/src/net/minecraft/src/ChunkCoordinates.java
new file mode 100644
index 0000000..24cbeb2
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ChunkCoordinates.java
@@ -0,0 +1,24 @@
+package net.minecraft.src;
+
+final class ChunkCoordinates {
+ public final int field_529_a;
+ public final int field_528_b;
+
+ public ChunkCoordinates(int var1, int var2) {
+ this.field_529_a = var1;
+ this.field_528_b = var2;
+ }
+
+ public boolean equals(Object var1) {
+ if(!(var1 instanceof ChunkCoordinates)) {
+ return false;
+ } else {
+ ChunkCoordinates var2 = (ChunkCoordinates)var1;
+ return this.field_529_a == var2.field_529_a && this.field_528_b == var2.field_528_b;
+ }
+ }
+
+ public int hashCode() {
+ return this.field_529_a << 16 ^ this.field_528_b;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ChunkLoader.java b/minecraft_server/src/net/minecraft/src/ChunkLoader.java
new file mode 100644
index 0000000..2bbb2cf
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ChunkLoader.java
@@ -0,0 +1,207 @@
+package net.minecraft.src;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Iterator;
+
+public class ChunkLoader implements IChunkLoader {
+ private File field_945_a;
+ private boolean field_944_b;
+
+ public ChunkLoader(File var1, boolean var2) {
+ this.field_945_a = var1;
+ this.field_944_b = var2;
+ }
+
+ private File func_665_a(int var1, int var2) {
+ String var3 = "c." + Integer.toString(var1, 36) + "." + Integer.toString(var2, 36) + ".dat";
+ String var4 = Integer.toString(var1 & 63, 36);
+ String var5 = Integer.toString(var2 & 63, 36);
+ File var6 = new File(this.field_945_a, var4);
+ if(!var6.exists()) {
+ if(!this.field_944_b) {
+ return null;
+ }
+
+ var6.mkdir();
+ }
+
+ var6 = new File(var6, var5);
+ if(!var6.exists()) {
+ if(!this.field_944_b) {
+ return null;
+ }
+
+ var6.mkdir();
+ }
+
+ var6 = new File(var6, var3);
+ return !var6.exists() && !this.field_944_b ? null : var6;
+ }
+
+ public Chunk func_659_a(World var1, int var2, int var3) throws IOException {
+ File var4 = this.func_665_a(var2, var3);
+ if(var4 != null && var4.exists()) {
+ try {
+ FileInputStream var5 = new FileInputStream(var4);
+ NBTTagCompound var6 = CompressedStreamTools.func_770_a(var5);
+ if(!var6.hasKey("Level")) {
+ System.out.println("Chunk file at " + var2 + "," + var3 + " is missing level data, skipping");
+ return null;
+ }
+
+ if(!var6.getCompoundTag("Level").hasKey("Blocks")) {
+ System.out.println("Chunk file at " + var2 + "," + var3 + " is missing block data, skipping");
+ return null;
+ }
+
+ Chunk var7 = func_664_a(var1, var6.getCompoundTag("Level"));
+ if(!var7.func_351_a(var2, var3)) {
+ System.out.println("Chunk file at " + var2 + "," + var3 + " is in the wrong location; relocating. (Expected " + var2 + ", " + var3 + ", got " + var7.xPosition + ", " + var7.zPosition + ")");
+ var6.setInteger("xPos", var2);
+ var6.setInteger("zPos", var3);
+ var7 = func_664_a(var1, var6.getCompoundTag("Level"));
+ }
+
+ return var7;
+ } catch (Exception var8) {
+ var8.printStackTrace();
+ }
+ }
+
+ return null;
+ }
+
+ public void func_662_a(World var1, Chunk var2) throws IOException {
+ var1.func_476_g();
+ File var3 = this.func_665_a(var2.xPosition, var2.zPosition);
+ if(var3.exists()) {
+ var1.sizeOnDisk -= var3.length();
+ }
+
+ try {
+ File var4 = new File(this.field_945_a, "tmp_chunk.dat");
+ FileOutputStream var5 = new FileOutputStream(var4);
+ NBTTagCompound var6 = new NBTTagCompound();
+ NBTTagCompound var7 = new NBTTagCompound();
+ var6.setTag("Level", var7);
+ this.func_663_a(var2, var1, var7);
+ CompressedStreamTools.func_769_a(var6, var5);
+ var5.close();
+ if(var3.exists()) {
+ var3.delete();
+ }
+
+ var4.renameTo(var3);
+ var1.sizeOnDisk += var3.length();
+ } catch (Exception var8) {
+ var8.printStackTrace();
+ }
+
+ }
+
+ public void func_663_a(Chunk var1, World var2, NBTTagCompound var3) {
+ var2.func_476_g();
+ var3.setInteger("xPos", var1.xPosition);
+ var3.setInteger("zPos", var1.zPosition);
+ var3.setLong("LastUpdate", var2.worldTime);
+ var3.setByteArray("Blocks", var1.blocks);
+ var3.setByteArray("Data", var1.data.data);
+ var3.setByteArray("SkyLight", var1.skylightMap.data);
+ var3.setByteArray("BlockLight", var1.blocklightMap.data);
+ var3.setByteArray("HeightMap", var1.heightMap);
+ var3.setBoolean("TerrainPopulated", var1.isTerrainPopulated);
+ var1.field_677_r = false;
+ NBTTagList var4 = new NBTTagList();
+
+ Iterator var6;
+ NBTTagCompound var8;
+ for(int var5 = 0; var5 < var1.entities.length; ++var5) {
+ var6 = var1.entities[var5].iterator();
+
+ while(var6.hasNext()) {
+ Entity var7 = (Entity)var6.next();
+ var1.field_677_r = true;
+ var8 = new NBTTagCompound();
+ if(var7.func_95_c(var8)) {
+ var4.setTag(var8);
+ }
+ }
+ }
+
+ var3.setTag("Entities", var4);
+ NBTTagList var9 = new NBTTagList();
+ var6 = var1.field_683_l.values().iterator();
+
+ while(var6.hasNext()) {
+ TileEntity var10 = (TileEntity)var6.next();
+ var8 = new NBTTagCompound();
+ var10.writeToNBT(var8);
+ var9.setTag(var8);
+ }
+
+ var3.setTag("TileEntities", var9);
+ }
+
+ public static Chunk func_664_a(World var0, NBTTagCompound var1) {
+ int var2 = var1.getInteger("xPos");
+ int var3 = var1.getInteger("zPos");
+ Chunk var4 = new Chunk(var0, var2, var3);
+ var4.blocks = var1.getByteArray("Blocks");
+ var4.data = new NibbleArray(var1.getByteArray("Data"));
+ var4.skylightMap = new NibbleArray(var1.getByteArray("SkyLight"));
+ var4.blocklightMap = new NibbleArray(var1.getByteArray("BlockLight"));
+ var4.heightMap = var1.getByteArray("HeightMap");
+ var4.isTerrainPopulated = var1.getBoolean("TerrainPopulated");
+ if(!var4.data.isValid()) {
+ var4.data = new NibbleArray(var4.blocks.length);
+ }
+
+ if(var4.heightMap == null || !var4.skylightMap.isValid()) {
+ var4.heightMap = new byte[256];
+ var4.skylightMap = new NibbleArray(var4.blocks.length);
+ var4.func_353_b();
+ }
+
+ if(!var4.blocklightMap.isValid()) {
+ var4.blocklightMap = new NibbleArray(var4.blocks.length);
+ var4.func_348_a();
+ }
+
+ NBTTagList var5 = var1.getTagList("Entities");
+ if(var5 != null) {
+ for(int var6 = 0; var6 < var5.tagCount(); ++var6) {
+ NBTTagCompound var7 = (NBTTagCompound)var5.tagAt(var6);
+ Entity var8 = EntityList.func_566_a(var7, var0);
+ var4.field_677_r = true;
+ if(var8 != null) {
+ var4.addEntity(var8);
+ }
+ }
+ }
+
+ NBTTagList var10 = var1.getTagList("TileEntities");
+ if(var10 != null) {
+ for(int var11 = 0; var11 < var10.tagCount(); ++var11) {
+ NBTTagCompound var12 = (NBTTagCompound)var10.tagAt(var11);
+ TileEntity var9 = TileEntity.createAndLoadEntity(var12);
+ if(var9 != null) {
+ var4.func_349_a(var9);
+ }
+ }
+ }
+
+ return var4;
+ }
+
+ public void func_661_a() {
+ }
+
+ public void func_660_b() {
+ }
+
+ public void func_4104_b(World var1, Chunk var2) throws IOException {
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ChunkPosition.java b/minecraft_server/src/net/minecraft/src/ChunkPosition.java
new file mode 100644
index 0000000..d0772b5
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ChunkPosition.java
@@ -0,0 +1,26 @@
+package net.minecraft.src;
+
+public class ChunkPosition {
+ public final int field_846_a;
+ public final int field_845_b;
+ public final int field_847_c;
+
+ public ChunkPosition(int var1, int var2, int var3) {
+ this.field_846_a = var1;
+ this.field_845_b = var2;
+ this.field_847_c = var3;
+ }
+
+ public boolean equals(Object var1) {
+ if(!(var1 instanceof ChunkPosition)) {
+ return false;
+ } else {
+ ChunkPosition var2 = (ChunkPosition)var1;
+ return var2.field_846_a == this.field_846_a && var2.field_845_b == this.field_845_b && var2.field_847_c == this.field_847_c;
+ }
+ }
+
+ public int hashCode() {
+ return this.field_846_a * 8976890 + this.field_845_b * 981131 + this.field_847_c;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ChunkProviderGenerate.java b/minecraft_server/src/net/minecraft/src/ChunkProviderGenerate.java
new file mode 100644
index 0000000..a10dba7
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ChunkProviderGenerate.java
@@ -0,0 +1,546 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class ChunkProviderGenerate implements IChunkProvider {
+ private Random rand;
+ private NoiseGeneratorOctaves field_705_k;
+ private NoiseGeneratorOctaves field_704_l;
+ private NoiseGeneratorOctaves field_703_m;
+ private NoiseGeneratorOctaves field_702_n;
+ private NoiseGeneratorOctaves field_701_o;
+ public NoiseGeneratorOctaves field_715_a;
+ public NoiseGeneratorOctaves field_714_b;
+ public NoiseGeneratorOctaves field_713_c;
+ private World worldObj;
+ private double[] field_4224_q;
+ private double[] field_698_r = new double[256];
+ private double[] field_697_s = new double[256];
+ private double[] field_696_t = new double[256];
+ private MapGenBase field_695_u = new MapGenCaves();
+ private MobSpawnerBase[] biomesForGeneration;
+ double[] field_4229_d;
+ double[] field_4228_e;
+ double[] field_4227_f;
+ double[] field_4226_g;
+ double[] field_4225_h;
+ int[][] field_707_i = new int[32][32];
+ private double[] field_4222_w;
+
+ public ChunkProviderGenerate(World var1, long var2) {
+ this.worldObj = var1;
+ this.rand = new Random(var2);
+ this.field_705_k = new NoiseGeneratorOctaves(this.rand, 16);
+ this.field_704_l = new NoiseGeneratorOctaves(this.rand, 16);
+ this.field_703_m = new NoiseGeneratorOctaves(this.rand, 8);
+ this.field_702_n = new NoiseGeneratorOctaves(this.rand, 4);
+ this.field_701_o = new NoiseGeneratorOctaves(this.rand, 4);
+ this.field_715_a = new NoiseGeneratorOctaves(this.rand, 10);
+ this.field_714_b = new NoiseGeneratorOctaves(this.rand, 16);
+ this.field_713_c = new NoiseGeneratorOctaves(this.rand, 8);
+ }
+
+ public void generateTerrain(int var1, int var2, byte[] var3, MobSpawnerBase[] var4, double[] var5) {
+ byte var6 = 4;
+ byte var7 = 64;
+ int var8 = var6 + 1;
+ byte var9 = 17;
+ int var10 = var6 + 1;
+ this.field_4224_q = this.func_4058_a(this.field_4224_q, var1 * var6, 0, var2 * var6, var8, var9, var10);
+
+ for(int var11 = 0; var11 < var6; ++var11) {
+ for(int var12 = 0; var12 < var6; ++var12) {
+ for(int var13 = 0; var13 < 16; ++var13) {
+ double var14 = 0.125D;
+ double var16 = this.field_4224_q[((var11 + 0) * var10 + var12 + 0) * var9 + var13 + 0];
+ double var18 = this.field_4224_q[((var11 + 0) * var10 + var12 + 1) * var9 + var13 + 0];
+ double var20 = this.field_4224_q[((var11 + 1) * var10 + var12 + 0) * var9 + var13 + 0];
+ double var22 = this.field_4224_q[((var11 + 1) * var10 + var12 + 1) * var9 + var13 + 0];
+ double var24 = (this.field_4224_q[((var11 + 0) * var10 + var12 + 0) * var9 + var13 + 1] - var16) * var14;
+ double var26 = (this.field_4224_q[((var11 + 0) * var10 + var12 + 1) * var9 + var13 + 1] - var18) * var14;
+ double var28 = (this.field_4224_q[((var11 + 1) * var10 + var12 + 0) * var9 + var13 + 1] - var20) * var14;
+ double var30 = (this.field_4224_q[((var11 + 1) * var10 + var12 + 1) * var9 + var13 + 1] - var22) * var14;
+
+ for(int var32 = 0; var32 < 8; ++var32) {
+ double var33 = 0.25D;
+ double var35 = var16;
+ double var37 = var18;
+ double var39 = (var20 - var16) * var33;
+ double var41 = (var22 - var18) * var33;
+
+ for(int var43 = 0; var43 < 4; ++var43) {
+ int var44 = var43 + var11 * 4 << 11 | 0 + var12 * 4 << 7 | var13 * 8 + var32;
+ short var45 = 128;
+ double var46 = 0.25D;
+ double var48 = var35;
+ double var50 = (var37 - var35) * var46;
+
+ for(int var52 = 0; var52 < 4; ++var52) {
+ double var53 = var5[(var11 * 4 + var43) * 16 + var12 * 4 + var52];
+ int var55 = 0;
+ if(var13 * 8 + var32 < var7) {
+ if(var53 < 0.5D && var13 * 8 + var32 >= var7 - 1) {
+ var55 = Block.ice.blockID;
+ } else {
+ var55 = Block.waterMoving.blockID;
+ }
+ }
+
+ if(var48 > 0.0D) {
+ var55 = Block.stone.blockID;
+ }
+
+ var3[var44] = (byte)var55;
+ var44 += var45;
+ var48 += var50;
+ }
+
+ var35 += var39;
+ var37 += var41;
+ }
+
+ var16 += var24;
+ var18 += var26;
+ var20 += var28;
+ var22 += var30;
+ }
+ }
+ }
+ }
+
+ }
+
+ public void replaceBlocksForBiome(int var1, int var2, byte[] var3, MobSpawnerBase[] var4) {
+ byte var5 = 64;
+ double var6 = 1.0D / 32.0D;
+ this.field_698_r = this.field_702_n.func_648_a(this.field_698_r, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var6, var6, 1.0D);
+ this.field_697_s = this.field_702_n.func_648_a(this.field_697_s, (double)(var2 * 16), 109.0134D, (double)(var1 * 16), 16, 1, 16, var6, 1.0D, var6);
+ this.field_696_t = this.field_701_o.func_648_a(this.field_696_t, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var6 * 2.0D, var6 * 2.0D, var6 * 2.0D);
+
+ for(int var8 = 0; var8 < 16; ++var8) {
+ for(int var9 = 0; var9 < 16; ++var9) {
+ MobSpawnerBase var10 = var4[var8 * 16 + var9];
+ boolean var11 = this.field_698_r[var8 + var9 * 16] + this.rand.nextDouble() * 0.2D > 0.0D;
+ boolean var12 = this.field_697_s[var8 + var9 * 16] + this.rand.nextDouble() * 0.2D > 3.0D;
+ int var13 = (int)(this.field_696_t[var8 + var9 * 16] / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D);
+ int var14 = -1;
+ byte var15 = var10.topBlock;
+ byte var16 = var10.fillerBlock;
+
+ for(int var17 = 127; var17 >= 0; --var17) {
+ int var18 = (var8 * 16 + var9) * 128 + var17;
+ if(var17 <= 0 + this.rand.nextInt(5)) {
+ var3[var18] = (byte)Block.bedrock.blockID;
+ } else {
+ byte var19 = var3[var18];
+ if(var19 == 0) {
+ var14 = -1;
+ } else if(var19 == Block.stone.blockID) {
+ if(var14 == -1) {
+ if(var13 <= 0) {
+ var15 = 0;
+ var16 = (byte)Block.stone.blockID;
+ } else if(var17 >= var5 - 4 && var17 <= var5 + 1) {
+ var15 = var10.topBlock;
+ var16 = var10.fillerBlock;
+ if(var12) {
+ var15 = 0;
+ }
+
+ if(var12) {
+ var16 = (byte)Block.gravel.blockID;
+ }
+
+ if(var11) {
+ var15 = (byte)Block.sand.blockID;
+ }
+
+ if(var11) {
+ var16 = (byte)Block.sand.blockID;
+ }
+ }
+
+ if(var17 < var5 && var15 == 0) {
+ var15 = (byte)Block.waterMoving.blockID;
+ }
+
+ var14 = var13;
+ if(var17 >= var5 - 1) {
+ var3[var18] = var15;
+ } else {
+ var3[var18] = var16;
+ }
+ } else if(var14 > 0) {
+ --var14;
+ var3[var18] = var16;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ public Chunk func_363_b(int var1, int var2) {
+ this.rand.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L);
+ byte[] var3 = new byte[-Short.MIN_VALUE];
+ Chunk var4 = new Chunk(this.worldObj, var3, var1, var2);
+ this.biomesForGeneration = this.worldObj.func_4077_a().loadBlockGeneratorData(this.biomesForGeneration, var1 * 16, var2 * 16, 16, 16);
+ double[] var5 = this.worldObj.func_4077_a().temperature;
+ this.generateTerrain(var1, var2, var3, this.biomesForGeneration, var5);
+ this.replaceBlocksForBiome(var1, var2, var3, this.biomesForGeneration);
+ this.field_695_u.func_667_a(this, this.worldObj, var1, var2, var3);
+ var4.func_353_b();
+ return var4;
+ }
+
+ private double[] func_4058_a(double[] var1, int var2, int var3, int var4, int var5, int var6, int var7) {
+ if(var1 == null) {
+ var1 = new double[var5 * var6 * var7];
+ }
+
+ double var8 = 684.412D;
+ double var10 = 684.412D;
+ double[] var12 = this.worldObj.func_4077_a().temperature;
+ double[] var13 = this.worldObj.func_4077_a().humidity;
+ this.field_4226_g = this.field_715_a.func_4103_a(this.field_4226_g, var2, var4, var5, var7, 1.121D, 1.121D, 0.5D);
+ this.field_4225_h = this.field_714_b.func_4103_a(this.field_4225_h, var2, var4, var5, var7, 200.0D, 200.0D, 0.5D);
+ this.field_4229_d = this.field_703_m.func_648_a(this.field_4229_d, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8 / 80.0D, var10 / 160.0D, var8 / 80.0D);
+ this.field_4228_e = this.field_705_k.func_648_a(this.field_4228_e, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8);
+ this.field_4227_f = this.field_704_l.func_648_a(this.field_4227_f, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8);
+ int var14 = 0;
+ int var15 = 0;
+ int var16 = 16 / var5;
+
+ for(int var17 = 0; var17 < var5; ++var17) {
+ int var18 = var17 * var16 + var16 / 2;
+
+ for(int var19 = 0; var19 < var7; ++var19) {
+ int var20 = var19 * var16 + var16 / 2;
+ double var21 = var12[var18 * 16 + var20];
+ double var23 = var13[var18 * 16 + var20] * var21;
+ double var25 = 1.0D - var23;
+ var25 *= var25;
+ var25 *= var25;
+ var25 = 1.0D - var25;
+ double var27 = (this.field_4226_g[var15] + 256.0D) / 512.0D;
+ var27 *= var25;
+ if(var27 > 1.0D) {
+ var27 = 1.0D;
+ }
+
+ double var29 = this.field_4225_h[var15] / 8000.0D;
+ if(var29 < 0.0D) {
+ var29 = -var29 * 0.3D;
+ }
+
+ var29 = var29 * 3.0D - 2.0D;
+ if(var29 < 0.0D) {
+ var29 /= 2.0D;
+ if(var29 < -1.0D) {
+ var29 = -1.0D;
+ }
+
+ var29 /= 1.4D;
+ var29 /= 2.0D;
+ var27 = 0.0D;
+ } else {
+ if(var29 > 1.0D) {
+ var29 = 1.0D;
+ }
+
+ var29 /= 8.0D;
+ }
+
+ if(var27 < 0.0D) {
+ var27 = 0.0D;
+ }
+
+ var27 += 0.5D;
+ var29 = var29 * (double)var6 / 16.0D;
+ double var31 = (double)var6 / 2.0D + var29 * 4.0D;
+ ++var15;
+
+ for(int var33 = 0; var33 < var6; ++var33) {
+ double var34 = 0.0D;
+ double var36 = ((double)var33 - var31) * 12.0D / var27;
+ if(var36 < 0.0D) {
+ var36 *= 4.0D;
+ }
+
+ double var38 = this.field_4228_e[var14] / 512.0D;
+ double var40 = this.field_4227_f[var14] / 512.0D;
+ double var42 = (this.field_4229_d[var14] / 10.0D + 1.0D) / 2.0D;
+ if(var42 < 0.0D) {
+ var34 = var38;
+ } else if(var42 > 1.0D) {
+ var34 = var40;
+ } else {
+ var34 = var38 + (var40 - var38) * var42;
+ }
+
+ var34 -= var36;
+ if(var33 > var6 - 4) {
+ double var44 = (double)((float)(var33 - (var6 - 4)) / 3.0F);
+ var34 = var34 * (1.0D - var44) + -10.0D * var44;
+ }
+
+ var1[var14] = var34;
+ ++var14;
+ }
+ }
+ }
+
+ return var1;
+ }
+
+ public boolean chunkExists(int var1, int var2) {
+ return true;
+ }
+
+ public void populate(IChunkProvider var1, int var2, int var3) {
+ BlockSand.fallInstantly = true;
+ int var4 = var2 * 16;
+ int var5 = var3 * 16;
+ MobSpawnerBase var6 = this.worldObj.func_4077_a().func_4067_a(var4 + 16, var5 + 16);
+ this.rand.setSeed(this.worldObj.randomSeed);
+ long var7 = this.rand.nextLong() / 2L * 2L + 1L;
+ long var9 = this.rand.nextLong() / 2L * 2L + 1L;
+ this.rand.setSeed((long)var2 * var7 + (long)var3 * var9 ^ this.worldObj.randomSeed);
+ double var11 = 0.25D;
+ int var13;
+ int var14;
+ int var15;
+ if(this.rand.nextInt(4) == 0) {
+ var13 = var4 + this.rand.nextInt(16) + 8;
+ var14 = this.rand.nextInt(128);
+ var15 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenLakes(Block.waterMoving.blockID)).generate(this.worldObj, this.rand, var13, var14, var15);
+ }
+
+ if(this.rand.nextInt(8) == 0) {
+ var13 = var4 + this.rand.nextInt(16) + 8;
+ var14 = this.rand.nextInt(this.rand.nextInt(120) + 8);
+ var15 = var5 + this.rand.nextInt(16) + 8;
+ if(var14 < 64 || this.rand.nextInt(10) == 0) {
+ (new WorldGenLakes(Block.lavaMoving.blockID)).generate(this.worldObj, this.rand, var13, var14, var15);
+ }
+ }
+
+ int var16;
+ for(var13 = 0; var13 < 8; ++var13) {
+ var14 = var4 + this.rand.nextInt(16) + 8;
+ var15 = this.rand.nextInt(128);
+ var16 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenDungeons()).generate(this.worldObj, this.rand, var14, var15, var16);
+ }
+
+ for(var13 = 0; var13 < 10; ++var13) {
+ var14 = var4 + this.rand.nextInt(16);
+ var15 = this.rand.nextInt(128);
+ var16 = var5 + this.rand.nextInt(16);
+ (new WorldGenClay(32)).generate(this.worldObj, this.rand, var14, var15, var16);
+ }
+
+ for(var13 = 0; var13 < 20; ++var13) {
+ var14 = var4 + this.rand.nextInt(16);
+ var15 = this.rand.nextInt(128);
+ var16 = var5 + this.rand.nextInt(16);
+ (new WorldGenMinable(Block.dirt.blockID, 32)).generate(this.worldObj, this.rand, var14, var15, var16);
+ }
+
+ for(var13 = 0; var13 < 10; ++var13) {
+ var14 = var4 + this.rand.nextInt(16);
+ var15 = this.rand.nextInt(128);
+ var16 = var5 + this.rand.nextInt(16);
+ (new WorldGenMinable(Block.gravel.blockID, 32)).generate(this.worldObj, this.rand, var14, var15, var16);
+ }
+
+ for(var13 = 0; var13 < 20; ++var13) {
+ var14 = var4 + this.rand.nextInt(16);
+ var15 = this.rand.nextInt(128);
+ var16 = var5 + this.rand.nextInt(16);
+ (new WorldGenMinable(Block.oreCoal.blockID, 16)).generate(this.worldObj, this.rand, var14, var15, var16);
+ }
+
+ for(var13 = 0; var13 < 20; ++var13) {
+ var14 = var4 + this.rand.nextInt(16);
+ var15 = this.rand.nextInt(64);
+ var16 = var5 + this.rand.nextInt(16);
+ (new WorldGenMinable(Block.oreIron.blockID, 8)).generate(this.worldObj, this.rand, var14, var15, var16);
+ }
+
+ for(var13 = 0; var13 < 2; ++var13) {
+ var14 = var4 + this.rand.nextInt(16);
+ var15 = this.rand.nextInt(32);
+ var16 = var5 + this.rand.nextInt(16);
+ (new WorldGenMinable(Block.oreGold.blockID, 8)).generate(this.worldObj, this.rand, var14, var15, var16);
+ }
+
+ for(var13 = 0; var13 < 8; ++var13) {
+ var14 = var4 + this.rand.nextInt(16);
+ var15 = this.rand.nextInt(16);
+ var16 = var5 + this.rand.nextInt(16);
+ (new WorldGenMinable(Block.oreRedstone.blockID, 7)).generate(this.worldObj, this.rand, var14, var15, var16);
+ }
+
+ for(var13 = 0; var13 < 1; ++var13) {
+ var14 = var4 + this.rand.nextInt(16);
+ var15 = this.rand.nextInt(16);
+ var16 = var5 + this.rand.nextInt(16);
+ (new WorldGenMinable(Block.oreDiamond.blockID, 7)).generate(this.worldObj, this.rand, var14, var15, var16);
+ }
+
+ var11 = 0.5D;
+ var13 = (int)((this.field_713_c.func_647_a((double)var4 * var11, (double)var5 * var11) / 8.0D + this.rand.nextDouble() * 4.0D + 4.0D) / 3.0D);
+ var14 = 0;
+ if(this.rand.nextInt(10) == 0) {
+ ++var14;
+ }
+
+ if(var6 == MobSpawnerBase.forest) {
+ var14 += var13 + 5;
+ }
+
+ if(var6 == MobSpawnerBase.rainforest) {
+ var14 += var13 + 5;
+ }
+
+ if(var6 == MobSpawnerBase.seasonalForest) {
+ var14 += var13 + 2;
+ }
+
+ if(var6 == MobSpawnerBase.taiga) {
+ var14 += var13 + 5;
+ }
+
+ if(var6 == MobSpawnerBase.desert) {
+ var14 -= 20;
+ }
+
+ if(var6 == MobSpawnerBase.tundra) {
+ var14 -= 20;
+ }
+
+ if(var6 == MobSpawnerBase.plains) {
+ var14 -= 20;
+ }
+
+ Object var24 = new WorldGenTrees();
+ if(this.rand.nextInt(10) == 0) {
+ var24 = new WorldGenBigTree();
+ }
+
+ if(var6 == MobSpawnerBase.rainforest && this.rand.nextInt(3) == 0) {
+ var24 = new WorldGenBigTree();
+ }
+
+ int var17;
+ int var18;
+ for(var16 = 0; var16 < var14; ++var16) {
+ var17 = var4 + this.rand.nextInt(16) + 8;
+ var18 = var5 + this.rand.nextInt(16) + 8;
+ ((WorldGenerator)var24).func_420_a(1.0D, 1.0D, 1.0D);
+ ((WorldGenerator)var24).generate(this.worldObj, this.rand, var17, this.worldObj.getHeightValue(var17, var18), var18);
+ }
+
+ int var19;
+ for(var16 = 0; var16 < 2; ++var16) {
+ var17 = var4 + this.rand.nextInt(16) + 8;
+ var18 = this.rand.nextInt(128);
+ var19 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenFlowers(Block.plantYellow.blockID)).generate(this.worldObj, this.rand, var17, var18, var19);
+ }
+
+ if(this.rand.nextInt(2) == 0) {
+ var16 = var4 + this.rand.nextInt(16) + 8;
+ var17 = this.rand.nextInt(128);
+ var18 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenFlowers(Block.plantRed.blockID)).generate(this.worldObj, this.rand, var16, var17, var18);
+ }
+
+ if(this.rand.nextInt(4) == 0) {
+ var16 = var4 + this.rand.nextInt(16) + 8;
+ var17 = this.rand.nextInt(128);
+ var18 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.worldObj, this.rand, var16, var17, var18);
+ }
+
+ if(this.rand.nextInt(8) == 0) {
+ var16 = var4 + this.rand.nextInt(16) + 8;
+ var17 = this.rand.nextInt(128);
+ var18 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.worldObj, this.rand, var16, var17, var18);
+ }
+
+ for(var16 = 0; var16 < 10; ++var16) {
+ var17 = var4 + this.rand.nextInt(16) + 8;
+ var18 = this.rand.nextInt(128);
+ var19 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenReed()).generate(this.worldObj, this.rand, var17, var18, var19);
+ }
+
+ if(this.rand.nextInt(32) == 0) {
+ var16 = var4 + this.rand.nextInt(16) + 8;
+ var17 = this.rand.nextInt(128);
+ var18 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenPumpkin()).generate(this.worldObj, this.rand, var16, var17, var18);
+ }
+
+ var16 = 0;
+ if(var6 == MobSpawnerBase.desert) {
+ var16 += 10;
+ }
+
+ int var20;
+ for(var17 = 0; var17 < var16; ++var17) {
+ var18 = var4 + this.rand.nextInt(16) + 8;
+ var19 = this.rand.nextInt(128);
+ var20 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenCactus()).generate(this.worldObj, this.rand, var18, var19, var20);
+ }
+
+ for(var17 = 0; var17 < 50; ++var17) {
+ var18 = var4 + this.rand.nextInt(16) + 8;
+ var19 = this.rand.nextInt(this.rand.nextInt(120) + 8);
+ var20 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenLiquids(Block.waterStill.blockID)).generate(this.worldObj, this.rand, var18, var19, var20);
+ }
+
+ for(var17 = 0; var17 < 20; ++var17) {
+ var18 = var4 + this.rand.nextInt(16) + 8;
+ var19 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(112) + 8) + 8);
+ var20 = var5 + this.rand.nextInt(16) + 8;
+ (new WorldGenLiquids(Block.lavaStill.blockID)).generate(this.worldObj, this.rand, var18, var19, var20);
+ }
+
+ this.field_4222_w = this.worldObj.func_4077_a().getTemperatures(this.field_4222_w, var4 + 8, var5 + 8, 16, 16);
+
+ for(var17 = var4 + 8; var17 < var4 + 8 + 16; ++var17) {
+ for(var18 = var5 + 8; var18 < var5 + 8 + 16; ++var18) {
+ var19 = var17 - (var4 + 8);
+ var20 = var18 - (var5 + 8);
+ int var21 = this.worldObj.func_4075_e(var17, var18);
+ double var22 = this.field_4222_w[var19 * 16 + var20] - (double)(var21 - 64) / 64.0D * 0.3D;
+ if(var22 < 0.5D && var21 > 0 && var21 < 128 && this.worldObj.getBlockId(var17, var21, var18) == 0 && this.worldObj.getBlockMaterial(var17, var21 - 1, var18).func_218_c() && this.worldObj.getBlockMaterial(var17, var21 - 1, var18) != Material.ice) {
+ this.worldObj.setBlockWithNotify(var17, var21, var18, Block.snow.blockID);
+ }
+ }
+ }
+
+ BlockSand.fallInstantly = false;
+ }
+
+ public boolean saveWorld(boolean var1, IProgressUpdate var2) {
+ return true;
+ }
+
+ public boolean func_361_a() {
+ return false;
+ }
+
+ public boolean func_364_b() {
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ChunkProviderHell.java b/minecraft_server/src/net/minecraft/src/ChunkProviderHell.java
new file mode 100644
index 0000000..8a440bf
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ChunkProviderHell.java
@@ -0,0 +1,370 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class ChunkProviderHell implements IChunkProvider {
+ private Random field_4241_h;
+ private NoiseGeneratorOctaves field_4240_i;
+ private NoiseGeneratorOctaves field_4239_j;
+ private NoiseGeneratorOctaves field_4238_k;
+ private NoiseGeneratorOctaves field_4237_l;
+ private NoiseGeneratorOctaves field_4236_m;
+ public NoiseGeneratorOctaves field_4248_a;
+ public NoiseGeneratorOctaves field_4247_b;
+ private World field_4235_n;
+ private double[] field_4234_o;
+ private double[] field_4233_p = new double[256];
+ private double[] field_4232_q = new double[256];
+ private double[] field_4231_r = new double[256];
+ private MapGenBase field_4230_s = new MapGenCavesHell();
+ double[] field_4246_c;
+ double[] field_4245_d;
+ double[] field_4244_e;
+ double[] field_4243_f;
+ double[] field_4242_g;
+
+ public ChunkProviderHell(World var1, long var2) {
+ this.field_4235_n = var1;
+ this.field_4241_h = new Random(var2);
+ this.field_4240_i = new NoiseGeneratorOctaves(this.field_4241_h, 16);
+ this.field_4239_j = new NoiseGeneratorOctaves(this.field_4241_h, 16);
+ this.field_4238_k = new NoiseGeneratorOctaves(this.field_4241_h, 8);
+ this.field_4237_l = new NoiseGeneratorOctaves(this.field_4241_h, 4);
+ this.field_4236_m = new NoiseGeneratorOctaves(this.field_4241_h, 4);
+ this.field_4248_a = new NoiseGeneratorOctaves(this.field_4241_h, 10);
+ this.field_4247_b = new NoiseGeneratorOctaves(this.field_4241_h, 16);
+ }
+
+ public void func_4062_a(int var1, int var2, byte[] var3) {
+ byte var4 = 4;
+ byte var5 = 32;
+ int var6 = var4 + 1;
+ byte var7 = 17;
+ int var8 = var4 + 1;
+ this.field_4234_o = this.func_4060_a(this.field_4234_o, var1 * var4, 0, var2 * var4, var6, var7, var8);
+
+ for(int var9 = 0; var9 < var4; ++var9) {
+ for(int var10 = 0; var10 < var4; ++var10) {
+ for(int var11 = 0; var11 < 16; ++var11) {
+ double var12 = 0.125D;
+ double var14 = this.field_4234_o[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 0];
+ double var16 = this.field_4234_o[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 0];
+ double var18 = this.field_4234_o[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 0];
+ double var20 = this.field_4234_o[((var9 + 1) * var8 + var10 + 1) * var7 + var11 + 0];
+ double var22 = (this.field_4234_o[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 1] - var14) * var12;
+ double var24 = (this.field_4234_o[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 1] - var16) * var12;
+ double var26 = (this.field_4234_o[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 1] - var18) * var12;
+ double var28 = (this.field_4234_o[((var9 + 1) * var8 + var10 + 1) * var7 + var11 + 1] - var20) * var12;
+
+ for(int var30 = 0; var30 < 8; ++var30) {
+ double var31 = 0.25D;
+ double var33 = var14;
+ double var35 = var16;
+ double var37 = (var18 - var14) * var31;
+ double var39 = (var20 - var16) * var31;
+
+ for(int var41 = 0; var41 < 4; ++var41) {
+ int var42 = var41 + var9 * 4 << 11 | 0 + var10 * 4 << 7 | var11 * 8 + var30;
+ short var43 = 128;
+ double var44 = 0.25D;
+ double var46 = var33;
+ double var48 = (var35 - var33) * var44;
+
+ for(int var50 = 0; var50 < 4; ++var50) {
+ int var51 = 0;
+ if(var11 * 8 + var30 < var5) {
+ var51 = Block.lavaMoving.blockID;
+ }
+
+ if(var46 > 0.0D) {
+ var51 = Block.bloodStone.blockID;
+ }
+
+ var3[var42] = (byte)var51;
+ var42 += var43;
+ var46 += var48;
+ }
+
+ var33 += var37;
+ var35 += var39;
+ }
+
+ var14 += var22;
+ var16 += var24;
+ var18 += var26;
+ var20 += var28;
+ }
+ }
+ }
+ }
+
+ }
+
+ public void func_4061_b(int var1, int var2, byte[] var3) {
+ byte var4 = 64;
+ double var5 = 1.0D / 32.0D;
+ this.field_4233_p = this.field_4237_l.func_648_a(this.field_4233_p, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var5, var5, 1.0D);
+ this.field_4232_q = this.field_4237_l.func_648_a(this.field_4232_q, (double)(var2 * 16), 109.0134D, (double)(var1 * 16), 16, 1, 16, var5, 1.0D, var5);
+ this.field_4231_r = this.field_4236_m.func_648_a(this.field_4231_r, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var5 * 2.0D, var5 * 2.0D, var5 * 2.0D);
+
+ for(int var7 = 0; var7 < 16; ++var7) {
+ for(int var8 = 0; var8 < 16; ++var8) {
+ boolean var9 = this.field_4233_p[var7 + var8 * 16] + this.field_4241_h.nextDouble() * 0.2D > 0.0D;
+ boolean var10 = this.field_4232_q[var7 + var8 * 16] + this.field_4241_h.nextDouble() * 0.2D > 0.0D;
+ int var11 = (int)(this.field_4231_r[var7 + var8 * 16] / 3.0D + 3.0D + this.field_4241_h.nextDouble() * 0.25D);
+ int var12 = -1;
+ byte var13 = (byte)Block.bloodStone.blockID;
+ byte var14 = (byte)Block.bloodStone.blockID;
+
+ for(int var15 = 127; var15 >= 0; --var15) {
+ int var16 = (var7 * 16 + var8) * 128 + var15;
+ if(var15 >= 127 - this.field_4241_h.nextInt(5)) {
+ var3[var16] = (byte)Block.bedrock.blockID;
+ } else if(var15 <= 0 + this.field_4241_h.nextInt(5)) {
+ var3[var16] = (byte)Block.bedrock.blockID;
+ } else {
+ byte var17 = var3[var16];
+ if(var17 == 0) {
+ var12 = -1;
+ } else if(var17 == Block.bloodStone.blockID) {
+ if(var12 == -1) {
+ if(var11 <= 0) {
+ var13 = 0;
+ var14 = (byte)Block.bloodStone.blockID;
+ } else if(var15 >= var4 - 4 && var15 <= var4 + 1) {
+ var13 = (byte)Block.bloodStone.blockID;
+ var14 = (byte)Block.bloodStone.blockID;
+ if(var10) {
+ var13 = (byte)Block.gravel.blockID;
+ }
+
+ if(var10) {
+ var14 = (byte)Block.bloodStone.blockID;
+ }
+
+ if(var9) {
+ var13 = (byte)Block.slowSand.blockID;
+ }
+
+ if(var9) {
+ var14 = (byte)Block.slowSand.blockID;
+ }
+ }
+
+ if(var15 < var4 && var13 == 0) {
+ var13 = (byte)Block.lavaMoving.blockID;
+ }
+
+ var12 = var11;
+ if(var15 >= var4 - 1) {
+ var3[var16] = var13;
+ } else {
+ var3[var16] = var14;
+ }
+ } else if(var12 > 0) {
+ --var12;
+ var3[var16] = var14;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ public Chunk func_363_b(int var1, int var2) {
+ this.field_4241_h.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L);
+ byte[] var3 = new byte[-Short.MIN_VALUE];
+ this.func_4062_a(var1, var2, var3);
+ this.func_4061_b(var1, var2, var3);
+ this.field_4230_s.func_667_a(this, this.field_4235_n, var1, var2, var3);
+ Chunk var4 = new Chunk(this.field_4235_n, var3, var1, var2);
+ var4.func_353_b();
+ var4.func_4053_c();
+ return var4;
+ }
+
+ private double[] func_4060_a(double[] var1, int var2, int var3, int var4, int var5, int var6, int var7) {
+ if(var1 == null) {
+ var1 = new double[var5 * var6 * var7];
+ }
+
+ double var8 = 684.412D;
+ double var10 = 2053.236D;
+ this.field_4243_f = this.field_4248_a.func_648_a(this.field_4243_f, (double)var2, (double)var3, (double)var4, var5, 1, var7, 1.0D, 0.0D, 1.0D);
+ this.field_4242_g = this.field_4247_b.func_648_a(this.field_4242_g, (double)var2, (double)var3, (double)var4, var5, 1, var7, 100.0D, 0.0D, 100.0D);
+ this.field_4246_c = this.field_4238_k.func_648_a(this.field_4246_c, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8 / 80.0D, var10 / 60.0D, var8 / 80.0D);
+ this.field_4245_d = this.field_4240_i.func_648_a(this.field_4245_d, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8);
+ this.field_4244_e = this.field_4239_j.func_648_a(this.field_4244_e, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8);
+ int var12 = 0;
+ int var13 = 0;
+ double[] var14 = new double[var6];
+
+ int var15;
+ for(var15 = 0; var15 < var6; ++var15) {
+ var14[var15] = Math.cos((double)var15 * Math.PI * 6.0D / (double)var6) * 2.0D;
+ double var16 = (double)var15;
+ if(var15 > var6 / 2) {
+ var16 = (double)(var6 - 1 - var15);
+ }
+
+ if(var16 < 4.0D) {
+ var16 = 4.0D - var16;
+ var14[var15] -= var16 * var16 * var16 * 10.0D;
+ }
+ }
+
+ for(var15 = 0; var15 < var5; ++var15) {
+ for(int var36 = 0; var36 < var7; ++var36) {
+ double var17 = (this.field_4243_f[var13] + 256.0D) / 512.0D;
+ if(var17 > 1.0D) {
+ var17 = 1.0D;
+ }
+
+ double var19 = 0.0D;
+ double var21 = this.field_4242_g[var13] / 8000.0D;
+ if(var21 < 0.0D) {
+ var21 = -var21;
+ }
+
+ var21 = var21 * 3.0D - 3.0D;
+ if(var21 < 0.0D) {
+ var21 /= 2.0D;
+ if(var21 < -1.0D) {
+ var21 = -1.0D;
+ }
+
+ var21 /= 1.4D;
+ var21 /= 2.0D;
+ var17 = 0.0D;
+ } else {
+ if(var21 > 1.0D) {
+ var21 = 1.0D;
+ }
+
+ var21 /= 6.0D;
+ }
+
+ var17 += 0.5D;
+ var21 = var21 * (double)var6 / 16.0D;
+ ++var13;
+
+ for(int var23 = 0; var23 < var6; ++var23) {
+ double var24 = 0.0D;
+ double var26 = var14[var23];
+ double var28 = this.field_4245_d[var12] / 512.0D;
+ double var30 = this.field_4244_e[var12] / 512.0D;
+ double var32 = (this.field_4246_c[var12] / 10.0D + 1.0D) / 2.0D;
+ if(var32 < 0.0D) {
+ var24 = var28;
+ } else if(var32 > 1.0D) {
+ var24 = var30;
+ } else {
+ var24 = var28 + (var30 - var28) * var32;
+ }
+
+ var24 -= var26;
+ double var34;
+ if(var23 > var6 - 4) {
+ var34 = (double)((float)(var23 - (var6 - 4)) / 3.0F);
+ var24 = var24 * (1.0D - var34) + -10.0D * var34;
+ }
+
+ if((double)var23 < var19) {
+ var34 = (var19 - (double)var23) / 4.0D;
+ if(var34 < 0.0D) {
+ var34 = 0.0D;
+ }
+
+ if(var34 > 1.0D) {
+ var34 = 1.0D;
+ }
+
+ var24 = var24 * (1.0D - var34) + -10.0D * var34;
+ }
+
+ var1[var12] = var24;
+ ++var12;
+ }
+ }
+ }
+
+ return var1;
+ }
+
+ public boolean chunkExists(int var1, int var2) {
+ return true;
+ }
+
+ public void populate(IChunkProvider var1, int var2, int var3) {
+ BlockSand.fallInstantly = true;
+ int var4 = var2 * 16;
+ int var5 = var3 * 16;
+
+ int var6;
+ int var7;
+ int var8;
+ int var9;
+ for(var6 = 0; var6 < 8; ++var6) {
+ var7 = var4 + this.field_4241_h.nextInt(16) + 8;
+ var8 = this.field_4241_h.nextInt(120) + 4;
+ var9 = var5 + this.field_4241_h.nextInt(16) + 8;
+ (new WorldGenHellLava(Block.lavaStill.blockID)).generate(this.field_4235_n, this.field_4241_h, var7, var8, var9);
+ }
+
+ var6 = this.field_4241_h.nextInt(this.field_4241_h.nextInt(10) + 1) + 1;
+
+ int var10;
+ for(var7 = 0; var7 < var6; ++var7) {
+ var8 = var4 + this.field_4241_h.nextInt(16) + 8;
+ var9 = this.field_4241_h.nextInt(120) + 4;
+ var10 = var5 + this.field_4241_h.nextInt(16) + 8;
+ (new WorldGenFire()).generate(this.field_4235_n, this.field_4241_h, var8, var9, var10);
+ }
+
+ var6 = this.field_4241_h.nextInt(this.field_4241_h.nextInt(10) + 1);
+
+ for(var7 = 0; var7 < var6; ++var7) {
+ var8 = var4 + this.field_4241_h.nextInt(16) + 8;
+ var9 = this.field_4241_h.nextInt(120) + 4;
+ var10 = var5 + this.field_4241_h.nextInt(16) + 8;
+ (new WorldGenLightStone1()).generate(this.field_4235_n, this.field_4241_h, var8, var9, var10);
+ }
+
+ for(var7 = 0; var7 < 10; ++var7) {
+ var8 = var4 + this.field_4241_h.nextInt(16) + 8;
+ var9 = this.field_4241_h.nextInt(128);
+ var10 = var5 + this.field_4241_h.nextInt(16) + 8;
+ (new WorldGenLightStone2()).generate(this.field_4235_n, this.field_4241_h, var8, var9, var10);
+ }
+
+ if(this.field_4241_h.nextInt(1) == 0) {
+ var7 = var4 + this.field_4241_h.nextInt(16) + 8;
+ var8 = this.field_4241_h.nextInt(128);
+ var9 = var5 + this.field_4241_h.nextInt(16) + 8;
+ (new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.field_4235_n, this.field_4241_h, var7, var8, var9);
+ }
+
+ if(this.field_4241_h.nextInt(1) == 0) {
+ var7 = var4 + this.field_4241_h.nextInt(16) + 8;
+ var8 = this.field_4241_h.nextInt(128);
+ var9 = var5 + this.field_4241_h.nextInt(16) + 8;
+ (new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.field_4235_n, this.field_4241_h, var7, var8, var9);
+ }
+
+ BlockSand.fallInstantly = false;
+ }
+
+ public boolean saveWorld(boolean var1, IProgressUpdate var2) {
+ return true;
+ }
+
+ public boolean func_361_a() {
+ return false;
+ }
+
+ public boolean func_364_b() {
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ChunkProviderLoadOrGenerate.java b/minecraft_server/src/net/minecraft/src/ChunkProviderLoadOrGenerate.java
new file mode 100644
index 0000000..bf79737
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ChunkProviderLoadOrGenerate.java
@@ -0,0 +1,201 @@
+package net.minecraft.src;
+
+import java.io.IOException;
+
+public class ChunkProviderLoadOrGenerate implements IChunkProvider {
+ private Chunk field_723_c;
+ private IChunkProvider field_722_d;
+ private IChunkLoader field_721_e;
+ private Chunk[] chunks = new Chunk[1024];
+ private World worldObj;
+ int field_717_a = -999999999;
+ int field_716_b = -999999999;
+ private Chunk field_718_h;
+
+ public ChunkProviderLoadOrGenerate(World var1, IChunkLoader var2, IChunkProvider var3) {
+ this.field_723_c = new Chunk(var1, new byte[-Short.MIN_VALUE], 0, 0);
+ this.field_723_c.field_678_q = true;
+ this.field_723_c.field_679_p = true;
+ this.worldObj = var1;
+ this.field_721_e = var2;
+ this.field_722_d = var3;
+ }
+
+ public boolean chunkExists(int var1, int var2) {
+ if(var1 == this.field_717_a && var2 == this.field_716_b && this.field_718_h != null) {
+ return true;
+ } else {
+ int var3 = var1 & 31;
+ int var4 = var2 & 31;
+ int var5 = var3 + var4 * 32;
+ return this.chunks[var5] != null && (this.chunks[var5] == this.field_723_c || this.chunks[var5].func_351_a(var1, var2));
+ }
+ }
+
+ public Chunk func_363_b(int var1, int var2) {
+ if(var1 == this.field_717_a && var2 == this.field_716_b && this.field_718_h != null) {
+ return this.field_718_h;
+ } else {
+ int var3 = var1 & 31;
+ int var4 = var2 & 31;
+ int var5 = var3 + var4 * 32;
+ if(!this.chunkExists(var1, var2)) {
+ if(this.chunks[var5] != null) {
+ this.chunks[var5].func_331_d();
+ this.func_370_b(this.chunks[var5]);
+ this.func_371_a(this.chunks[var5]);
+ }
+
+ Chunk var6 = this.func_4059_c(var1, var2);
+ if(var6 == null) {
+ if(this.field_722_d == null) {
+ var6 = this.field_723_c;
+ } else {
+ var6 = this.field_722_d.func_363_b(var1, var2);
+ }
+ }
+
+ this.chunks[var5] = var6;
+ var6.func_4053_c();
+ if(this.chunks[var5] != null) {
+ this.chunks[var5].func_358_c();
+ }
+
+ if(!this.chunks[var5].isTerrainPopulated && this.chunkExists(var1 + 1, var2 + 1) && this.chunkExists(var1, var2 + 1) && this.chunkExists(var1 + 1, var2)) {
+ this.populate(this, var1, var2);
+ }
+
+ if(this.chunkExists(var1 - 1, var2) && !this.func_363_b(var1 - 1, var2).isTerrainPopulated && this.chunkExists(var1 - 1, var2 + 1) && this.chunkExists(var1, var2 + 1) && this.chunkExists(var1 - 1, var2)) {
+ this.populate(this, var1 - 1, var2);
+ }
+
+ if(this.chunkExists(var1, var2 - 1) && !this.func_363_b(var1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 + 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 + 1, var2)) {
+ this.populate(this, var1, var2 - 1);
+ }
+
+ if(this.chunkExists(var1 - 1, var2 - 1) && !this.func_363_b(var1 - 1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 - 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 - 1, var2)) {
+ this.populate(this, var1 - 1, var2 - 1);
+ }
+ }
+
+ this.field_717_a = var1;
+ this.field_716_b = var2;
+ this.field_718_h = this.chunks[var5];
+ return this.chunks[var5];
+ }
+ }
+
+ private Chunk func_4059_c(int var1, int var2) {
+ if(this.field_721_e == null) {
+ return null;
+ } else {
+ try {
+ Chunk var3 = this.field_721_e.func_659_a(this.worldObj, var1, var2);
+ if(var3 != null) {
+ var3.field_676_s = this.worldObj.worldTime;
+ }
+
+ return var3;
+ } catch (Exception var4) {
+ var4.printStackTrace();
+ return null;
+ }
+ }
+ }
+
+ private void func_371_a(Chunk var1) {
+ if(this.field_721_e != null) {
+ try {
+ this.field_721_e.func_4104_b(this.worldObj, var1);
+ } catch (Exception var3) {
+ var3.printStackTrace();
+ }
+
+ }
+ }
+
+ private void func_370_b(Chunk var1) {
+ if(this.field_721_e != null) {
+ try {
+ var1.field_676_s = this.worldObj.worldTime;
+ this.field_721_e.func_662_a(this.worldObj, var1);
+ } catch (IOException var3) {
+ var3.printStackTrace();
+ }
+
+ }
+ }
+
+ public void populate(IChunkProvider var1, int var2, int var3) {
+ Chunk var4 = this.func_363_b(var2, var3);
+ if(!var4.isTerrainPopulated) {
+ var4.isTerrainPopulated = true;
+ if(this.field_722_d != null) {
+ this.field_722_d.populate(var1, var2, var3);
+ var4.func_336_e();
+ }
+ }
+
+ }
+
+ public boolean saveWorld(boolean var1, IProgressUpdate var2) {
+ int var3 = 0;
+ int var4 = 0;
+ int var5;
+ if(var2 != null) {
+ for(var5 = 0; var5 < this.chunks.length; ++var5) {
+ if(this.chunks[var5] != null && this.chunks[var5].func_347_a(var1)) {
+ ++var4;
+ }
+ }
+ }
+
+ var5 = 0;
+
+ for(int var6 = 0; var6 < this.chunks.length; ++var6) {
+ if(this.chunks[var6] != null) {
+ if(var1 && !this.chunks[var6].field_679_p) {
+ this.func_371_a(this.chunks[var6]);
+ }
+
+ if(this.chunks[var6].func_347_a(var1)) {
+ this.func_370_b(this.chunks[var6]);
+ this.chunks[var6].isModified = false;
+ ++var3;
+ if(var3 == 2 && !var1) {
+ return false;
+ }
+
+ if(var2 != null) {
+ ++var5;
+ if(var5 % 10 == 0) {
+ var2.func_437_a(var5 * 100 / var4);
+ }
+ }
+ }
+ }
+ }
+
+ if(var1) {
+ if(this.field_721_e == null) {
+ return true;
+ }
+
+ this.field_721_e.func_660_b();
+ }
+
+ return true;
+ }
+
+ public boolean func_361_a() {
+ if(this.field_721_e != null) {
+ this.field_721_e.func_661_a();
+ }
+
+ return this.field_722_d.func_361_a();
+ }
+
+ public boolean func_364_b() {
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ChunkProviderServer.java b/minecraft_server/src/net/minecraft/src/ChunkProviderServer.java
new file mode 100644
index 0000000..2258a30
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ChunkProviderServer.java
@@ -0,0 +1,200 @@
+package net.minecraft.src;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class ChunkProviderServer implements IChunkProvider {
+ private Set field_725_a = new HashSet();
+ private Chunk field_724_b;
+ private IChunkProvider field_730_c;
+ private IChunkLoader field_729_d;
+ private Map field_728_e = new HashMap();
+ private List field_727_f = new ArrayList();
+ private WorldServer field_726_g;
+
+ public ChunkProviderServer(WorldServer var1, IChunkLoader var2, IChunkProvider var3) {
+ this.field_724_b = new Chunk(var1, new byte[-Short.MIN_VALUE], 0, 0);
+ this.field_724_b.field_678_q = true;
+ this.field_724_b.field_679_p = true;
+ this.field_726_g = var1;
+ this.field_729_d = var2;
+ this.field_730_c = var3;
+ }
+
+ public boolean chunkExists(int var1, int var2) {
+ ChunkCoordinates var3 = new ChunkCoordinates(var1, var2);
+ return this.field_728_e.containsKey(var3);
+ }
+
+ public void func_374_c(int var1, int var2) {
+ int var3 = var1 * 16 + 8 - this.field_726_g.spawnX;
+ int var4 = var2 * 16 + 8 - this.field_726_g.spawnZ;
+ short var5 = 128;
+ if(var3 < -var5 || var3 > var5 || var4 < -var5 || var4 > var5) {
+ this.field_725_a.add(new ChunkCoordinates(var1, var2));
+ }
+
+ }
+
+ public Chunk loadChunk(int var1, int var2) {
+ ChunkCoordinates var3 = new ChunkCoordinates(var1, var2);
+ this.field_725_a.remove(new ChunkCoordinates(var1, var2));
+ Chunk var4 = (Chunk)this.field_728_e.get(var3);
+ if(var4 == null) {
+ var4 = this.func_4063_e(var1, var2);
+ if(var4 == null) {
+ if(this.field_730_c == null) {
+ var4 = this.field_724_b;
+ } else {
+ var4 = this.field_730_c.func_363_b(var1, var2);
+ }
+ }
+
+ this.field_728_e.put(var3, var4);
+ this.field_727_f.add(var4);
+ var4.func_4053_c();
+ if(var4 != null) {
+ var4.func_358_c();
+ }
+
+ if(!var4.isTerrainPopulated && this.chunkExists(var1 + 1, var2 + 1) && this.chunkExists(var1, var2 + 1) && this.chunkExists(var1 + 1, var2)) {
+ this.populate(this, var1, var2);
+ }
+
+ if(this.chunkExists(var1 - 1, var2) && !this.func_363_b(var1 - 1, var2).isTerrainPopulated && this.chunkExists(var1 - 1, var2 + 1) && this.chunkExists(var1, var2 + 1) && this.chunkExists(var1 - 1, var2)) {
+ this.populate(this, var1 - 1, var2);
+ }
+
+ if(this.chunkExists(var1, var2 - 1) && !this.func_363_b(var1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 + 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 + 1, var2)) {
+ this.populate(this, var1, var2 - 1);
+ }
+
+ if(this.chunkExists(var1 - 1, var2 - 1) && !this.func_363_b(var1 - 1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 - 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 - 1, var2)) {
+ this.populate(this, var1 - 1, var2 - 1);
+ }
+ }
+
+ return var4;
+ }
+
+ public Chunk func_363_b(int var1, int var2) {
+ ChunkCoordinates var3 = new ChunkCoordinates(var1, var2);
+ Chunk var4 = (Chunk)this.field_728_e.get(var3);
+ return var4 == null ? (this.field_726_g.field_9209_x ? this.loadChunk(var1, var2) : this.field_724_b) : var4;
+ }
+
+ private Chunk func_4063_e(int var1, int var2) {
+ if(this.field_729_d == null) {
+ return null;
+ } else {
+ try {
+ Chunk var3 = this.field_729_d.func_659_a(this.field_726_g, var1, var2);
+ if(var3 != null) {
+ var3.field_676_s = this.field_726_g.worldTime;
+ }
+
+ return var3;
+ } catch (Exception var4) {
+ var4.printStackTrace();
+ return null;
+ }
+ }
+ }
+
+ private void func_375_a(Chunk var1) {
+ if(this.field_729_d != null) {
+ try {
+ this.field_729_d.func_4104_b(this.field_726_g, var1);
+ } catch (Exception var3) {
+ var3.printStackTrace();
+ }
+
+ }
+ }
+
+ private void func_373_b(Chunk var1) {
+ if(this.field_729_d != null) {
+ try {
+ var1.field_676_s = this.field_726_g.worldTime;
+ this.field_729_d.func_662_a(this.field_726_g, var1);
+ } catch (IOException var3) {
+ var3.printStackTrace();
+ }
+
+ }
+ }
+
+ public void populate(IChunkProvider var1, int var2, int var3) {
+ Chunk var4 = this.func_363_b(var2, var3);
+ if(!var4.isTerrainPopulated) {
+ var4.isTerrainPopulated = true;
+ if(this.field_730_c != null) {
+ this.field_730_c.populate(var1, var2, var3);
+ var4.func_336_e();
+ }
+ }
+
+ }
+
+ public boolean saveWorld(boolean var1, IProgressUpdate var2) {
+ int var3 = 0;
+
+ for(int var4 = 0; var4 < this.field_727_f.size(); ++var4) {
+ Chunk var5 = (Chunk)this.field_727_f.get(var4);
+ if(var1 && !var5.field_679_p) {
+ this.func_375_a(var5);
+ }
+
+ if(var5.func_347_a(var1)) {
+ this.func_373_b(var5);
+ var5.isModified = false;
+ ++var3;
+ if(var3 == 32 && !var1) {
+ return false;
+ }
+ }
+ }
+
+ if(var1) {
+ if(this.field_729_d == null) {
+ return true;
+ }
+
+ this.field_729_d.func_660_b();
+ }
+
+ return true;
+ }
+
+ public boolean func_361_a() {
+ if(!this.field_726_g.field_816_A) {
+ for(int var1 = 0; var1 < 100; ++var1) {
+ if(!this.field_725_a.isEmpty()) {
+ ChunkCoordinates var2 = (ChunkCoordinates)this.field_725_a.iterator().next();
+ Chunk var3 = this.func_363_b(var2.field_529_a, var2.field_528_b);
+ var3.func_331_d();
+ this.func_373_b(var3);
+ this.func_375_a(var3);
+ this.field_725_a.remove(var2);
+ this.field_728_e.remove(var2);
+ this.field_727_f.remove(var3);
+ }
+ }
+
+ if(this.field_729_d != null) {
+ this.field_729_d.func_661_a();
+ }
+ }
+
+ return this.field_730_c.func_361_a();
+ }
+
+ public boolean func_364_b() {
+ return !this.field_726_g.field_816_A;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/CompressedStreamTools.java b/minecraft_server/src/net/minecraft/src/CompressedStreamTools.java
new file mode 100644
index 0000000..e6891e8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/CompressedStreamTools.java
@@ -0,0 +1,78 @@
+package net.minecraft.src;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.DataOutput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+
+public class CompressedStreamTools {
+ public static NBTTagCompound func_770_a(InputStream var0) throws IOException {
+ DataInputStream var1 = new DataInputStream(new GZIPInputStream(var0));
+
+ NBTTagCompound var2;
+ try {
+ var2 = func_774_a(var1);
+ } finally {
+ var1.close();
+ }
+
+ return var2;
+ }
+
+ public static void func_769_a(NBTTagCompound var0, OutputStream var1) throws IOException {
+ DataOutputStream var2 = new DataOutputStream(new GZIPOutputStream(var1));
+
+ try {
+ func_771_a(var0, var2);
+ } finally {
+ var2.close();
+ }
+
+ }
+
+ public static NBTTagCompound func_773_a(byte[] var0) throws IOException {
+ DataInputStream var1 = new DataInputStream(new GZIPInputStream(new ByteArrayInputStream(var0)));
+
+ NBTTagCompound var2;
+ try {
+ var2 = func_774_a(var1);
+ } finally {
+ var1.close();
+ }
+
+ return var2;
+ }
+
+ public static byte[] func_772_a(NBTTagCompound var0) throws IOException {
+ ByteArrayOutputStream var1 = new ByteArrayOutputStream();
+ DataOutputStream var2 = new DataOutputStream(new GZIPOutputStream(var1));
+
+ try {
+ func_771_a(var0, var2);
+ } finally {
+ var2.close();
+ }
+
+ return var1.toByteArray();
+ }
+
+ public static NBTTagCompound func_774_a(DataInput var0) throws IOException {
+ NBTBase var1 = NBTBase.readTag(var0);
+ if(var1 instanceof NBTTagCompound) {
+ return (NBTTagCompound)var1;
+ } else {
+ throw new IOException("Root tag must be a named compound tag");
+ }
+ }
+
+ public static void func_771_a(NBTTagCompound var0, DataOutput var1) throws IOException {
+ NBTBase.writeTag(var0, var1);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ConsoleLogFormatter.java b/minecraft_server/src/net/minecraft/src/ConsoleLogFormatter.java
new file mode 100644
index 0000000..05eb92a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ConsoleLogFormatter.java
@@ -0,0 +1,44 @@
+package net.minecraft.src;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.text.SimpleDateFormat;
+import java.util.logging.Formatter;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+final class ConsoleLogFormatter extends Formatter {
+ private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+ public String format(LogRecord var1) {
+ StringBuilder var2 = new StringBuilder();
+ var2.append(this.dateFormat.format(Long.valueOf(var1.getMillis())));
+ Level var3 = var1.getLevel();
+ if(var3 == Level.FINEST) {
+ var2.append(" [FINEST] ");
+ } else if(var3 == Level.FINER) {
+ var2.append(" [FINER] ");
+ } else if(var3 == Level.FINE) {
+ var2.append(" [FINE] ");
+ } else if(var3 == Level.INFO) {
+ var2.append(" [INFO] ");
+ } else if(var3 == Level.WARNING) {
+ var2.append(" [WARNING] ");
+ } else if(var3 == Level.SEVERE) {
+ var2.append(" [SEVERE] ");
+ } else if(var3 == Level.SEVERE) {
+ var2.append(" [" + var3.getLocalizedName() + "] ");
+ }
+
+ var2.append(var1.getMessage());
+ var2.append('\n');
+ Throwable var4 = var1.getThrown();
+ if(var4 != null) {
+ StringWriter var5 = new StringWriter();
+ var4.printStackTrace(new PrintWriter(var5));
+ var2.append(var5.toString());
+ }
+
+ return var2.toString();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ConsoleLogManager.java b/minecraft_server/src/net/minecraft/src/ConsoleLogManager.java
new file mode 100644
index 0000000..0cdef01
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ConsoleLogManager.java
@@ -0,0 +1,27 @@
+package net.minecraft.src;
+
+import java.util.logging.ConsoleHandler;
+import java.util.logging.FileHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class ConsoleLogManager {
+ public static Logger logger = Logger.getLogger("Minecraft");
+
+ public static void init() {
+ ConsoleLogFormatter var0 = new ConsoleLogFormatter();
+ logger.setUseParentHandlers(false);
+ ConsoleHandler var1 = new ConsoleHandler();
+ var1.setFormatter(var0);
+ logger.addHandler(var1);
+
+ try {
+ FileHandler var2 = new FileHandler("server.log", true);
+ var2.setFormatter(var0);
+ logger.addHandler(var2);
+ } catch (Exception var3) {
+ logger.log(Level.WARNING, "Failed to log to server.log", var3);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Entity.java b/minecraft_server/src/net/minecraft/src/Entity.java
new file mode 100644
index 0000000..57de6bb
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Entity.java
@@ -0,0 +1,816 @@
+package net.minecraft.src;
+
+import java.util.List;
+import java.util.Random;
+
+public abstract class Entity {
+ private static int field_384_a = 0;
+ public int field_331_c = field_384_a++;
+ public double field_9094_h = 1.0D;
+ public boolean field_329_e = false;
+ public Entity field_328_f;
+ public Entity field_327_g;
+ public World worldObj;
+ public double prevPosX;
+ public double prevPosY;
+ public double prevPosZ;
+ public double posX;
+ public double posY;
+ public double posZ;
+ public double motionX;
+ public double motionY;
+ public double motionZ;
+ public float rotationYaw;
+ public float rotationPitch;
+ public float prevRotationYaw;
+ public float prevRotationPitch;
+ public final AxisAlignedBB boundingBox = AxisAlignedBB.getBoundingBox(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
+ public boolean onGround = false;
+ public boolean field_9084_B;
+ public boolean field_9082_C;
+ public boolean field_9080_D = false;
+ public boolean field_9078_E = false;
+ public boolean field_9077_F = true;
+ public boolean field_304_B = false;
+ public float yOffset = 0.0F;
+ public float width = 0.6F;
+ public float height = 1.8F;
+ public float field_9075_K = 0.0F;
+ public float field_9074_L = 0.0F;
+ protected boolean entityWalks = true;
+ protected float fallDistance = 0.0F;
+ private int field_6151_b = 1;
+ public double field_9071_O;
+ public double field_9070_P;
+ public double field_9069_Q;
+ public float field_9068_R = 0.0F;
+ public float field_9067_S = 0.0F;
+ public boolean field_9066_T = false;
+ public float field_286_P = 0.0F;
+ public boolean field_9065_V = false;
+ protected Random field_9064_W = new Random();
+ public int field_9063_X = 0;
+ public int field_9062_Y = 1;
+ public int field_9061_Z = 0;
+ protected int field_9087_aa = 300;
+ protected boolean field_9085_ab = false;
+ public int field_9083_ac = 0;
+ public int air = 300;
+ private boolean field_4131_c = true;
+ protected boolean field_9079_ae = false;
+ private double field_4130_d;
+ private double field_4128_e;
+ public boolean field_276_Z = false;
+ public int field_307_aa;
+ public int field_305_ab;
+ public int field_303_ac;
+
+ public Entity(World var1) {
+ this.worldObj = var1;
+ this.setPosition(0.0D, 0.0D, 0.0D);
+ }
+
+ public boolean equals(Object var1) {
+ return var1 instanceof Entity ? ((Entity)var1).field_331_c == this.field_331_c : false;
+ }
+
+ public int hashCode() {
+ return this.field_331_c;
+ }
+
+ public void setEntityDead() {
+ this.field_304_B = true;
+ }
+
+ protected void setSize(float var1, float var2) {
+ this.width = var1;
+ this.height = var2;
+ }
+
+ protected void setRotation(float var1, float var2) {
+ this.rotationYaw = var1;
+ this.rotationPitch = var2;
+ }
+
+ public void setPosition(double var1, double var3, double var5) {
+ this.posX = var1;
+ this.posY = var3;
+ this.posZ = var5;
+ float var7 = this.width / 2.0F;
+ float var8 = this.height;
+ this.boundingBox.setBounds(var1 - (double)var7, var3 - (double)this.yOffset + (double)this.field_9068_R, var5 - (double)var7, var1 + (double)var7, var3 - (double)this.yOffset + (double)this.field_9068_R + (double)var8, var5 + (double)var7);
+ }
+
+ public void onUpdate() {
+ this.func_84_k();
+ }
+
+ public void func_84_k() {
+ if(this.field_327_g != null && this.field_327_g.field_304_B) {
+ this.field_327_g = null;
+ }
+
+ ++this.field_9063_X;
+ this.field_9075_K = this.field_9074_L;
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ this.prevRotationPitch = this.rotationPitch;
+ this.prevRotationYaw = this.rotationYaw;
+ if(this.handleWaterMovement()) {
+ if(!this.field_9085_ab && !this.field_4131_c) {
+ float var1 = MathHelper.sqrt_double(this.motionX * this.motionX * (double)0.2F + this.motionY * this.motionY + this.motionZ * this.motionZ * (double)0.2F) * 0.2F;
+ if(var1 > 1.0F) {
+ var1 = 1.0F;
+ }
+
+ this.worldObj.playSoundAtEntity(this, "random.splash", var1, 1.0F + (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.4F);
+ float var2 = (float)MathHelper.floor_double(this.boundingBox.minY);
+
+ int var3;
+ float var4;
+ float var5;
+ for(var3 = 0; (float)var3 < 1.0F + this.width * 20.0F; ++var3) {
+ var4 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width;
+ var5 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width;
+ this.worldObj.spawnParticle("bubble", this.posX + (double)var4, (double)(var2 + 1.0F), this.posZ + (double)var5, this.motionX, this.motionY - (double)(this.field_9064_W.nextFloat() * 0.2F), this.motionZ);
+ }
+
+ for(var3 = 0; (float)var3 < 1.0F + this.width * 20.0F; ++var3) {
+ var4 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width;
+ var5 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width;
+ this.worldObj.spawnParticle("splash", this.posX + (double)var4, (double)(var2 + 1.0F), this.posZ + (double)var5, this.motionX, this.motionY, this.motionZ);
+ }
+ }
+
+ this.fallDistance = 0.0F;
+ this.field_9085_ab = true;
+ this.field_9061_Z = 0;
+ } else {
+ this.field_9085_ab = false;
+ }
+
+ if(this.worldObj.multiplayerWorld) {
+ this.field_9061_Z = 0;
+ } else if(this.field_9061_Z > 0) {
+ if(this.field_9079_ae) {
+ this.field_9061_Z -= 4;
+ if(this.field_9061_Z < 0) {
+ this.field_9061_Z = 0;
+ }
+ } else {
+ if(this.field_9061_Z % 20 == 0) {
+ this.attackEntity((Entity)null, 1);
+ }
+
+ --this.field_9061_Z;
+ }
+ }
+
+ if(this.func_112_q()) {
+ this.func_4040_n();
+ }
+
+ if(this.posY < -64.0D) {
+ this.func_4043_o();
+ }
+
+ this.field_4131_c = false;
+ }
+
+ protected void func_4040_n() {
+ if(!this.field_9079_ae) {
+ this.attackEntity((Entity)null, 4);
+ this.field_9061_Z = 600;
+ }
+
+ }
+
+ protected void func_4043_o() {
+ this.setEntityDead();
+ }
+
+ public boolean func_133_b(double var1, double var3, double var5) {
+ AxisAlignedBB var7 = this.boundingBox.getOffsetBoundingBox(var1, var3, var5);
+ List var8 = this.worldObj.getCollidingBoundingBoxes(this, var7);
+ return var8.size() > 0 ? false : !this.worldObj.getIsAnyLiquid(var7);
+ }
+
+ public void moveEntity(double var1, double var3, double var5) {
+ if(this.field_9066_T) {
+ this.boundingBox.offset(var1, var3, var5);
+ this.posX = (this.boundingBox.minX + this.boundingBox.maxX) / 2.0D;
+ this.posY = this.boundingBox.minY + (double)this.yOffset - (double)this.field_9068_R;
+ this.posZ = (this.boundingBox.minZ + this.boundingBox.maxZ) / 2.0D;
+ } else {
+ double var7 = this.posX;
+ double var9 = this.posZ;
+ double var11 = var1;
+ double var13 = var3;
+ double var15 = var5;
+ AxisAlignedBB var17 = this.boundingBox.copy();
+ boolean var18 = this.onGround && this.func_9059_p();
+ if(var18) {
+ double var19;
+ for(var19 = 0.05D; var1 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.getOffsetBoundingBox(var1, -1.0D, 0.0D)).size() == 0; var11 = var1) {
+ if(var1 < var19 && var1 >= -var19) {
+ var1 = 0.0D;
+ } else if(var1 > 0.0D) {
+ var1 -= var19;
+ } else {
+ var1 += var19;
+ }
+ }
+
+ for(; var5 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.getOffsetBoundingBox(0.0D, -1.0D, var5)).size() == 0; var15 = var5) {
+ if(var5 < var19 && var5 >= -var19) {
+ var5 = 0.0D;
+ } else if(var5 > 0.0D) {
+ var5 -= var19;
+ } else {
+ var5 += var19;
+ }
+ }
+ }
+
+ List var35 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(var1, var3, var5));
+
+ for(int var20 = 0; var20 < var35.size(); ++var20) {
+ var3 = ((AxisAlignedBB)var35.get(var20)).func_701_b(this.boundingBox, var3);
+ }
+
+ this.boundingBox.offset(0.0D, var3, 0.0D);
+ if(!this.field_9077_F && var13 != var3) {
+ var5 = 0.0D;
+ var3 = var5;
+ var1 = var5;
+ }
+
+ boolean var36 = this.onGround || var13 != var3 && var13 < 0.0D;
+
+ int var21;
+ for(var21 = 0; var21 < var35.size(); ++var21) {
+ var1 = ((AxisAlignedBB)var35.get(var21)).func_710_a(this.boundingBox, var1);
+ }
+
+ this.boundingBox.offset(var1, 0.0D, 0.0D);
+ if(!this.field_9077_F && var11 != var1) {
+ var5 = 0.0D;
+ var3 = var5;
+ var1 = var5;
+ }
+
+ for(var21 = 0; var21 < var35.size(); ++var21) {
+ var5 = ((AxisAlignedBB)var35.get(var21)).func_709_c(this.boundingBox, var5);
+ }
+
+ this.boundingBox.offset(0.0D, 0.0D, var5);
+ if(!this.field_9077_F && var15 != var5) {
+ var5 = 0.0D;
+ var3 = var5;
+ var1 = var5;
+ }
+
+ double var23;
+ int var28;
+ double var37;
+ if(this.field_9067_S > 0.0F && var36 && this.field_9068_R < 0.05F && (var11 != var1 || var15 != var5)) {
+ var37 = var1;
+ var23 = var3;
+ double var25 = var5;
+ var1 = var11;
+ var3 = (double)this.field_9067_S;
+ var5 = var15;
+ AxisAlignedBB var27 = this.boundingBox.copy();
+ this.boundingBox.setBB(var17);
+ var35 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(var11, var3, var15));
+
+ for(var28 = 0; var28 < var35.size(); ++var28) {
+ var3 = ((AxisAlignedBB)var35.get(var28)).func_701_b(this.boundingBox, var3);
+ }
+
+ this.boundingBox.offset(0.0D, var3, 0.0D);
+ if(!this.field_9077_F && var13 != var3) {
+ var5 = 0.0D;
+ var3 = var5;
+ var1 = var5;
+ }
+
+ for(var28 = 0; var28 < var35.size(); ++var28) {
+ var1 = ((AxisAlignedBB)var35.get(var28)).func_710_a(this.boundingBox, var1);
+ }
+
+ this.boundingBox.offset(var1, 0.0D, 0.0D);
+ if(!this.field_9077_F && var11 != var1) {
+ var5 = 0.0D;
+ var3 = var5;
+ var1 = var5;
+ }
+
+ for(var28 = 0; var28 < var35.size(); ++var28) {
+ var5 = ((AxisAlignedBB)var35.get(var28)).func_709_c(this.boundingBox, var5);
+ }
+
+ this.boundingBox.offset(0.0D, 0.0D, var5);
+ if(!this.field_9077_F && var15 != var5) {
+ var5 = 0.0D;
+ var3 = var5;
+ var1 = var5;
+ }
+
+ if(var37 * var37 + var25 * var25 >= var1 * var1 + var5 * var5) {
+ var1 = var37;
+ var3 = var23;
+ var5 = var25;
+ this.boundingBox.setBB(var27);
+ } else {
+ this.field_9068_R = (float)((double)this.field_9068_R + 0.5D);
+ }
+ }
+
+ this.posX = (this.boundingBox.minX + this.boundingBox.maxX) / 2.0D;
+ this.posY = this.boundingBox.minY + (double)this.yOffset - (double)this.field_9068_R;
+ this.posZ = (this.boundingBox.minZ + this.boundingBox.maxZ) / 2.0D;
+ this.field_9084_B = var11 != var1 || var15 != var5;
+ this.field_9082_C = var13 != var3;
+ this.onGround = var13 != var3 && var13 < 0.0D;
+ this.field_9080_D = this.field_9084_B || this.field_9082_C;
+ this.interact(var3, this.onGround);
+ if(var11 != var1) {
+ this.motionX = 0.0D;
+ }
+
+ if(var13 != var3) {
+ this.motionY = 0.0D;
+ }
+
+ if(var15 != var5) {
+ this.motionZ = 0.0D;
+ }
+
+ var37 = this.posX - var7;
+ var23 = this.posZ - var9;
+ int var26;
+ int var38;
+ int var40;
+ if(this.entityWalks && !var18) {
+ this.field_9074_L = (float)((double)this.field_9074_L + (double)MathHelper.sqrt_double(var37 * var37 + var23 * var23) * 0.6D);
+ var38 = MathHelper.floor_double(this.posX);
+ var26 = MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset);
+ var40 = MathHelper.floor_double(this.posZ);
+ var28 = this.worldObj.getBlockId(var38, var26, var40);
+ if(this.field_9074_L > (float)this.field_6151_b && var28 > 0) {
+ ++this.field_6151_b;
+ StepSound var29 = Block.blocksList[var28].stepSound;
+ if(this.worldObj.getBlockId(var38, var26 + 1, var40) == Block.snow.blockID) {
+ var29 = Block.snow.stepSound;
+ this.worldObj.playSoundAtEntity(this, var29.func_737_c(), var29.func_738_a() * 0.15F, var29.func_739_b());
+ } else if(!Block.blocksList[var28].blockMaterial.getIsLiquid()) {
+ this.worldObj.playSoundAtEntity(this, var29.func_737_c(), var29.func_738_a() * 0.15F, var29.func_739_b());
+ }
+
+ Block.blocksList[var28].onEntityWalking(this.worldObj, var38, var26, var40, this);
+ }
+ }
+
+ var38 = MathHelper.floor_double(this.boundingBox.minX);
+ var26 = MathHelper.floor_double(this.boundingBox.minY);
+ var40 = MathHelper.floor_double(this.boundingBox.minZ);
+ var28 = MathHelper.floor_double(this.boundingBox.maxX);
+ int var41 = MathHelper.floor_double(this.boundingBox.maxY);
+ int var30 = MathHelper.floor_double(this.boundingBox.maxZ);
+
+ for(int var31 = var38; var31 <= var28; ++var31) {
+ for(int var32 = var26; var32 <= var41; ++var32) {
+ for(int var33 = var40; var33 <= var30; ++var33) {
+ int var34 = this.worldObj.getBlockId(var31, var32, var33);
+ if(var34 > 0) {
+ Block.blocksList[var34].onEntityCollidedWithBlock(this.worldObj, var31, var32, var33, this);
+ }
+ }
+ }
+ }
+
+ this.field_9068_R *= 0.4F;
+ boolean var39 = this.handleWaterMovement();
+ if(this.worldObj.func_523_c(this.boundingBox)) {
+ this.func_125_b(1);
+ if(!var39) {
+ ++this.field_9061_Z;
+ if(this.field_9061_Z == 0) {
+ this.field_9061_Z = 300;
+ }
+ }
+ } else if(this.field_9061_Z <= 0) {
+ this.field_9061_Z = -this.field_9062_Y;
+ }
+
+ if(var39 && this.field_9061_Z > 0) {
+ this.worldObj.playSoundAtEntity(this, "random.fizz", 0.7F, 1.6F + (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.4F);
+ this.field_9061_Z = -this.field_9062_Y;
+ }
+
+ }
+ }
+
+ protected void interact(double var1, boolean var3) {
+ if(var3) {
+ if(this.fallDistance > 0.0F) {
+ this.fall(this.fallDistance);
+ this.fallDistance = 0.0F;
+ }
+ } else if(var1 < 0.0D) {
+ this.fallDistance = (float)((double)this.fallDistance - var1);
+ }
+
+ }
+
+ public boolean func_9059_p() {
+ return false;
+ }
+
+ public AxisAlignedBB func_93_n() {
+ return null;
+ }
+
+ protected void func_125_b(int var1) {
+ if(!this.field_9079_ae) {
+ this.attackEntity((Entity)null, var1);
+ }
+
+ }
+
+ protected void fall(float var1) {
+ }
+
+ public boolean handleWaterMovement() {
+ return this.worldObj.func_490_a(this.boundingBox.expands(0.0D, (double)-0.4F, 0.0D), Material.water, this);
+ }
+
+ public boolean isInsideOfMaterial(Material var1) {
+ double var2 = this.posY + (double)this.func_104_p();
+ int var4 = MathHelper.floor_double(this.posX);
+ int var5 = MathHelper.floor_float((float)MathHelper.floor_double(var2));
+ int var6 = MathHelper.floor_double(this.posZ);
+ int var7 = this.worldObj.getBlockId(var4, var5, var6);
+ if(var7 != 0 && Block.blocksList[var7].blockMaterial == var1) {
+ float var8 = BlockFluids.setFluidHeight(this.worldObj.getBlockMetadata(var4, var5, var6)) - 1.0F / 9.0F;
+ float var9 = (float)(var5 + 1) - var8;
+ return var2 < (double)var9;
+ } else {
+ return false;
+ }
+ }
+
+ public float func_104_p() {
+ return 0.0F;
+ }
+
+ public boolean func_112_q() {
+ return this.worldObj.isMaterialInBB(this.boundingBox.expands(0.0D, (double)-0.4F, 0.0D), Material.lava);
+ }
+
+ public void func_90_a(float var1, float var2, float var3) {
+ float var4 = MathHelper.sqrt_float(var1 * var1 + var2 * var2);
+ if(var4 >= 0.01F) {
+ if(var4 < 1.0F) {
+ var4 = 1.0F;
+ }
+
+ var4 = var3 / var4;
+ var1 *= var4;
+ var2 *= var4;
+ float var5 = MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F);
+ float var6 = MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F);
+ this.motionX += (double)(var1 * var6 - var2 * var5);
+ this.motionZ += (double)(var2 * var6 + var1 * var5);
+ }
+ }
+
+ public float getEntityBrightness(float var1) {
+ int var2 = MathHelper.floor_double(this.posX);
+ double var3 = (this.boundingBox.maxY - this.boundingBox.minY) * 0.66D;
+ int var5 = MathHelper.floor_double(this.posY - (double)this.yOffset + var3);
+ int var6 = MathHelper.floor_double(this.posZ);
+ return this.worldObj.getLightBrightness(var2, var5, var6);
+ }
+
+ public void setPositionAndRotation(double var1, double var3, double var5, float var7, float var8) {
+ this.prevPosX = this.posX = var1;
+ this.prevPosY = this.posY = var3;
+ this.prevPosZ = this.posZ = var5;
+ this.prevRotationYaw = this.rotationYaw = var7;
+ this.prevRotationPitch = this.rotationPitch = var8;
+ this.field_9068_R = 0.0F;
+ double var9 = (double)(this.prevRotationYaw - var7);
+ if(var9 < -180.0D) {
+ this.prevRotationYaw += 360.0F;
+ }
+
+ if(var9 >= 180.0D) {
+ this.prevRotationYaw -= 360.0F;
+ }
+
+ this.setPosition(this.posX, this.posY, this.posZ);
+ this.setRotation(var7, var8);
+ }
+
+ public void func_107_c(double var1, double var3, double var5, float var7, float var8) {
+ this.prevPosX = this.posX = var1;
+ this.prevPosY = this.posY = var3 + (double)this.yOffset;
+ this.prevPosZ = this.posZ = var5;
+ this.rotationYaw = var7;
+ this.rotationPitch = var8;
+ this.setPosition(this.posX, this.posY, this.posZ);
+ }
+
+ public float getDistanceToEntity(Entity var1) {
+ float var2 = (float)(this.posX - var1.posX);
+ float var3 = (float)(this.posY - var1.posY);
+ float var4 = (float)(this.posZ - var1.posZ);
+ return MathHelper.sqrt_float(var2 * var2 + var3 * var3 + var4 * var4);
+ }
+
+ public double getDistanceSq(double var1, double var3, double var5) {
+ double var7 = this.posX - var1;
+ double var9 = this.posY - var3;
+ double var11 = this.posZ - var5;
+ return var7 * var7 + var9 * var9 + var11 * var11;
+ }
+
+ public double getDistance(double var1, double var3, double var5) {
+ double var7 = this.posX - var1;
+ double var9 = this.posY - var3;
+ double var11 = this.posZ - var5;
+ return (double)MathHelper.sqrt_double(var7 * var7 + var9 * var9 + var11 * var11);
+ }
+
+ public double getDistanceSqToEntity(Entity var1) {
+ double var2 = this.posX - var1.posX;
+ double var4 = this.posY - var1.posY;
+ double var6 = this.posZ - var1.posZ;
+ return var2 * var2 + var4 * var4 + var6 * var6;
+ }
+
+ public void onCollideWithPlayer(EntityPlayer var1) {
+ }
+
+ public void applyEntityCollision(Entity var1) {
+ if(var1.field_328_f != this && var1.field_327_g != this) {
+ double var2 = var1.posX - this.posX;
+ double var4 = var1.posZ - this.posZ;
+ double var6 = MathHelper.abs_max(var2, var4);
+ if(var6 >= (double)0.01F) {
+ var6 = (double)MathHelper.sqrt_double(var6);
+ var2 /= var6;
+ var4 /= var6;
+ double var8 = 1.0D / var6;
+ if(var8 > 1.0D) {
+ var8 = 1.0D;
+ }
+
+ var2 *= var8;
+ var4 *= var8;
+ var2 *= (double)0.05F;
+ var4 *= (double)0.05F;
+ var2 *= (double)(1.0F - this.field_286_P);
+ var4 *= (double)(1.0F - this.field_286_P);
+ this.addVelocity(-var2, 0.0D, -var4);
+ var1.addVelocity(var2, 0.0D, var4);
+ }
+
+ }
+ }
+
+ public void addVelocity(double var1, double var3, double var5) {
+ this.motionX += var1;
+ this.motionY += var3;
+ this.motionZ += var5;
+ }
+
+ protected void func_9060_u() {
+ this.field_9078_E = true;
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ this.func_9060_u();
+ return false;
+ }
+
+ public boolean func_129_c_() {
+ return false;
+ }
+
+ public boolean func_124_r() {
+ return false;
+ }
+
+ public void func_96_b(Entity var1, int var2) {
+ }
+
+ public boolean func_95_c(NBTTagCompound var1) {
+ String var2 = this.func_109_s();
+ if(!this.field_304_B && var2 != null) {
+ var1.setString("id", var2);
+ this.writeToNBT(var1);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public void writeToNBT(NBTTagCompound var1) {
+ var1.setTag("Pos", this.func_132_a(new double[]{this.posX, this.posY, this.posZ}));
+ var1.setTag("Motion", this.func_132_a(new double[]{this.motionX, this.motionY, this.motionZ}));
+ var1.setTag("Rotation", this.func_85_a(new float[]{this.rotationYaw, this.rotationPitch}));
+ var1.setFloat("FallDistance", this.fallDistance);
+ var1.setShort("Fire", (short)this.field_9061_Z);
+ var1.setShort("Air", (short)this.air);
+ var1.setBoolean("OnGround", this.onGround);
+ this.writeEntityToNBT(var1);
+ }
+
+ public void readFromNBT(NBTTagCompound var1) {
+ NBTTagList var2 = var1.getTagList("Pos");
+ NBTTagList var3 = var1.getTagList("Motion");
+ NBTTagList var4 = var1.getTagList("Rotation");
+ this.setPosition(0.0D, 0.0D, 0.0D);
+ this.motionX = ((NBTTagDouble)var3.tagAt(0)).doubleValue;
+ this.motionY = ((NBTTagDouble)var3.tagAt(1)).doubleValue;
+ this.motionZ = ((NBTTagDouble)var3.tagAt(2)).doubleValue;
+ this.prevPosX = this.field_9071_O = this.posX = ((NBTTagDouble)var2.tagAt(0)).doubleValue;
+ this.prevPosY = this.field_9070_P = this.posY = ((NBTTagDouble)var2.tagAt(1)).doubleValue;
+ this.prevPosZ = this.field_9069_Q = this.posZ = ((NBTTagDouble)var2.tagAt(2)).doubleValue;
+ this.prevRotationYaw = this.rotationYaw = ((NBTTagFloat)var4.tagAt(0)).floatValue;
+ this.prevRotationPitch = this.rotationPitch = ((NBTTagFloat)var4.tagAt(1)).floatValue;
+ this.fallDistance = var1.getFloat("FallDistance");
+ this.field_9061_Z = var1.getShort("Fire");
+ this.air = var1.getShort("Air");
+ this.onGround = var1.getBoolean("OnGround");
+ this.setPosition(this.posX, this.posY, this.posZ);
+ this.readEntityFromNBT(var1);
+ }
+
+ protected final String func_109_s() {
+ return EntityList.func_564_b(this);
+ }
+
+ protected abstract void readEntityFromNBT(NBTTagCompound var1);
+
+ protected abstract void writeEntityToNBT(NBTTagCompound var1);
+
+ protected NBTTagList func_132_a(double... var1) {
+ NBTTagList var2 = new NBTTagList();
+ double[] var3 = var1;
+ int var4 = var1.length;
+
+ for(int var5 = 0; var5 < var4; ++var5) {
+ double var6 = var3[var5];
+ var2.setTag(new NBTTagDouble(var6));
+ }
+
+ return var2;
+ }
+
+ protected NBTTagList func_85_a(float... var1) {
+ NBTTagList var2 = new NBTTagList();
+ float[] var3 = var1;
+ int var4 = var1.length;
+
+ for(int var5 = 0; var5 < var4; ++var5) {
+ float var6 = var3[var5];
+ var2.setTag(new NBTTagFloat(var6));
+ }
+
+ return var2;
+ }
+
+ public EntityItem dropItem(int var1, int var2) {
+ return this.dropItemWithOffset(var1, var2, 0.0F);
+ }
+
+ public EntityItem dropItemWithOffset(int var1, int var2, float var3) {
+ EntityItem var4 = new EntityItem(this.worldObj, this.posX, this.posY + (double)var3, this.posZ, new ItemStack(var1, var2));
+ var4.field_433_ad = 10;
+ this.worldObj.entityJoinedWorld(var4);
+ return var4;
+ }
+
+ public boolean func_120_t() {
+ return !this.field_304_B;
+ }
+
+ public boolean func_91_u() {
+ int var1 = MathHelper.floor_double(this.posX);
+ int var2 = MathHelper.floor_double(this.posY + (double)this.func_104_p());
+ int var3 = MathHelper.floor_double(this.posZ);
+ return this.worldObj.doesBlockAllowAttachment(var1, var2, var3);
+ }
+
+ public boolean func_6092_a(EntityPlayer var1) {
+ return false;
+ }
+
+ public AxisAlignedBB func_89_d(Entity var1) {
+ return null;
+ }
+
+ public void func_115_v() {
+ if(this.field_327_g.field_304_B) {
+ this.field_327_g = null;
+ } else {
+ this.motionX = 0.0D;
+ this.motionY = 0.0D;
+ this.motionZ = 0.0D;
+ this.onUpdate();
+ this.field_327_g.func_127_w();
+ this.field_4128_e += (double)(this.field_327_g.rotationYaw - this.field_327_g.prevRotationYaw);
+
+ for(this.field_4130_d += (double)(this.field_327_g.rotationPitch - this.field_327_g.prevRotationPitch); this.field_4128_e >= 180.0D; this.field_4128_e -= 360.0D) {
+ }
+
+ while(this.field_4128_e < -180.0D) {
+ this.field_4128_e += 360.0D;
+ }
+
+ while(this.field_4130_d >= 180.0D) {
+ this.field_4130_d -= 360.0D;
+ }
+
+ while(this.field_4130_d < -180.0D) {
+ this.field_4130_d += 360.0D;
+ }
+
+ double var1 = this.field_4128_e * 0.5D;
+ double var3 = this.field_4130_d * 0.5D;
+ float var5 = 10.0F;
+ if(var1 > (double)var5) {
+ var1 = (double)var5;
+ }
+
+ if(var1 < (double)(-var5)) {
+ var1 = (double)(-var5);
+ }
+
+ if(var3 > (double)var5) {
+ var3 = (double)var5;
+ }
+
+ if(var3 < (double)(-var5)) {
+ var3 = (double)(-var5);
+ }
+
+ this.field_4128_e -= var1;
+ this.field_4130_d -= var3;
+ this.rotationYaw = (float)((double)this.rotationYaw + var1);
+ this.rotationPitch = (float)((double)this.rotationPitch + var3);
+ }
+ }
+
+ public void func_127_w() {
+ this.field_328_f.setPosition(this.posX, this.posY + this.func_130_h() + this.field_328_f.func_117_x(), this.posZ);
+ }
+
+ public double func_117_x() {
+ return (double)this.yOffset;
+ }
+
+ public double func_130_h() {
+ return (double)this.height * 0.75D;
+ }
+
+ public void func_6094_e(Entity var1) {
+ this.field_4130_d = 0.0D;
+ this.field_4128_e = 0.0D;
+ if(var1 == null) {
+ if(this.field_327_g != null) {
+ this.func_107_c(this.field_327_g.posX, this.field_327_g.boundingBox.minY + (double)this.field_327_g.height, this.field_327_g.posZ, this.rotationYaw, this.rotationPitch);
+ this.field_327_g.field_328_f = null;
+ }
+
+ this.field_327_g = null;
+ } else if(this.field_327_g == var1) {
+ this.field_327_g.field_328_f = null;
+ this.field_327_g = null;
+ this.func_107_c(var1.posX, var1.boundingBox.minY + (double)var1.height, var1.posZ, this.rotationYaw, this.rotationPitch);
+ } else {
+ if(this.field_327_g != null) {
+ this.field_327_g.field_328_f = null;
+ }
+
+ if(var1.field_328_f != null) {
+ var1.field_328_f.field_327_g = null;
+ }
+
+ this.field_327_g = var1;
+ var1.field_328_f = this;
+ }
+ }
+
+ public Vec3D func_4039_B() {
+ return null;
+ }
+
+ public void func_4042_C() {
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityAnimals.java b/minecraft_server/src/net/minecraft/src/EntityAnimals.java
new file mode 100644
index 0000000..a052f76
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityAnimals.java
@@ -0,0 +1,30 @@
+package net.minecraft.src;
+
+public abstract class EntityAnimals extends EntityCreature implements IAnimals {
+ public EntityAnimals(World var1) {
+ super(var1);
+ }
+
+ protected float func_159_a(int var1, int var2, int var3) {
+ return this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID ? 10.0F : this.worldObj.getLightBrightness(var1, var2, var3) - 0.5F;
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ }
+
+ public boolean getCanSpawnHere() {
+ int var1 = MathHelper.floor_double(this.posX);
+ int var2 = MathHelper.floor_double(this.boundingBox.minY);
+ int var3 = MathHelper.floor_double(this.posZ);
+ return this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID && this.worldObj.getBlockLightValue(var1, var2, var3) > 8 && super.getCanSpawnHere();
+ }
+
+ public int func_146_b() {
+ return 120;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityArrow.java b/minecraft_server/src/net/minecraft/src/EntityArrow.java
new file mode 100644
index 0000000..bccc8ad
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityArrow.java
@@ -0,0 +1,225 @@
+package net.minecraft.src;
+
+import java.util.List;
+
+public class EntityArrow extends Entity {
+ private int field_9183_c = -1;
+ private int field_9182_d = -1;
+ private int field_9180_e = -1;
+ private int field_9179_f = 0;
+ private boolean field_9181_aj = false;
+ public int field_9184_a = 0;
+ public EntityLiving field_439_ah;
+ private int field_438_ai;
+ private int field_437_aj = 0;
+
+ public EntityArrow(World var1) {
+ super(var1);
+ this.setSize(0.5F, 0.5F);
+ }
+
+ public EntityArrow(World var1, EntityLiving var2) {
+ super(var1);
+ this.field_439_ah = var2;
+ this.setSize(0.5F, 0.5F);
+ this.func_107_c(var2.posX, var2.posY + (double)var2.func_104_p(), var2.posZ, var2.rotationYaw, var2.rotationPitch);
+ this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
+ this.posY -= (double)0.1F;
+ this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
+ this.setPosition(this.posX, this.posY, this.posZ);
+ this.yOffset = 0.0F;
+ this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));
+ this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));
+ this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI));
+ this.func_177_a(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F);
+ }
+
+ public void func_177_a(double var1, double var3, double var5, float var7, float var8) {
+ float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5);
+ var1 /= (double)var9;
+ var3 /= (double)var9;
+ var5 /= (double)var9;
+ var1 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8;
+ var3 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8;
+ var5 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8;
+ var1 *= (double)var7;
+ var3 *= (double)var7;
+ var5 *= (double)var7;
+ this.motionX = var1;
+ this.motionY = var3;
+ this.motionZ = var5;
+ float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5);
+ this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI));
+ this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var10) * 180.0D / (double)((float)Math.PI));
+ this.field_438_ai = 0;
+ }
+
+ public void onUpdate() {
+ super.onUpdate();
+ if(this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) {
+ float var1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI));
+ this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var1) * 180.0D / (double)((float)Math.PI));
+ }
+
+ if(this.field_9184_a > 0) {
+ --this.field_9184_a;
+ }
+
+ if(this.field_9181_aj) {
+ int var15 = this.worldObj.getBlockId(this.field_9183_c, this.field_9182_d, this.field_9180_e);
+ if(var15 == this.field_9179_f) {
+ ++this.field_438_ai;
+ if(this.field_438_ai == 1200) {
+ this.setEntityDead();
+ }
+
+ return;
+ }
+
+ this.field_9181_aj = false;
+ this.motionX *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.motionY *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.motionZ *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.field_438_ai = 0;
+ this.field_437_aj = 0;
+ } else {
+ ++this.field_437_aj;
+ }
+
+ Vec3D var16 = Vec3D.createVector(this.posX, this.posY, this.posZ);
+ Vec3D var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
+ MovingObjectPosition var3 = this.worldObj.func_486_a(var16, var2);
+ var16 = Vec3D.createVector(this.posX, this.posY, this.posZ);
+ var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
+ if(var3 != null) {
+ var2 = Vec3D.createVector(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord);
+ }
+
+ Entity var4 = null;
+ List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expands(1.0D, 1.0D, 1.0D));
+ double var6 = 0.0D;
+
+ float var10;
+ for(int var8 = 0; var8 < var5.size(); ++var8) {
+ Entity var9 = (Entity)var5.get(var8);
+ if(var9.func_129_c_() && (var9 != this.field_439_ah || this.field_437_aj >= 5)) {
+ var10 = 0.3F;
+ AxisAlignedBB var11 = var9.boundingBox.expands((double)var10, (double)var10, (double)var10);
+ MovingObjectPosition var12 = var11.func_706_a(var16, var2);
+ if(var12 != null) {
+ double var13 = var16.distanceTo(var12.hitVec);
+ if(var13 < var6 || var6 == 0.0D) {
+ var4 = var9;
+ var6 = var13;
+ }
+ }
+ }
+ }
+
+ if(var4 != null) {
+ var3 = new MovingObjectPosition(var4);
+ }
+
+ float var17;
+ if(var3 != null) {
+ if(var3.entityHit != null) {
+ if(var3.entityHit.attackEntity(this.field_439_ah, 4)) {
+ this.worldObj.playSoundAtEntity(this, "random.drr", 1.0F, 1.2F / (this.field_9064_W.nextFloat() * 0.2F + 0.9F));
+ this.setEntityDead();
+ } else {
+ this.motionX *= (double)-0.1F;
+ this.motionY *= (double)-0.1F;
+ this.motionZ *= (double)-0.1F;
+ this.rotationYaw += 180.0F;
+ this.prevRotationYaw += 180.0F;
+ this.field_437_aj = 0;
+ }
+ } else {
+ this.field_9183_c = var3.blockX;
+ this.field_9182_d = var3.blockY;
+ this.field_9180_e = var3.blockZ;
+ this.field_9179_f = this.worldObj.getBlockId(this.field_9183_c, this.field_9182_d, this.field_9180_e);
+ this.motionX = (double)((float)(var3.hitVec.xCoord - this.posX));
+ this.motionY = (double)((float)(var3.hitVec.yCoord - this.posY));
+ this.motionZ = (double)((float)(var3.hitVec.zCoord - this.posZ));
+ var17 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
+ this.posX -= this.motionX / (double)var17 * (double)0.05F;
+ this.posY -= this.motionY / (double)var17 * (double)0.05F;
+ this.posZ -= this.motionZ / (double)var17 * (double)0.05F;
+ this.worldObj.playSoundAtEntity(this, "random.drr", 1.0F, 1.2F / (this.field_9064_W.nextFloat() * 0.2F + 0.9F));
+ this.field_9181_aj = true;
+ this.field_9184_a = 7;
+ }
+ }
+
+ this.posX += this.motionX;
+ this.posY += this.motionY;
+ this.posZ += this.motionZ;
+ var17 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI));
+
+ for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var17) * 180.0D / (double)((float)Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) {
+ }
+
+ while(this.rotationPitch - this.prevRotationPitch >= 180.0F) {
+ this.prevRotationPitch += 360.0F;
+ }
+
+ while(this.rotationYaw - this.prevRotationYaw < -180.0F) {
+ this.prevRotationYaw -= 360.0F;
+ }
+
+ while(this.rotationYaw - this.prevRotationYaw >= 180.0F) {
+ this.prevRotationYaw += 360.0F;
+ }
+
+ this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
+ this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
+ float var18 = 0.99F;
+ var10 = 0.03F;
+ if(this.handleWaterMovement()) {
+ for(int var19 = 0; var19 < 4; ++var19) {
+ float var20 = 0.25F;
+ this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var20, this.posY - this.motionY * (double)var20, this.posZ - this.motionZ * (double)var20, this.motionX, this.motionY, this.motionZ);
+ }
+
+ var18 = 0.8F;
+ }
+
+ this.motionX *= (double)var18;
+ this.motionY *= (double)var18;
+ this.motionZ *= (double)var18;
+ this.motionY -= (double)var10;
+ this.setPosition(this.posX, this.posY, this.posZ);
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ var1.setShort("xTile", (short)this.field_9183_c);
+ var1.setShort("yTile", (short)this.field_9182_d);
+ var1.setShort("zTile", (short)this.field_9180_e);
+ var1.setByte("inTile", (byte)this.field_9179_f);
+ var1.setByte("shake", (byte)this.field_9184_a);
+ var1.setByte("inGround", (byte)(this.field_9181_aj ? 1 : 0));
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ this.field_9183_c = var1.getShort("xTile");
+ this.field_9182_d = var1.getShort("yTile");
+ this.field_9180_e = var1.getShort("zTile");
+ this.field_9179_f = var1.getByte("inTile") & 255;
+ this.field_9184_a = var1.getByte("shake") & 255;
+ this.field_9181_aj = var1.getByte("inGround") == 1;
+ }
+
+ public void onCollideWithPlayer(EntityPlayer var1) {
+ if(!this.worldObj.multiplayerWorld) {
+ if(this.field_9181_aj && this.field_439_ah == var1 && this.field_9184_a <= 0 && var1.inventory.addItemStackToInventory(new ItemStack(Item.arrow.swiftedIndex, 1))) {
+ this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.7F + 1.0F) * 2.0F);
+ var1.func_163_c(this, 1);
+ this.setEntityDead();
+ }
+
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityBoat.java b/minecraft_server/src/net/minecraft/src/EntityBoat.java
new file mode 100644
index 0000000..b320b35
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityBoat.java
@@ -0,0 +1,288 @@
+package net.minecraft.src;
+
+import java.util.List;
+
+public class EntityBoat extends Entity {
+ public int field_9178_a;
+ public int field_9177_b;
+ public int field_436_ad;
+ private int field_9176_d;
+ private double field_9174_e;
+ private double field_9172_f;
+ private double field_9175_aj;
+ private double field_9173_ak;
+ private double field_9171_al;
+
+ public EntityBoat(World var1) {
+ super(var1);
+ this.field_9178_a = 0;
+ this.field_9177_b = 0;
+ this.field_436_ad = 1;
+ this.field_329_e = true;
+ this.setSize(1.5F, 0.6F);
+ this.yOffset = this.height / 2.0F;
+ this.entityWalks = false;
+ }
+
+ public AxisAlignedBB func_89_d(Entity var1) {
+ return var1.boundingBox;
+ }
+
+ public AxisAlignedBB func_93_n() {
+ return this.boundingBox;
+ }
+
+ public boolean func_124_r() {
+ return true;
+ }
+
+ public EntityBoat(World var1, double var2, double var4, double var6) {
+ this(var1);
+ this.setPosition(var2, var4 + (double)this.yOffset, var6);
+ this.motionX = 0.0D;
+ this.motionY = 0.0D;
+ this.motionZ = 0.0D;
+ this.prevPosX = var2;
+ this.prevPosY = var4;
+ this.prevPosZ = var6;
+ }
+
+ public double func_130_h() {
+ return (double)this.height * 0.0D - (double)0.3F;
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ if(!this.worldObj.multiplayerWorld && !this.field_304_B) {
+ this.field_436_ad = -this.field_436_ad;
+ this.field_9177_b = 10;
+ this.field_9178_a += var2 * 10;
+ this.func_9060_u();
+ if(this.field_9178_a > 40) {
+ int var3;
+ for(var3 = 0; var3 < 3; ++var3) {
+ this.dropItemWithOffset(Block.planks.blockID, 1, 0.0F);
+ }
+
+ for(var3 = 0; var3 < 2; ++var3) {
+ this.dropItemWithOffset(Item.stick.swiftedIndex, 1, 0.0F);
+ }
+
+ this.setEntityDead();
+ }
+
+ return true;
+ } else {
+ return true;
+ }
+ }
+
+ public boolean func_129_c_() {
+ return !this.field_304_B;
+ }
+
+ public void onUpdate() {
+ super.onUpdate();
+ if(this.field_9177_b > 0) {
+ --this.field_9177_b;
+ }
+
+ if(this.field_9178_a > 0) {
+ --this.field_9178_a;
+ }
+
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ byte var1 = 5;
+ double var2 = 0.0D;
+
+ for(int var4 = 0; var4 < var1; ++var4) {
+ double var5 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var4 + 0) / (double)var1 - 0.125D;
+ double var7 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var4 + 1) / (double)var1 - 0.125D;
+ AxisAlignedBB var9 = AxisAlignedBB.getBoundingBoxFromPool(this.boundingBox.minX, var5, this.boundingBox.minZ, this.boundingBox.maxX, var7, this.boundingBox.maxZ);
+ if(this.worldObj.func_524_b(var9, Material.water)) {
+ var2 += 1.0D / (double)var1;
+ }
+ }
+
+ double var6;
+ double var8;
+ double var10;
+ double var23;
+ if(this.worldObj.multiplayerWorld) {
+ if(this.field_9176_d > 0) {
+ var23 = this.posX + (this.field_9174_e - this.posX) / (double)this.field_9176_d;
+ var6 = this.posY + (this.field_9172_f - this.posY) / (double)this.field_9176_d;
+ var8 = this.posZ + (this.field_9175_aj - this.posZ) / (double)this.field_9176_d;
+
+ for(var10 = this.field_9173_ak - (double)this.rotationYaw; var10 < -180.0D; var10 += 360.0D) {
+ }
+
+ while(var10 >= 180.0D) {
+ var10 -= 360.0D;
+ }
+
+ this.rotationYaw = (float)((double)this.rotationYaw + var10 / (double)this.field_9176_d);
+ this.rotationPitch = (float)((double)this.rotationPitch + (this.field_9171_al - (double)this.rotationPitch) / (double)this.field_9176_d);
+ --this.field_9176_d;
+ this.setPosition(var23, var6, var8);
+ this.setRotation(this.rotationYaw, this.rotationPitch);
+ } else {
+ var23 = this.posX + this.motionX;
+ var6 = this.posY + this.motionY;
+ var8 = this.posZ + this.motionZ;
+ this.setPosition(var23, var6, var8);
+ if(this.onGround) {
+ this.motionX *= 0.5D;
+ this.motionY *= 0.5D;
+ this.motionZ *= 0.5D;
+ }
+
+ this.motionX *= (double)0.99F;
+ this.motionY *= (double)0.95F;
+ this.motionZ *= (double)0.99F;
+ }
+
+ } else {
+ var23 = var2 * 2.0D - 1.0D;
+ this.motionY += (double)0.04F * var23;
+ if(this.field_328_f != null) {
+ this.motionX += this.field_328_f.motionX * 0.2D;
+ this.motionZ += this.field_328_f.motionZ * 0.2D;
+ }
+
+ var6 = 0.4D;
+ if(this.motionX < -var6) {
+ this.motionX = -var6;
+ }
+
+ if(this.motionX > var6) {
+ this.motionX = var6;
+ }
+
+ if(this.motionZ < -var6) {
+ this.motionZ = -var6;
+ }
+
+ if(this.motionZ > var6) {
+ this.motionZ = var6;
+ }
+
+ if(this.onGround) {
+ this.motionX *= 0.5D;
+ this.motionY *= 0.5D;
+ this.motionZ *= 0.5D;
+ }
+
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ var8 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ double var12;
+ if(var8 > 0.15D) {
+ var10 = Math.cos((double)this.rotationYaw * Math.PI / 180.0D);
+ var12 = Math.sin((double)this.rotationYaw * Math.PI / 180.0D);
+
+ for(int var14 = 0; (double)var14 < 1.0D + var8 * 60.0D; ++var14) {
+ double var15 = (double)(this.field_9064_W.nextFloat() * 2.0F - 1.0F);
+ double var17 = (double)(this.field_9064_W.nextInt(2) * 2 - 1) * 0.7D;
+ double var19;
+ double var21;
+ if(this.field_9064_W.nextBoolean()) {
+ var19 = this.posX - var10 * var15 * 0.8D + var12 * var17;
+ var21 = this.posZ - var12 * var15 * 0.8D - var10 * var17;
+ this.worldObj.spawnParticle("splash", var19, this.posY - 0.125D, var21, this.motionX, this.motionY, this.motionZ);
+ } else {
+ var19 = this.posX + var10 + var12 * var15 * 0.7D;
+ var21 = this.posZ + var12 - var10 * var15 * 0.7D;
+ this.worldObj.spawnParticle("splash", var19, this.posY - 0.125D, var21, this.motionX, this.motionY, this.motionZ);
+ }
+ }
+ }
+
+ if(this.field_9084_B && var8 > 0.15D) {
+ if(!this.worldObj.multiplayerWorld) {
+ this.setEntityDead();
+
+ int var24;
+ for(var24 = 0; var24 < 3; ++var24) {
+ this.dropItemWithOffset(Block.planks.blockID, 1, 0.0F);
+ }
+
+ for(var24 = 0; var24 < 2; ++var24) {
+ this.dropItemWithOffset(Item.stick.swiftedIndex, 1, 0.0F);
+ }
+ }
+ } else {
+ this.motionX *= (double)0.99F;
+ this.motionY *= (double)0.95F;
+ this.motionZ *= (double)0.99F;
+ }
+
+ this.rotationPitch = 0.0F;
+ var10 = (double)this.rotationYaw;
+ var12 = this.prevPosX - this.posX;
+ double var25 = this.prevPosZ - this.posZ;
+ if(var12 * var12 + var25 * var25 > 0.001D) {
+ var10 = (double)((float)(Math.atan2(var25, var12) * 180.0D / Math.PI));
+ }
+
+ double var16;
+ for(var16 = var10 - (double)this.rotationYaw; var16 >= 180.0D; var16 -= 360.0D) {
+ }
+
+ while(var16 < -180.0D) {
+ var16 += 360.0D;
+ }
+
+ if(var16 > 20.0D) {
+ var16 = 20.0D;
+ }
+
+ if(var16 < -20.0D) {
+ var16 = -20.0D;
+ }
+
+ this.rotationYaw = (float)((double)this.rotationYaw + var16);
+ this.setRotation(this.rotationYaw, this.rotationPitch);
+ List var18 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expands((double)0.2F, 0.0D, (double)0.2F));
+ if(var18 != null && var18.size() > 0) {
+ for(int var26 = 0; var26 < var18.size(); ++var26) {
+ Entity var20 = (Entity)var18.get(var26);
+ if(var20 != this.field_328_f && var20.func_124_r() && var20 instanceof EntityBoat) {
+ var20.applyEntityCollision(this);
+ }
+ }
+ }
+
+ if(this.field_328_f != null && this.field_328_f.field_304_B) {
+ this.field_328_f = null;
+ }
+
+ }
+ }
+
+ public void func_127_w() {
+ if(this.field_328_f != null) {
+ double var1 = Math.cos((double)this.rotationYaw * Math.PI / 180.0D) * 0.4D;
+ double var3 = Math.sin((double)this.rotationYaw * Math.PI / 180.0D) * 0.4D;
+ this.field_328_f.setPosition(this.posX + var1, this.posY + this.func_130_h() + this.field_328_f.func_117_x(), this.posZ + var3);
+ }
+ }
+
+ protected void writeEntityToNBT(NBTTagCompound var1) {
+ }
+
+ protected void readEntityFromNBT(NBTTagCompound var1) {
+ }
+
+ public boolean func_6092_a(EntityPlayer var1) {
+ if(this.field_328_f != null && this.field_328_f instanceof EntityPlayer && this.field_328_f != var1) {
+ return true;
+ } else {
+ if(!this.worldObj.multiplayerWorld) {
+ var1.func_6094_e(this);
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityChicken.java b/minecraft_server/src/net/minecraft/src/EntityChicken.java
new file mode 100644
index 0000000..0d13f4c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityChicken.java
@@ -0,0 +1,77 @@
+package net.minecraft.src;
+
+public class EntityChicken extends EntityAnimals {
+ public boolean field_392_a = false;
+ public float field_391_b = 0.0F;
+ public float field_395_ad = 0.0F;
+ public float field_394_ae;
+ public float field_393_af;
+ public float field_390_ai = 1.0F;
+ public int field_396_aj;
+
+ public EntityChicken(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/chicken.png";
+ this.setSize(0.3F, 0.4F);
+ this.field_9109_aQ = 4;
+ this.field_396_aj = this.field_9064_W.nextInt(6000) + 6000;
+ }
+
+ public void onLivingUpdate() {
+ super.onLivingUpdate();
+ this.field_393_af = this.field_391_b;
+ this.field_394_ae = this.field_395_ad;
+ this.field_395_ad = (float)((double)this.field_395_ad + (double)(this.onGround ? -1 : 4) * 0.3D);
+ if(this.field_395_ad < 0.0F) {
+ this.field_395_ad = 0.0F;
+ }
+
+ if(this.field_395_ad > 1.0F) {
+ this.field_395_ad = 1.0F;
+ }
+
+ if(!this.onGround && this.field_390_ai < 1.0F) {
+ this.field_390_ai = 1.0F;
+ }
+
+ this.field_390_ai = (float)((double)this.field_390_ai * 0.9D);
+ if(!this.onGround && this.motionY < 0.0D) {
+ this.motionY *= 0.6D;
+ }
+
+ this.field_391_b += this.field_390_ai * 2.0F;
+ if(!this.worldObj.multiplayerWorld && --this.field_396_aj <= 0) {
+ this.worldObj.playSoundAtEntity(this, "mob.chickenplop", 1.0F, (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F);
+ this.dropItem(Item.egg.swiftedIndex, 1);
+ this.field_396_aj = this.field_9064_W.nextInt(6000) + 6000;
+ }
+
+ }
+
+ protected void fall(float var1) {
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ }
+
+ protected String getLivingSound() {
+ return "mob.chicken";
+ }
+
+ protected String getHurtSound() {
+ return "mob.chickenhurt";
+ }
+
+ protected String getDeathSound() {
+ return "mob.chickenhurt";
+ }
+
+ protected int getDropItemId() {
+ return Item.feather.swiftedIndex;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityCow.java b/minecraft_server/src/net/minecraft/src/EntityCow.java
new file mode 100644
index 0000000..14b0d55
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityCow.java
@@ -0,0 +1,49 @@
+package net.minecraft.src;
+
+public class EntityCow extends EntityAnimals {
+ public boolean unusedBoolean = false;
+
+ public EntityCow(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/cow.png";
+ this.setSize(0.9F, 1.3F);
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ }
+
+ protected String getLivingSound() {
+ return "mob.cow";
+ }
+
+ protected String getHurtSound() {
+ return "mob.cowhurt";
+ }
+
+ protected String getDeathSound() {
+ return "mob.cowhurt";
+ }
+
+ protected float getSoundVolume() {
+ return 0.4F;
+ }
+
+ protected int getDropItemId() {
+ return Item.leather.swiftedIndex;
+ }
+
+ public boolean func_6092_a(EntityPlayer var1) {
+ ItemStack var2 = var1.inventory.getCurrentItem();
+ if(var2 != null && var2.itemID == Item.bucketEmpty.swiftedIndex) {
+ var1.inventory.setInventorySlotContents(var1.inventory.currentItem, new ItemStack(Item.bucketMilk));
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityCreature.java b/minecraft_server/src/net/minecraft/src/EntityCreature.java
new file mode 100644
index 0000000..dcb330a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityCreature.java
@@ -0,0 +1,151 @@
+package net.minecraft.src;
+
+public class EntityCreature extends EntityLiving {
+ private PathEntity field_388_a;
+ protected Entity field_389_ag;
+ protected boolean field_387_ah = false;
+
+ public EntityCreature(World var1) {
+ super(var1);
+ }
+
+ protected void func_152_d_() {
+ this.field_387_ah = false;
+ float var1 = 16.0F;
+ if(this.field_389_ag == null) {
+ this.field_389_ag = this.func_158_i();
+ if(this.field_389_ag != null) {
+ this.field_388_a = this.worldObj.func_482_a(this, this.field_389_ag, var1);
+ }
+ } else if(!this.field_389_ag.func_120_t()) {
+ this.field_389_ag = null;
+ } else {
+ float var2 = this.field_389_ag.getDistanceToEntity(this);
+ if(this.func_145_g(this.field_389_ag)) {
+ this.func_157_a(this.field_389_ag, var2);
+ }
+ }
+
+ if(this.field_387_ah || this.field_389_ag == null || this.field_388_a != null && this.field_9064_W.nextInt(20) != 0) {
+ if(this.field_388_a == null && this.field_9064_W.nextInt(80) == 0 || this.field_9064_W.nextInt(80) == 0) {
+ boolean var21 = false;
+ int var3 = -1;
+ int var4 = -1;
+ int var5 = -1;
+ float var6 = -99999.0F;
+
+ for(int var7 = 0; var7 < 10; ++var7) {
+ int var8 = MathHelper.floor_double(this.posX + (double)this.field_9064_W.nextInt(13) - 6.0D);
+ int var9 = MathHelper.floor_double(this.posY + (double)this.field_9064_W.nextInt(7) - 3.0D);
+ int var10 = MathHelper.floor_double(this.posZ + (double)this.field_9064_W.nextInt(13) - 6.0D);
+ float var11 = this.func_159_a(var8, var9, var10);
+ if(var11 > var6) {
+ var6 = var11;
+ var3 = var8;
+ var4 = var9;
+ var5 = var10;
+ var21 = true;
+ }
+ }
+
+ if(var21) {
+ this.field_388_a = this.worldObj.func_501_a(this, var3, var4, var5, 10.0F);
+ }
+ }
+ } else {
+ this.field_388_a = this.worldObj.func_482_a(this, this.field_389_ag, var1);
+ }
+
+ int var22 = MathHelper.floor_double(this.boundingBox.minY);
+ boolean var23 = this.handleWaterMovement();
+ boolean var24 = this.func_112_q();
+ this.rotationPitch = 0.0F;
+ if(this.field_388_a != null && this.field_9064_W.nextInt(100) != 0) {
+ Vec3D var25 = this.field_388_a.getPosition(this);
+ double var26 = (double)(this.width * 2.0F);
+
+ while(var25 != null && var25.squareDistanceTo(this.posX, var25.yCoord, this.posZ) < var26 * var26) {
+ this.field_388_a.incrementPathIndex();
+ if(this.field_388_a.isFinished()) {
+ var25 = null;
+ this.field_388_a = null;
+ } else {
+ var25 = this.field_388_a.getPosition(this);
+ }
+ }
+
+ this.field_9128_br = false;
+ if(var25 != null) {
+ double var27 = var25.xCoord - this.posX;
+ double var28 = var25.zCoord - this.posZ;
+ double var12 = var25.yCoord - (double)var22;
+ float var14 = (float)(Math.atan2(var28, var27) * 180.0D / (double)((float)Math.PI)) - 90.0F;
+ float var15 = var14 - this.rotationYaw;
+
+ for(this.field_9130_bp = this.field_9126_bt; var15 < -180.0F; var15 += 360.0F) {
+ }
+
+ while(var15 >= 180.0F) {
+ var15 -= 360.0F;
+ }
+
+ if(var15 > 30.0F) {
+ var15 = 30.0F;
+ }
+
+ if(var15 < -30.0F) {
+ var15 = -30.0F;
+ }
+
+ this.rotationYaw += var15;
+ if(this.field_387_ah && this.field_389_ag != null) {
+ double var16 = this.field_389_ag.posX - this.posX;
+ double var18 = this.field_389_ag.posZ - this.posZ;
+ float var20 = this.rotationYaw;
+ this.rotationYaw = (float)(Math.atan2(var18, var16) * 180.0D / (double)((float)Math.PI)) - 90.0F;
+ var15 = (var20 - this.rotationYaw + 90.0F) * (float)Math.PI / 180.0F;
+ this.field_9131_bo = -MathHelper.sin(var15) * this.field_9130_bp * 1.0F;
+ this.field_9130_bp = MathHelper.cos(var15) * this.field_9130_bp * 1.0F;
+ }
+
+ if(var12 > 0.0D) {
+ this.field_9128_br = true;
+ }
+ }
+
+ if(this.field_389_ag != null) {
+ this.func_147_b(this.field_389_ag, 30.0F);
+ }
+
+ if(this.field_9084_B) {
+ this.field_9128_br = true;
+ }
+
+ if(this.field_9064_W.nextFloat() < 0.8F && (var23 || var24)) {
+ this.field_9128_br = true;
+ }
+
+ } else {
+ super.func_152_d_();
+ this.field_388_a = null;
+ }
+ }
+
+ protected void func_157_a(Entity var1, float var2) {
+ }
+
+ protected float func_159_a(int var1, int var2, int var3) {
+ return 0.0F;
+ }
+
+ protected Entity func_158_i() {
+ return null;
+ }
+
+ public boolean getCanSpawnHere() {
+ int var1 = MathHelper.floor_double(this.posX);
+ int var2 = MathHelper.floor_double(this.boundingBox.minY);
+ int var3 = MathHelper.floor_double(this.posZ);
+ return super.getCanSpawnHere() && this.func_159_a(var1, var2, var3) >= 0.0F;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityCreeper.java b/minecraft_server/src/net/minecraft/src/EntityCreeper.java
new file mode 100644
index 0000000..a6cde13
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityCreeper.java
@@ -0,0 +1,106 @@
+package net.minecraft.src;
+
+public class EntityCreeper extends EntityMobs {
+ int field_406_a;
+ int field_405_b;
+ int field_408_ad = 30;
+ int field_407_ae = -1;
+ int field_12011_e = -1;
+
+ public EntityCreeper(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/creeper.png";
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ }
+
+ public void onUpdate() {
+ this.field_405_b = this.field_406_a;
+ if(this.worldObj.multiplayerWorld) {
+ this.field_406_a += this.field_407_ae;
+ if(this.field_406_a < 0) {
+ this.field_406_a = 0;
+ }
+
+ if(this.field_406_a >= this.field_408_ad) {
+ this.field_406_a = this.field_408_ad;
+ }
+ }
+
+ super.onUpdate();
+ }
+
+ protected void func_152_d_() {
+ if(this.field_12011_e != this.field_407_ae) {
+ this.field_12011_e = this.field_407_ae;
+ if(this.field_407_ae > 0) {
+ this.worldObj.func_9206_a(this, (byte)4);
+ } else {
+ this.worldObj.func_9206_a(this, (byte)5);
+ }
+ }
+
+ this.field_405_b = this.field_406_a;
+ if(this.worldObj.multiplayerWorld) {
+ super.func_152_d_();
+ } else {
+ if(this.field_406_a > 0 && this.field_407_ae < 0) {
+ --this.field_406_a;
+ }
+
+ if(this.field_407_ae >= 0) {
+ this.field_407_ae = 2;
+ }
+
+ super.func_152_d_();
+ if(this.field_407_ae != 1) {
+ this.field_407_ae = -1;
+ }
+ }
+
+ }
+
+ protected String getHurtSound() {
+ return "mob.creeper";
+ }
+
+ protected String getDeathSound() {
+ return "mob.creeperdeath";
+ }
+
+ public void onDeath(Entity var1) {
+ super.onDeath(var1);
+ if(var1 instanceof EntitySkeleton) {
+ this.dropItem(Item.record13.swiftedIndex + this.field_9064_W.nextInt(2), 1);
+ }
+
+ }
+
+ protected void func_157_a(Entity var1, float var2) {
+ if(this.field_407_ae <= 0 && var2 < 3.0F || this.field_407_ae > 0 && var2 < 7.0F) {
+ if(this.field_406_a == 0) {
+ this.worldObj.playSoundAtEntity(this, "random.fuse", 1.0F, 0.5F);
+ }
+
+ this.field_407_ae = 1;
+ ++this.field_406_a;
+ if(this.field_406_a == this.field_408_ad) {
+ this.worldObj.func_12013_a(this, this.posX, this.posY, this.posZ, 3.0F);
+ this.setEntityDead();
+ }
+
+ this.field_387_ah = true;
+ }
+
+ }
+
+ protected int getDropItemId() {
+ return Item.gunpowder.swiftedIndex;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityFallingSand.java b/minecraft_server/src/net/minecraft/src/EntityFallingSand.java
new file mode 100644
index 0000000..42fdb71
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityFallingSand.java
@@ -0,0 +1,74 @@
+package net.minecraft.src;
+
+public class EntityFallingSand extends Entity {
+ public int field_427_a;
+ public int field_426_b = 0;
+
+ public EntityFallingSand(World var1) {
+ super(var1);
+ }
+
+ public EntityFallingSand(World var1, float var2, float var3, float var4, int var5) {
+ super(var1);
+ this.field_427_a = var5;
+ this.field_329_e = true;
+ this.setSize(0.98F, 0.98F);
+ this.yOffset = this.height / 2.0F;
+ this.setPosition((double)var2, (double)var3, (double)var4);
+ this.motionX = 0.0D;
+ this.motionY = 0.0D;
+ this.motionZ = 0.0D;
+ this.entityWalks = false;
+ this.prevPosX = (double)var2;
+ this.prevPosY = (double)var3;
+ this.prevPosZ = (double)var4;
+ }
+
+ public boolean func_129_c_() {
+ return !this.field_304_B;
+ }
+
+ public void onUpdate() {
+ if(this.field_427_a == 0) {
+ this.setEntityDead();
+ } else {
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ ++this.field_426_b;
+ this.motionY -= (double)0.04F;
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ this.motionX *= (double)0.98F;
+ this.motionY *= (double)0.98F;
+ this.motionZ *= (double)0.98F;
+ int var1 = MathHelper.floor_double(this.posX);
+ int var2 = MathHelper.floor_double(this.posY);
+ int var3 = MathHelper.floor_double(this.posZ);
+ if(this.worldObj.getBlockId(var1, var2, var3) == this.field_427_a) {
+ this.worldObj.setBlockWithNotify(var1, var2, var3, 0);
+ }
+
+ if(this.onGround) {
+ this.motionX *= (double)0.7F;
+ this.motionZ *= (double)0.7F;
+ this.motionY *= -0.5D;
+ this.setEntityDead();
+ if(!this.worldObj.func_516_a(this.field_427_a, var1, var2, var3, true) || !this.worldObj.setBlockWithNotify(var1, var2, var3, this.field_427_a)) {
+ this.dropItem(this.field_427_a, 1);
+ }
+ } else if(this.field_426_b > 100) {
+ this.dropItem(this.field_427_a, 1);
+ this.setEntityDead();
+ }
+
+ }
+ }
+
+ protected void writeEntityToNBT(NBTTagCompound var1) {
+ var1.setByte("Tile", (byte)this.field_427_a);
+ }
+
+ protected void readEntityFromNBT(NBTTagCompound var1) {
+ this.field_427_a = var1.getByte("Tile") & 255;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityFireball.java b/minecraft_server/src/net/minecraft/src/EntityFireball.java
new file mode 100644
index 0000000..8908a76
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityFireball.java
@@ -0,0 +1,193 @@
+package net.minecraft.src;
+
+import java.util.List;
+
+public class EntityFireball extends Entity {
+ private int field_9195_e = -1;
+ private int field_9193_f = -1;
+ private int field_9197_aj = -1;
+ private int field_9194_ak = 0;
+ private boolean field_9192_al = false;
+ public int field_9200_a = 0;
+ private EntityLiving field_9191_am;
+ private int field_9190_an;
+ private int field_9189_ao = 0;
+ public double field_9199_b;
+ public double field_9198_c;
+ public double field_9196_d;
+
+ public EntityFireball(World var1) {
+ super(var1);
+ this.setSize(1.0F, 1.0F);
+ }
+
+ public EntityFireball(World var1, EntityLiving var2, double var3, double var5, double var7) {
+ super(var1);
+ this.field_9191_am = var2;
+ this.setSize(1.0F, 1.0F);
+ this.func_107_c(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch);
+ this.setPosition(this.posX, this.posY, this.posZ);
+ this.yOffset = 0.0F;
+ this.motionX = this.motionY = this.motionZ = 0.0D;
+ var3 += this.field_9064_W.nextGaussian() * 0.4D;
+ var5 += this.field_9064_W.nextGaussian() * 0.4D;
+ var7 += this.field_9064_W.nextGaussian() * 0.4D;
+ double var9 = (double)MathHelper.sqrt_double(var3 * var3 + var5 * var5 + var7 * var7);
+ this.field_9199_b = var3 / var9 * 0.1D;
+ this.field_9198_c = var5 / var9 * 0.1D;
+ this.field_9196_d = var7 / var9 * 0.1D;
+ }
+
+ public void onUpdate() {
+ super.onUpdate();
+ this.field_9061_Z = 10;
+ if(this.field_9200_a > 0) {
+ --this.field_9200_a;
+ }
+
+ if(this.field_9192_al) {
+ int var1 = this.worldObj.getBlockId(this.field_9195_e, this.field_9193_f, this.field_9197_aj);
+ if(var1 == this.field_9194_ak) {
+ ++this.field_9190_an;
+ if(this.field_9190_an == 1200) {
+ this.setEntityDead();
+ }
+
+ return;
+ }
+
+ this.field_9192_al = false;
+ this.motionX *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.motionY *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.motionZ *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.field_9190_an = 0;
+ this.field_9189_ao = 0;
+ } else {
+ ++this.field_9189_ao;
+ }
+
+ Vec3D var15 = Vec3D.createVector(this.posX, this.posY, this.posZ);
+ Vec3D var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
+ MovingObjectPosition var3 = this.worldObj.func_486_a(var15, var2);
+ var15 = Vec3D.createVector(this.posX, this.posY, this.posZ);
+ var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
+ if(var3 != null) {
+ var2 = Vec3D.createVector(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord);
+ }
+
+ Entity var4 = null;
+ List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expands(1.0D, 1.0D, 1.0D));
+ double var6 = 0.0D;
+
+ for(int var8 = 0; var8 < var5.size(); ++var8) {
+ Entity var9 = (Entity)var5.get(var8);
+ if(var9.func_129_c_() && (var9 != this.field_9191_am || this.field_9189_ao >= 25)) {
+ float var10 = 0.3F;
+ AxisAlignedBB var11 = var9.boundingBox.expands((double)var10, (double)var10, (double)var10);
+ MovingObjectPosition var12 = var11.func_706_a(var15, var2);
+ if(var12 != null) {
+ double var13 = var15.distanceTo(var12.hitVec);
+ if(var13 < var6 || var6 == 0.0D) {
+ var4 = var9;
+ var6 = var13;
+ }
+ }
+ }
+ }
+
+ if(var4 != null) {
+ var3 = new MovingObjectPosition(var4);
+ }
+
+ if(var3 != null) {
+ if(var3.entityHit != null && var3.entityHit.attackEntity(this.field_9191_am, 0)) {
+ }
+
+ this.worldObj.func_12015_a((Entity)null, this.posX, this.posY, this.posZ, 1.0F, true);
+ this.setEntityDead();
+ }
+
+ this.posX += this.motionX;
+ this.posY += this.motionY;
+ this.posZ += this.motionZ;
+ float var16 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI));
+
+ for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var16) * 180.0D / (double)((float)Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) {
+ }
+
+ while(this.rotationPitch - this.prevRotationPitch >= 180.0F) {
+ this.prevRotationPitch += 360.0F;
+ }
+
+ while(this.rotationYaw - this.prevRotationYaw < -180.0F) {
+ this.prevRotationYaw -= 360.0F;
+ }
+
+ while(this.rotationYaw - this.prevRotationYaw >= 180.0F) {
+ this.prevRotationYaw += 360.0F;
+ }
+
+ this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
+ this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
+ float var17 = 0.95F;
+ if(this.handleWaterMovement()) {
+ for(int var18 = 0; var18 < 4; ++var18) {
+ float var19 = 0.25F;
+ this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var19, this.posY - this.motionY * (double)var19, this.posZ - this.motionZ * (double)var19, this.motionX, this.motionY, this.motionZ);
+ }
+
+ var17 = 0.8F;
+ }
+
+ this.motionX += this.field_9199_b;
+ this.motionY += this.field_9198_c;
+ this.motionZ += this.field_9196_d;
+ this.motionX *= (double)var17;
+ this.motionY *= (double)var17;
+ this.motionZ *= (double)var17;
+ this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D);
+ this.setPosition(this.posX, this.posY, this.posZ);
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ var1.setShort("xTile", (short)this.field_9195_e);
+ var1.setShort("yTile", (short)this.field_9193_f);
+ var1.setShort("zTile", (short)this.field_9197_aj);
+ var1.setByte("inTile", (byte)this.field_9194_ak);
+ var1.setByte("shake", (byte)this.field_9200_a);
+ var1.setByte("inGround", (byte)(this.field_9192_al ? 1 : 0));
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ this.field_9195_e = var1.getShort("xTile");
+ this.field_9193_f = var1.getShort("yTile");
+ this.field_9197_aj = var1.getShort("zTile");
+ this.field_9194_ak = var1.getByte("inTile") & 255;
+ this.field_9200_a = var1.getByte("shake") & 255;
+ this.field_9192_al = var1.getByte("inGround") == 1;
+ }
+
+ public boolean func_129_c_() {
+ return true;
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ this.func_9060_u();
+ if(var1 != null) {
+ Vec3D var3 = var1.func_4039_B();
+ if(var3 != null) {
+ this.motionX = var3.xCoord;
+ this.motionY = var3.yCoord;
+ this.motionZ = var3.zCoord;
+ this.field_9199_b = this.motionX * 0.1D;
+ this.field_9198_c = this.motionY * 0.1D;
+ this.field_9196_d = this.motionZ * 0.1D;
+ }
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityFish.java b/minecraft_server/src/net/minecraft/src/EntityFish.java
new file mode 100644
index 0000000..8c4ad4d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityFish.java
@@ -0,0 +1,313 @@
+package net.minecraft.src;
+
+import java.util.List;
+
+public class EntityFish extends Entity {
+ private int d = -1;
+ private int e = -1;
+ private int field_4126_f = -1;
+ private int field_4132_ai = 0;
+ private boolean field_4129_aj = false;
+ public int field_4134_a = 0;
+ public EntityPlayer b;
+ private int field_6150_ak;
+ private int field_4125_al = 0;
+ private int field_4124_am = 0;
+ public Entity c = null;
+ private int field_6149_an;
+ private double field_6148_ao;
+ private double field_6147_ap;
+ private double field_6146_aq;
+ private double field_6145_ar;
+ private double field_6144_as;
+
+ public EntityFish(World var1) {
+ super(var1);
+ this.setSize(0.25F, 0.25F);
+ }
+
+ public EntityFish(World var1, EntityPlayer var2) {
+ super(var1);
+ this.b = var2;
+ this.b.field_6124_at = this;
+ this.setSize(0.25F, 0.25F);
+ this.func_107_c(var2.posX, var2.posY + 1.62D - (double)var2.yOffset, var2.posZ, var2.rotationYaw, var2.rotationPitch);
+ this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
+ this.posY -= (double)0.1F;
+ this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
+ this.setPosition(this.posX, this.posY, this.posZ);
+ this.yOffset = 0.0F;
+ float var3 = 0.4F;
+ this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3);
+ this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3);
+ this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var3);
+ this.func_6142_a(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F);
+ }
+
+ public void func_6142_a(double var1, double var3, double var5, float var7, float var8) {
+ float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5);
+ var1 /= (double)var9;
+ var3 /= (double)var9;
+ var5 /= (double)var9;
+ var1 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8;
+ var3 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8;
+ var5 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8;
+ var1 *= (double)var7;
+ var3 *= (double)var7;
+ var5 *= (double)var7;
+ this.motionX = var1;
+ this.motionY = var3;
+ this.motionZ = var5;
+ float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5);
+ this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI));
+ this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var10) * 180.0D / (double)((float)Math.PI));
+ this.field_6150_ak = 0;
+ }
+
+ public void onUpdate() {
+ super.onUpdate();
+ if(this.field_6149_an > 0) {
+ double var21 = this.posX + (this.field_6148_ao - this.posX) / (double)this.field_6149_an;
+ double var22 = this.posY + (this.field_6147_ap - this.posY) / (double)this.field_6149_an;
+ double var23 = this.posZ + (this.field_6146_aq - this.posZ) / (double)this.field_6149_an;
+
+ double var7;
+ for(var7 = this.field_6145_ar - (double)this.rotationYaw; var7 < -180.0D; var7 += 360.0D) {
+ }
+
+ while(var7 >= 180.0D) {
+ var7 -= 360.0D;
+ }
+
+ this.rotationYaw = (float)((double)this.rotationYaw + var7 / (double)this.field_6149_an);
+ this.rotationPitch = (float)((double)this.rotationPitch + (this.field_6144_as - (double)this.rotationPitch) / (double)this.field_6149_an);
+ --this.field_6149_an;
+ this.setPosition(var21, var22, var23);
+ this.setRotation(this.rotationYaw, this.rotationPitch);
+ } else {
+ if(!this.worldObj.multiplayerWorld) {
+ ItemStack var1 = this.b.func_172_B();
+ if(this.b.field_304_B || !this.b.func_120_t() || var1 == null || var1.getItem() != Item.fishingRod || this.getDistanceSqToEntity(this.b) > 1024.0D) {
+ this.setEntityDead();
+ this.b.field_6124_at = null;
+ return;
+ }
+
+ if(this.c != null) {
+ if(!this.c.field_304_B) {
+ this.posX = this.c.posX;
+ this.posY = this.c.boundingBox.minY + (double)this.c.height * 0.8D;
+ this.posZ = this.c.posZ;
+ return;
+ }
+
+ this.c = null;
+ }
+ }
+
+ if(this.field_4134_a > 0) {
+ --this.field_4134_a;
+ }
+
+ if(this.field_4129_aj) {
+ int var19 = this.worldObj.getBlockId(this.d, this.e, this.field_4126_f);
+ if(var19 == this.field_4132_ai) {
+ ++this.field_6150_ak;
+ if(this.field_6150_ak == 1200) {
+ this.setEntityDead();
+ }
+
+ return;
+ }
+
+ this.field_4129_aj = false;
+ this.motionX *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.motionY *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.motionZ *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.field_6150_ak = 0;
+ this.field_4125_al = 0;
+ } else {
+ ++this.field_4125_al;
+ }
+
+ Vec3D var20 = Vec3D.createVector(this.posX, this.posY, this.posZ);
+ Vec3D var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
+ MovingObjectPosition var3 = this.worldObj.func_486_a(var20, var2);
+ var20 = Vec3D.createVector(this.posX, this.posY, this.posZ);
+ var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
+ if(var3 != null) {
+ var2 = Vec3D.createVector(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord);
+ }
+
+ Entity var4 = null;
+ List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expands(1.0D, 1.0D, 1.0D));
+ double var6 = 0.0D;
+
+ double var13;
+ for(int var8 = 0; var8 < var5.size(); ++var8) {
+ Entity var9 = (Entity)var5.get(var8);
+ if(var9.func_129_c_() && (var9 != this.b || this.field_4125_al >= 5)) {
+ float var10 = 0.3F;
+ AxisAlignedBB var11 = var9.boundingBox.expands((double)var10, (double)var10, (double)var10);
+ MovingObjectPosition var12 = var11.func_706_a(var20, var2);
+ if(var12 != null) {
+ var13 = var20.distanceTo(var12.hitVec);
+ if(var13 < var6 || var6 == 0.0D) {
+ var4 = var9;
+ var6 = var13;
+ }
+ }
+ }
+ }
+
+ if(var4 != null) {
+ var3 = new MovingObjectPosition(var4);
+ }
+
+ if(var3 != null) {
+ if(var3.entityHit != null) {
+ if(var3.entityHit.attackEntity(this.b, 0)) {
+ this.c = var3.entityHit;
+ }
+ } else {
+ this.field_4129_aj = true;
+ }
+ }
+
+ if(!this.field_4129_aj) {
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ float var24 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI));
+
+ for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var24) * 180.0D / (double)((float)Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) {
+ }
+
+ while(this.rotationPitch - this.prevRotationPitch >= 180.0F) {
+ this.prevRotationPitch += 360.0F;
+ }
+
+ while(this.rotationYaw - this.prevRotationYaw < -180.0F) {
+ this.prevRotationYaw -= 360.0F;
+ }
+
+ while(this.rotationYaw - this.prevRotationYaw >= 180.0F) {
+ this.prevRotationYaw += 360.0F;
+ }
+
+ this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
+ this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
+ float var25 = 0.92F;
+ if(this.onGround || this.field_9084_B) {
+ var25 = 0.5F;
+ }
+
+ byte var26 = 5;
+ double var27 = 0.0D;
+
+ for(int var28 = 0; var28 < var26; ++var28) {
+ double var14 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var28 + 0) / (double)var26 - 0.125D + 0.125D;
+ double var16 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var28 + 1) / (double)var26 - 0.125D + 0.125D;
+ AxisAlignedBB var18 = AxisAlignedBB.getBoundingBoxFromPool(this.boundingBox.minX, var14, this.boundingBox.minZ, this.boundingBox.maxX, var16, this.boundingBox.maxZ);
+ if(this.worldObj.func_524_b(var18, Material.water)) {
+ var27 += 1.0D / (double)var26;
+ }
+ }
+
+ if(var27 > 0.0D) {
+ if(this.field_4124_am > 0) {
+ --this.field_4124_am;
+ } else if(this.field_9064_W.nextInt(500) == 0) {
+ this.field_4124_am = this.field_9064_W.nextInt(30) + 10;
+ this.motionY -= (double)0.2F;
+ this.worldObj.playSoundAtEntity(this, "random.splash", 0.25F, 1.0F + (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.4F);
+ float var29 = (float)MathHelper.floor_double(this.boundingBox.minY);
+
+ float var15;
+ int var30;
+ float var31;
+ for(var30 = 0; (float)var30 < 1.0F + this.width * 20.0F; ++var30) {
+ var15 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width;
+ var31 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width;
+ this.worldObj.spawnParticle("bubble", this.posX + (double)var15, (double)(var29 + 1.0F), this.posZ + (double)var31, this.motionX, this.motionY - (double)(this.field_9064_W.nextFloat() * 0.2F), this.motionZ);
+ }
+
+ for(var30 = 0; (float)var30 < 1.0F + this.width * 20.0F; ++var30) {
+ var15 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width;
+ var31 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width;
+ this.worldObj.spawnParticle("splash", this.posX + (double)var15, (double)(var29 + 1.0F), this.posZ + (double)var31, this.motionX, this.motionY, this.motionZ);
+ }
+ }
+ }
+
+ if(this.field_4124_am > 0) {
+ this.motionY -= (double)(this.field_9064_W.nextFloat() * this.field_9064_W.nextFloat() * this.field_9064_W.nextFloat()) * 0.2D;
+ }
+
+ var13 = var27 * 2.0D - 1.0D;
+ this.motionY += (double)0.04F * var13;
+ if(var27 > 0.0D) {
+ var25 = (float)((double)var25 * 0.9D);
+ this.motionY *= 0.8D;
+ }
+
+ this.motionX *= (double)var25;
+ this.motionY *= (double)var25;
+ this.motionZ *= (double)var25;
+ this.setPosition(this.posX, this.posY, this.posZ);
+ }
+ }
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ var1.setShort("xTile", (short)this.d);
+ var1.setShort("yTile", (short)this.e);
+ var1.setShort("zTile", (short)this.field_4126_f);
+ var1.setByte("inTile", (byte)this.field_4132_ai);
+ var1.setByte("shake", (byte)this.field_4134_a);
+ var1.setByte("inGround", (byte)(this.field_4129_aj ? 1 : 0));
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ this.d = var1.getShort("xTile");
+ this.e = var1.getShort("yTile");
+ this.field_4126_f = var1.getShort("zTile");
+ this.field_4132_ai = var1.getByte("inTile") & 255;
+ this.field_4134_a = var1.getByte("shake") & 255;
+ this.field_4129_aj = var1.getByte("inGround") == 1;
+ }
+
+ public int func_6143_c() {
+ byte var1 = 0;
+ if(this.c != null) {
+ double var2 = this.b.posX - this.posX;
+ double var4 = this.b.posY - this.posY;
+ double var6 = this.b.posZ - this.posZ;
+ double var8 = (double)MathHelper.sqrt_double(var2 * var2 + var4 * var4 + var6 * var6);
+ double var10 = 0.1D;
+ this.c.motionX += var2 * var10;
+ this.c.motionY += var4 * var10 + (double)MathHelper.sqrt_double(var8) * 0.08D;
+ this.c.motionZ += var6 * var10;
+ var1 = 3;
+ } else if(this.field_4124_am > 0) {
+ EntityItem var13 = new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.fishRaw.swiftedIndex));
+ double var3 = this.b.posX - this.posX;
+ double var5 = this.b.posY - this.posY;
+ double var7 = this.b.posZ - this.posZ;
+ double var9 = (double)MathHelper.sqrt_double(var3 * var3 + var5 * var5 + var7 * var7);
+ double var11 = 0.1D;
+ var13.motionX = var3 * var11;
+ var13.motionY = var5 * var11 + (double)MathHelper.sqrt_double(var9) * 0.08D;
+ var13.motionZ = var7 * var11;
+ this.worldObj.entityJoinedWorld(var13);
+ var1 = 1;
+ }
+
+ if(this.field_4129_aj) {
+ var1 = 2;
+ }
+
+ this.setEntityDead();
+ this.b.field_6124_at = null;
+ return var1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityFlying.java b/minecraft_server/src/net/minecraft/src/EntityFlying.java
new file mode 100644
index 0000000..0f55efb
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityFlying.java
@@ -0,0 +1,66 @@
+package net.minecraft.src;
+
+public class EntityFlying extends EntityLiving {
+ public EntityFlying(World var1) {
+ super(var1);
+ }
+
+ protected void fall(float var1) {
+ }
+
+ public void func_148_c(float var1, float var2) {
+ if(this.handleWaterMovement()) {
+ this.func_90_a(var1, var2, 0.02F);
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ this.motionX *= (double)0.8F;
+ this.motionY *= (double)0.8F;
+ this.motionZ *= (double)0.8F;
+ } else if(this.func_112_q()) {
+ this.func_90_a(var1, var2, 0.02F);
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ this.motionX *= 0.5D;
+ this.motionY *= 0.5D;
+ this.motionZ *= 0.5D;
+ } else {
+ float var3 = 0.91F;
+ if(this.onGround) {
+ var3 = 546.0F * 0.1F * 0.1F * 0.1F;
+ int var4 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ));
+ if(var4 > 0) {
+ var3 = Block.blocksList[var4].slipperiness * 0.91F;
+ }
+ }
+
+ float var8 = 0.16277136F / (var3 * var3 * var3);
+ this.func_90_a(var1, var2, this.onGround ? 0.1F * var8 : 0.02F);
+ var3 = 0.91F;
+ if(this.onGround) {
+ var3 = 546.0F * 0.1F * 0.1F * 0.1F;
+ int var5 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ));
+ if(var5 > 0) {
+ var3 = Block.blocksList[var5].slipperiness * 0.91F;
+ }
+ }
+
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ this.motionX *= (double)var3;
+ this.motionY *= (double)var3;
+ this.motionZ *= (double)var3;
+ }
+
+ this.field_9142_bc = this.field_9141_bd;
+ double var10 = this.posX - this.prevPosX;
+ double var9 = this.posZ - this.prevPosZ;
+ float var7 = MathHelper.sqrt_double(var10 * var10 + var9 * var9) * 4.0F;
+ if(var7 > 1.0F) {
+ var7 = 1.0F;
+ }
+
+ this.field_9141_bd += (var7 - this.field_9141_bd) * 0.4F;
+ this.field_386_ba += this.field_9141_bd;
+ }
+
+ public boolean func_144_E() {
+ return false;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityGhast.java b/minecraft_server/src/net/minecraft/src/EntityGhast.java
new file mode 100644
index 0000000..2c3598e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityGhast.java
@@ -0,0 +1,139 @@
+package net.minecraft.src;
+
+public class EntityGhast extends EntityFlying implements IMobs {
+ public int field_4099_a = 0;
+ public double field_4098_b;
+ public double field_4104_c;
+ public double field_4102_d;
+ private Entity field_4097_ai = null;
+ private int field_4103_aj = 0;
+ public int field_4101_e = 0;
+ public int field_4100_f = 0;
+
+ public EntityGhast(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/ghast.png";
+ this.setSize(4.0F, 4.0F);
+ this.field_9079_ae = true;
+ }
+
+ protected void func_152_d_() {
+ if(this.worldObj.monstersEnabled == 0) {
+ this.setEntityDead();
+ }
+
+ this.field_4101_e = this.field_4100_f;
+ double var1 = this.field_4098_b - this.posX;
+ double var3 = this.field_4104_c - this.posY;
+ double var5 = this.field_4102_d - this.posZ;
+ double var7 = (double)MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5);
+ if(var7 < 1.0D || var7 > 60.0D) {
+ this.field_4098_b = this.posX + (double)((this.field_9064_W.nextFloat() * 2.0F - 1.0F) * 16.0F);
+ this.field_4104_c = this.posY + (double)((this.field_9064_W.nextFloat() * 2.0F - 1.0F) * 16.0F);
+ this.field_4102_d = this.posZ + (double)((this.field_9064_W.nextFloat() * 2.0F - 1.0F) * 16.0F);
+ }
+
+ if(this.field_4099_a-- <= 0) {
+ this.field_4099_a += this.field_9064_W.nextInt(5) + 2;
+ if(this.func_4046_a(this.field_4098_b, this.field_4104_c, this.field_4102_d, var7)) {
+ this.motionX += var1 / var7 * 0.1D;
+ this.motionY += var3 / var7 * 0.1D;
+ this.motionZ += var5 / var7 * 0.1D;
+ } else {
+ this.field_4098_b = this.posX;
+ this.field_4104_c = this.posY;
+ this.field_4102_d = this.posZ;
+ }
+ }
+
+ if(this.field_4097_ai != null && this.field_4097_ai.field_304_B) {
+ this.field_4097_ai = null;
+ }
+
+ if(this.field_4097_ai == null || this.field_4103_aj-- <= 0) {
+ this.field_4097_ai = this.worldObj.getClosestPlayerToEntity(this, 100.0D);
+ if(this.field_4097_ai != null) {
+ this.field_4103_aj = 20;
+ }
+ }
+
+ double var9 = 64.0D;
+ if(this.field_4097_ai != null && this.field_4097_ai.getDistanceSqToEntity(this) < var9 * var9) {
+ double var11 = this.field_4097_ai.posX - this.posX;
+ double var13 = this.field_4097_ai.boundingBox.minY + (double)(this.field_4097_ai.height / 2.0F) - (this.posY + (double)(this.height / 2.0F));
+ double var15 = this.field_4097_ai.posZ - this.posZ;
+ this.field_9095_az = this.rotationYaw = -((float)Math.atan2(var11, var15)) * 180.0F / (float)Math.PI;
+ if(this.func_145_g(this.field_4097_ai)) {
+ if(this.field_4100_f == 10) {
+ this.worldObj.playSoundAtEntity(this, "mob.ghast.charge", this.getSoundVolume(), (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F);
+ }
+
+ ++this.field_4100_f;
+ if(this.field_4100_f == 20) {
+ this.worldObj.playSoundAtEntity(this, "mob.ghast.fireball", this.getSoundVolume(), (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F);
+ EntityFireball var17 = new EntityFireball(this.worldObj, this, var11, var13, var15);
+ double var18 = 4.0D;
+ Vec3D var20 = this.func_141_d(1.0F);
+ var17.posX = this.posX + var20.xCoord * var18;
+ var17.posY = this.posY + (double)(this.height / 2.0F) + 0.5D;
+ var17.posZ = this.posZ + var20.zCoord * var18;
+ this.worldObj.entityJoinedWorld(var17);
+ this.field_4100_f = -40;
+ }
+ } else if(this.field_4100_f > 0) {
+ --this.field_4100_f;
+ }
+ } else {
+ this.field_9095_az = this.rotationYaw = -((float)Math.atan2(this.motionX, this.motionZ)) * 180.0F / (float)Math.PI;
+ if(this.field_4100_f > 0) {
+ --this.field_4100_f;
+ }
+ }
+
+ this.field_9119_aG = this.field_4100_f > 10 ? "/mob/ghast_fire.png" : "/mob/ghast.png";
+ }
+
+ private boolean func_4046_a(double var1, double var3, double var5, double var7) {
+ double var9 = (this.field_4098_b - this.posX) / var7;
+ double var11 = (this.field_4104_c - this.posY) / var7;
+ double var13 = (this.field_4102_d - this.posZ) / var7;
+ AxisAlignedBB var15 = this.boundingBox.copy();
+
+ for(int var16 = 1; (double)var16 < var7; ++var16) {
+ var15.offset(var9, var11, var13);
+ if(this.worldObj.getCollidingBoundingBoxes(this, var15).size() > 0) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ protected String getLivingSound() {
+ return "mob.ghast.moan";
+ }
+
+ protected String getHurtSound() {
+ return "mob.ghast.scream";
+ }
+
+ protected String getDeathSound() {
+ return "mob.ghast.death";
+ }
+
+ protected int getDropItemId() {
+ return Item.gunpowder.swiftedIndex;
+ }
+
+ protected float getSoundVolume() {
+ return 10.0F;
+ }
+
+ public boolean getCanSpawnHere() {
+ return this.field_9064_W.nextInt(20) == 0 && super.getCanSpawnHere() && this.worldObj.monstersEnabled > 0;
+ }
+
+ public int func_4045_i() {
+ return 1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityItem.java b/minecraft_server/src/net/minecraft/src/EntityItem.java
new file mode 100644
index 0000000..4d0d45f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityItem.java
@@ -0,0 +1,191 @@
+package net.minecraft.src;
+
+public class EntityItem extends Entity {
+ public ItemStack item;
+ private int field_9170_e;
+ public int field_9169_b = 0;
+ public int field_433_ad;
+ private int health = 5;
+ public float field_432_ae = (float)(Math.random() * Math.PI * 2.0D);
+
+ public EntityItem(World var1, double var2, double var4, double var6, ItemStack var8) {
+ super(var1);
+ this.setSize(0.25F, 0.25F);
+ this.yOffset = this.height / 2.0F;
+ this.setPosition(var2, var4, var6);
+ this.item = var8;
+ this.rotationYaw = (float)(Math.random() * 360.0D);
+ this.motionX = (double)((float)(Math.random() * (double)0.2F - (double)0.1F));
+ this.motionY = (double)0.2F;
+ this.motionZ = (double)((float)(Math.random() * (double)0.2F - (double)0.1F));
+ this.entityWalks = false;
+ }
+
+ public EntityItem(World var1) {
+ super(var1);
+ this.setSize(0.25F, 0.25F);
+ this.yOffset = this.height / 2.0F;
+ }
+
+ public void onUpdate() {
+ super.onUpdate();
+ if(this.field_433_ad > 0) {
+ --this.field_433_ad;
+ }
+
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ this.motionY -= (double)0.04F;
+ if(this.worldObj.getBlockMaterial(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) == Material.lava) {
+ this.motionY = (double)0.2F;
+ this.motionX = (double)((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F);
+ this.motionZ = (double)((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F);
+ this.worldObj.playSoundAtEntity(this, "random.fizz", 0.4F, 2.0F + this.field_9064_W.nextFloat() * 0.4F);
+ }
+
+ this.func_176_g(this.posX, this.posY, this.posZ);
+ this.handleWaterMovement();
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ float var1 = 0.98F;
+ if(this.onGround) {
+ var1 = 0.1F * 0.1F * 58.8F;
+ int var2 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ));
+ if(var2 > 0) {
+ var1 = Block.blocksList[var2].slipperiness * 0.98F;
+ }
+ }
+
+ this.motionX *= (double)var1;
+ this.motionY *= (double)0.98F;
+ this.motionZ *= (double)var1;
+ if(this.onGround) {
+ this.motionY *= -0.5D;
+ }
+
+ ++this.field_9170_e;
+ ++this.field_9169_b;
+ if(this.field_9169_b >= 6000) {
+ this.setEntityDead();
+ }
+
+ }
+
+ public boolean handleWaterMovement() {
+ return this.worldObj.func_490_a(this.boundingBox, Material.water, this);
+ }
+
+ private boolean func_176_g(double var1, double var3, double var5) {
+ int var7 = MathHelper.floor_double(var1);
+ int var8 = MathHelper.floor_double(var3);
+ int var9 = MathHelper.floor_double(var5);
+ double var10 = var1 - (double)var7;
+ double var12 = var3 - (double)var8;
+ double var14 = var5 - (double)var9;
+ if(Block.field_540_p[this.worldObj.getBlockId(var7, var8, var9)]) {
+ boolean var16 = !Block.field_540_p[this.worldObj.getBlockId(var7 - 1, var8, var9)];
+ boolean var17 = !Block.field_540_p[this.worldObj.getBlockId(var7 + 1, var8, var9)];
+ boolean var18 = !Block.field_540_p[this.worldObj.getBlockId(var7, var8 - 1, var9)];
+ boolean var19 = !Block.field_540_p[this.worldObj.getBlockId(var7, var8 + 1, var9)];
+ boolean var20 = !Block.field_540_p[this.worldObj.getBlockId(var7, var8, var9 - 1)];
+ boolean var21 = !Block.field_540_p[this.worldObj.getBlockId(var7, var8, var9 + 1)];
+ byte var22 = -1;
+ double var23 = 9999.0D;
+ if(var16 && var10 < var23) {
+ var23 = var10;
+ var22 = 0;
+ }
+
+ if(var17 && 1.0D - var10 < var23) {
+ var23 = 1.0D - var10;
+ var22 = 1;
+ }
+
+ if(var18 && var12 < var23) {
+ var23 = var12;
+ var22 = 2;
+ }
+
+ if(var19 && 1.0D - var12 < var23) {
+ var23 = 1.0D - var12;
+ var22 = 3;
+ }
+
+ if(var20 && var14 < var23) {
+ var23 = var14;
+ var22 = 4;
+ }
+
+ if(var21 && 1.0D - var14 < var23) {
+ var23 = 1.0D - var14;
+ var22 = 5;
+ }
+
+ float var25 = this.field_9064_W.nextFloat() * 0.2F + 0.1F;
+ if(var22 == 0) {
+ this.motionX = (double)(-var25);
+ }
+
+ if(var22 == 1) {
+ this.motionX = (double)var25;
+ }
+
+ if(var22 == 2) {
+ this.motionY = (double)(-var25);
+ }
+
+ if(var22 == 3) {
+ this.motionY = (double)var25;
+ }
+
+ if(var22 == 4) {
+ this.motionZ = (double)(-var25);
+ }
+
+ if(var22 == 5) {
+ this.motionZ = (double)var25;
+ }
+ }
+
+ return false;
+ }
+
+ protected void func_125_b(int var1) {
+ this.attackEntity((Entity)null, var1);
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ this.func_9060_u();
+ this.health -= var2;
+ if(this.health <= 0) {
+ this.setEntityDead();
+ }
+
+ return false;
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ var1.setShort("Health", (short)((byte)this.health));
+ var1.setShort("Age", (short)this.field_9169_b);
+ var1.setCompoundTag("Item", this.item.writeToNBT(new NBTTagCompound()));
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ this.health = var1.getShort("Health") & 255;
+ this.field_9169_b = var1.getShort("Age");
+ NBTTagCompound var2 = var1.getCompoundTag("Item");
+ this.item = new ItemStack(var2);
+ }
+
+ public void onCollideWithPlayer(EntityPlayer var1) {
+ if(!this.worldObj.multiplayerWorld) {
+ int var2 = this.item.stackSize;
+ if(this.field_433_ad == 0 && var1.inventory.addItemStackToInventory(this.item)) {
+ this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.7F + 1.0F) * 2.0F);
+ var1.func_163_c(this, var2);
+ this.setEntityDead();
+ }
+
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityList.java b/minecraft_server/src/net/minecraft/src/EntityList.java
new file mode 100644
index 0000000..283c299
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityList.java
@@ -0,0 +1,87 @@
+package net.minecraft.src;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class EntityList {
+ private static Map field_849_a = new HashMap();
+ private static Map field_848_b = new HashMap();
+ private static Map field_851_c = new HashMap();
+ private static Map field_850_d = new HashMap();
+
+ private static void func_563_a(Class var0, String var1, int var2) {
+ field_849_a.put(var1, var0);
+ field_848_b.put(var0, var1);
+ field_851_c.put(Integer.valueOf(var2), var0);
+ field_850_d.put(var0, Integer.valueOf(var2));
+ }
+
+ public static Entity func_567_a(String var0, World var1) {
+ Entity var2 = null;
+
+ try {
+ Class var3 = (Class)field_849_a.get(var0);
+ if(var3 != null) {
+ var2 = (Entity)var3.getConstructor(new Class[]{World.class}).newInstance(new Object[]{var1});
+ }
+ } catch (Exception var4) {
+ var4.printStackTrace();
+ }
+
+ return var2;
+ }
+
+ public static Entity func_566_a(NBTTagCompound var0, World var1) {
+ Entity var2 = null;
+
+ try {
+ Class var3 = (Class)field_849_a.get(var0.getString("id"));
+ if(var3 != null) {
+ var2 = (Entity)var3.getConstructor(new Class[]{World.class}).newInstance(new Object[]{var1});
+ }
+ } catch (Exception var4) {
+ var4.printStackTrace();
+ }
+
+ if(var2 != null) {
+ var2.readFromNBT(var0);
+ } else {
+ System.out.println("Skipping Entity with id " + var0.getString("id"));
+ }
+
+ return var2;
+ }
+
+ public static int func_565_a(Entity var0) {
+ return ((Integer)field_850_d.get(var0.getClass())).intValue();
+ }
+
+ public static String func_564_b(Entity var0) {
+ return (String)field_848_b.get(var0.getClass());
+ }
+
+ static {
+ func_563_a(EntityArrow.class, "Arrow", 10);
+ func_563_a(EntitySnowball.class, "Snowball", 11);
+ func_563_a(EntityItem.class, "Item", 1);
+ func_563_a(EntityPainting.class, "Painting", 9);
+ func_563_a(EntityLiving.class, "Mob", 48);
+ func_563_a(EntityMobs.class, "Monster", 49);
+ func_563_a(EntityCreeper.class, "Creeper", 50);
+ func_563_a(EntitySkeleton.class, "Skeleton", 51);
+ func_563_a(EntitySpider.class, "Spider", 52);
+ func_563_a(EntityZombieSimple.class, "Giant", 53);
+ func_563_a(EntityZombie.class, "Zombie", 54);
+ func_563_a(EntitySlime.class, "Slime", 55);
+ func_563_a(EntityGhast.class, "Ghast", 56);
+ func_563_a(EntityPigZombie.class, "PigZombie", 57);
+ func_563_a(EntityPig.class, "Pig", 90);
+ func_563_a(EntitySheep.class, "Sheep", 91);
+ func_563_a(EntityCow.class, "Cow", 92);
+ func_563_a(EntityChicken.class, "Chicken", 93);
+ func_563_a(EntityTNTPrimed.class, "PrimedTnt", 20);
+ func_563_a(EntityFallingSand.class, "FallingSand", 21);
+ func_563_a(EntityMinecart.class, "Minecart", 40);
+ func_563_a(EntityBoat.class, "Boat", 41);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityLiving.java b/minecraft_server/src/net/minecraft/src/EntityLiving.java
new file mode 100644
index 0000000..adf5967
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityLiving.java
@@ -0,0 +1,719 @@
+package net.minecraft.src;
+
+import java.util.List;
+
+public class EntityLiving extends Entity {
+ public int field_9099_av = 20;
+ public float field_9098_aw;
+ public float field_9097_ax;
+ public float field_9096_ay;
+ public float field_9095_az = 0.0F;
+ public float field_9125_aA = 0.0F;
+ protected float field_9124_aB;
+ protected float field_9123_aC;
+ protected float field_9122_aD;
+ protected float field_9121_aE;
+ protected boolean field_9120_aF = true;
+ protected String field_9119_aG = "/mob/char.png";
+ protected boolean field_9118_aH = true;
+ protected float field_9117_aI = 0.0F;
+ protected String field_9116_aJ = null;
+ protected float field_9115_aK = 1.0F;
+ protected int field_9114_aL = 0;
+ protected float field_9113_aM = 0.0F;
+ public boolean field_9112_aN = false;
+ public float field_9111_aO;
+ public float field_9110_aP;
+ public int field_9109_aQ = 10;
+ public int field_9108_aR;
+ private int a;
+ public int field_9107_aS;
+ public int field_9106_aT;
+ public float field_9105_aU = 0.0F;
+ public int field_9104_aV = 0;
+ public int field_9103_aW = 0;
+ public float field_9102_aX;
+ public float field_9101_aY;
+ protected boolean field_9100_aZ = false;
+ public int field_9144_ba = -1;
+ public float field_9143_bb = (float)(Math.random() * (double)0.9F + (double)0.1F);
+ public float field_9142_bc;
+ public float field_9141_bd;
+ public float field_386_ba;
+ protected int field_9140_bf;
+ protected double field_9139_bg;
+ protected double field_9138_bh;
+ protected double field_9137_bi;
+ protected double field_9136_bj;
+ protected double field_9135_bk;
+ float field_9134_bl = 0.0F;
+ protected int field_9133_bm = 0;
+ protected int field_9132_bn = 0;
+ protected float field_9131_bo;
+ protected float field_9130_bp;
+ protected float field_9129_bq;
+ protected boolean field_9128_br = false;
+ protected float field_9127_bs = 0.0F;
+ protected float field_9126_bt = 0.7F;
+ private Entity b;
+ private int c = 0;
+
+ public EntityLiving(World var1) {
+ super(var1);
+ this.field_329_e = true;
+ this.field_9096_ay = (float)(Math.random() + 1.0D) * 0.01F;
+ this.setPosition(this.posX, this.posY, this.posZ);
+ this.field_9098_aw = (float)Math.random() * 12398.0F;
+ this.rotationYaw = (float)(Math.random() * (double)((float)Math.PI) * 2.0D);
+ this.field_9097_ax = 1.0F;
+ this.field_9067_S = 0.5F;
+ }
+
+ public boolean func_145_g(Entity var1) {
+ return this.worldObj.func_486_a(Vec3D.createVector(this.posX, this.posY + (double)this.func_104_p(), this.posZ), Vec3D.createVector(var1.posX, var1.posY + (double)var1.func_104_p(), var1.posZ)) == null;
+ }
+
+ public boolean func_129_c_() {
+ return !this.field_304_B;
+ }
+
+ public boolean func_124_r() {
+ return !this.field_304_B;
+ }
+
+ public float func_104_p() {
+ return this.height * 0.85F;
+ }
+
+ public int func_146_b() {
+ return 80;
+ }
+
+ public void func_84_k() {
+ this.field_9111_aO = this.field_9110_aP;
+ super.func_84_k();
+ if(this.field_9064_W.nextInt(1000) < this.a++) {
+ this.a = -this.func_146_b();
+ String var1 = this.getLivingSound();
+ if(var1 != null) {
+ this.worldObj.playSoundAtEntity(this, var1, this.getSoundVolume(), (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F);
+ }
+ }
+
+ if(this.func_120_t() && this.func_91_u()) {
+ this.attackEntity((Entity)null, 1);
+ }
+
+ if(this.field_9079_ae || this.worldObj.multiplayerWorld) {
+ this.field_9061_Z = 0;
+ }
+
+ int var8;
+ if(this.func_120_t() && this.isInsideOfMaterial(Material.water)) {
+ --this.air;
+ if(this.air == -20) {
+ this.air = 0;
+
+ for(var8 = 0; var8 < 8; ++var8) {
+ float var2 = this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat();
+ float var3 = this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat();
+ float var4 = this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat();
+ this.worldObj.spawnParticle("bubble", this.posX + (double)var2, this.posY + (double)var3, this.posZ + (double)var4, this.motionX, this.motionY, this.motionZ);
+ }
+
+ this.attackEntity((Entity)null, 2);
+ }
+
+ this.field_9061_Z = 0;
+ } else {
+ this.air = this.field_9087_aa;
+ }
+
+ this.field_9102_aX = this.field_9101_aY;
+ if(this.field_9103_aW > 0) {
+ --this.field_9103_aW;
+ }
+
+ if(this.field_9107_aS > 0) {
+ --this.field_9107_aS;
+ }
+
+ if(this.field_9083_ac > 0) {
+ --this.field_9083_ac;
+ }
+
+ if(this.field_9109_aQ <= 0) {
+ ++this.field_9104_aV;
+ if(this.field_9104_aV > 20) {
+ this.func_6101_K();
+ this.setEntityDead();
+
+ for(var8 = 0; var8 < 20; ++var8) {
+ double var9 = this.field_9064_W.nextGaussian() * 0.02D;
+ double var10 = this.field_9064_W.nextGaussian() * 0.02D;
+ double var6 = this.field_9064_W.nextGaussian() * 0.02D;
+ this.worldObj.spawnParticle("explode", this.posX + (double)(this.field_9064_W.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + (double)(this.field_9064_W.nextFloat() * this.height), this.posZ + (double)(this.field_9064_W.nextFloat() * this.width * 2.0F) - (double)this.width, var9, var10, var6);
+ }
+ }
+ }
+
+ this.field_9121_aE = this.field_9122_aD;
+ this.field_9125_aA = this.field_9095_az;
+ this.prevRotationYaw = this.rotationYaw;
+ this.prevRotationPitch = this.rotationPitch;
+ }
+
+ public void func_156_D() {
+ for(int var1 = 0; var1 < 20; ++var1) {
+ double var2 = this.field_9064_W.nextGaussian() * 0.02D;
+ double var4 = this.field_9064_W.nextGaussian() * 0.02D;
+ double var6 = this.field_9064_W.nextGaussian() * 0.02D;
+ double var8 = 10.0D;
+ this.worldObj.spawnParticle("explode", this.posX + (double)(this.field_9064_W.nextFloat() * this.width * 2.0F) - (double)this.width - var2 * var8, this.posY + (double)(this.field_9064_W.nextFloat() * this.height) - var4 * var8, this.posZ + (double)(this.field_9064_W.nextFloat() * this.width * 2.0F) - (double)this.width - var6 * var8, var2, var4, var6);
+ }
+
+ }
+
+ public void func_115_v() {
+ super.func_115_v();
+ this.field_9124_aB = this.field_9123_aC;
+ this.field_9123_aC = 0.0F;
+ }
+
+ public void onUpdate() {
+ super.onUpdate();
+ this.onLivingUpdate();
+ double var1 = this.posX - this.prevPosX;
+ double var3 = this.posZ - this.prevPosZ;
+ float var5 = MathHelper.sqrt_double(var1 * var1 + var3 * var3);
+ float var6 = this.field_9095_az;
+ float var7 = 0.0F;
+ this.field_9124_aB = this.field_9123_aC;
+ float var8 = 0.0F;
+ if(var5 > 0.05F) {
+ var8 = 1.0F;
+ var7 = var5 * 3.0F;
+ var6 = (float)Math.atan2(var3, var1) * 180.0F / (float)Math.PI - 90.0F;
+ }
+
+ if(this.field_9110_aP > 0.0F) {
+ var6 = this.rotationYaw;
+ }
+
+ if(!this.onGround) {
+ var8 = 0.0F;
+ }
+
+ this.field_9123_aC += (var8 - this.field_9123_aC) * 0.3F;
+
+ float var9;
+ for(var9 = var6 - this.field_9095_az; var9 < -180.0F; var9 += 360.0F) {
+ }
+
+ while(var9 >= 180.0F) {
+ var9 -= 360.0F;
+ }
+
+ this.field_9095_az += var9 * 0.3F;
+
+ float var10;
+ for(var10 = this.rotationYaw - this.field_9095_az; var10 < -180.0F; var10 += 360.0F) {
+ }
+
+ while(var10 >= 180.0F) {
+ var10 -= 360.0F;
+ }
+
+ boolean var11 = var10 < -90.0F || var10 >= 90.0F;
+ if(var10 < -75.0F) {
+ var10 = -75.0F;
+ }
+
+ if(var10 >= 75.0F) {
+ var10 = 75.0F;
+ }
+
+ this.field_9095_az = this.rotationYaw - var10;
+ if(var10 * var10 > 2500.0F) {
+ this.field_9095_az += var10 * 0.2F;
+ }
+
+ if(var11) {
+ var7 *= -1.0F;
+ }
+
+ while(this.rotationYaw - this.prevRotationYaw < -180.0F) {
+ this.prevRotationYaw -= 360.0F;
+ }
+
+ while(this.rotationYaw - this.prevRotationYaw >= 180.0F) {
+ this.prevRotationYaw += 360.0F;
+ }
+
+ while(this.field_9095_az - this.field_9125_aA < -180.0F) {
+ this.field_9125_aA -= 360.0F;
+ }
+
+ while(this.field_9095_az - this.field_9125_aA >= 180.0F) {
+ this.field_9125_aA += 360.0F;
+ }
+
+ while(this.rotationPitch - this.prevRotationPitch < -180.0F) {
+ this.prevRotationPitch -= 360.0F;
+ }
+
+ while(this.rotationPitch - this.prevRotationPitch >= 180.0F) {
+ this.prevRotationPitch += 360.0F;
+ }
+
+ this.field_9122_aD += var7;
+ }
+
+ protected void setSize(float var1, float var2) {
+ super.setSize(var1, var2);
+ }
+
+ public void heal(int var1) {
+ if(this.field_9109_aQ > 0) {
+ this.field_9109_aQ += var1;
+ if(this.field_9109_aQ > 20) {
+ this.field_9109_aQ = 20;
+ }
+
+ this.field_9083_ac = this.field_9099_av / 2;
+ }
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ if(this.worldObj.multiplayerWorld) {
+ return false;
+ } else {
+ this.field_9132_bn = 0;
+ if(this.field_9109_aQ <= 0) {
+ return false;
+ } else {
+ this.field_9141_bd = 1.5F;
+ boolean var3 = true;
+ if((float)this.field_9083_ac > (float)this.field_9099_av / 2.0F) {
+ if(var2 <= this.field_9133_bm) {
+ return false;
+ }
+
+ this.func_6099_c(var2 - this.field_9133_bm);
+ this.field_9133_bm = var2;
+ var3 = false;
+ } else {
+ this.field_9133_bm = var2;
+ this.field_9108_aR = this.field_9109_aQ;
+ this.field_9083_ac = this.field_9099_av;
+ this.func_6099_c(var2);
+ this.field_9107_aS = this.field_9106_aT = 10;
+ }
+
+ this.field_9105_aU = 0.0F;
+ if(var3) {
+ this.worldObj.func_9206_a(this, (byte)2);
+ this.func_9060_u();
+ if(var1 != null) {
+ double var4 = var1.posX - this.posX;
+
+ double var6;
+ for(var6 = var1.posZ - this.posZ; var4 * var4 + var6 * var6 < 1.0E-4D; var6 = (Math.random() - Math.random()) * 0.01D) {
+ var4 = (Math.random() - Math.random()) * 0.01D;
+ }
+
+ this.field_9105_aU = (float)(Math.atan2(var6, var4) * 180.0D / (double)((float)Math.PI)) - this.rotationYaw;
+ this.func_143_a(var1, var2, var4, var6);
+ } else {
+ this.field_9105_aU = (float)((int)(Math.random() * 2.0D) * 180);
+ }
+ }
+
+ if(this.field_9109_aQ <= 0) {
+ if(var3) {
+ this.worldObj.playSoundAtEntity(this, this.getDeathSound(), this.getSoundVolume(), (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F);
+ }
+
+ this.onDeath(var1);
+ } else if(var3) {
+ this.worldObj.playSoundAtEntity(this, this.getHurtSound(), this.getSoundVolume(), (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F);
+ }
+
+ return true;
+ }
+ }
+ }
+
+ protected void func_6099_c(int var1) {
+ this.field_9109_aQ -= var1;
+ }
+
+ protected float getSoundVolume() {
+ return 1.0F;
+ }
+
+ protected String getLivingSound() {
+ return null;
+ }
+
+ protected String getHurtSound() {
+ return "random.hurt";
+ }
+
+ protected String getDeathSound() {
+ return "random.hurt";
+ }
+
+ public void func_143_a(Entity var1, int var2, double var3, double var5) {
+ float var7 = MathHelper.sqrt_double(var3 * var3 + var5 * var5);
+ float var8 = 0.4F;
+ this.motionX /= 2.0D;
+ this.motionY /= 2.0D;
+ this.motionZ /= 2.0D;
+ this.motionX -= var3 / (double)var7 * (double)var8;
+ this.motionY += (double)0.4F;
+ this.motionZ -= var5 / (double)var7 * (double)var8;
+ if(this.motionY > (double)0.4F) {
+ this.motionY = (double)0.4F;
+ }
+
+ }
+
+ public void onDeath(Entity var1) {
+ if(this.field_9114_aL > 0 && var1 != null) {
+ var1.func_96_b(this, this.field_9114_aL);
+ }
+
+ this.field_9100_aZ = true;
+ if(!this.worldObj.multiplayerWorld) {
+ int var2 = this.getDropItemId();
+ if(var2 > 0) {
+ int var3 = this.field_9064_W.nextInt(3);
+
+ for(int var4 = 0; var4 < var3; ++var4) {
+ this.dropItem(var2, 1);
+ }
+ }
+ }
+
+ this.worldObj.func_9206_a(this, (byte)3);
+ }
+
+ protected int getDropItemId() {
+ return 0;
+ }
+
+ protected void fall(float var1) {
+ int var2 = (int)Math.ceil((double)(var1 - 3.0F));
+ if(var2 > 0) {
+ this.attackEntity((Entity)null, var2);
+ int var3 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset), MathHelper.floor_double(this.posZ));
+ if(var3 > 0) {
+ StepSound var4 = Block.blocksList[var3].stepSound;
+ this.worldObj.playSoundAtEntity(this, var4.func_737_c(), var4.func_738_a() * 0.5F, var4.func_739_b() * (12.0F / 16.0F));
+ }
+ }
+
+ }
+
+ public void func_148_c(float var1, float var2) {
+ double var3;
+ if(this.handleWaterMovement()) {
+ var3 = this.posY;
+ this.func_90_a(var1, var2, 0.02F);
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ this.motionX *= (double)0.8F;
+ this.motionY *= (double)0.8F;
+ this.motionZ *= (double)0.8F;
+ this.motionY -= 0.02D;
+ if(this.field_9084_B && this.func_133_b(this.motionX, this.motionY + (double)0.6F - this.posY + var3, this.motionZ)) {
+ this.motionY = (double)0.3F;
+ }
+ } else if(this.func_112_q()) {
+ var3 = this.posY;
+ this.func_90_a(var1, var2, 0.02F);
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ this.motionX *= 0.5D;
+ this.motionY *= 0.5D;
+ this.motionZ *= 0.5D;
+ this.motionY -= 0.02D;
+ if(this.field_9084_B && this.func_133_b(this.motionX, this.motionY + (double)0.6F - this.posY + var3, this.motionZ)) {
+ this.motionY = (double)0.3F;
+ }
+ } else {
+ float var8 = 0.91F;
+ if(this.onGround) {
+ var8 = 546.0F * 0.1F * 0.1F * 0.1F;
+ int var4 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ));
+ if(var4 > 0) {
+ var8 = Block.blocksList[var4].slipperiness * 0.91F;
+ }
+ }
+
+ float var9 = 0.16277136F / (var8 * var8 * var8);
+ this.func_90_a(var1, var2, this.onGround ? 0.1F * var9 : 0.02F);
+ var8 = 0.91F;
+ if(this.onGround) {
+ var8 = 546.0F * 0.1F * 0.1F * 0.1F;
+ int var5 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ));
+ if(var5 > 0) {
+ var8 = Block.blocksList[var5].slipperiness * 0.91F;
+ }
+ }
+
+ if(this.func_144_E()) {
+ this.fallDistance = 0.0F;
+ if(this.motionY < -0.15D) {
+ this.motionY = -0.15D;
+ }
+ }
+
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ if(this.field_9084_B && this.func_144_E()) {
+ this.motionY = 0.2D;
+ }
+
+ this.motionY -= 0.08D;
+ this.motionY *= (double)0.98F;
+ this.motionX *= (double)var8;
+ this.motionZ *= (double)var8;
+ }
+
+ this.field_9142_bc = this.field_9141_bd;
+ var3 = this.posX - this.prevPosX;
+ double var10 = this.posZ - this.prevPosZ;
+ float var7 = MathHelper.sqrt_double(var3 * var3 + var10 * var10) * 4.0F;
+ if(var7 > 1.0F) {
+ var7 = 1.0F;
+ }
+
+ this.field_9141_bd += (var7 - this.field_9141_bd) * 0.4F;
+ this.field_386_ba += this.field_9141_bd;
+ }
+
+ public boolean func_144_E() {
+ int var1 = MathHelper.floor_double(this.posX);
+ int var2 = MathHelper.floor_double(this.boundingBox.minY);
+ int var3 = MathHelper.floor_double(this.posZ);
+ return this.worldObj.getBlockId(var1, var2, var3) == Block.ladder.blockID || this.worldObj.getBlockId(var1, var2 + 1, var3) == Block.ladder.blockID;
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ var1.setShort("Health", (short)this.field_9109_aQ);
+ var1.setShort("HurtTime", (short)this.field_9107_aS);
+ var1.setShort("DeathTime", (short)this.field_9104_aV);
+ var1.setShort("AttackTime", (short)this.field_9103_aW);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ this.field_9109_aQ = var1.getShort("Health");
+ if(!var1.hasKey("Health")) {
+ this.field_9109_aQ = 10;
+ }
+
+ this.field_9107_aS = var1.getShort("HurtTime");
+ this.field_9104_aV = var1.getShort("DeathTime");
+ this.field_9103_aW = var1.getShort("AttackTime");
+ }
+
+ public boolean func_120_t() {
+ return !this.field_304_B && this.field_9109_aQ > 0;
+ }
+
+ public void onLivingUpdate() {
+ if(this.field_9140_bf > 0) {
+ double var1 = this.posX + (this.field_9139_bg - this.posX) / (double)this.field_9140_bf;
+ double var3 = this.posY + (this.field_9138_bh - this.posY) / (double)this.field_9140_bf;
+ double var5 = this.posZ + (this.field_9137_bi - this.posZ) / (double)this.field_9140_bf;
+
+ double var7;
+ for(var7 = this.field_9136_bj - (double)this.rotationYaw; var7 < -180.0D; var7 += 360.0D) {
+ }
+
+ while(var7 >= 180.0D) {
+ var7 -= 360.0D;
+ }
+
+ this.rotationYaw = (float)((double)this.rotationYaw + var7 / (double)this.field_9140_bf);
+ this.rotationPitch = (float)((double)this.rotationPitch + (this.field_9135_bk - (double)this.rotationPitch) / (double)this.field_9140_bf);
+ --this.field_9140_bf;
+ this.setPosition(var1, var3, var5);
+ this.setRotation(this.rotationYaw, this.rotationPitch);
+ }
+
+ if(this.field_9109_aQ <= 0) {
+ this.field_9128_br = false;
+ this.field_9131_bo = 0.0F;
+ this.field_9130_bp = 0.0F;
+ this.field_9129_bq = 0.0F;
+ } else if(!this.field_9112_aN) {
+ this.func_152_d_();
+ }
+
+ boolean var9 = this.handleWaterMovement();
+ boolean var2 = this.func_112_q();
+ if(this.field_9128_br) {
+ if(var9) {
+ this.motionY += (double)0.04F;
+ } else if(var2) {
+ this.motionY += (double)0.04F;
+ } else if(this.onGround) {
+ this.func_154_F();
+ }
+ }
+
+ this.field_9131_bo *= 0.98F;
+ this.field_9130_bp *= 0.98F;
+ this.field_9129_bq *= 0.9F;
+ this.func_148_c(this.field_9131_bo, this.field_9130_bp);
+ List var10 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expands((double)0.2F, 0.0D, (double)0.2F));
+ if(var10 != null && var10.size() > 0) {
+ for(int var4 = 0; var4 < var10.size(); ++var4) {
+ Entity var11 = (Entity)var10.get(var4);
+ if(var11.func_124_r()) {
+ var11.applyEntityCollision(this);
+ }
+ }
+ }
+
+ }
+
+ protected void func_154_F() {
+ this.motionY = (double)0.42F;
+ }
+
+ protected void func_152_d_() {
+ ++this.field_9132_bn;
+ EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, -1.0D);
+ if(var1 != null) {
+ double var2 = var1.posX - this.posX;
+ double var4 = var1.posY - this.posY;
+ double var6 = var1.posZ - this.posZ;
+ double var8 = var2 * var2 + var4 * var4 + var6 * var6;
+ if(var8 > 16384.0D) {
+ this.setEntityDead();
+ }
+
+ if(this.field_9132_bn > 600 && this.field_9064_W.nextInt(800) == 0) {
+ if(var8 < 1024.0D) {
+ this.field_9132_bn = 0;
+ } else {
+ this.setEntityDead();
+ }
+ }
+ }
+
+ this.field_9131_bo = 0.0F;
+ this.field_9130_bp = 0.0F;
+ float var10 = 8.0F;
+ if(this.field_9064_W.nextFloat() < 0.02F) {
+ var1 = this.worldObj.getClosestPlayerToEntity(this, (double)var10);
+ if(var1 != null) {
+ this.b = var1;
+ this.c = 10 + this.field_9064_W.nextInt(20);
+ } else {
+ this.field_9129_bq = (this.field_9064_W.nextFloat() - 0.5F) * 20.0F;
+ }
+ }
+
+ if(this.b != null) {
+ this.func_147_b(this.b, 10.0F);
+ if(this.c-- <= 0 || this.b.field_304_B || this.b.getDistanceSqToEntity(this) > (double)(var10 * var10)) {
+ this.b = null;
+ }
+ } else {
+ if(this.field_9064_W.nextFloat() < 0.05F) {
+ this.field_9129_bq = (this.field_9064_W.nextFloat() - 0.5F) * 20.0F;
+ }
+
+ this.rotationYaw += this.field_9129_bq;
+ this.rotationPitch = this.field_9127_bs;
+ }
+
+ boolean var3 = this.handleWaterMovement();
+ boolean var11 = this.func_112_q();
+ if(var3 || var11) {
+ this.field_9128_br = this.field_9064_W.nextFloat() < 0.8F;
+ }
+
+ }
+
+ public void func_147_b(Entity var1, float var2) {
+ double var3 = var1.posX - this.posX;
+ double var7 = var1.posZ - this.posZ;
+ double var5;
+ if(var1 instanceof EntityLiving) {
+ EntityLiving var9 = (EntityLiving)var1;
+ var5 = var9.posY + (double)var9.func_104_p() - (this.posY + (double)this.func_104_p());
+ } else {
+ var5 = (var1.boundingBox.minY + var1.boundingBox.maxY) / 2.0D - (this.posY + (double)this.func_104_p());
+ }
+
+ double var13 = (double)MathHelper.sqrt_double(var3 * var3 + var7 * var7);
+ float var11 = (float)(Math.atan2(var7, var3) * 180.0D / (double)((float)Math.PI)) - 90.0F;
+ float var12 = (float)(Math.atan2(var5, var13) * 180.0D / (double)((float)Math.PI));
+ this.rotationPitch = -this.func_140_b(this.rotationPitch, var12, var2);
+ this.rotationYaw = this.func_140_b(this.rotationYaw, var11, var2);
+ }
+
+ private float func_140_b(float var1, float var2, float var3) {
+ float var4;
+ for(var4 = var2 - var1; var4 < -180.0F; var4 += 360.0F) {
+ }
+
+ while(var4 >= 180.0F) {
+ var4 -= 360.0F;
+ }
+
+ if(var4 > var3) {
+ var4 = var3;
+ }
+
+ if(var4 < -var3) {
+ var4 = -var3;
+ }
+
+ return var1 + var4;
+ }
+
+ public void func_6101_K() {
+ }
+
+ public boolean getCanSpawnHere() {
+ return this.worldObj.func_522_a(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() == 0 && !this.worldObj.getIsAnyLiquid(this.boundingBox);
+ }
+
+ protected void func_4043_o() {
+ this.attackEntity((Entity)null, 4);
+ }
+
+ public Vec3D func_4039_B() {
+ return this.func_141_d(1.0F);
+ }
+
+ public Vec3D func_141_d(float var1) {
+ float var2;
+ float var3;
+ float var4;
+ float var5;
+ if(var1 == 1.0F) {
+ var2 = MathHelper.cos(-this.rotationYaw * ((float)Math.PI / 180.0F) - (float)Math.PI);
+ var3 = MathHelper.sin(-this.rotationYaw * ((float)Math.PI / 180.0F) - (float)Math.PI);
+ var4 = -MathHelper.cos(-this.rotationPitch * ((float)Math.PI / 180.0F));
+ var5 = MathHelper.sin(-this.rotationPitch * ((float)Math.PI / 180.0F));
+ return Vec3D.createVector((double)(var3 * var4), (double)var5, (double)(var2 * var4));
+ } else {
+ var2 = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * var1;
+ var3 = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * var1;
+ var4 = MathHelper.cos(-var3 * ((float)Math.PI / 180.0F) - (float)Math.PI);
+ var5 = MathHelper.sin(-var3 * ((float)Math.PI / 180.0F) - (float)Math.PI);
+ float var6 = -MathHelper.cos(-var2 * ((float)Math.PI / 180.0F));
+ float var7 = MathHelper.sin(-var2 * ((float)Math.PI / 180.0F));
+ return Vec3D.createVector((double)(var5 * var6), (double)var7, (double)(var4 * var6));
+ }
+ }
+
+ public int func_4045_i() {
+ return 4;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityMinecart.java b/minecraft_server/src/net/minecraft/src/EntityMinecart.java
new file mode 100644
index 0000000..e4713fe
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityMinecart.java
@@ -0,0 +1,601 @@
+package net.minecraft.src;
+
+import java.util.List;
+
+public class EntityMinecart extends Entity implements IInventory {
+ private ItemStack[] cargoItems;
+ public int field_9168_a;
+ public int field_9167_b;
+ public int field_477_ad;
+ private boolean field_469_aj;
+ public int minecartType;
+ public int field_9165_e;
+ public double field_9164_f;
+ public double field_9166_aj;
+ private static final int[][][] field_468_ak = new int[][][]{{{0, 0, -1}, {0, 0, 1}}, {{-1, 0, 0}, {1, 0, 0}}, {{-1, -1, 0}, {1, 0, 0}}, {{-1, 0, 0}, {1, -1, 0}}, {{0, 0, -1}, {0, -1, 1}}, {{0, -1, -1}, {0, 0, 1}}, {{0, 0, 1}, {1, 0, 0}}, {{0, 0, 1}, {-1, 0, 0}}, {{0, 0, -1}, {-1, 0, 0}}, {{0, 0, -1}, {1, 0, 0}}};
+ private int field_9163_an;
+ private double field_9162_ao;
+ private double field_9161_ap;
+ private double field_9160_aq;
+ private double field_9159_ar;
+ private double field_9158_as;
+
+ public EntityMinecart(World var1) {
+ super(var1);
+ this.cargoItems = new ItemStack[36];
+ this.field_9168_a = 0;
+ this.field_9167_b = 0;
+ this.field_477_ad = 1;
+ this.field_469_aj = false;
+ this.field_329_e = true;
+ this.setSize(0.98F, 0.7F);
+ this.yOffset = this.height / 2.0F;
+ this.entityWalks = false;
+ }
+
+ public AxisAlignedBB func_89_d(Entity var1) {
+ return var1.boundingBox;
+ }
+
+ public AxisAlignedBB func_93_n() {
+ return null;
+ }
+
+ public boolean func_124_r() {
+ return true;
+ }
+
+ public EntityMinecart(World var1, double var2, double var4, double var6, int var8) {
+ this(var1);
+ this.setPosition(var2, var4 + (double)this.yOffset, var6);
+ this.motionX = 0.0D;
+ this.motionY = 0.0D;
+ this.motionZ = 0.0D;
+ this.prevPosX = var2;
+ this.prevPosY = var4;
+ this.prevPosZ = var6;
+ this.minecartType = var8;
+ }
+
+ public double func_130_h() {
+ return (double)this.height * 0.0D - (double)0.3F;
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ if(!this.worldObj.multiplayerWorld && !this.field_304_B) {
+ this.field_477_ad = -this.field_477_ad;
+ this.field_9167_b = 10;
+ this.func_9060_u();
+ this.field_9168_a += var2 * 10;
+ if(this.field_9168_a > 40) {
+ this.dropItemWithOffset(Item.minecartEmpty.swiftedIndex, 1, 0.0F);
+ if(this.minecartType == 1) {
+ this.dropItemWithOffset(Block.crate.blockID, 1, 0.0F);
+ } else if(this.minecartType == 2) {
+ this.dropItemWithOffset(Block.stoneOvenIdle.blockID, 1, 0.0F);
+ }
+
+ this.setEntityDead();
+ }
+
+ return true;
+ } else {
+ return true;
+ }
+ }
+
+ public boolean func_129_c_() {
+ return !this.field_304_B;
+ }
+
+ public void setEntityDead() {
+ for(int var1 = 0; var1 < this.func_83_a(); ++var1) {
+ ItemStack var2 = this.getStackInSlot(var1);
+ if(var2 != null) {
+ float var3 = this.field_9064_W.nextFloat() * 0.8F + 0.1F;
+ float var4 = this.field_9064_W.nextFloat() * 0.8F + 0.1F;
+ float var5 = this.field_9064_W.nextFloat() * 0.8F + 0.1F;
+
+ while(var2.stackSize > 0) {
+ int var6 = this.field_9064_W.nextInt(21) + 10;
+ if(var6 > var2.stackSize) {
+ var6 = var2.stackSize;
+ }
+
+ var2.stackSize -= var6;
+ EntityItem var7 = new EntityItem(this.worldObj, this.posX + (double)var3, this.posY + (double)var4, this.posZ + (double)var5, new ItemStack(var2.itemID, var6, var2.itemDamage));
+ float var8 = 0.05F;
+ var7.motionX = (double)((float)this.field_9064_W.nextGaussian() * var8);
+ var7.motionY = (double)((float)this.field_9064_W.nextGaussian() * var8 + 0.2F);
+ var7.motionZ = (double)((float)this.field_9064_W.nextGaussian() * var8);
+ this.worldObj.entityJoinedWorld(var7);
+ }
+ }
+ }
+
+ super.setEntityDead();
+ }
+
+ public void onUpdate() {
+ if(this.field_9167_b > 0) {
+ --this.field_9167_b;
+ }
+
+ if(this.field_9168_a > 0) {
+ --this.field_9168_a;
+ }
+
+ double var7;
+ if(this.worldObj.multiplayerWorld && this.field_9163_an > 0) {
+ if(this.field_9163_an > 0) {
+ double var41 = this.posX + (this.field_9162_ao - this.posX) / (double)this.field_9163_an;
+ double var42 = this.posY + (this.field_9161_ap - this.posY) / (double)this.field_9163_an;
+ double var5 = this.posZ + (this.field_9160_aq - this.posZ) / (double)this.field_9163_an;
+
+ for(var7 = this.field_9159_ar - (double)this.rotationYaw; var7 < -180.0D; var7 += 360.0D) {
+ }
+
+ while(var7 >= 180.0D) {
+ var7 -= 360.0D;
+ }
+
+ this.rotationYaw = (float)((double)this.rotationYaw + var7 / (double)this.field_9163_an);
+ this.rotationPitch = (float)((double)this.rotationPitch + (this.field_9158_as - (double)this.rotationPitch) / (double)this.field_9163_an);
+ --this.field_9163_an;
+ this.setPosition(var41, var42, var5);
+ this.setRotation(this.rotationYaw, this.rotationPitch);
+ } else {
+ this.setPosition(this.posX, this.posY, this.posZ);
+ this.setRotation(this.rotationYaw, this.rotationPitch);
+ }
+
+ } else {
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ this.motionY -= (double)0.04F;
+ int var1 = MathHelper.floor_double(this.posX);
+ int var2 = MathHelper.floor_double(this.posY);
+ int var3 = MathHelper.floor_double(this.posZ);
+ if(this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.minecartTrack.blockID) {
+ --var2;
+ }
+
+ double var4 = 0.4D;
+ boolean var6 = false;
+ var7 = 1.0D / 128.0D;
+ if(this.worldObj.getBlockId(var1, var2, var3) == Block.minecartTrack.blockID) {
+ Vec3D var9 = this.func_182_g(this.posX, this.posY, this.posZ);
+ int var10 = this.worldObj.getBlockMetadata(var1, var2, var3);
+ this.posY = (double)var2;
+ if(var10 >= 2 && var10 <= 5) {
+ this.posY = (double)(var2 + 1);
+ }
+
+ if(var10 == 2) {
+ this.motionX -= var7;
+ }
+
+ if(var10 == 3) {
+ this.motionX += var7;
+ }
+
+ if(var10 == 4) {
+ this.motionZ += var7;
+ }
+
+ if(var10 == 5) {
+ this.motionZ -= var7;
+ }
+
+ int[][] var11 = field_468_ak[var10];
+ double var12 = (double)(var11[1][0] - var11[0][0]);
+ double var14 = (double)(var11[1][2] - var11[0][2]);
+ double var16 = Math.sqrt(var12 * var12 + var14 * var14);
+ double var18 = this.motionX * var12 + this.motionZ * var14;
+ if(var18 < 0.0D) {
+ var12 = -var12;
+ var14 = -var14;
+ }
+
+ double var20 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ this.motionX = var20 * var12 / var16;
+ this.motionZ = var20 * var14 / var16;
+ double var22 = 0.0D;
+ double var24 = (double)var1 + 0.5D + (double)var11[0][0] * 0.5D;
+ double var26 = (double)var3 + 0.5D + (double)var11[0][2] * 0.5D;
+ double var28 = (double)var1 + 0.5D + (double)var11[1][0] * 0.5D;
+ double var30 = (double)var3 + 0.5D + (double)var11[1][2] * 0.5D;
+ var12 = var28 - var24;
+ var14 = var30 - var26;
+ double var32;
+ double var34;
+ double var36;
+ if(var12 == 0.0D) {
+ this.posX = (double)var1 + 0.5D;
+ var22 = this.posZ - (double)var3;
+ } else if(var14 == 0.0D) {
+ this.posZ = (double)var3 + 0.5D;
+ var22 = this.posX - (double)var1;
+ } else {
+ var32 = this.posX - var24;
+ var34 = this.posZ - var26;
+ var36 = (var32 * var12 + var34 * var14) * 2.0D;
+ var22 = var36;
+ }
+
+ this.posX = var24 + var12 * var22;
+ this.posZ = var26 + var14 * var22;
+ this.setPosition(this.posX, this.posY + (double)this.yOffset, this.posZ);
+ var32 = this.motionX;
+ var34 = this.motionZ;
+ if(this.field_328_f != null) {
+ var32 *= 0.75D;
+ var34 *= 0.75D;
+ }
+
+ if(var32 < -var4) {
+ var32 = -var4;
+ }
+
+ if(var32 > var4) {
+ var32 = var4;
+ }
+
+ if(var34 < -var4) {
+ var34 = -var4;
+ }
+
+ if(var34 > var4) {
+ var34 = var4;
+ }
+
+ this.moveEntity(var32, 0.0D, var34);
+ if(var11[0][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var11[0][0] && MathHelper.floor_double(this.posZ) - var3 == var11[0][2]) {
+ this.setPosition(this.posX, this.posY + (double)var11[0][1], this.posZ);
+ } else if(var11[1][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var11[1][0] && MathHelper.floor_double(this.posZ) - var3 == var11[1][2]) {
+ this.setPosition(this.posX, this.posY + (double)var11[1][1], this.posZ);
+ }
+
+ if(this.field_328_f != null) {
+ this.motionX *= (double)0.997F;
+ this.motionY *= 0.0D;
+ this.motionZ *= (double)0.997F;
+ } else {
+ if(this.minecartType == 2) {
+ var36 = (double)MathHelper.sqrt_double(this.field_9164_f * this.field_9164_f + this.field_9166_aj * this.field_9166_aj);
+ if(var36 > 0.01D) {
+ var6 = true;
+ this.field_9164_f /= var36;
+ this.field_9166_aj /= var36;
+ double var38 = 0.04D;
+ this.motionX *= (double)0.8F;
+ this.motionY *= 0.0D;
+ this.motionZ *= (double)0.8F;
+ this.motionX += this.field_9164_f * var38;
+ this.motionZ += this.field_9166_aj * var38;
+ } else {
+ this.motionX *= (double)0.9F;
+ this.motionY *= 0.0D;
+ this.motionZ *= (double)0.9F;
+ }
+ }
+
+ this.motionX *= (double)0.96F;
+ this.motionY *= 0.0D;
+ this.motionZ *= (double)0.96F;
+ }
+
+ Vec3D var46 = this.func_182_g(this.posX, this.posY, this.posZ);
+ if(var46 != null && var9 != null) {
+ double var37 = (var9.yCoord - var46.yCoord) * 0.05D;
+ var20 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ if(var20 > 0.0D) {
+ this.motionX = this.motionX / var20 * (var20 + var37);
+ this.motionZ = this.motionZ / var20 * (var20 + var37);
+ }
+
+ this.setPosition(this.posX, var46.yCoord, this.posZ);
+ }
+
+ int var47 = MathHelper.floor_double(this.posX);
+ int var48 = MathHelper.floor_double(this.posZ);
+ if(var47 != var1 || var48 != var3) {
+ var20 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ this.motionX = var20 * (double)(var47 - var1);
+ this.motionZ = var20 * (double)(var48 - var3);
+ }
+
+ if(this.minecartType == 2) {
+ double var39 = (double)MathHelper.sqrt_double(this.field_9164_f * this.field_9164_f + this.field_9166_aj * this.field_9166_aj);
+ if(var39 > 0.01D && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.001D) {
+ this.field_9164_f /= var39;
+ this.field_9166_aj /= var39;
+ if(this.field_9164_f * this.motionX + this.field_9166_aj * this.motionZ < 0.0D) {
+ this.field_9164_f = 0.0D;
+ this.field_9166_aj = 0.0D;
+ } else {
+ this.field_9164_f = this.motionX;
+ this.field_9166_aj = this.motionZ;
+ }
+ }
+ }
+ } else {
+ if(this.motionX < -var4) {
+ this.motionX = -var4;
+ }
+
+ if(this.motionX > var4) {
+ this.motionX = var4;
+ }
+
+ if(this.motionZ < -var4) {
+ this.motionZ = -var4;
+ }
+
+ if(this.motionZ > var4) {
+ this.motionZ = var4;
+ }
+
+ if(this.onGround) {
+ this.motionX *= 0.5D;
+ this.motionY *= 0.5D;
+ this.motionZ *= 0.5D;
+ }
+
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ if(!this.onGround) {
+ this.motionX *= (double)0.95F;
+ this.motionY *= (double)0.95F;
+ this.motionZ *= (double)0.95F;
+ }
+ }
+
+ this.rotationPitch = 0.0F;
+ double var43 = this.prevPosX - this.posX;
+ double var44 = this.prevPosZ - this.posZ;
+ if(var43 * var43 + var44 * var44 > 0.001D) {
+ this.rotationYaw = (float)(Math.atan2(var44, var43) * 180.0D / Math.PI);
+ if(this.field_469_aj) {
+ this.rotationYaw += 180.0F;
+ }
+ }
+
+ double var13;
+ for(var13 = (double)(this.rotationYaw - this.prevRotationYaw); var13 >= 180.0D; var13 -= 360.0D) {
+ }
+
+ while(var13 < -180.0D) {
+ var13 += 360.0D;
+ }
+
+ if(var13 < -170.0D || var13 >= 170.0D) {
+ this.rotationYaw += 180.0F;
+ this.field_469_aj = !this.field_469_aj;
+ }
+
+ this.setRotation(this.rotationYaw, this.rotationPitch);
+ List var15 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expands((double)0.2F, 0.0D, (double)0.2F));
+ if(var15 != null && var15.size() > 0) {
+ for(int var45 = 0; var45 < var15.size(); ++var45) {
+ Entity var17 = (Entity)var15.get(var45);
+ if(var17 != this.field_328_f && var17.func_124_r() && var17 instanceof EntityMinecart) {
+ var17.applyEntityCollision(this);
+ }
+ }
+ }
+
+ if(this.field_328_f != null && this.field_328_f.field_304_B) {
+ this.field_328_f = null;
+ }
+
+ if(var6 && this.field_9064_W.nextInt(4) == 0) {
+ --this.field_9165_e;
+ if(this.field_9165_e < 0) {
+ this.field_9164_f = this.field_9166_aj = 0.0D;
+ }
+
+ this.worldObj.spawnParticle("largesmoke", this.posX, this.posY + 0.8D, this.posZ, 0.0D, 0.0D, 0.0D);
+ }
+
+ }
+ }
+
+ public Vec3D func_182_g(double var1, double var3, double var5) {
+ int var7 = MathHelper.floor_double(var1);
+ int var8 = MathHelper.floor_double(var3);
+ int var9 = MathHelper.floor_double(var5);
+ if(this.worldObj.getBlockId(var7, var8 - 1, var9) == Block.minecartTrack.blockID) {
+ --var8;
+ }
+
+ if(this.worldObj.getBlockId(var7, var8, var9) == Block.minecartTrack.blockID) {
+ int var10 = this.worldObj.getBlockMetadata(var7, var8, var9);
+ var3 = (double)var8;
+ if(var10 >= 2 && var10 <= 5) {
+ var3 = (double)(var8 + 1);
+ }
+
+ int[][] var11 = field_468_ak[var10];
+ double var12 = 0.0D;
+ double var14 = (double)var7 + 0.5D + (double)var11[0][0] * 0.5D;
+ double var16 = (double)var8 + 0.5D + (double)var11[0][1] * 0.5D;
+ double var18 = (double)var9 + 0.5D + (double)var11[0][2] * 0.5D;
+ double var20 = (double)var7 + 0.5D + (double)var11[1][0] * 0.5D;
+ double var22 = (double)var8 + 0.5D + (double)var11[1][1] * 0.5D;
+ double var24 = (double)var9 + 0.5D + (double)var11[1][2] * 0.5D;
+ double var26 = var20 - var14;
+ double var28 = (var22 - var16) * 2.0D;
+ double var30 = var24 - var18;
+ if(var26 == 0.0D) {
+ var1 = (double)var7 + 0.5D;
+ var12 = var5 - (double)var9;
+ } else if(var30 == 0.0D) {
+ var5 = (double)var9 + 0.5D;
+ var12 = var1 - (double)var7;
+ } else {
+ double var32 = var1 - var14;
+ double var34 = var5 - var18;
+ double var36 = (var32 * var26 + var34 * var30) * 2.0D;
+ var12 = var36;
+ }
+
+ var1 = var14 + var26 * var12;
+ var3 = var16 + var28 * var12;
+ var5 = var18 + var30 * var12;
+ if(var28 < 0.0D) {
+ ++var3;
+ }
+
+ if(var28 > 0.0D) {
+ var3 += 0.5D;
+ }
+
+ return Vec3D.createVector(var1, var3, var5);
+ } else {
+ return null;
+ }
+ }
+
+ protected void writeEntityToNBT(NBTTagCompound var1) {
+ var1.setInteger("Type", this.minecartType);
+ if(this.minecartType == 2) {
+ var1.setDouble("PushX", this.field_9164_f);
+ var1.setDouble("PushZ", this.field_9166_aj);
+ var1.setShort("Fuel", (short)this.field_9165_e);
+ } else if(this.minecartType == 1) {
+ NBTTagList var2 = new NBTTagList();
+
+ for(int var3 = 0; var3 < this.cargoItems.length; ++var3) {
+ if(this.cargoItems[var3] != null) {
+ NBTTagCompound var4 = new NBTTagCompound();
+ var4.setByte("Slot", (byte)var3);
+ this.cargoItems[var3].writeToNBT(var4);
+ var2.setTag(var4);
+ }
+ }
+
+ var1.setTag("Items", var2);
+ }
+
+ }
+
+ protected void readEntityFromNBT(NBTTagCompound var1) {
+ this.minecartType = var1.getInteger("Type");
+ if(this.minecartType == 2) {
+ this.field_9164_f = var1.getDouble("PushX");
+ this.field_9166_aj = var1.getDouble("PushZ");
+ this.field_9165_e = var1.getShort("Fuel");
+ } else if(this.minecartType == 1) {
+ NBTTagList var2 = var1.getTagList("Items");
+ this.cargoItems = new ItemStack[this.func_83_a()];
+
+ for(int var3 = 0; var3 < var2.tagCount(); ++var3) {
+ NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);
+ int var5 = var4.getByte("Slot") & 255;
+ if(var5 >= 0 && var5 < this.cargoItems.length) {
+ this.cargoItems[var5] = new ItemStack(var4);
+ }
+ }
+ }
+
+ }
+
+ public void applyEntityCollision(Entity var1) {
+ if(!this.worldObj.multiplayerWorld) {
+ if(var1 != this.field_328_f) {
+ if(var1 instanceof EntityLiving && !(var1 instanceof EntityPlayer) && this.minecartType == 0 && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.01D && this.field_328_f == null && var1.field_327_g == null) {
+ var1.func_6094_e(this);
+ }
+
+ double var2 = var1.posX - this.posX;
+ double var4 = var1.posZ - this.posZ;
+ double var6 = var2 * var2 + var4 * var4;
+ if(var6 >= (double)1.0E-4F) {
+ var6 = (double)MathHelper.sqrt_double(var6);
+ var2 /= var6;
+ var4 /= var6;
+ double var8 = 1.0D / var6;
+ if(var8 > 1.0D) {
+ var8 = 1.0D;
+ }
+
+ var2 *= var8;
+ var4 *= var8;
+ var2 *= (double)0.1F;
+ var4 *= (double)0.1F;
+ var2 *= (double)(1.0F - this.field_286_P);
+ var4 *= (double)(1.0F - this.field_286_P);
+ var2 *= 0.5D;
+ var4 *= 0.5D;
+ if(var1 instanceof EntityMinecart) {
+ double var10 = var1.motionX + this.motionX;
+ double var12 = var1.motionZ + this.motionZ;
+ if(((EntityMinecart)var1).minecartType == 2 && this.minecartType != 2) {
+ this.motionX *= (double)0.2F;
+ this.motionZ *= (double)0.2F;
+ this.addVelocity(var1.motionX - var2, 0.0D, var1.motionZ - var4);
+ var1.motionX *= (double)0.7F;
+ var1.motionZ *= (double)0.7F;
+ } else if(((EntityMinecart)var1).minecartType != 2 && this.minecartType == 2) {
+ var1.motionX *= (double)0.2F;
+ var1.motionZ *= (double)0.2F;
+ var1.addVelocity(this.motionX + var2, 0.0D, this.motionZ + var4);
+ this.motionX *= (double)0.7F;
+ this.motionZ *= (double)0.7F;
+ } else {
+ var10 /= 2.0D;
+ var12 /= 2.0D;
+ this.motionX *= (double)0.2F;
+ this.motionZ *= (double)0.2F;
+ this.addVelocity(var10 - var2, 0.0D, var12 - var4);
+ var1.motionX *= (double)0.2F;
+ var1.motionZ *= (double)0.2F;
+ var1.addVelocity(var10 + var2, 0.0D, var12 + var4);
+ }
+ } else {
+ this.addVelocity(-var2, 0.0D, -var4);
+ var1.addVelocity(var2 / 4.0D, 0.0D, var4 / 4.0D);
+ }
+ }
+
+ }
+ }
+ }
+
+ public int func_83_a() {
+ return 27;
+ }
+
+ public ItemStack getStackInSlot(int var1) {
+ return this.cargoItems[var1];
+ }
+
+ public boolean func_6092_a(EntityPlayer var1) {
+ if(this.minecartType == 0) {
+ if(this.field_328_f != null && this.field_328_f instanceof EntityPlayer && this.field_328_f != var1) {
+ return true;
+ }
+
+ if(!this.worldObj.multiplayerWorld) {
+ var1.func_6094_e(this);
+ }
+ } else if(this.minecartType == 1) {
+ var1.func_166_a(this);
+ } else if(this.minecartType == 2) {
+ ItemStack var2 = var1.inventory.getCurrentItem();
+ if(var2 != null && var2.itemID == Item.coal.swiftedIndex) {
+ if(--var2.stackSize == 0) {
+ var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null);
+ }
+
+ this.field_9165_e += 1200;
+ }
+
+ this.field_9164_f = this.posX - var1.posX;
+ this.field_9166_aj = this.posZ - var1.posZ;
+ }
+
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityMobs.java b/minecraft_server/src/net/minecraft/src/EntityMobs.java
new file mode 100644
index 0000000..437b723
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityMobs.java
@@ -0,0 +1,80 @@
+package net.minecraft.src;
+
+public class EntityMobs extends EntityCreature implements IMobs {
+ protected int field_404_af = 2;
+
+ public EntityMobs(World var1) {
+ super(var1);
+ this.field_9109_aQ = 20;
+ }
+
+ public void onLivingUpdate() {
+ float var1 = this.getEntityBrightness(1.0F);
+ if(var1 > 0.5F) {
+ this.field_9132_bn += 2;
+ }
+
+ super.onLivingUpdate();
+ }
+
+ public void onUpdate() {
+ super.onUpdate();
+ if(this.worldObj.monstersEnabled == 0) {
+ this.setEntityDead();
+ }
+
+ }
+
+ protected Entity func_158_i() {
+ EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, 16.0D);
+ return var1 != null && this.func_145_g(var1) ? var1 : null;
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ if(super.attackEntity(var1, var2)) {
+ if(this.field_328_f != var1 && this.field_327_g != var1) {
+ if(var1 != this) {
+ this.field_389_ag = var1;
+ }
+
+ return true;
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ protected void func_157_a(Entity var1, float var2) {
+ if((double)var2 < 2.5D && var1.boundingBox.maxY > this.boundingBox.minY && var1.boundingBox.minY < this.boundingBox.maxY) {
+ this.field_9103_aW = 20;
+ var1.attackEntity(this, this.field_404_af);
+ }
+
+ }
+
+ protected float func_159_a(int var1, int var2, int var3) {
+ return 0.5F - this.worldObj.getLightBrightness(var1, var2, var3);
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ }
+
+ public boolean getCanSpawnHere() {
+ int var1 = MathHelper.floor_double(this.posX);
+ int var2 = MathHelper.floor_double(this.boundingBox.minY);
+ int var3 = MathHelper.floor_double(this.posZ);
+ if(this.worldObj.getSavedLightValue(EnumSkyBlock.Sky, var1, var2, var3) > this.field_9064_W.nextInt(32)) {
+ return false;
+ } else {
+ int var4 = this.worldObj.getBlockLightValue(var1, var2, var3);
+ return var4 <= this.field_9064_W.nextInt(8) && super.getCanSpawnHere();
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityPainting.java b/minecraft_server/src/net/minecraft/src/EntityPainting.java
new file mode 100644
index 0000000..e55bef5
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityPainting.java
@@ -0,0 +1,213 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EntityPainting extends Entity {
+ private int field_452_ad;
+ public int field_448_a;
+ private int field_9188_d;
+ private int field_9187_e;
+ private int field_9186_f;
+ public EnumArt field_9185_b;
+
+ public EntityPainting(World var1) {
+ super(var1);
+ this.field_452_ad = 0;
+ this.field_448_a = 0;
+ this.yOffset = 0.0F;
+ this.setSize(0.5F, 0.5F);
+ }
+
+ public EntityPainting(World var1, int var2, int var3, int var4, int var5) {
+ this(var1);
+ this.field_9188_d = var2;
+ this.field_9187_e = var3;
+ this.field_9186_f = var4;
+ ArrayList var6 = new ArrayList();
+ EnumArt[] var7 = EnumArt.values();
+ int var8 = var7.length;
+
+ for(int var9 = 0; var9 < var8; ++var9) {
+ EnumArt var10 = var7[var9];
+ this.field_9185_b = var10;
+ this.func_179_a(var5);
+ if(this.func_181_b()) {
+ var6.add(var10);
+ }
+ }
+
+ if(var6.size() > 0) {
+ this.field_9185_b = (EnumArt)var6.get(this.field_9064_W.nextInt(var6.size()));
+ }
+
+ this.func_179_a(var5);
+ }
+
+ public void func_179_a(int var1) {
+ this.field_448_a = var1;
+ this.prevRotationYaw = this.rotationYaw = (float)(var1 * 90);
+ float var2 = (float)this.field_9185_b.field_856_z;
+ float var3 = (float)this.field_9185_b.field_869_A;
+ float var4 = (float)this.field_9185_b.field_856_z;
+ if(var1 != 0 && var1 != 2) {
+ var2 = 0.5F;
+ } else {
+ var4 = 0.5F;
+ }
+
+ var2 /= 32.0F;
+ var3 /= 32.0F;
+ var4 /= 32.0F;
+ float var5 = (float)this.field_9188_d + 0.5F;
+ float var6 = (float)this.field_9187_e + 0.5F;
+ float var7 = (float)this.field_9186_f + 0.5F;
+ float var8 = 9.0F / 16.0F;
+ if(var1 == 0) {
+ var7 -= var8;
+ }
+
+ if(var1 == 1) {
+ var5 -= var8;
+ }
+
+ if(var1 == 2) {
+ var7 += var8;
+ }
+
+ if(var1 == 3) {
+ var5 += var8;
+ }
+
+ if(var1 == 0) {
+ var5 -= this.func_180_c(this.field_9185_b.field_856_z);
+ }
+
+ if(var1 == 1) {
+ var7 += this.func_180_c(this.field_9185_b.field_856_z);
+ }
+
+ if(var1 == 2) {
+ var5 += this.func_180_c(this.field_9185_b.field_856_z);
+ }
+
+ if(var1 == 3) {
+ var7 -= this.func_180_c(this.field_9185_b.field_856_z);
+ }
+
+ var6 += this.func_180_c(this.field_9185_b.field_869_A);
+ this.setPosition((double)var5, (double)var6, (double)var7);
+ float var9 = -(0.1F / 16.0F);
+ this.boundingBox.setBounds((double)(var5 - var2 - var9), (double)(var6 - var3 - var9), (double)(var7 - var4 - var9), (double)(var5 + var2 + var9), (double)(var6 + var3 + var9), (double)(var7 + var4 + var9));
+ }
+
+ private float func_180_c(int var1) {
+ return var1 == 32 ? 0.5F : (var1 == 64 ? 0.5F : 0.0F);
+ }
+
+ public void onUpdate() {
+ if(this.field_452_ad++ == 100 && !this.func_181_b()) {
+ this.field_452_ad = 0;
+ this.setEntityDead();
+ this.worldObj.entityJoinedWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.painting)));
+ }
+
+ }
+
+ public boolean func_181_b() {
+ if(this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() > 0) {
+ return false;
+ } else {
+ int var1 = this.field_9185_b.field_856_z / 16;
+ int var2 = this.field_9185_b.field_869_A / 16;
+ int var3 = this.field_9188_d;
+ int var4 = this.field_9187_e;
+ int var5 = this.field_9186_f;
+ if(this.field_448_a == 0) {
+ var3 = MathHelper.floor_double(this.posX - (double)((float)this.field_9185_b.field_856_z / 32.0F));
+ }
+
+ if(this.field_448_a == 1) {
+ var5 = MathHelper.floor_double(this.posZ - (double)((float)this.field_9185_b.field_856_z / 32.0F));
+ }
+
+ if(this.field_448_a == 2) {
+ var3 = MathHelper.floor_double(this.posX - (double)((float)this.field_9185_b.field_856_z / 32.0F));
+ }
+
+ if(this.field_448_a == 3) {
+ var5 = MathHelper.floor_double(this.posZ - (double)((float)this.field_9185_b.field_856_z / 32.0F));
+ }
+
+ var4 = MathHelper.floor_double(this.posY - (double)((float)this.field_9185_b.field_869_A / 32.0F));
+
+ int var7;
+ for(int var6 = 0; var6 < var1; ++var6) {
+ for(var7 = 0; var7 < var2; ++var7) {
+ Material var8;
+ if(this.field_448_a != 0 && this.field_448_a != 2) {
+ var8 = this.worldObj.getBlockMaterial(this.field_9188_d, var4 + var7, var5 + var6);
+ } else {
+ var8 = this.worldObj.getBlockMaterial(var3 + var6, var4 + var7, this.field_9186_f);
+ }
+
+ if(!var8.func_216_a()) {
+ return false;
+ }
+ }
+ }
+
+ List var9 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox);
+
+ for(var7 = 0; var7 < var9.size(); ++var7) {
+ if(var9.get(var7) instanceof EntityPainting) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ }
+
+ public boolean func_129_c_() {
+ return true;
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ this.setEntityDead();
+ this.func_9060_u();
+ this.worldObj.entityJoinedWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.painting)));
+ return true;
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ var1.setByte("Dir", (byte)this.field_448_a);
+ var1.setString("Motive", this.field_9185_b.field_857_y);
+ var1.setInteger("TileX", this.field_9188_d);
+ var1.setInteger("TileY", this.field_9187_e);
+ var1.setInteger("TileZ", this.field_9186_f);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ this.field_448_a = var1.getByte("Dir");
+ this.field_9188_d = var1.getInteger("TileX");
+ this.field_9187_e = var1.getInteger("TileY");
+ this.field_9186_f = var1.getInteger("TileZ");
+ String var2 = var1.getString("Motive");
+ EnumArt[] var3 = EnumArt.values();
+ int var4 = var3.length;
+
+ for(int var5 = 0; var5 < var4; ++var5) {
+ EnumArt var6 = var3[var5];
+ if(var6.field_857_y.equals(var2)) {
+ this.field_9185_b = var6;
+ }
+ }
+
+ if(this.field_9185_b == null) {
+ this.field_9185_b = EnumArt.Kebab;
+ }
+
+ this.func_179_a(this.field_448_a);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityPig.java b/minecraft_server/src/net/minecraft/src/EntityPig.java
new file mode 100644
index 0000000..10282c6
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityPig.java
@@ -0,0 +1,47 @@
+package net.minecraft.src;
+
+public class EntityPig extends EntityAnimals {
+ public boolean rideable = false;
+
+ public EntityPig(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/pig.png";
+ this.setSize(0.9F, 0.9F);
+ this.rideable = false;
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ var1.setBoolean("Saddle", this.rideable);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ this.rideable = var1.getBoolean("Saddle");
+ }
+
+ protected String getLivingSound() {
+ return "mob.pig";
+ }
+
+ protected String getHurtSound() {
+ return "mob.pig";
+ }
+
+ protected String getDeathSound() {
+ return "mob.pigdeath";
+ }
+
+ public boolean func_6092_a(EntityPlayer var1) {
+ if(this.rideable) {
+ var1.func_6094_e(this);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ protected int getDropItemId() {
+ return Item.porkRaw.swiftedIndex;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityPigZombie.java b/minecraft_server/src/net/minecraft/src/EntityPigZombie.java
new file mode 100644
index 0000000..5dc9f9a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityPigZombie.java
@@ -0,0 +1,88 @@
+package net.minecraft.src;
+
+import java.util.List;
+
+public class EntityPigZombie extends EntityZombie {
+ private int field_4106_a = 0;
+ private int field_4105_b = 0;
+ private static final ItemStack field_4107_c = new ItemStack(Item.swordGold, 1);
+
+ public EntityPigZombie(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/pigzombie.png";
+ this.field_9126_bt = 0.5F;
+ this.field_404_af = 5;
+ this.field_9079_ae = true;
+ }
+
+ public void onUpdate() {
+ this.field_9126_bt = this.field_389_ag != null ? 0.95F : 0.5F;
+ if(this.field_4105_b > 0 && --this.field_4105_b == 0) {
+ this.worldObj.playSoundAtEntity(this, "mob.zombiepig.zpigangry", this.getSoundVolume() * 2.0F, ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F) * 1.8F);
+ }
+
+ super.onUpdate();
+ }
+
+ public boolean getCanSpawnHere() {
+ return this.worldObj.monstersEnabled > 0 && this.worldObj.func_522_a(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() == 0 && !this.worldObj.getIsAnyLiquid(this.boundingBox);
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ var1.setShort("Anger", (short)this.field_4106_a);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ this.field_4106_a = var1.getShort("Anger");
+ }
+
+ protected Entity func_158_i() {
+ return this.field_4106_a == 0 ? null : super.func_158_i();
+ }
+
+ public void onLivingUpdate() {
+ super.onLivingUpdate();
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ if(var1 instanceof EntityPlayer) {
+ List var3 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expands(32.0D, 32.0D, 32.0D));
+
+ for(int var4 = 0; var4 < var3.size(); ++var4) {
+ Entity var5 = (Entity)var3.get(var4);
+ if(var5 instanceof EntityPigZombie) {
+ EntityPigZombie var6 = (EntityPigZombie)var5;
+ var6.func_4047_h(var1);
+ }
+ }
+
+ this.func_4047_h(var1);
+ }
+
+ return super.attackEntity(var1, var2);
+ }
+
+ private void func_4047_h(Entity var1) {
+ this.field_389_ag = var1;
+ this.field_4106_a = 400 + this.field_9064_W.nextInt(400);
+ this.field_4105_b = this.field_9064_W.nextInt(40);
+ }
+
+ protected String getLivingSound() {
+ return "mob.zombiepig.zpig";
+ }
+
+ protected String getHurtSound() {
+ return "mob.zombiepig.zpighurt";
+ }
+
+ protected String getDeathSound() {
+ return "mob.zombiepig.zpigdeath";
+ }
+
+ protected int getDropItemId() {
+ return Item.porkCooked.swiftedIndex;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityPlayer.java b/minecraft_server/src/net/minecraft/src/EntityPlayer.java
new file mode 100644
index 0000000..97e0e24
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityPlayer.java
@@ -0,0 +1,266 @@
+package net.minecraft.src;
+
+import java.util.List;
+
+public class EntityPlayer extends EntityLiving {
+ public InventoryPlayer inventory = new InventoryPlayer(this);
+ public byte field_9152_am = 0;
+ public int field_9151_an = 0;
+ public float field_9150_ao;
+ public float field_9149_ap;
+ public boolean field_9148_aq = false;
+ public int field_9147_ar = 0;
+ public String username;
+ public int field_4110_as;
+ private int a = 0;
+ public EntityFish field_6124_at = null;
+
+ public EntityPlayer(World var1) {
+ super(var1);
+ this.yOffset = 1.62F;
+ this.func_107_c((double)var1.spawnX + 0.5D, (double)(var1.spawnY + 1), (double)var1.spawnZ + 0.5D, 0.0F, 0.0F);
+ this.field_9109_aQ = 20;
+ this.field_9116_aJ = "humanoid";
+ this.field_9117_aI = 180.0F;
+ this.field_9062_Y = 20;
+ this.field_9119_aG = "/mob/char.png";
+ }
+
+ public void func_115_v() {
+ super.func_115_v();
+ this.field_9150_ao = this.field_9149_ap;
+ this.field_9149_ap = 0.0F;
+ }
+
+ protected void func_152_d_() {
+ if(this.field_9148_aq) {
+ ++this.field_9147_ar;
+ if(this.field_9147_ar == 8) {
+ this.field_9147_ar = 0;
+ this.field_9148_aq = false;
+ }
+ } else {
+ this.field_9147_ar = 0;
+ }
+
+ this.field_9110_aP = (float)this.field_9147_ar / 8.0F;
+ }
+
+ public void onLivingUpdate() {
+ if(this.worldObj.monstersEnabled == 0 && this.field_9109_aQ < 20 && this.field_9063_X % 20 * 4 == 0) {
+ this.heal(1);
+ }
+
+ this.inventory.decrementAnimations();
+ this.field_9150_ao = this.field_9149_ap;
+ super.onLivingUpdate();
+ float var1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ float var2 = (float)Math.atan(-this.motionY * (double)0.2F) * 15.0F;
+ if(var1 > 0.1F) {
+ var1 = 0.1F;
+ }
+
+ if(!this.onGround || this.field_9109_aQ <= 0) {
+ var1 = 0.0F;
+ }
+
+ if(this.onGround || this.field_9109_aQ <= 0) {
+ var2 = 0.0F;
+ }
+
+ this.field_9149_ap += (var1 - this.field_9149_ap) * 0.4F;
+ this.field_9101_aY += (var2 - this.field_9101_aY) * 0.8F;
+ if(this.field_9109_aQ > 0) {
+ List var3 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expands(1.0D, 0.0D, 1.0D));
+ if(var3 != null) {
+ for(int var4 = 0; var4 < var3.size(); ++var4) {
+ this.func_171_h((Entity)var3.get(var4));
+ }
+ }
+ }
+
+ }
+
+ private void func_171_h(Entity var1) {
+ var1.onCollideWithPlayer(this);
+ }
+
+ public void onDeath(Entity var1) {
+ super.onDeath(var1);
+ this.setSize(0.2F, 0.2F);
+ this.setPosition(this.posX, this.posY, this.posZ);
+ this.motionY = (double)0.1F;
+ if(this.username.equals("Notch")) {
+ this.func_169_a(new ItemStack(Item.appleRed, 1), true);
+ }
+
+ this.inventory.dropAllItems();
+ if(var1 != null) {
+ this.motionX = (double)(-MathHelper.cos((this.field_9105_aU + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F);
+ this.motionZ = (double)(-MathHelper.sin((this.field_9105_aU + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F);
+ } else {
+ this.motionX = this.motionZ = 0.0D;
+ }
+
+ this.yOffset = 0.1F;
+ }
+
+ public void func_96_b(Entity var1, int var2) {
+ this.field_9151_an += var2;
+ }
+
+ public void func_161_a(ItemStack var1) {
+ this.func_169_a(var1, false);
+ }
+
+ public void func_169_a(ItemStack var1, boolean var2) {
+ if(var1 != null) {
+ EntityItem var3 = new EntityItem(this.worldObj, this.posX, this.posY - (double)0.3F + (double)this.func_104_p(), this.posZ, var1);
+ var3.field_433_ad = 40;
+ float var4 = 0.1F;
+ float var5;
+ if(var2) {
+ var5 = this.field_9064_W.nextFloat() * 0.5F;
+ float var6 = this.field_9064_W.nextFloat() * (float)Math.PI * 2.0F;
+ var3.motionX = (double)(-MathHelper.sin(var6) * var5);
+ var3.motionZ = (double)(MathHelper.cos(var6) * var5);
+ var3.motionY = (double)0.2F;
+ } else {
+ var4 = 0.3F;
+ var3.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var4);
+ var3.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var4);
+ var3.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var4 + 0.1F);
+ var4 = 0.02F;
+ var5 = this.field_9064_W.nextFloat() * (float)Math.PI * 2.0F;
+ var4 *= this.field_9064_W.nextFloat();
+ var3.motionX += Math.cos((double)var5) * (double)var4;
+ var3.motionY += (double)((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.1F);
+ var3.motionZ += Math.sin((double)var5) * (double)var4;
+ }
+
+ this.func_162_a(var3);
+ }
+ }
+
+ protected void func_162_a(EntityItem var1) {
+ this.worldObj.entityJoinedWorld(var1);
+ }
+
+ public float getCurrentPlayerStrVsBlock(Block var1) {
+ float var2 = this.inventory.getStrVsBlock(var1);
+ if(this.isInsideOfMaterial(Material.water)) {
+ var2 /= 5.0F;
+ }
+
+ if(!this.onGround) {
+ var2 /= 5.0F;
+ }
+
+ return var2;
+ }
+
+ public boolean func_167_b(Block var1) {
+ return this.inventory.canHarvestBlock(var1);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ NBTTagList var2 = var1.getTagList("Inventory");
+ this.inventory.readFromNBT(var2);
+ this.field_4110_as = var1.getInteger("Dimension");
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ var1.setTag("Inventory", this.inventory.writeToNBT(new NBTTagList()));
+ var1.setInteger("Dimension", this.field_4110_as);
+ }
+
+ public void func_166_a(IInventory var1) {
+ }
+
+ public void func_174_A() {
+ }
+
+ public void func_163_c(Entity var1, int var2) {
+ }
+
+ public float func_104_p() {
+ return 0.12F;
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ this.field_9132_bn = 0;
+ if(this.field_9109_aQ <= 0) {
+ return false;
+ } else {
+ if(var1 instanceof EntityMobs || var1 instanceof EntityArrow) {
+ if(this.worldObj.monstersEnabled == 0) {
+ var2 = 0;
+ }
+
+ if(this.worldObj.monstersEnabled == 1) {
+ var2 = var2 / 3 + 1;
+ }
+
+ if(this.worldObj.monstersEnabled == 3) {
+ var2 = var2 * 3 / 2;
+ }
+ }
+
+ return var2 == 0 ? false : super.attackEntity(var1, var2);
+ }
+ }
+
+ protected void func_6099_c(int var1) {
+ int var2 = 25 - this.inventory.getTotalArmorValue();
+ int var3 = var1 * var2 + this.a;
+ this.inventory.damageArmor(var1);
+ var1 = var3 / 25;
+ this.a = var3 % 25;
+ super.func_6099_c(var1);
+ }
+
+ public void func_170_a(TileEntityFurnace var1) {
+ }
+
+ public void func_4048_a(TileEntitySign var1) {
+ }
+
+ public void func_9145_g(Entity var1) {
+ var1.func_6092_a(this);
+ }
+
+ public ItemStack func_172_B() {
+ return this.inventory.getCurrentItem();
+ }
+
+ public void func_164_C() {
+ this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null);
+ }
+
+ public double func_117_x() {
+ return (double)(this.yOffset - 0.5F);
+ }
+
+ public void func_168_z() {
+ this.field_9147_ar = -1;
+ this.field_9148_aq = true;
+ }
+
+ public void func_9146_h(Entity var1) {
+ int var2 = this.inventory.func_9157_a(var1);
+ if(var2 > 0) {
+ var1.attackEntity(this, var2);
+ ItemStack var3 = this.func_172_B();
+ if(var3 != null && var1 instanceof EntityLiving) {
+ var3.func_9217_a((EntityLiving)var1);
+ if(var3.stackSize <= 0) {
+ var3.func_577_a(this);
+ this.func_164_C();
+ }
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityPlayerMP.java b/minecraft_server/src/net/minecraft/src/EntityPlayerMP.java
new file mode 100644
index 0000000..57415e6
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityPlayerMP.java
@@ -0,0 +1,169 @@
+package net.minecraft.src;
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import net.minecraft.server.MinecraftServer;
+
+public class EntityPlayerMP extends EntityPlayer {
+ public NetServerHandler field_421_a;
+ public MinecraftServer mcServer;
+ public ItemInWorldManager field_425_ad;
+ public double field_9155_d;
+ public double field_9154_e;
+ public List field_422_ag = new LinkedList();
+ public Set field_420_ah = new HashSet();
+ public double field_418_ai;
+ public boolean field_12012_al = false;
+ private int field_9156_bu = -99999999;
+ private int field_15004_bw = 60;
+
+ public EntityPlayerMP(MinecraftServer var1, World var2, String var3, ItemInWorldManager var4) {
+ super(var2);
+ int var5 = var2.spawnX;
+ int var6 = var2.spawnZ;
+ int var7 = var2.spawnY;
+ if(!var2.field_4272_q.field_4306_c) {
+ var5 += this.field_9064_W.nextInt(20) - 10;
+ var7 = var2.func_4075_e(var5, var6);
+ var6 += this.field_9064_W.nextInt(20) - 10;
+ }
+
+ this.func_107_c((double)var5 + 0.5D, (double)var7, (double)var6 + 0.5D, 0.0F, 0.0F);
+ this.mcServer = var1;
+ this.field_9067_S = 0.0F;
+ var4.field_675_a = this;
+ this.username = var3;
+ this.field_425_ad = var4;
+ this.yOffset = 0.0F;
+ }
+
+ public void onUpdate() {
+ --this.field_15004_bw;
+ }
+
+ public void onDeath(Entity var1) {
+ this.inventory.dropAllItems();
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ if(this.field_15004_bw > 0) {
+ return false;
+ } else {
+ if(!this.mcServer.field_9011_n) {
+ if(var1 instanceof EntityPlayer) {
+ return false;
+ }
+
+ if(var1 instanceof EntityArrow) {
+ EntityArrow var3 = (EntityArrow)var1;
+ if(var3.field_439_ah instanceof EntityPlayer) {
+ return false;
+ }
+ }
+ }
+
+ return super.attackEntity(var1, var2);
+ }
+ }
+
+ public void heal(int var1) {
+ super.heal(var1);
+ }
+
+ public void func_175_i() {
+ super.onUpdate();
+ ChunkCoordIntPair var1 = null;
+ double var2 = 0.0D;
+
+ for(int var4 = 0; var4 < this.field_422_ag.size(); ++var4) {
+ ChunkCoordIntPair var5 = (ChunkCoordIntPair)this.field_422_ag.get(var4);
+ double var6 = var5.func_73_a(this);
+ if(var4 == 0 || var6 < var2) {
+ var1 = var5;
+ var2 = var5.func_73_a(this);
+ }
+ }
+
+ if(var1 != null) {
+ boolean var8 = false;
+ if(var2 < 1024.0D) {
+ var8 = true;
+ }
+
+ if(this.field_421_a.func_38_b() < 2) {
+ var8 = true;
+ }
+
+ if(var8) {
+ this.field_422_ag.remove(var1);
+ this.field_421_a.sendPacket(new Packet51MapChunk(var1.field_152_a * 16, 0, var1.field_151_b * 16, 16, 128, 16, this.mcServer.worldMngr));
+ List var9 = this.mcServer.worldMngr.func_532_d(var1.field_152_a * 16, 0, var1.field_151_b * 16, var1.field_152_a * 16 + 16, 128, var1.field_151_b * 16 + 16);
+
+ for(int var10 = 0; var10 < var9.size(); ++var10) {
+ TileEntity var7 = (TileEntity)var9.get(var10);
+ this.field_421_a.sendPacket(new Packet59ComplexEntity(var7.xCoord, var7.yCoord, var7.zCoord, var7));
+ }
+ }
+ }
+
+ if(this.field_9109_aQ != this.field_9156_bu) {
+ this.field_421_a.sendPacket(new Packet8(this.field_9109_aQ));
+ this.field_9156_bu = this.field_9109_aQ;
+ }
+
+ }
+
+ public void onLivingUpdate() {
+ this.motionX = this.motionY = this.motionZ = 0.0D;
+ this.field_9128_br = false;
+ super.onLivingUpdate();
+ }
+
+ public void func_163_c(Entity var1, int var2) {
+ if(!var1.field_304_B) {
+ if(var1 instanceof EntityItem) {
+ this.field_421_a.sendPacket(new Packet17AddToInventory(((EntityItem)var1).item, var2));
+ this.mcServer.field_6028_k.func_12021_a(var1, new Packet22Collect(var1.field_331_c, this.field_331_c));
+ }
+
+ if(var1 instanceof EntityArrow) {
+ this.field_421_a.sendPacket(new Packet17AddToInventory(new ItemStack(Item.arrow), 1));
+ this.mcServer.field_6028_k.func_12021_a(var1, new Packet22Collect(var1.field_331_c, this.field_331_c));
+ }
+ }
+
+ super.func_163_c(var1, var2);
+ }
+
+ public void func_168_z() {
+ if(!this.field_9148_aq) {
+ this.field_9147_ar = -1;
+ this.field_9148_aq = true;
+ this.mcServer.field_6028_k.func_12021_a(this, new Packet18ArmAnimation(this, 1));
+ }
+
+ }
+
+ public float func_104_p() {
+ return 1.62F;
+ }
+
+ public void func_6094_e(Entity var1) {
+ super.func_6094_e(var1);
+ this.field_421_a.sendPacket(new Packet39(this, this.field_327_g));
+ this.field_421_a.func_41_a(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
+ }
+
+ protected void interact(double var1, boolean var3) {
+ }
+
+ public void func_9153_b(double var1, boolean var3) {
+ super.interact(var1, var3);
+ }
+
+ public boolean func_9059_p() {
+ return this.field_12012_al;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntitySheep.java b/minecraft_server/src/net/minecraft/src/EntitySheep.java
new file mode 100644
index 0000000..10b5b9e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntitySheep.java
@@ -0,0 +1,49 @@
+package net.minecraft.src;
+
+public class EntitySheep extends EntityAnimals {
+ public boolean sheared = false;
+
+ public EntitySheep(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/sheep.png";
+ this.setSize(0.9F, 1.3F);
+ }
+
+ public boolean attackEntity(Entity var1, int var2) {
+ if(!this.worldObj.multiplayerWorld && !this.sheared && var1 instanceof EntityLiving) {
+ this.sheared = true;
+ int var3 = 1 + this.field_9064_W.nextInt(3);
+
+ for(int var4 = 0; var4 < var3; ++var4) {
+ EntityItem var5 = this.dropItemWithOffset(Block.cloth.blockID, 1, 1.0F);
+ var5.motionY += (double)(this.field_9064_W.nextFloat() * 0.05F);
+ var5.motionX += (double)((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.1F);
+ var5.motionZ += (double)((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.1F);
+ }
+ }
+
+ return super.attackEntity(var1, var2);
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ var1.setBoolean("Sheared", this.sheared);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ this.sheared = var1.getBoolean("Sheared");
+ }
+
+ protected String getLivingSound() {
+ return "mob.sheep";
+ }
+
+ protected String getHurtSound() {
+ return "mob.sheep";
+ }
+
+ protected String getDeathSound() {
+ return "mob.sheep";
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntitySkeleton.java b/minecraft_server/src/net/minecraft/src/EntitySkeleton.java
new file mode 100644
index 0000000..f2f3b93
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntitySkeleton.java
@@ -0,0 +1,66 @@
+package net.minecraft.src;
+
+public class EntitySkeleton extends EntityMobs {
+ private static final ItemStack field_4108_a = new ItemStack(Item.bow, 1);
+
+ public EntitySkeleton(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/skeleton.png";
+ }
+
+ protected String getLivingSound() {
+ return "mob.skeleton";
+ }
+
+ protected String getHurtSound() {
+ return "mob.skeletonhurt";
+ }
+
+ protected String getDeathSound() {
+ return "mob.skeletonhurt";
+ }
+
+ public void onLivingUpdate() {
+ if(this.worldObj.isDaytime()) {
+ float var1 = this.getEntityBrightness(1.0F);
+ if(var1 > 0.5F && this.worldObj.canBlockSeeTheSky(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) && this.field_9064_W.nextFloat() * 30.0F < (var1 - 0.4F) * 2.0F) {
+ this.field_9061_Z = 300;
+ }
+ }
+
+ super.onLivingUpdate();
+ }
+
+ protected void func_157_a(Entity var1, float var2) {
+ if(var2 < 10.0F) {
+ double var3 = var1.posX - this.posX;
+ double var5 = var1.posZ - this.posZ;
+ if(this.field_9103_aW == 0) {
+ EntityArrow var7 = new EntityArrow(this.worldObj, this);
+ var7.posY += (double)1.4F;
+ double var8 = var1.posY - (double)0.2F - var7.posY;
+ float var10 = MathHelper.sqrt_double(var3 * var3 + var5 * var5) * 0.2F;
+ this.worldObj.playSoundAtEntity(this, "random.bow", 1.0F, 1.0F / (this.field_9064_W.nextFloat() * 0.4F + 0.8F));
+ this.worldObj.entityJoinedWorld(var7);
+ var7.func_177_a(var3, var8 + (double)var10, var5, 0.6F, 12.0F);
+ this.field_9103_aW = 30;
+ }
+
+ this.rotationYaw = (float)(Math.atan2(var5, var3) * 180.0D / (double)((float)Math.PI)) - 90.0F;
+ this.field_387_ah = true;
+ }
+
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ }
+
+ protected int getDropItemId() {
+ return Item.arrow.swiftedIndex;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntitySlime.java b/minecraft_server/src/net/minecraft/src/EntitySlime.java
new file mode 100644
index 0000000..882d973
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntitySlime.java
@@ -0,0 +1,129 @@
+package net.minecraft.src;
+
+public class EntitySlime extends EntityLiving implements IMobs {
+ public float field_401_a;
+ public float field_400_b;
+ private int field_402_ae = 0;
+ public int field_403_ad = 1;
+
+ public EntitySlime(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/slime.png";
+ this.field_403_ad = 1 << this.field_9064_W.nextInt(3);
+ this.yOffset = 0.0F;
+ this.field_402_ae = this.field_9064_W.nextInt(20) + 10;
+ this.func_160_c(this.field_403_ad);
+ }
+
+ public void func_160_c(int var1) {
+ this.field_403_ad = var1;
+ this.setSize(0.6F * (float)var1, 0.6F * (float)var1);
+ this.field_9109_aQ = var1 * var1;
+ this.setPosition(this.posX, this.posY, this.posZ);
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ var1.setInteger("Size", this.field_403_ad - 1);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ this.field_403_ad = var1.getInteger("Size") + 1;
+ }
+
+ public void onUpdate() {
+ this.field_400_b = this.field_401_a;
+ boolean var1 = this.onGround;
+ super.onUpdate();
+ if(this.onGround && !var1) {
+ for(int var2 = 0; var2 < this.field_403_ad * 8; ++var2) {
+ float var3 = this.field_9064_W.nextFloat() * (float)Math.PI * 2.0F;
+ float var4 = this.field_9064_W.nextFloat() * 0.5F + 0.5F;
+ float var5 = MathHelper.sin(var3) * (float)this.field_403_ad * 0.5F * var4;
+ float var6 = MathHelper.cos(var3) * (float)this.field_403_ad * 0.5F * var4;
+ this.worldObj.spawnParticle("slime", this.posX + (double)var5, this.boundingBox.minY, this.posZ + (double)var6, 0.0D, 0.0D, 0.0D);
+ }
+
+ if(this.field_403_ad > 2) {
+ this.worldObj.playSoundAtEntity(this, "mob.slime", this.getSoundVolume(), ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F) / 0.8F);
+ }
+
+ this.field_401_a = -0.5F;
+ }
+
+ this.field_401_a *= 0.6F;
+ }
+
+ protected void func_152_d_() {
+ EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, 16.0D);
+ if(var1 != null) {
+ this.func_147_b(var1, 10.0F);
+ }
+
+ if(this.onGround && this.field_402_ae-- <= 0) {
+ this.field_402_ae = this.field_9064_W.nextInt(20) + 10;
+ if(var1 != null) {
+ this.field_402_ae /= 3;
+ }
+
+ this.field_9128_br = true;
+ if(this.field_403_ad > 1) {
+ this.worldObj.playSoundAtEntity(this, "mob.slime", this.getSoundVolume(), ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F) * 0.8F);
+ }
+
+ this.field_401_a = 1.0F;
+ this.field_9131_bo = 1.0F - this.field_9064_W.nextFloat() * 2.0F;
+ this.field_9130_bp = (float)(1 * this.field_403_ad);
+ } else {
+ this.field_9128_br = false;
+ if(this.onGround) {
+ this.field_9131_bo = this.field_9130_bp = 0.0F;
+ }
+ }
+
+ }
+
+ public void setEntityDead() {
+ if(this.field_403_ad > 1 && this.field_9109_aQ == 0) {
+ for(int var1 = 0; var1 < 4; ++var1) {
+ float var2 = ((float)(var1 % 2) - 0.5F) * (float)this.field_403_ad / 4.0F;
+ float var3 = ((float)(var1 / 2) - 0.5F) * (float)this.field_403_ad / 4.0F;
+ EntitySlime var4 = new EntitySlime(this.worldObj);
+ var4.func_160_c(this.field_403_ad / 2);
+ var4.func_107_c(this.posX + (double)var2, this.posY + 0.5D, this.posZ + (double)var3, this.field_9064_W.nextFloat() * 360.0F, 0.0F);
+ this.worldObj.entityJoinedWorld(var4);
+ }
+ }
+
+ super.setEntityDead();
+ }
+
+ public void onCollideWithPlayer(EntityPlayer var1) {
+ if(this.field_403_ad > 1 && this.func_145_g(var1) && (double)this.getDistanceToEntity(var1) < 0.6D * (double)this.field_403_ad && var1.attackEntity(this, this.field_403_ad)) {
+ this.worldObj.playSoundAtEntity(this, "mob.slimeattack", 1.0F, (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F);
+ }
+
+ }
+
+ protected String getHurtSound() {
+ return "mob.slime";
+ }
+
+ protected String getDeathSound() {
+ return "mob.slime";
+ }
+
+ protected int getDropItemId() {
+ return this.field_403_ad == 1 ? Item.slimeBall.swiftedIndex : 0;
+ }
+
+ public boolean getCanSpawnHere() {
+ Chunk var1 = this.worldObj.getChunkFromBlockCoords(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posZ));
+ return (this.field_403_ad == 1 || this.worldObj.monstersEnabled > 0) && this.field_9064_W.nextInt(10) == 0 && var1.func_334_a(987234911L).nextInt(10) == 0 && this.posY < 16.0D;
+ }
+
+ protected float getSoundVolume() {
+ return 0.6F;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntitySnowball.java b/minecraft_server/src/net/minecraft/src/EntitySnowball.java
new file mode 100644
index 0000000..1c57765
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntitySnowball.java
@@ -0,0 +1,201 @@
+package net.minecraft.src;
+
+import java.util.List;
+
+public class EntitySnowball extends Entity {
+ private int field_456_b = -1;
+ private int field_461_ad = -1;
+ private int field_460_ae = -1;
+ private int field_459_af = 0;
+ private boolean field_457_ag = false;
+ public int field_458_a = 0;
+ private EntityLiving field_455_ah;
+ private int field_454_ai;
+ private int field_453_aj = 0;
+
+ public EntitySnowball(World var1) {
+ super(var1);
+ this.setSize(0.25F, 0.25F);
+ }
+
+ public EntitySnowball(World var1, EntityLiving var2) {
+ super(var1);
+ this.field_455_ah = var2;
+ this.setSize(0.25F, 0.25F);
+ this.func_107_c(var2.posX, var2.posY + (double)var2.func_104_p(), var2.posZ, var2.rotationYaw, var2.rotationPitch);
+ this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
+ this.posY -= (double)0.1F;
+ this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
+ this.setPosition(this.posX, this.posY, this.posZ);
+ this.yOffset = 0.0F;
+ float var3 = 0.4F;
+ this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3);
+ this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3);
+ this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var3);
+ this.func_6141_a(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F);
+ }
+
+ public void func_6141_a(double var1, double var3, double var5, float var7, float var8) {
+ float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5);
+ var1 /= (double)var9;
+ var3 /= (double)var9;
+ var5 /= (double)var9;
+ var1 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8;
+ var3 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8;
+ var5 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8;
+ var1 *= (double)var7;
+ var3 *= (double)var7;
+ var5 *= (double)var7;
+ this.motionX = var1;
+ this.motionY = var3;
+ this.motionZ = var5;
+ float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5);
+ this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI));
+ this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var10) * 180.0D / (double)((float)Math.PI));
+ this.field_454_ai = 0;
+ }
+
+ public void onUpdate() {
+ this.field_9071_O = this.posX;
+ this.field_9070_P = this.posY;
+ this.field_9069_Q = this.posZ;
+ super.onUpdate();
+ if(this.field_458_a > 0) {
+ --this.field_458_a;
+ }
+
+ if(this.field_457_ag) {
+ int var1 = this.worldObj.getBlockId(this.field_456_b, this.field_461_ad, this.field_460_ae);
+ if(var1 == this.field_459_af) {
+ ++this.field_454_ai;
+ if(this.field_454_ai == 1200) {
+ this.setEntityDead();
+ }
+
+ return;
+ }
+
+ this.field_457_ag = false;
+ this.motionX *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.motionY *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.motionZ *= (double)(this.field_9064_W.nextFloat() * 0.2F);
+ this.field_454_ai = 0;
+ this.field_453_aj = 0;
+ } else {
+ ++this.field_453_aj;
+ }
+
+ Vec3D var15 = Vec3D.createVector(this.posX, this.posY, this.posZ);
+ Vec3D var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
+ MovingObjectPosition var3 = this.worldObj.func_486_a(var15, var2);
+ var15 = Vec3D.createVector(this.posX, this.posY, this.posZ);
+ var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
+ if(var3 != null) {
+ var2 = Vec3D.createVector(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord);
+ }
+
+ if(!this.worldObj.multiplayerWorld) {
+ Entity var4 = null;
+ List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expands(1.0D, 1.0D, 1.0D));
+ double var6 = 0.0D;
+
+ for(int var8 = 0; var8 < var5.size(); ++var8) {
+ Entity var9 = (Entity)var5.get(var8);
+ if(var9.func_129_c_() && (var9 != this.field_455_ah || this.field_453_aj >= 5)) {
+ float var10 = 0.3F;
+ AxisAlignedBB var11 = var9.boundingBox.expands((double)var10, (double)var10, (double)var10);
+ MovingObjectPosition var12 = var11.func_706_a(var15, var2);
+ if(var12 != null) {
+ double var13 = var15.distanceTo(var12.hitVec);
+ if(var13 < var6 || var6 == 0.0D) {
+ var4 = var9;
+ var6 = var13;
+ }
+ }
+ }
+ }
+
+ if(var4 != null) {
+ var3 = new MovingObjectPosition(var4);
+ }
+ }
+
+ if(var3 != null) {
+ if(var3.entityHit != null && var3.entityHit.attackEntity(this.field_455_ah, 0)) {
+ }
+
+ for(int var16 = 0; var16 < 8; ++var16) {
+ this.worldObj.spawnParticle("snowballpoof", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);
+ }
+
+ this.setEntityDead();
+ }
+
+ this.posX += this.motionX;
+ this.posY += this.motionY;
+ this.posZ += this.motionZ;
+ float var17 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
+ this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI));
+
+ for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var17) * 180.0D / (double)((float)Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) {
+ }
+
+ while(this.rotationPitch - this.prevRotationPitch >= 180.0F) {
+ this.prevRotationPitch += 360.0F;
+ }
+
+ while(this.rotationYaw - this.prevRotationYaw < -180.0F) {
+ this.prevRotationYaw -= 360.0F;
+ }
+
+ while(this.rotationYaw - this.prevRotationYaw >= 180.0F) {
+ this.prevRotationYaw += 360.0F;
+ }
+
+ this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
+ this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
+ float var18 = 0.99F;
+ float var19 = 0.03F;
+ if(this.handleWaterMovement()) {
+ for(int var7 = 0; var7 < 4; ++var7) {
+ float var20 = 0.25F;
+ this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var20, this.posY - this.motionY * (double)var20, this.posZ - this.motionZ * (double)var20, this.motionX, this.motionY, this.motionZ);
+ }
+
+ var18 = 0.8F;
+ }
+
+ this.motionX *= (double)var18;
+ this.motionY *= (double)var18;
+ this.motionZ *= (double)var18;
+ this.motionY -= (double)var19;
+ this.setPosition(this.posX, this.posY, this.posZ);
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ var1.setShort("xTile", (short)this.field_456_b);
+ var1.setShort("yTile", (short)this.field_461_ad);
+ var1.setShort("zTile", (short)this.field_460_ae);
+ var1.setByte("inTile", (byte)this.field_459_af);
+ var1.setByte("shake", (byte)this.field_458_a);
+ var1.setByte("inGround", (byte)(this.field_457_ag ? 1 : 0));
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ this.field_456_b = var1.getShort("xTile");
+ this.field_461_ad = var1.getShort("yTile");
+ this.field_460_ae = var1.getShort("zTile");
+ this.field_459_af = var1.getByte("inTile") & 255;
+ this.field_458_a = var1.getByte("shake") & 255;
+ this.field_457_ag = var1.getByte("inGround") == 1;
+ }
+
+ public void onCollideWithPlayer(EntityPlayer var1) {
+ if(this.field_457_ag && this.field_455_ah == var1 && this.field_458_a <= 0 && var1.inventory.addItemStackToInventory(new ItemStack(Item.arrow.swiftedIndex, 1))) {
+ this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.7F + 1.0F) * 2.0F);
+ var1.func_163_c(this, 1);
+ this.setEntityDead();
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntitySpider.java b/minecraft_server/src/net/minecraft/src/EntitySpider.java
new file mode 100644
index 0000000..97b4929
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntitySpider.java
@@ -0,0 +1,69 @@
+package net.minecraft.src;
+
+public class EntitySpider extends EntityMobs {
+ public EntitySpider(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/spider.png";
+ this.setSize(1.4F, 0.9F);
+ this.field_9126_bt = 0.8F;
+ }
+
+ public double func_130_h() {
+ return (double)this.height * 0.75D - 0.5D;
+ }
+
+ protected Entity func_158_i() {
+ float var1 = this.getEntityBrightness(1.0F);
+ if(var1 < 0.5F) {
+ double var2 = 16.0D;
+ return this.worldObj.getClosestPlayerToEntity(this, var2);
+ } else {
+ return null;
+ }
+ }
+
+ protected String getLivingSound() {
+ return "mob.spider";
+ }
+
+ protected String getHurtSound() {
+ return "mob.spider";
+ }
+
+ protected String getDeathSound() {
+ return "mob.spiderdeath";
+ }
+
+ protected void func_157_a(Entity var1, float var2) {
+ float var3 = this.getEntityBrightness(1.0F);
+ if(var3 > 0.5F && this.field_9064_W.nextInt(100) == 0) {
+ this.field_389_ag = null;
+ } else {
+ if(var2 > 2.0F && var2 < 6.0F && this.field_9064_W.nextInt(10) == 0) {
+ if(this.onGround) {
+ double var4 = var1.posX - this.posX;
+ double var6 = var1.posZ - this.posZ;
+ float var8 = MathHelper.sqrt_double(var4 * var4 + var6 * var6);
+ this.motionX = var4 / (double)var8 * 0.5D * (double)0.8F + this.motionX * (double)0.2F;
+ this.motionZ = var6 / (double)var8 * 0.5D * (double)0.8F + this.motionZ * (double)0.2F;
+ this.motionY = (double)0.4F;
+ }
+ } else {
+ super.func_157_a(var1, var2);
+ }
+
+ }
+ }
+
+ public void writeEntityToNBT(NBTTagCompound var1) {
+ super.writeEntityToNBT(var1);
+ }
+
+ public void readEntityFromNBT(NBTTagCompound var1) {
+ super.readEntityFromNBT(var1);
+ }
+
+ protected int getDropItemId() {
+ return Item.silk.swiftedIndex;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityTNTPrimed.java b/minecraft_server/src/net/minecraft/src/EntityTNTPrimed.java
new file mode 100644
index 0000000..62b57ce
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityTNTPrimed.java
@@ -0,0 +1,68 @@
+package net.minecraft.src;
+
+public class EntityTNTPrimed extends Entity {
+ public int fuse;
+
+ public EntityTNTPrimed(World var1) {
+ super(var1);
+ this.fuse = 0;
+ this.field_329_e = true;
+ this.setSize(0.98F, 0.98F);
+ this.yOffset = this.height / 2.0F;
+ }
+
+ public EntityTNTPrimed(World var1, double var2, double var4, double var6) {
+ this(var1);
+ this.setPosition(var2, var4, var6);
+ float var8 = (float)(Math.random() * (double)((float)Math.PI) * 2.0D);
+ this.motionX = (double)(-MathHelper.sin(var8 * (float)Math.PI / 180.0F) * 0.02F);
+ this.motionY = (double)0.2F;
+ this.motionZ = (double)(-MathHelper.cos(var8 * (float)Math.PI / 180.0F) * 0.02F);
+ this.entityWalks = false;
+ this.fuse = 80;
+ this.prevPosX = var2;
+ this.prevPosY = var4;
+ this.prevPosZ = var6;
+ }
+
+ public boolean func_129_c_() {
+ return !this.field_304_B;
+ }
+
+ public void onUpdate() {
+ this.prevPosX = this.posX;
+ this.prevPosY = this.posY;
+ this.prevPosZ = this.posZ;
+ this.motionY -= (double)0.04F;
+ this.moveEntity(this.motionX, this.motionY, this.motionZ);
+ this.motionX *= (double)0.98F;
+ this.motionY *= (double)0.98F;
+ this.motionZ *= (double)0.98F;
+ if(this.onGround) {
+ this.motionX *= (double)0.7F;
+ this.motionZ *= (double)0.7F;
+ this.motionY *= -0.5D;
+ }
+
+ if(this.fuse-- <= 0) {
+ this.setEntityDead();
+ this.explode();
+ } else {
+ this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D);
+ }
+
+ }
+
+ private void explode() {
+ float var1 = 4.0F;
+ this.worldObj.func_12013_a((Entity)null, this.posX, this.posY, this.posZ, var1);
+ }
+
+ protected void writeEntityToNBT(NBTTagCompound var1) {
+ var1.setByte("Fuse", (byte)this.fuse);
+ }
+
+ protected void readEntityFromNBT(NBTTagCompound var1) {
+ this.fuse = var1.getByte("Fuse");
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityTracker.java b/minecraft_server/src/net/minecraft/src/EntityTracker.java
new file mode 100644
index 0000000..2689fff
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityTracker.java
@@ -0,0 +1,141 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import net.minecraft.server.MinecraftServer;
+
+public class EntityTracker {
+ private Set field_911_a = new HashSet();
+ private MCHashTable field_910_b = new MCHashTable();
+ private MinecraftServer mcServer;
+ private int field_912_d;
+
+ public EntityTracker(MinecraftServer var1) {
+ this.mcServer = var1;
+ this.field_912_d = var1.configManager.func_640_a();
+ }
+
+ public void func_611_a(Entity var1) {
+ if(var1 instanceof EntityPlayerMP) {
+ this.func_6187_a(var1, 512, 2);
+ EntityPlayerMP var2 = (EntityPlayerMP)var1;
+ Iterator var3 = this.field_911_a.iterator();
+
+ while(var3.hasNext()) {
+ EntityTrackerEntry var4 = (EntityTrackerEntry)var3.next();
+ if(var4.field_909_a != var2) {
+ var4.func_606_a(var2);
+ }
+ }
+ } else if(var1 instanceof EntityFish) {
+ this.func_6186_a(var1, 64, 5, true);
+ } else if(var1 instanceof EntityArrow) {
+ this.func_6186_a(var1, 64, 5, true);
+ } else if(var1 instanceof EntitySnowball) {
+ this.func_6186_a(var1, 64, 5, true);
+ } else if(var1 instanceof EntityItem) {
+ this.func_6186_a(var1, 64, 20, true);
+ } else if(var1 instanceof EntityMinecart) {
+ this.func_6186_a(var1, 160, 5, true);
+ } else if(var1 instanceof EntityBoat) {
+ this.func_6186_a(var1, 160, 5, true);
+ } else if(var1 instanceof IAnimals) {
+ this.func_6187_a(var1, 160, 3);
+ } else if(var1 instanceof EntityTNTPrimed) {
+ this.func_6186_a(var1, 160, 10, true);
+ }
+
+ }
+
+ public void func_6187_a(Entity var1, int var2, int var3) {
+ this.func_6186_a(var1, var2, var3, false);
+ }
+
+ public void func_6186_a(Entity var1, int var2, int var3, boolean var4) {
+ if(var2 > this.field_912_d) {
+ var2 = this.field_912_d;
+ }
+
+ if(this.field_910_b.containsItem(var1.field_331_c)) {
+ throw new IllegalStateException("Entity is already tracked!");
+ } else {
+ EntityTrackerEntry var5 = new EntityTrackerEntry(var1, var2, var3, var4);
+ this.field_911_a.add(var5);
+ this.field_910_b.addKey(var1.field_331_c, var5);
+ var5.func_601_b(this.mcServer.worldMngr.playerEntities);
+ }
+ }
+
+ public void func_610_b(Entity var1) {
+ if(var1 instanceof EntityPlayerMP) {
+ EntityPlayerMP var2 = (EntityPlayerMP)var1;
+ Iterator var3 = this.field_911_a.iterator();
+
+ while(var3.hasNext()) {
+ EntityTrackerEntry var4 = (EntityTrackerEntry)var3.next();
+ var4.func_12019_a(var2);
+ }
+ }
+
+ EntityTrackerEntry var5 = (EntityTrackerEntry)this.field_910_b.removeObject(var1.field_331_c);
+ if(var5 != null) {
+ this.field_911_a.remove(var5);
+ var5.func_604_a();
+ }
+
+ }
+
+ public void func_607_a() {
+ ArrayList var1 = new ArrayList();
+ Iterator var2 = this.field_911_a.iterator();
+
+ while(var2.hasNext()) {
+ EntityTrackerEntry var3 = (EntityTrackerEntry)var2.next();
+ var3.func_605_a(this.mcServer.worldMngr.playerEntities);
+ if(var3.field_900_j && var3.field_909_a instanceof EntityPlayerMP) {
+ var1.add((EntityPlayerMP)var3.field_909_a);
+ }
+ }
+
+ for(int var6 = 0; var6 < var1.size(); ++var6) {
+ EntityPlayerMP var7 = (EntityPlayerMP)var1.get(var6);
+ Iterator var4 = this.field_911_a.iterator();
+
+ while(var4.hasNext()) {
+ EntityTrackerEntry var5 = (EntityTrackerEntry)var4.next();
+ if(var5.field_909_a != var7) {
+ var5.func_606_a(var7);
+ }
+ }
+ }
+
+ }
+
+ public void func_12021_a(Entity var1, Packet var2) {
+ EntityTrackerEntry var3 = (EntityTrackerEntry)this.field_910_b.lookup(var1.field_331_c);
+ if(var3 != null) {
+ var3.func_603_a(var2);
+ }
+
+ }
+
+ public void func_609_a(Entity var1, Packet var2) {
+ EntityTrackerEntry var3 = (EntityTrackerEntry)this.field_910_b.lookup(var1.field_331_c);
+ if(var3 != null) {
+ var3.func_12018_b(var2);
+ }
+
+ }
+
+ public void func_9238_a(EntityPlayerMP var1) {
+ Iterator var2 = this.field_911_a.iterator();
+
+ while(var2.hasNext()) {
+ EntityTrackerEntry var3 = (EntityTrackerEntry)var2.next();
+ var3.func_9219_b(var1);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityTrackerEntry.java b/minecraft_server/src/net/minecraft/src/EntityTrackerEntry.java
new file mode 100644
index 0000000..69b50e2
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityTrackerEntry.java
@@ -0,0 +1,266 @@
+package net.minecraft.src;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+public class EntityTrackerEntry {
+ public Entity field_909_a;
+ public boolean field_9237_b = false;
+ public boolean field_9236_c = false;
+ public boolean field_9225_n = false;
+ public int field_9235_d;
+ public int field_9234_e;
+ public int field_9233_f;
+ public int field_9232_g;
+ public int field_9231_h;
+ public int field_9230_i;
+ public int field_9229_j;
+ public double field_9228_k;
+ public double field_9227_l;
+ public double field_9226_m;
+ public int field_9221_t = 0;
+ private double field_9224_q;
+ private double field_9223_r;
+ private double field_9222_s;
+ private boolean field_12020_u = false;
+ private boolean field_9220_u;
+ public boolean field_900_j = false;
+ public Set field_899_k = new HashSet();
+
+ public EntityTrackerEntry(Entity var1, int var2, int var3, boolean var4) {
+ this.field_909_a = var1;
+ this.field_9235_d = var2;
+ this.field_9234_e = var3;
+ this.field_9220_u = var4;
+ this.field_9233_f = MathHelper.floor_double(var1.posX * 32.0D);
+ this.field_9232_g = MathHelper.floor_double(var1.posY * 32.0D);
+ this.field_9231_h = MathHelper.floor_double(var1.posZ * 32.0D);
+ this.field_9230_i = MathHelper.floor_float(var1.rotationYaw * 256.0F / 360.0F);
+ this.field_9229_j = MathHelper.floor_float(var1.rotationPitch * 256.0F / 360.0F);
+ }
+
+ public boolean equals(Object var1) {
+ return var1 instanceof EntityTrackerEntry ? ((EntityTrackerEntry)var1).field_909_a.field_331_c == this.field_909_a.field_331_c : false;
+ }
+
+ public int hashCode() {
+ return this.field_909_a.field_331_c;
+ }
+
+ public void func_605_a(List var1) {
+ this.field_900_j = false;
+ if(!this.field_12020_u || this.field_909_a.getDistanceSq(this.field_9224_q, this.field_9223_r, this.field_9222_s) > 16.0D) {
+ this.field_9224_q = this.field_909_a.posX;
+ this.field_9223_r = this.field_909_a.posY;
+ this.field_9222_s = this.field_909_a.posZ;
+ this.field_12020_u = true;
+ this.field_900_j = true;
+ this.func_601_b(var1);
+ }
+
+ if(this.field_9221_t++ % this.field_9234_e == 0) {
+ int var2 = MathHelper.floor_double(this.field_909_a.posX * 32.0D);
+ int var3 = MathHelper.floor_double(this.field_909_a.posY * 32.0D);
+ int var4 = MathHelper.floor_double(this.field_909_a.posZ * 32.0D);
+ int var5 = MathHelper.floor_float(this.field_909_a.rotationYaw * 256.0F / 360.0F);
+ int var6 = MathHelper.floor_float(this.field_909_a.rotationPitch * 256.0F / 360.0F);
+ boolean var7 = var2 != this.field_9233_f || var3 != this.field_9232_g || var4 != this.field_9231_h;
+ boolean var8 = var5 != this.field_9230_i || var6 != this.field_9229_j;
+ int var9 = var2 - this.field_9233_f;
+ int var10 = var3 - this.field_9232_g;
+ int var11 = var4 - this.field_9231_h;
+ Object var12 = null;
+ if(var9 >= -128 && var9 < 128 && var10 >= -128 && var10 < 128 && var11 >= -128 && var11 < 128) {
+ if(var7 && var8) {
+ var12 = new Packet33RelEntityMoveLook(this.field_909_a.field_331_c, (byte)var9, (byte)var10, (byte)var11, (byte)var5, (byte)var6);
+ } else if(var7) {
+ var12 = new Packet31RelEntityMove(this.field_909_a.field_331_c, (byte)var9, (byte)var10, (byte)var11);
+ } else if(var8) {
+ var12 = new Packet32EntityLook(this.field_909_a.field_331_c, (byte)var5, (byte)var6);
+ } else {
+ var12 = new Packet30Entity(this.field_909_a.field_331_c);
+ }
+ } else {
+ var12 = new Packet34EntityTeleport(this.field_909_a.field_331_c, var2, var3, var4, (byte)var5, (byte)var6);
+ }
+
+ if(this.field_9220_u) {
+ double var13 = this.field_909_a.motionX - this.field_9228_k;
+ double var15 = this.field_909_a.motionY - this.field_9227_l;
+ double var17 = this.field_909_a.motionZ - this.field_9226_m;
+ double var19 = 0.02D;
+ double var21 = var13 * var13 + var15 * var15 + var17 * var17;
+ if(var21 > var19 * var19 || var21 > 0.0D && this.field_909_a.motionX == 0.0D && this.field_909_a.motionY == 0.0D && this.field_909_a.motionZ == 0.0D) {
+ this.field_9228_k = this.field_909_a.motionX;
+ this.field_9227_l = this.field_909_a.motionY;
+ this.field_9226_m = this.field_909_a.motionZ;
+ this.func_603_a(new Packet28(this.field_909_a.field_331_c, this.field_9228_k, this.field_9227_l, this.field_9226_m));
+ }
+ }
+
+ if(var12 != null) {
+ this.func_603_a((Packet)var12);
+ }
+
+ if(this.field_9237_b && this.field_909_a.field_327_g == null) {
+ this.field_9237_b = false;
+ this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 101));
+ } else if(!this.field_9237_b && this.field_909_a.field_327_g != null) {
+ this.field_9237_b = true;
+ this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 100));
+ }
+
+ if(this.field_909_a instanceof EntityLiving) {
+ if(this.field_9225_n && !this.field_909_a.func_9059_p()) {
+ this.field_9225_n = false;
+ this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 105));
+ } else if(!this.field_9225_n && this.field_909_a.func_9059_p()) {
+ this.field_9225_n = true;
+ this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 104));
+ }
+ }
+
+ if(this.field_9236_c && this.field_909_a.field_9061_Z <= 0) {
+ this.field_9236_c = false;
+ this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 103));
+ } else if(!this.field_9236_c && this.field_909_a.field_9061_Z > 0) {
+ this.field_9236_c = true;
+ this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 102));
+ }
+
+ this.field_9233_f = var2;
+ this.field_9232_g = var3;
+ this.field_9231_h = var4;
+ this.field_9230_i = var5;
+ this.field_9229_j = var6;
+ }
+
+ if(this.field_909_a.field_9078_E) {
+ this.func_12018_b(new Packet28(this.field_909_a));
+ this.field_909_a.field_9078_E = false;
+ }
+
+ }
+
+ public void func_603_a(Packet var1) {
+ Iterator var2 = this.field_899_k.iterator();
+
+ while(var2.hasNext()) {
+ EntityPlayerMP var3 = (EntityPlayerMP)var2.next();
+ var3.field_421_a.sendPacket(var1);
+ }
+
+ }
+
+ public void func_12018_b(Packet var1) {
+ this.func_603_a(var1);
+ if(this.field_909_a instanceof EntityPlayerMP) {
+ ((EntityPlayerMP)this.field_909_a).field_421_a.sendPacket(var1);
+ }
+
+ }
+
+ public void func_604_a() {
+ this.func_603_a(new Packet29DestroyEntity(this.field_909_a.field_331_c));
+ }
+
+ public void func_12019_a(EntityPlayerMP var1) {
+ if(this.field_899_k.contains(var1)) {
+ this.field_899_k.remove(var1);
+ }
+
+ }
+
+ public void func_606_a(EntityPlayerMP var1) {
+ if(var1 != this.field_909_a) {
+ double var2 = var1.posX - (double)(this.field_9233_f / 32);
+ double var4 = var1.posZ - (double)(this.field_9231_h / 32);
+ if(var2 >= (double)(-this.field_9235_d) && var2 <= (double)this.field_9235_d && var4 >= (double)(-this.field_9235_d) && var4 <= (double)this.field_9235_d) {
+ if(!this.field_899_k.contains(var1)) {
+ this.field_899_k.add(var1);
+ var1.field_421_a.sendPacket(this.func_602_b());
+ if(this.field_9225_n) {
+ var1.field_421_a.sendPacket(new Packet18ArmAnimation(this.field_909_a, 104));
+ }
+
+ if(this.field_9237_b) {
+ var1.field_421_a.sendPacket(new Packet18ArmAnimation(this.field_909_a, 100));
+ }
+
+ if(this.field_9236_c) {
+ var1.field_421_a.sendPacket(new Packet18ArmAnimation(this.field_909_a, 102));
+ }
+
+ if(this.field_9220_u) {
+ var1.field_421_a.sendPacket(new Packet28(this.field_909_a.field_331_c, this.field_909_a.motionX, this.field_909_a.motionY, this.field_909_a.motionZ));
+ }
+ }
+ } else if(this.field_899_k.contains(var1)) {
+ this.field_899_k.remove(var1);
+ var1.field_421_a.sendPacket(new Packet29DestroyEntity(this.field_909_a.field_331_c));
+ }
+
+ }
+ }
+
+ public void func_601_b(List var1) {
+ for(int var2 = 0; var2 < var1.size(); ++var2) {
+ this.func_606_a((EntityPlayerMP)var1.get(var2));
+ }
+
+ }
+
+ private Packet func_602_b() {
+ if(this.field_909_a instanceof EntityItem) {
+ EntityItem var3 = (EntityItem)this.field_909_a;
+ Packet21PickupSpawn var2 = new Packet21PickupSpawn(var3);
+ var3.posX = (double)var2.xPosition / 32.0D;
+ var3.posY = (double)var2.yPosition / 32.0D;
+ var3.posZ = (double)var2.zPosition / 32.0D;
+ return var2;
+ } else if(this.field_909_a instanceof EntityPlayerMP) {
+ return new Packet20NamedEntitySpawn((EntityPlayer)this.field_909_a);
+ } else {
+ if(this.field_909_a instanceof EntityMinecart) {
+ EntityMinecart var1 = (EntityMinecart)this.field_909_a;
+ if(var1.minecartType == 0) {
+ return new Packet23VehicleSpawn(this.field_909_a, 10);
+ }
+
+ if(var1.minecartType == 1) {
+ return new Packet23VehicleSpawn(this.field_909_a, 11);
+ }
+
+ if(var1.minecartType == 2) {
+ return new Packet23VehicleSpawn(this.field_909_a, 12);
+ }
+ }
+
+ if(this.field_909_a instanceof EntityBoat) {
+ return new Packet23VehicleSpawn(this.field_909_a, 1);
+ } else if(this.field_909_a instanceof IAnimals) {
+ return new Packet24MobSpawn((EntityLiving)this.field_909_a);
+ } else if(this.field_909_a instanceof EntityFish) {
+ return new Packet23VehicleSpawn(this.field_909_a, 90);
+ } else if(this.field_909_a instanceof EntityArrow) {
+ return new Packet23VehicleSpawn(this.field_909_a, 60);
+ } else if(this.field_909_a instanceof EntitySnowball) {
+ return new Packet23VehicleSpawn(this.field_909_a, 61);
+ } else if(this.field_909_a instanceof EntityTNTPrimed) {
+ return new Packet23VehicleSpawn(this.field_909_a, 50);
+ } else {
+ throw new IllegalArgumentException("Don\'t know how to add " + this.field_909_a.getClass() + "!");
+ }
+ }
+ }
+
+ public void func_9219_b(EntityPlayerMP var1) {
+ if(this.field_899_k.contains(var1)) {
+ this.field_899_k.remove(var1);
+ var1.field_421_a.sendPacket(new Packet29DestroyEntity(this.field_909_a.field_331_c));
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityZombie.java b/minecraft_server/src/net/minecraft/src/EntityZombie.java
new file mode 100644
index 0000000..1dc7bc5
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityZombie.java
@@ -0,0 +1,37 @@
+package net.minecraft.src;
+
+public class EntityZombie extends EntityMobs {
+ public EntityZombie(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/zombie.png";
+ this.field_9126_bt = 0.5F;
+ this.field_404_af = 5;
+ }
+
+ public void onLivingUpdate() {
+ if(this.worldObj.isDaytime()) {
+ float var1 = this.getEntityBrightness(1.0F);
+ if(var1 > 0.5F && this.worldObj.canBlockSeeTheSky(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) && this.field_9064_W.nextFloat() * 30.0F < (var1 - 0.4F) * 2.0F) {
+ this.field_9061_Z = 300;
+ }
+ }
+
+ super.onLivingUpdate();
+ }
+
+ protected String getLivingSound() {
+ return "mob.zombie";
+ }
+
+ protected String getHurtSound() {
+ return "mob.zombiehurt";
+ }
+
+ protected String getDeathSound() {
+ return "mob.zombiedeath";
+ }
+
+ protected int getDropItemId() {
+ return Item.feather.swiftedIndex;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EntityZombieSimple.java b/minecraft_server/src/net/minecraft/src/EntityZombieSimple.java
new file mode 100644
index 0000000..9f19e0b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EntityZombieSimple.java
@@ -0,0 +1,17 @@
+package net.minecraft.src;
+
+public class EntityZombieSimple extends EntityMobs {
+ public EntityZombieSimple(World var1) {
+ super(var1);
+ this.field_9119_aG = "/mob/zombie.png";
+ this.field_9126_bt = 0.5F;
+ this.field_404_af = 50;
+ this.field_9109_aQ *= 10;
+ this.yOffset *= 6.0F;
+ this.setSize(this.width * 6.0F, this.height * 6.0F);
+ }
+
+ protected float func_159_a(int var1, int var2, int var3) {
+ return this.worldObj.getLightBrightness(var1, var2, var3) - 0.5F;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EnumArt.java b/minecraft_server/src/net/minecraft/src/EnumArt.java
new file mode 100644
index 0000000..6aa7f0b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EnumArt.java
@@ -0,0 +1,42 @@
+package net.minecraft.src;
+
+public enum EnumArt {
+ Kebab("Kebab", 16, 16, 0, 0),
+ Aztec("Aztec", 16, 16, 16, 0),
+ Alban("Alban", 16, 16, 32, 0),
+ Aztec2("Aztec2", 16, 16, 48, 0),
+ Bomb("Bomb", 16, 16, 64, 0),
+ Plant("Plant", 16, 16, 80, 0),
+ Wasteland("Wasteland", 16, 16, 96, 0),
+ Pool("Pool", 32, 16, 0, 32),
+ Courbet("Courbet", 32, 16, 32, 32),
+ Sea("Sea", 32, 16, 64, 32),
+ Sunset("Sunset", 32, 16, 96, 32),
+ Creebet("Creebet", 32, 16, 128, 32),
+ Wanderer("Wanderer", 16, 32, 0, 64),
+ Graham("Graham", 16, 32, 16, 64),
+ Match("Match", 32, 32, 0, 128),
+ Bust("Bust", 32, 32, 32, 128),
+ Stage("Stage", 32, 32, 64, 128),
+ Void("Void", 32, 32, 96, 128),
+ SkullAndRoses("SkullAndRoses", 32, 32, 128, 128),
+ Fighters("Fighters", 64, 32, 0, 96),
+ Pointer("Pointer", 64, 64, 0, 192),
+ Pigscene("Pigscene", 64, 64, 64, 192),
+ Skeleton("Skeleton", 64, 48, 192, 64),
+ DonkeyKong("DonkeyKong", 64, 48, 192, 112);
+
+ public final String field_857_y;
+ public final int field_856_z;
+ public final int field_869_A;
+ public final int field_867_B;
+ public final int field_865_C;
+
+ private EnumArt(String var3, int var4, int var5, int var6, int var7) {
+ this.field_857_y = var3;
+ this.field_856_z = var4;
+ this.field_869_A = var5;
+ this.field_867_B = var6;
+ this.field_865_C = var7;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EnumCreatureType.java b/minecraft_server/src/net/minecraft/src/EnumCreatureType.java
new file mode 100644
index 0000000..c07b300
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EnumCreatureType.java
@@ -0,0 +1,14 @@
+package net.minecraft.src;
+
+public enum EnumCreatureType {
+ monster(IMobs.class, 100),
+ creature(EntityAnimals.class, 20);
+
+ public final Class field_4221_c;
+ public final int field_4220_d;
+
+ private EnumCreatureType(Class var3, int var4) {
+ this.field_4221_c = var3;
+ this.field_4220_d = var4;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/EnumMobType.java b/minecraft_server/src/net/minecraft/src/EnumMobType.java
new file mode 100644
index 0000000..609fdb7
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EnumMobType.java
@@ -0,0 +1,7 @@
+package net.minecraft.src;
+
+public enum EnumMobType {
+ everything,
+ mobs,
+ players;
+}
diff --git a/minecraft_server/src/net/minecraft/src/EnumSkyBlock.java b/minecraft_server/src/net/minecraft/src/EnumSkyBlock.java
new file mode 100644
index 0000000..302c123
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/EnumSkyBlock.java
@@ -0,0 +1,12 @@
+package net.minecraft.src;
+
+public enum EnumSkyBlock {
+ Sky(15),
+ Block(0);
+
+ public final int field_984_c;
+
+ private EnumSkyBlock(int var3) {
+ this.field_984_c = var3;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Explosion.java b/minecraft_server/src/net/minecraft/src/Explosion.java
new file mode 100644
index 0000000..99314da
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Explosion.java
@@ -0,0 +1,166 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+
+public class Explosion {
+ public boolean field_12031_a = false;
+ private Random field_12024_h = new Random();
+ private World field_4310_a;
+ public double field_12030_b;
+ public double field_12029_c;
+ public double field_12028_d;
+ public Entity field_12027_e;
+ public float field_12026_f;
+ public Set field_12025_g = new HashSet();
+
+ public Explosion(World var1, Entity var2, double var3, double var5, double var7, float var9) {
+ this.field_4310_a = var1;
+ this.field_12027_e = var2;
+ this.field_12026_f = var9;
+ this.field_12030_b = var3;
+ this.field_12029_c = var5;
+ this.field_12028_d = var7;
+ }
+
+ public void func_12023_a() {
+ float var1 = this.field_12026_f;
+ byte var2 = 16;
+
+ int var3;
+ int var4;
+ int var5;
+ double var15;
+ double var17;
+ double var19;
+ for(var3 = 0; var3 < var2; ++var3) {
+ for(var4 = 0; var4 < var2; ++var4) {
+ for(var5 = 0; var5 < var2; ++var5) {
+ if(var3 == 0 || var3 == var2 - 1 || var4 == 0 || var4 == var2 - 1 || var5 == 0 || var5 == var2 - 1) {
+ double var6 = (double)((float)var3 / ((float)var2 - 1.0F) * 2.0F - 1.0F);
+ double var8 = (double)((float)var4 / ((float)var2 - 1.0F) * 2.0F - 1.0F);
+ double var10 = (double)((float)var5 / ((float)var2 - 1.0F) * 2.0F - 1.0F);
+ double var12 = Math.sqrt(var6 * var6 + var8 * var8 + var10 * var10);
+ var6 /= var12;
+ var8 /= var12;
+ var10 /= var12;
+ float var14 = this.field_12026_f * (0.7F + this.field_4310_a.rand.nextFloat() * 0.6F);
+ var15 = this.field_12030_b;
+ var17 = this.field_12029_c;
+ var19 = this.field_12028_d;
+
+ for(float var21 = 0.3F; var14 > 0.0F; var14 -= var21 * (12.0F / 16.0F)) {
+ int var22 = MathHelper.floor_double(var15);
+ int var23 = MathHelper.floor_double(var17);
+ int var24 = MathHelper.floor_double(var19);
+ int var25 = this.field_4310_a.getBlockId(var22, var23, var24);
+ if(var25 > 0) {
+ var14 -= (Block.blocksList[var25].func_226_a(this.field_12027_e) + 0.3F) * var21;
+ }
+
+ if(var14 > 0.0F) {
+ this.field_12025_g.add(new ChunkPosition(var22, var23, var24));
+ }
+
+ var15 += var6 * (double)var21;
+ var17 += var8 * (double)var21;
+ var19 += var10 * (double)var21;
+ }
+ }
+ }
+ }
+ }
+
+ this.field_12026_f *= 2.0F;
+ var3 = MathHelper.floor_double(this.field_12030_b - (double)this.field_12026_f - 1.0D);
+ var4 = MathHelper.floor_double(this.field_12030_b + (double)this.field_12026_f + 1.0D);
+ var5 = MathHelper.floor_double(this.field_12029_c - (double)this.field_12026_f - 1.0D);
+ int var29 = MathHelper.floor_double(this.field_12029_c + (double)this.field_12026_f + 1.0D);
+ int var7 = MathHelper.floor_double(this.field_12028_d - (double)this.field_12026_f - 1.0D);
+ int var30 = MathHelper.floor_double(this.field_12028_d + (double)this.field_12026_f + 1.0D);
+ List var9 = this.field_4310_a.getEntitiesWithinAABBExcludingEntity(this.field_12027_e, AxisAlignedBB.getBoundingBoxFromPool((double)var3, (double)var5, (double)var7, (double)var4, (double)var29, (double)var30));
+ Vec3D var31 = Vec3D.createVector(this.field_12030_b, this.field_12029_c, this.field_12028_d);
+
+ for(int var11 = 0; var11 < var9.size(); ++var11) {
+ Entity var33 = (Entity)var9.get(var11);
+ double var13 = var33.getDistance(this.field_12030_b, this.field_12029_c, this.field_12028_d) / (double)this.field_12026_f;
+ if(var13 <= 1.0D) {
+ var15 = var33.posX - this.field_12030_b;
+ var17 = var33.posY - this.field_12029_c;
+ var19 = var33.posZ - this.field_12028_d;
+ double var39 = (double)MathHelper.sqrt_double(var15 * var15 + var17 * var17 + var19 * var19);
+ var15 /= var39;
+ var17 /= var39;
+ var19 /= var39;
+ double var40 = (double)this.field_4310_a.func_494_a(var31, var33.boundingBox);
+ double var41 = (1.0D - var13) * var40;
+ var33.attackEntity(this.field_12027_e, (int)((var41 * var41 + var41) / 2.0D * 8.0D * (double)this.field_12026_f + 1.0D));
+ var33.motionX += var15 * var41;
+ var33.motionY += var17 * var41;
+ var33.motionZ += var19 * var41;
+ }
+ }
+
+ this.field_12026_f = var1;
+ ArrayList var32 = new ArrayList();
+ var32.addAll(this.field_12025_g);
+ if(this.field_12031_a) {
+ for(int var34 = var32.size() - 1; var34 >= 0; --var34) {
+ ChunkPosition var35 = (ChunkPosition)var32.get(var34);
+ int var36 = var35.field_846_a;
+ int var37 = var35.field_845_b;
+ int var16 = var35.field_847_c;
+ int var38 = this.field_4310_a.getBlockId(var36, var37, var16);
+ int var18 = this.field_4310_a.getBlockId(var36, var37 - 1, var16);
+ if(var38 == 0 && Block.field_540_p[var18] && this.field_12024_h.nextInt(3) == 0) {
+ this.field_4310_a.setBlockWithNotify(var36, var37, var16, Block.fire.blockID);
+ }
+ }
+ }
+
+ }
+
+ public void func_732_a() {
+ this.field_4310_a.playSoundEffect(this.field_12030_b, this.field_12029_c, this.field_12028_d, "random.explode", 4.0F, (1.0F + (this.field_4310_a.rand.nextFloat() - this.field_4310_a.rand.nextFloat()) * 0.2F) * 0.7F);
+ ArrayList var1 = new ArrayList();
+ var1.addAll(this.field_12025_g);
+
+ for(int var2 = var1.size() - 1; var2 >= 0; --var2) {
+ ChunkPosition var3 = (ChunkPosition)var1.get(var2);
+ int var4 = var3.field_846_a;
+ int var5 = var3.field_845_b;
+ int var6 = var3.field_847_c;
+ int var7 = this.field_4310_a.getBlockId(var4, var5, var6);
+
+ for(int var8 = 0; var8 < 1; ++var8) {
+ double var9 = (double)((float)var4 + this.field_4310_a.rand.nextFloat());
+ double var11 = (double)((float)var5 + this.field_4310_a.rand.nextFloat());
+ double var13 = (double)((float)var6 + this.field_4310_a.rand.nextFloat());
+ double var15 = var9 - this.field_12030_b;
+ double var17 = var11 - this.field_12029_c;
+ double var19 = var13 - this.field_12028_d;
+ double var21 = (double)MathHelper.sqrt_double(var15 * var15 + var17 * var17 + var19 * var19);
+ var15 /= var21;
+ var17 /= var21;
+ var19 /= var21;
+ double var23 = 0.5D / (var21 / (double)this.field_12026_f + 0.1D);
+ var23 *= (double)(this.field_4310_a.rand.nextFloat() * this.field_4310_a.rand.nextFloat() + 0.3F);
+ var15 *= var23;
+ var17 *= var23;
+ var19 *= var23;
+ this.field_4310_a.spawnParticle("explode", (var9 + this.field_12030_b * 1.0D) / 2.0D, (var11 + this.field_12029_c * 1.0D) / 2.0D, (var13 + this.field_12028_d * 1.0D) / 2.0D, var15, var17, var19);
+ this.field_4310_a.spawnParticle("smoke", var9, var11, var13, var15, var17, var19);
+ }
+
+ if(var7 > 0) {
+ Block.blocksList[var7].dropBlockAsItemWithChance(this.field_4310_a, var4, var5, var6, this.field_4310_a.getBlockMetadata(var4, var5, var6), 0.3F);
+ this.field_4310_a.setBlockWithNotify(var4, var5, var6, 0);
+ Block.blocksList[var7].onBlockDestroyedByExplosion(this.field_4310_a, var4, var5, var6);
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/GuiLogFormatter.java b/minecraft_server/src/net/minecraft/src/GuiLogFormatter.java
new file mode 100644
index 0000000..d0868cc
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/GuiLogFormatter.java
@@ -0,0 +1,46 @@
+package net.minecraft.src;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.logging.Formatter;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+class GuiLogFormatter extends Formatter {
+ final GuiLogOutputHandler outputHandler;
+
+ GuiLogFormatter(GuiLogOutputHandler var1) {
+ this.outputHandler = var1;
+ }
+
+ public String format(LogRecord var1) {
+ StringBuilder var2 = new StringBuilder();
+ Level var3 = var1.getLevel();
+ if(var3 == Level.FINEST) {
+ var2.append("[FINEST] ");
+ } else if(var3 == Level.FINER) {
+ var2.append("[FINER] ");
+ } else if(var3 == Level.FINE) {
+ var2.append("[FINE] ");
+ } else if(var3 == Level.INFO) {
+ var2.append("[INFO] ");
+ } else if(var3 == Level.WARNING) {
+ var2.append("[WARNING] ");
+ } else if(var3 == Level.SEVERE) {
+ var2.append("[SEVERE] ");
+ } else if(var3 == Level.SEVERE) {
+ var2.append("[" + var3.getLocalizedName() + "] ");
+ }
+
+ var2.append(var1.getMessage());
+ var2.append('\n');
+ Throwable var4 = var1.getThrown();
+ if(var4 != null) {
+ StringWriter var5 = new StringWriter();
+ var4.printStackTrace(new PrintWriter(var5));
+ var2.append(var5.toString());
+ }
+
+ return var2.toString();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/GuiLogOutputHandler.java b/minecraft_server/src/net/minecraft/src/GuiLogOutputHandler.java
new file mode 100644
index 0000000..d245a6b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/GuiLogOutputHandler.java
@@ -0,0 +1,37 @@
+package net.minecraft.src;
+
+import java.util.logging.Formatter;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+import javax.swing.JTextArea;
+
+public class GuiLogOutputHandler extends Handler {
+ private int[] field_998_b = new int[1024];
+ private int field_1001_c = 0;
+ Formatter field_999_a = new GuiLogFormatter(this);
+ private JTextArea field_1000_d;
+
+ public GuiLogOutputHandler(JTextArea var1) {
+ this.setFormatter(this.field_999_a);
+ this.field_1000_d = var1;
+ }
+
+ public void close() {
+ }
+
+ public void flush() {
+ }
+
+ public void publish(LogRecord var1) {
+ int var2 = this.field_1000_d.getDocument().getLength();
+ this.field_1000_d.append(this.field_999_a.format(var1));
+ this.field_1000_d.setCaretPosition(this.field_1000_d.getDocument().getLength());
+ int var3 = this.field_1000_d.getDocument().getLength() - var2;
+ if(this.field_998_b[this.field_1001_c] != 0) {
+ this.field_1000_d.replaceRange("", 0, this.field_998_b[this.field_1001_c]);
+ }
+
+ this.field_998_b[this.field_1001_c] = var3;
+ this.field_1001_c = (this.field_1001_c + 1) % 1024;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/GuiStatsComponent.java b/minecraft_server/src/net/minecraft/src/GuiStatsComponent.java
new file mode 100644
index 0000000..b0e4a5f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/GuiStatsComponent.java
@@ -0,0 +1,56 @@
+package net.minecraft.src;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import javax.swing.JComponent;
+import javax.swing.Timer;
+
+public class GuiStatsComponent extends JComponent {
+ private int[] memoryUse = new int[256];
+ private int updateCounter = 0;
+ private String[] displayStrings = new String[10];
+
+ public GuiStatsComponent() {
+ this.setPreferredSize(new Dimension(256, 196));
+ this.setMinimumSize(new Dimension(256, 196));
+ this.setMaximumSize(new Dimension(256, 196));
+ (new Timer(500, new GuiStatsListener(this))).start();
+ this.setBackground(Color.BLACK);
+ }
+
+ private void updateStats() {
+ long var1 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
+ System.gc();
+ this.displayStrings[0] = "Memory use: " + var1 / 1024L / 1024L + " mb (" + Runtime.getRuntime().freeMemory() * 100L / Runtime.getRuntime().maxMemory() + "% free)";
+ this.displayStrings[1] = "Threads: " + NetworkManager.numReadThreads + " + " + NetworkManager.numWriteThreads;
+ this.memoryUse[this.updateCounter++ & 255] = (int)(var1 * 100L / Runtime.getRuntime().maxMemory());
+ this.repaint();
+ }
+
+ public void paint(Graphics var1) {
+ var1.setColor(new Color(16777215));
+ var1.fillRect(0, 0, 256, 192);
+
+ int var2;
+ for(var2 = 0; var2 < 256; ++var2) {
+ int var3 = this.memoryUse[var2 + this.updateCounter & 255];
+ var1.setColor(new Color(var3 + 28 << 16));
+ var1.fillRect(var2, 100 - var3, 1, var3);
+ }
+
+ var1.setColor(Color.BLACK);
+
+ for(var2 = 0; var2 < this.displayStrings.length; ++var2) {
+ String var4 = this.displayStrings[var2];
+ if(var4 != null) {
+ var1.drawString(var4, 32, 116 + var2 * 16);
+ }
+ }
+
+ }
+
+ static void update(GuiStatsComponent var0) {
+ var0.updateStats();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/GuiStatsListener.java b/minecraft_server/src/net/minecraft/src/GuiStatsListener.java
new file mode 100644
index 0000000..11323c8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/GuiStatsListener.java
@@ -0,0 +1,16 @@
+package net.minecraft.src;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+class GuiStatsListener implements ActionListener {
+ final GuiStatsComponent statsComponent;
+
+ GuiStatsListener(GuiStatsComponent var1) {
+ this.statsComponent = var1;
+ }
+
+ public void actionPerformed(ActionEvent var1) {
+ GuiStatsComponent.update(this.statsComponent);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/HashEntry.java b/minecraft_server/src/net/minecraft/src/HashEntry.java
new file mode 100644
index 0000000..1efe342
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/HashEntry.java
@@ -0,0 +1,50 @@
+package net.minecraft.src;
+
+class HashEntry {
+ final int field_841_a;
+ Object field_840_b;
+ HashEntry field_843_c;
+ final int field_842_d;
+
+ HashEntry(int var1, int var2, Object var3, HashEntry var4) {
+ this.field_840_b = var3;
+ this.field_843_c = var4;
+ this.field_841_a = var2;
+ this.field_842_d = var1;
+ }
+
+ public final int func_559_a() {
+ return this.field_841_a;
+ }
+
+ public final Object func_558_b() {
+ return this.field_840_b;
+ }
+
+ public final boolean equals(Object var1) {
+ if(!(var1 instanceof HashEntry)) {
+ return false;
+ } else {
+ HashEntry var2 = (HashEntry)var1;
+ Integer var3 = Integer.valueOf(this.func_559_a());
+ Integer var4 = Integer.valueOf(var2.func_559_a());
+ if(var3 == var4 || var3 != null && var3.equals(var4)) {
+ Object var5 = this.func_558_b();
+ Object var6 = var2.func_558_b();
+ if(var5 == var6 || var5 != null && var5.equals(var6)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+
+ public final int hashCode() {
+ return MCHashTable.getHash(this.field_841_a);
+ }
+
+ public final String toString() {
+ return this.func_559_a() + "=" + this.func_558_b();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/HashEntry2.java b/minecraft_server/src/net/minecraft/src/HashEntry2.java
new file mode 100644
index 0000000..4e0cbf2
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/HashEntry2.java
@@ -0,0 +1,50 @@
+package net.minecraft.src;
+
+class HashEntry2 {
+ final long field_1025_a;
+ Object field_1024_b;
+ HashEntry2 field_1027_c;
+ final int field_1026_d;
+
+ HashEntry2(int var1, long var2, Object var4, HashEntry2 var5) {
+ this.field_1024_b = var4;
+ this.field_1027_c = var5;
+ this.field_1025_a = var2;
+ this.field_1026_d = var1;
+ }
+
+ public final long func_736_a() {
+ return this.field_1025_a;
+ }
+
+ public final Object func_735_b() {
+ return this.field_1024_b;
+ }
+
+ public final boolean equals(Object var1) {
+ if(!(var1 instanceof HashEntry2)) {
+ return false;
+ } else {
+ HashEntry2 var2 = (HashEntry2)var1;
+ Long var3 = Long.valueOf(this.func_736_a());
+ Long var4 = Long.valueOf(var2.func_736_a());
+ if(var3 == var4 || var3 != null && var3.equals(var4)) {
+ Object var5 = this.func_735_b();
+ Object var6 = var2.func_735_b();
+ if(var5 == var6 || var5 != null && var5.equals(var6)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+
+ public final int hashCode() {
+ return MCHashTable2.func_674_d(this.field_1025_a);
+ }
+
+ public final String toString() {
+ return this.func_736_a() + "=" + this.func_735_b();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/IAnimals.java b/minecraft_server/src/net/minecraft/src/IAnimals.java
new file mode 100644
index 0000000..8592735
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/IAnimals.java
@@ -0,0 +1,4 @@
+package net.minecraft.src;
+
+public interface IAnimals {
+}
diff --git a/minecraft_server/src/net/minecraft/src/IBlockAccess.java b/minecraft_server/src/net/minecraft/src/IBlockAccess.java
new file mode 100644
index 0000000..d9ba267
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/IBlockAccess.java
@@ -0,0 +1,11 @@
+package net.minecraft.src;
+
+public interface IBlockAccess {
+ int getBlockId(int var1, int var2, int var3);
+
+ int getBlockMetadata(int var1, int var2, int var3);
+
+ Material getBlockMaterial(int var1, int var2, int var3);
+
+ boolean doesBlockAllowAttachment(int var1, int var2, int var3);
+}
diff --git a/minecraft_server/src/net/minecraft/src/IChunkLoader.java b/minecraft_server/src/net/minecraft/src/IChunkLoader.java
new file mode 100644
index 0000000..3fe0072
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/IChunkLoader.java
@@ -0,0 +1,15 @@
+package net.minecraft.src;
+
+import java.io.IOException;
+
+public interface IChunkLoader {
+ Chunk func_659_a(World var1, int var2, int var3) throws IOException;
+
+ void func_662_a(World var1, Chunk var2) throws IOException;
+
+ void func_4104_b(World var1, Chunk var2) throws IOException;
+
+ void func_661_a();
+
+ void func_660_b();
+}
diff --git a/minecraft_server/src/net/minecraft/src/IChunkProvider.java b/minecraft_server/src/net/minecraft/src/IChunkProvider.java
new file mode 100644
index 0000000..5360638
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/IChunkProvider.java
@@ -0,0 +1,15 @@
+package net.minecraft.src;
+
+public interface IChunkProvider {
+ boolean chunkExists(int var1, int var2);
+
+ Chunk func_363_b(int var1, int var2);
+
+ void populate(IChunkProvider var1, int var2, int var3);
+
+ boolean saveWorld(boolean var1, IProgressUpdate var2);
+
+ boolean func_361_a();
+
+ boolean func_364_b();
+}
diff --git a/minecraft_server/src/net/minecraft/src/ICommandListener.java b/minecraft_server/src/net/minecraft/src/ICommandListener.java
new file mode 100644
index 0000000..3f36305
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ICommandListener.java
@@ -0,0 +1,7 @@
+package net.minecraft.src;
+
+public interface ICommandListener {
+ void log(String var1);
+
+ String getUsername();
+}
diff --git a/minecraft_server/src/net/minecraft/src/IInventory.java b/minecraft_server/src/net/minecraft/src/IInventory.java
new file mode 100644
index 0000000..4cbe838
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/IInventory.java
@@ -0,0 +1,7 @@
+package net.minecraft.src;
+
+public interface IInventory {
+ int func_83_a();
+
+ ItemStack getStackInSlot(int var1);
+}
diff --git a/minecraft_server/src/net/minecraft/src/IMobs.java b/minecraft_server/src/net/minecraft/src/IMobs.java
new file mode 100644
index 0000000..d5ee18b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/IMobs.java
@@ -0,0 +1,4 @@
+package net.minecraft.src;
+
+public interface IMobs extends IAnimals {
+}
diff --git a/minecraft_server/src/net/minecraft/src/IProgressUpdate.java b/minecraft_server/src/net/minecraft/src/IProgressUpdate.java
new file mode 100644
index 0000000..6aae68a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/IProgressUpdate.java
@@ -0,0 +1,9 @@
+package net.minecraft.src;
+
+public interface IProgressUpdate {
+ void func_438_a(String var1);
+
+ void func_439_b(String var1);
+
+ void func_437_a(int var1);
+}
diff --git a/minecraft_server/src/net/minecraft/src/IUpdatePlayerListBox.java b/minecraft_server/src/net/minecraft/src/IUpdatePlayerListBox.java
new file mode 100644
index 0000000..cd69e50
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/IUpdatePlayerListBox.java
@@ -0,0 +1,5 @@
+package net.minecraft.src;
+
+public interface IUpdatePlayerListBox {
+ void update();
+}
diff --git a/minecraft_server/src/net/minecraft/src/IWorldAccess.java b/minecraft_server/src/net/minecraft/src/IWorldAccess.java
new file mode 100644
index 0000000..80eef2e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/IWorldAccess.java
@@ -0,0 +1,21 @@
+package net.minecraft.src;
+
+public interface IWorldAccess {
+ void func_683_a(int var1, int var2, int var3);
+
+ void func_685_a(int var1, int var2, int var3, int var4, int var5, int var6);
+
+ void playSound(String var1, double var2, double var4, double var6, float var8, float var9);
+
+ void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12);
+
+ void func_681_a(Entity var1);
+
+ void func_688_b(Entity var1);
+
+ void func_684_a();
+
+ void playRecord(String var1, int var2, int var3, int var4);
+
+ void func_686_a(int var1, int var2, int var3, TileEntity var4);
+}
diff --git a/minecraft_server/src/net/minecraft/src/InventoryLargeChest.java b/minecraft_server/src/net/minecraft/src/InventoryLargeChest.java
new file mode 100644
index 0000000..fce7ef0
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/InventoryLargeChest.java
@@ -0,0 +1,21 @@
+package net.minecraft.src;
+
+public class InventoryLargeChest implements IInventory {
+ private String name;
+ private IInventory upperChest;
+ private IInventory lowerChest;
+
+ public InventoryLargeChest(String var1, IInventory var2, IInventory var3) {
+ this.name = var1;
+ this.upperChest = var2;
+ this.lowerChest = var3;
+ }
+
+ public int func_83_a() {
+ return this.upperChest.func_83_a() + this.lowerChest.func_83_a();
+ }
+
+ public ItemStack getStackInSlot(int var1) {
+ return var1 >= this.upperChest.func_83_a() ? this.lowerChest.getStackInSlot(var1 - this.upperChest.func_83_a()) : this.upperChest.getStackInSlot(var1);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/InventoryPlayer.java b/minecraft_server/src/net/minecraft/src/InventoryPlayer.java
new file mode 100644
index 0000000..6d0f53f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/InventoryPlayer.java
@@ -0,0 +1,293 @@
+package net.minecraft.src;
+
+public class InventoryPlayer implements IInventory {
+ public ItemStack[] mainInventory = new ItemStack[37];
+ public ItemStack[] armorInventory = new ItemStack[4];
+ public ItemStack[] craftingInventory = new ItemStack[4];
+ public int currentItem = 0;
+ private EntityPlayer player;
+ public boolean field_498_e = false;
+
+ public InventoryPlayer(EntityPlayer var1) {
+ this.player = var1;
+ }
+
+ public ItemStack getCurrentItem() {
+ return this.mainInventory[this.currentItem];
+ }
+
+ private int func_6126_d(int var1) {
+ for(int var2 = 0; var2 < this.mainInventory.length; ++var2) {
+ if(this.mainInventory[var2] != null && this.mainInventory[var2].itemID == var1) {
+ return var2;
+ }
+ }
+
+ return -1;
+ }
+
+ private int getFirstPartialMatchingStack(int var1) {
+ for(int var2 = 0; var2 < this.mainInventory.length; ++var2) {
+ if(this.mainInventory[var2] != null && this.mainInventory[var2].itemID == var1 && this.mainInventory[var2].stackSize < this.mainInventory[var2].getMaxStackSize() && this.mainInventory[var2].stackSize < this.getInventoryStackLimit()) {
+ return var2;
+ }
+ }
+
+ return -1;
+ }
+
+ private int getFirstEmptyStack() {
+ for(int var1 = 0; var1 < this.mainInventory.length; ++var1) {
+ if(this.mainInventory[var1] == null) {
+ return var1;
+ }
+ }
+
+ return -1;
+ }
+
+ private int addItemsToInventory(int var1, int var2) {
+ int var3 = this.getFirstPartialMatchingStack(var1);
+ if(var3 < 0) {
+ var3 = this.getFirstEmptyStack();
+ }
+
+ if(var3 < 0) {
+ return var2;
+ } else {
+ if(this.mainInventory[var3] == null) {
+ this.mainInventory[var3] = new ItemStack(var1, 0);
+ }
+
+ int var4 = var2;
+ if(var2 > this.mainInventory[var3].getMaxStackSize() - this.mainInventory[var3].stackSize) {
+ var4 = this.mainInventory[var3].getMaxStackSize() - this.mainInventory[var3].stackSize;
+ }
+
+ if(var4 > this.getInventoryStackLimit() - this.mainInventory[var3].stackSize) {
+ var4 = this.getInventoryStackLimit() - this.mainInventory[var3].stackSize;
+ }
+
+ if(var4 == 0) {
+ return var2;
+ } else {
+ var2 -= var4;
+ this.mainInventory[var3].stackSize += var4;
+ this.mainInventory[var3].animationsToGo = 5;
+ return var2;
+ }
+ }
+ }
+
+ public void decrementAnimations() {
+ for(int var1 = 0; var1 < this.mainInventory.length; ++var1) {
+ if(this.mainInventory[var1] != null && this.mainInventory[var1].animationsToGo > 0) {
+ --this.mainInventory[var1].animationsToGo;
+ }
+ }
+
+ }
+
+ public boolean func_6127_b(int var1) {
+ int var2 = this.func_6126_d(var1);
+ if(var2 < 0) {
+ return false;
+ } else {
+ if(--this.mainInventory[var2].stackSize <= 0) {
+ this.mainInventory[var2] = null;
+ }
+
+ return true;
+ }
+ }
+
+ public boolean addItemStackToInventory(ItemStack var1) {
+ if(var1.itemDamage == 0) {
+ var1.stackSize = this.addItemsToInventory(var1.itemID, var1.stackSize);
+ if(var1.stackSize == 0) {
+ return true;
+ }
+ }
+
+ int var2 = this.getFirstEmptyStack();
+ if(var2 >= 0) {
+ this.mainInventory[var2] = var1;
+ this.mainInventory[var2].animationsToGo = 5;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public void setInventorySlotContents(int var1, ItemStack var2) {
+ ItemStack[] var3 = this.mainInventory;
+ if(var1 >= var3.length) {
+ var1 -= var3.length;
+ var3 = this.armorInventory;
+ }
+
+ if(var1 >= var3.length) {
+ var1 -= var3.length;
+ var3 = this.craftingInventory;
+ }
+
+ var3[var1] = var2;
+ }
+
+ public float getStrVsBlock(Block var1) {
+ float var2 = 1.0F;
+ if(this.mainInventory[this.currentItem] != null) {
+ var2 *= this.mainInventory[this.currentItem].getStrVsBlock(var1);
+ }
+
+ return var2;
+ }
+
+ public NBTTagList writeToNBT(NBTTagList var1) {
+ int var2;
+ NBTTagCompound var3;
+ for(var2 = 0; var2 < this.mainInventory.length; ++var2) {
+ if(this.mainInventory[var2] != null) {
+ var3 = new NBTTagCompound();
+ var3.setByte("Slot", (byte)var2);
+ this.mainInventory[var2].writeToNBT(var3);
+ var1.setTag(var3);
+ }
+ }
+
+ for(var2 = 0; var2 < this.armorInventory.length; ++var2) {
+ if(this.armorInventory[var2] != null) {
+ var3 = new NBTTagCompound();
+ var3.setByte("Slot", (byte)(var2 + 100));
+ this.armorInventory[var2].writeToNBT(var3);
+ var1.setTag(var3);
+ }
+ }
+
+ for(var2 = 0; var2 < this.craftingInventory.length; ++var2) {
+ if(this.craftingInventory[var2] != null) {
+ var3 = new NBTTagCompound();
+ var3.setByte("Slot", (byte)(var2 + 80));
+ this.craftingInventory[var2].writeToNBT(var3);
+ var1.setTag(var3);
+ }
+ }
+
+ return var1;
+ }
+
+ public void readFromNBT(NBTTagList var1) {
+ this.mainInventory = new ItemStack[36];
+ this.armorInventory = new ItemStack[4];
+ this.craftingInventory = new ItemStack[4];
+
+ for(int var2 = 0; var2 < var1.tagCount(); ++var2) {
+ NBTTagCompound var3 = (NBTTagCompound)var1.tagAt(var2);
+ int var4 = var3.getByte("Slot") & 255;
+ if(var4 >= 0 && var4 < this.mainInventory.length) {
+ this.mainInventory[var4] = new ItemStack(var3);
+ }
+
+ if(var4 >= 80 && var4 < this.craftingInventory.length + 80) {
+ this.craftingInventory[var4 - 80] = new ItemStack(var3);
+ }
+
+ if(var4 >= 100 && var4 < this.armorInventory.length + 100) {
+ this.armorInventory[var4 - 100] = new ItemStack(var3);
+ }
+ }
+
+ }
+
+ public int func_83_a() {
+ return this.mainInventory.length + 4;
+ }
+
+ public ItemStack getStackInSlot(int var1) {
+ ItemStack[] var2 = this.mainInventory;
+ if(var1 >= var2.length) {
+ var1 -= var2.length;
+ var2 = this.armorInventory;
+ }
+
+ if(var1 >= var2.length) {
+ var1 -= var2.length;
+ var2 = this.craftingInventory;
+ }
+
+ return var2[var1];
+ }
+
+ public int getInventoryStackLimit() {
+ return 64;
+ }
+
+ public int func_9157_a(Entity var1) {
+ ItemStack var2 = this.getStackInSlot(this.currentItem);
+ return var2 != null ? var2.func_9218_a(var1) : 1;
+ }
+
+ public boolean canHarvestBlock(Block var1) {
+ if(var1.blockMaterial != Material.rock && var1.blockMaterial != Material.iron && var1.blockMaterial != Material.builtSnow && var1.blockMaterial != Material.snow) {
+ return true;
+ } else {
+ ItemStack var2 = this.getStackInSlot(this.currentItem);
+ return var2 != null ? var2.func_573_b(var1) : false;
+ }
+ }
+
+ public int getTotalArmorValue() {
+ int var1 = 0;
+ int var2 = 0;
+ int var3 = 0;
+
+ for(int var4 = 0; var4 < this.armorInventory.length; ++var4) {
+ if(this.armorInventory[var4] != null && this.armorInventory[var4].getItem() instanceof ItemArmor) {
+ int var5 = this.armorInventory[var4].getMaxDamage();
+ int var6 = this.armorInventory[var4].itemDamage;
+ int var7 = var5 - var6;
+ var2 += var7;
+ var3 += var5;
+ int var8 = ((ItemArmor)this.armorInventory[var4].getItem()).field_256_aY;
+ var1 += var8;
+ }
+ }
+
+ if(var3 == 0) {
+ return 0;
+ } else {
+ return (var1 - 1) * var2 / var3 + 1;
+ }
+ }
+
+ public void damageArmor(int var1) {
+ for(int var2 = 0; var2 < this.armorInventory.length; ++var2) {
+ if(this.armorInventory[var2] != null && this.armorInventory[var2].getItem() instanceof ItemArmor) {
+ this.armorInventory[var2].damageItem(var1);
+ if(this.armorInventory[var2].stackSize == 0) {
+ this.armorInventory[var2].func_577_a(this.player);
+ this.armorInventory[var2] = null;
+ }
+ }
+ }
+
+ }
+
+ public void dropAllItems() {
+ int var1;
+ for(var1 = 0; var1 < this.mainInventory.length; ++var1) {
+ if(this.mainInventory[var1] != null) {
+ this.player.func_169_a(this.mainInventory[var1], true);
+ this.mainInventory[var1] = null;
+ }
+ }
+
+ for(var1 = 0; var1 < this.armorInventory.length; ++var1) {
+ if(this.armorInventory[var1] != null) {
+ this.player.func_169_a(this.armorInventory[var1], true);
+ this.armorInventory[var1] = null;
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Item.java b/minecraft_server/src/net/minecraft/src/Item.java
new file mode 100644
index 0000000..11d2a87
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Item.java
@@ -0,0 +1,166 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class Item {
+ protected static Random rand = new Random();
+ public static Item[] itemsList = new Item[32000];
+ public static Item shovelSteel = (new ItemSpade(0, 2)).setIconIndex(82);
+ public static Item pickaxeSteel = (new ItemPickaxe(1, 2)).setIconIndex(98);
+ public static Item axeSteel = (new ItemAxe(2, 2)).setIconIndex(114);
+ public static Item flintAndSteel = (new ItemFlintAndSteel(3)).setIconIndex(5);
+ public static Item appleRed = (new ItemFood(4, 4)).setIconIndex(10);
+ public static Item bow = (new ItemBow(5)).setIconIndex(21);
+ public static Item arrow = (new Item(6)).setIconIndex(37);
+ public static Item coal = (new Item(7)).setIconIndex(7);
+ public static Item diamond = (new Item(8)).setIconIndex(55);
+ public static Item ingotIron = (new Item(9)).setIconIndex(23);
+ public static Item ingotGold = (new Item(10)).setIconIndex(39);
+ public static Item swordSteel = (new ItemSword(11, 2)).setIconIndex(66);
+ public static Item swordWood = (new ItemSword(12, 0)).setIconIndex(64);
+ public static Item shovelWood = (new ItemSpade(13, 0)).setIconIndex(80);
+ public static Item pickaxeWood = (new ItemPickaxe(14, 0)).setIconIndex(96);
+ public static Item axeWood = (new ItemAxe(15, 0)).setIconIndex(112);
+ public static Item swordStone = (new ItemSword(16, 1)).setIconIndex(65);
+ public static Item shovelStone = (new ItemSpade(17, 1)).setIconIndex(81);
+ public static Item pickaxeStone = (new ItemPickaxe(18, 1)).setIconIndex(97);
+ public static Item axeStone = (new ItemAxe(19, 1)).setIconIndex(113);
+ public static Item swordDiamond = (new ItemSword(20, 3)).setIconIndex(67);
+ public static Item shovelDiamond = (new ItemSpade(21, 3)).setIconIndex(83);
+ public static Item pickaxeDiamond = (new ItemPickaxe(22, 3)).setIconIndex(99);
+ public static Item axeDiamond = (new ItemAxe(23, 3)).setIconIndex(115);
+ public static Item stick = (new Item(24)).setIconIndex(53).setFull3D();
+ public static Item bowlEmpty = (new Item(25)).setIconIndex(71);
+ public static Item bowlSoup = (new ItemSoup(26, 10)).setIconIndex(72);
+ public static Item swordGold = (new ItemSword(27, 0)).setIconIndex(68);
+ public static Item shovelGold = (new ItemSpade(28, 0)).setIconIndex(84);
+ public static Item pickaxeGold = (new ItemPickaxe(29, 0)).setIconIndex(100);
+ public static Item axeGold = (new ItemAxe(30, 0)).setIconIndex(116);
+ public static Item silk = (new Item(31)).setIconIndex(8);
+ public static Item feather = (new Item(32)).setIconIndex(24);
+ public static Item gunpowder = (new Item(33)).setIconIndex(40);
+ public static Item hoeWood = (new ItemHoe(34, 0)).setIconIndex(128);
+ public static Item hoeStone = (new ItemHoe(35, 1)).setIconIndex(129);
+ public static Item hoeSteel = (new ItemHoe(36, 2)).setIconIndex(130);
+ public static Item hoeDiamond = (new ItemHoe(37, 3)).setIconIndex(131);
+ public static Item hoeGold = (new ItemHoe(38, 1)).setIconIndex(132);
+ public static Item seeds = (new ItemSeeds(39, Block.crops.blockID)).setIconIndex(9);
+ public static Item wheat = (new Item(40)).setIconIndex(25);
+ public static Item bread = (new ItemFood(41, 5)).setIconIndex(41);
+ public static Item helmetLeather = (new ItemArmor(42, 0, 0, 0)).setIconIndex(0);
+ public static Item plateLeather = (new ItemArmor(43, 0, 0, 1)).setIconIndex(16);
+ public static Item legsLeather = (new ItemArmor(44, 0, 0, 2)).setIconIndex(32);
+ public static Item bootsLeather = (new ItemArmor(45, 0, 0, 3)).setIconIndex(48);
+ public static Item helmetChain = (new ItemArmor(46, 1, 1, 0)).setIconIndex(1);
+ public static Item plateChain = (new ItemArmor(47, 1, 1, 1)).setIconIndex(17);
+ public static Item legsChain = (new ItemArmor(48, 1, 1, 2)).setIconIndex(33);
+ public static Item bootsChain = (new ItemArmor(49, 1, 1, 3)).setIconIndex(49);
+ public static Item helmetSteel = (new ItemArmor(50, 2, 2, 0)).setIconIndex(2);
+ public static Item plateSteel = (new ItemArmor(51, 2, 2, 1)).setIconIndex(18);
+ public static Item legsSteel = (new ItemArmor(52, 2, 2, 2)).setIconIndex(34);
+ public static Item bootsSteel = (new ItemArmor(53, 2, 2, 3)).setIconIndex(50);
+ public static Item helmetDiamond = (new ItemArmor(54, 3, 3, 0)).setIconIndex(3);
+ public static Item plateDiamond = (new ItemArmor(55, 3, 3, 1)).setIconIndex(19);
+ public static Item legsDiamond = (new ItemArmor(56, 3, 3, 2)).setIconIndex(35);
+ public static Item bootsDiamond = (new ItemArmor(57, 3, 3, 3)).setIconIndex(51);
+ public static Item helmetGold = (new ItemArmor(58, 1, 4, 0)).setIconIndex(4);
+ public static Item plateGold = (new ItemArmor(59, 1, 4, 1)).setIconIndex(20);
+ public static Item legsGold = (new ItemArmor(60, 1, 4, 2)).setIconIndex(36);
+ public static Item bootsGold = (new ItemArmor(61, 1, 4, 3)).setIconIndex(52);
+ public static Item flint = (new Item(62)).setIconIndex(6);
+ public static Item porkRaw = (new ItemFood(63, 3)).setIconIndex(87);
+ public static Item porkCooked = (new ItemFood(64, 8)).setIconIndex(88);
+ public static Item painting = (new ItemPainting(65)).setIconIndex(26);
+ public static Item appleGold = (new ItemFood(66, 42)).setIconIndex(11);
+ public static Item sign = (new ItemSign(67)).setIconIndex(42);
+ public static Item doorWood = (new ItemDoor(68, Material.wood)).setIconIndex(43);
+ public static Item bucketEmpty = (new ItemBucket(69, 0)).setIconIndex(74);
+ public static Item bucketWater = (new ItemBucket(70, Block.waterStill.blockID)).setIconIndex(75);
+ public static Item bucketLava = (new ItemBucket(71, Block.lavaStill.blockID)).setIconIndex(76);
+ public static Item minecartEmpty = (new ItemMinecart(72, 0)).setIconIndex(135);
+ public static Item saddle = (new ItemSaddle(73)).setIconIndex(104);
+ public static Item doorSteel = (new ItemDoor(74, Material.iron)).setIconIndex(44);
+ public static Item redstone = (new ItemRedstone(75)).setIconIndex(56);
+ public static Item snowball = (new ItemSnowball(76)).setIconIndex(14);
+ public static Item boat = (new ItemBoat(77)).setIconIndex(136);
+ public static Item leather = (new Item(78)).setIconIndex(103);
+ public static Item bucketMilk = (new ItemBucket(79, -1)).setIconIndex(77);
+ public static Item brick = (new Item(80)).setIconIndex(22);
+ public static Item clay = (new Item(81)).setIconIndex(57);
+ public static Item reed = (new ItemReed(82, Block.reed)).setIconIndex(27);
+ public static Item paper = (new Item(83)).setIconIndex(58);
+ public static Item book = (new Item(84)).setIconIndex(59);
+ public static Item slimeBall = (new Item(85)).setIconIndex(30);
+ public static Item minecartCrate = (new ItemMinecart(86, 1)).setIconIndex(151);
+ public static Item minecartPowered = (new ItemMinecart(87, 2)).setIconIndex(167);
+ public static Item egg = (new Item(88)).setIconIndex(12);
+ public static Item compass = (new Item(89)).setIconIndex(54);
+ public static Item fishingRod = (new ItemFishingRod(90)).setIconIndex(69);
+ public static Item pocketSundial = (new Item(91)).setIconIndex(70);
+ public static Item lightStoneDust = (new Item(92)).setIconIndex(73);
+ public static Item fishRaw = (new ItemFood(93, 2)).setIconIndex(89);
+ public static Item fishCooked = (new ItemFood(94, 5)).setIconIndex(90);
+ public static Item record13 = (new ItemRecord(2000, "13")).setIconIndex(240);
+ public static Item recordCat = (new ItemRecord(2001, "cat")).setIconIndex(241);
+ public final int swiftedIndex;
+ protected int maxStackSize = 64;
+ protected int maxDamage = 32;
+ protected int iconIndex;
+ protected boolean bFull3D = false;
+
+ protected Item(int var1) {
+ this.swiftedIndex = 256 + var1;
+ if(itemsList[256 + var1] != null) {
+ System.out.println("CONFLICT @ " + var1);
+ }
+
+ itemsList[256 + var1] = this;
+ }
+
+ public Item setIconIndex(int var1) {
+ this.iconIndex = var1;
+ return this;
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ return false;
+ }
+
+ public float getStrVsBlock(ItemStack var1, Block var2) {
+ return 1.0F;
+ }
+
+ public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) {
+ return var1;
+ }
+
+ public int getItemStackLimit() {
+ return this.maxStackSize;
+ }
+
+ public int getMaxDamage() {
+ return this.maxDamage;
+ }
+
+ public void func_9201_a(ItemStack var1, EntityLiving var2) {
+ }
+
+ public void hitBlock(ItemStack var1, int var2, int var3, int var4, int var5) {
+ }
+
+ public int func_9203_a(Entity var1) {
+ return 1;
+ }
+
+ public boolean canHarvestBlock(Block var1) {
+ return false;
+ }
+
+ public void func_9202_b(ItemStack var1, EntityLiving var2) {
+ }
+
+ public Item setFull3D() {
+ this.bFull3D = true;
+ return this;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemArmor.java b/minecraft_server/src/net/minecraft/src/ItemArmor.java
new file mode 100644
index 0000000..5bc696b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemArmor.java
@@ -0,0 +1,20 @@
+package net.minecraft.src;
+
+public class ItemArmor extends Item {
+ private static final int[] field_259_ba = new int[]{3, 8, 6, 3};
+ private static final int[] field_258_bb = new int[]{11, 16, 15, 13};
+ public final int field_254_a;
+ public final int field_257_aX;
+ public final int field_256_aY;
+ public final int field_255_aZ;
+
+ public ItemArmor(int var1, int var2, int var3, int var4) {
+ super(var1);
+ this.field_254_a = var2;
+ this.field_257_aX = var4;
+ this.field_255_aZ = var3;
+ this.field_256_aY = field_259_ba[var4];
+ this.maxDamage = field_258_bb[var4] * 3 << var2;
+ this.maxStackSize = 1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemAxe.java b/minecraft_server/src/net/minecraft/src/ItemAxe.java
new file mode 100644
index 0000000..666111b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemAxe.java
@@ -0,0 +1,9 @@
+package net.minecraft.src;
+
+public class ItemAxe extends ItemTool {
+ private static Block[] field_4207_bb = new Block[]{Block.planks, Block.bookShelf, Block.wood, Block.crate};
+
+ public ItemAxe(int var1, int var2) {
+ super(var1, 3, var2, field_4207_bb);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemBlock.java b/minecraft_server/src/net/minecraft/src/ItemBlock.java
new file mode 100644
index 0000000..9970ea8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemBlock.java
@@ -0,0 +1,57 @@
+package net.minecraft.src;
+
+public class ItemBlock extends Item {
+ private int field_272_a;
+
+ public ItemBlock(int var1) {
+ super(var1);
+ this.field_272_a = var1 + 256;
+ this.setIconIndex(Block.blocksList[var1 + 256].getBlockTextureFromSide(2));
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ if(var3.getBlockId(var4, var5, var6) == Block.snow.blockID) {
+ var7 = 0;
+ } else {
+ if(var7 == 0) {
+ --var5;
+ }
+
+ if(var7 == 1) {
+ ++var5;
+ }
+
+ if(var7 == 2) {
+ --var6;
+ }
+
+ if(var7 == 3) {
+ ++var6;
+ }
+
+ if(var7 == 4) {
+ --var4;
+ }
+
+ if(var7 == 5) {
+ ++var4;
+ }
+ }
+
+ if(var1.stackSize == 0) {
+ return false;
+ } else {
+ if(var3.func_516_a(this.field_272_a, var4, var5, var6, false)) {
+ Block var8 = Block.blocksList[this.field_272_a];
+ if(var3.setBlockWithNotify(var4, var5, var6, this.field_272_a)) {
+ Block.blocksList[this.field_272_a].onBlockPlaced(var3, var4, var5, var6, var7);
+ Block.blocksList[this.field_272_a].onBlockPlacedBy(var3, var4, var5, var6, var2);
+ var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var8.stepSound.func_737_c(), (var8.stepSound.func_738_a() + 1.0F) / 2.0F, var8.stepSound.func_739_b() * 0.8F);
+ --var1.stackSize;
+ }
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemBoat.java b/minecraft_server/src/net/minecraft/src/ItemBoat.java
new file mode 100644
index 0000000..e18c81f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemBoat.java
@@ -0,0 +1,43 @@
+package net.minecraft.src;
+
+public class ItemBoat extends Item {
+ public ItemBoat(int var1) {
+ super(var1);
+ this.maxStackSize = 1;
+ }
+
+ public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) {
+ float var4 = 1.0F;
+ float var5 = var3.prevRotationPitch + (var3.rotationPitch - var3.prevRotationPitch) * var4;
+ float var6 = var3.prevRotationYaw + (var3.rotationYaw - var3.prevRotationYaw) * var4;
+ double var7 = var3.prevPosX + (var3.posX - var3.prevPosX) * (double)var4;
+ double var9 = var3.prevPosY + (var3.posY - var3.prevPosY) * (double)var4 + 1.62D - (double)var3.yOffset;
+ double var11 = var3.prevPosZ + (var3.posZ - var3.prevPosZ) * (double)var4;
+ Vec3D var13 = Vec3D.createVector(var7, var9, var11);
+ float var14 = MathHelper.cos(-var6 * ((float)Math.PI / 180.0F) - (float)Math.PI);
+ float var15 = MathHelper.sin(-var6 * ((float)Math.PI / 180.0F) - (float)Math.PI);
+ float var16 = -MathHelper.cos(-var5 * ((float)Math.PI / 180.0F));
+ float var17 = MathHelper.sin(-var5 * ((float)Math.PI / 180.0F));
+ float var18 = var15 * var16;
+ float var20 = var14 * var16;
+ double var21 = 5.0D;
+ Vec3D var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21);
+ MovingObjectPosition var24 = var2.func_505_a(var13, var23, true);
+ if(var24 == null) {
+ return var1;
+ } else {
+ if(var24.typeOfHit == 0) {
+ int var25 = var24.blockX;
+ int var26 = var24.blockY;
+ int var27 = var24.blockZ;
+ if(!var2.multiplayerWorld) {
+ var2.entityJoinedWorld(new EntityBoat(var2, (double)((float)var25 + 0.5F), (double)((float)var26 + 1.5F), (double)((float)var27 + 0.5F)));
+ }
+
+ --var1.stackSize;
+ }
+
+ return var1;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemBow.java b/minecraft_server/src/net/minecraft/src/ItemBow.java
new file mode 100644
index 0000000..15a15f8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemBow.java
@@ -0,0 +1,19 @@
+package net.minecraft.src;
+
+public class ItemBow extends Item {
+ public ItemBow(int var1) {
+ super(var1);
+ this.maxStackSize = 1;
+ }
+
+ public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) {
+ if(var3.inventory.func_6127_b(Item.arrow.swiftedIndex)) {
+ var2.playSoundAtEntity(var3, "random.bow", 1.0F, 1.0F / (rand.nextFloat() * 0.4F + 0.8F));
+ if(!var2.multiplayerWorld) {
+ var2.entityJoinedWorld(new EntityArrow(var2, var3));
+ }
+ }
+
+ return var1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemBucket.java b/minecraft_server/src/net/minecraft/src/ItemBucket.java
new file mode 100644
index 0000000..3ed1629
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemBucket.java
@@ -0,0 +1,101 @@
+package net.minecraft.src;
+
+public class ItemBucket extends Item {
+ private int field_274_a;
+
+ public ItemBucket(int var1, int var2) {
+ super(var1);
+ this.maxStackSize = 1;
+ this.maxDamage = 64;
+ this.field_274_a = var2;
+ }
+
+ public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) {
+ float var4 = 1.0F;
+ float var5 = var3.prevRotationPitch + (var3.rotationPitch - var3.prevRotationPitch) * var4;
+ float var6 = var3.prevRotationYaw + (var3.rotationYaw - var3.prevRotationYaw) * var4;
+ double var7 = var3.prevPosX + (var3.posX - var3.prevPosX) * (double)var4;
+ double var9 = var3.prevPosY + (var3.posY - var3.prevPosY) * (double)var4 + 1.62D - (double)var3.yOffset;
+ double var11 = var3.prevPosZ + (var3.posZ - var3.prevPosZ) * (double)var4;
+ Vec3D var13 = Vec3D.createVector(var7, var9, var11);
+ float var14 = MathHelper.cos(-var6 * ((float)Math.PI / 180.0F) - (float)Math.PI);
+ float var15 = MathHelper.sin(-var6 * ((float)Math.PI / 180.0F) - (float)Math.PI);
+ float var16 = -MathHelper.cos(-var5 * ((float)Math.PI / 180.0F));
+ float var17 = MathHelper.sin(-var5 * ((float)Math.PI / 180.0F));
+ float var18 = var15 * var16;
+ float var20 = var14 * var16;
+ double var21 = 5.0D;
+ Vec3D var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21);
+ MovingObjectPosition var24 = var2.func_505_a(var13, var23, this.field_274_a == 0);
+ if(var24 == null) {
+ return var1;
+ } else {
+ if(var24.typeOfHit == 0) {
+ int var25 = var24.blockX;
+ int var26 = var24.blockY;
+ int var27 = var24.blockZ;
+ if(!var2.func_6157_a(var3, var25, var26, var27)) {
+ return var1;
+ }
+
+ if(this.field_274_a == 0) {
+ if(var2.getBlockMaterial(var25, var26, var27) == Material.water && var2.getBlockMetadata(var25, var26, var27) == 0) {
+ var2.setBlockWithNotify(var25, var26, var27, 0);
+ return new ItemStack(Item.bucketWater);
+ }
+
+ if(var2.getBlockMaterial(var25, var26, var27) == Material.lava && var2.getBlockMetadata(var25, var26, var27) == 0) {
+ var2.setBlockWithNotify(var25, var26, var27, 0);
+ return new ItemStack(Item.bucketLava);
+ }
+ } else {
+ if(this.field_274_a < 0) {
+ return new ItemStack(Item.bucketEmpty);
+ }
+
+ if(var24.sideHit == 0) {
+ --var26;
+ }
+
+ if(var24.sideHit == 1) {
+ ++var26;
+ }
+
+ if(var24.sideHit == 2) {
+ --var27;
+ }
+
+ if(var24.sideHit == 3) {
+ ++var27;
+ }
+
+ if(var24.sideHit == 4) {
+ --var25;
+ }
+
+ if(var24.sideHit == 5) {
+ ++var25;
+ }
+
+ if(var2.getBlockId(var25, var26, var27) == 0 || !var2.getBlockMaterial(var25, var26, var27).func_216_a()) {
+ if(var2.field_4272_q.field_6166_d && this.field_274_a == Block.waterStill.blockID) {
+ var2.playSoundEffect(var7 + 0.5D, var9 + 0.5D, var11 + 0.5D, "random.fizz", 0.5F, 2.6F + (var2.rand.nextFloat() - var2.rand.nextFloat()) * 0.8F);
+
+ for(int var28 = 0; var28 < 8; ++var28) {
+ var2.spawnParticle("largesmoke", (double)var25 + Math.random(), (double)var26 + Math.random(), (double)var27 + Math.random(), 0.0D, 0.0D, 0.0D);
+ }
+ } else {
+ var2.func_507_b(var25, var26, var27, this.field_274_a, 0);
+ }
+
+ return new ItemStack(Item.bucketEmpty);
+ }
+ }
+ } else if(this.field_274_a == 0 && var24.entityHit instanceof EntityCow) {
+ return new ItemStack(Item.bucketMilk);
+ }
+
+ return var1;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemDoor.java b/minecraft_server/src/net/minecraft/src/ItemDoor.java
new file mode 100644
index 0000000..ecc8a48
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemDoor.java
@@ -0,0 +1,72 @@
+package net.minecraft.src;
+
+public class ItemDoor extends Item {
+ private Material field_260_a;
+
+ public ItemDoor(int var1, Material var2) {
+ super(var1);
+ this.field_260_a = var2;
+ this.maxDamage = 64;
+ this.maxStackSize = 1;
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ if(var7 != 1) {
+ return false;
+ } else {
+ ++var5;
+ Block var8;
+ if(this.field_260_a == Material.wood) {
+ var8 = Block.doorWood;
+ } else {
+ var8 = Block.doorSteel;
+ }
+
+ if(!var8.canPlaceBlockAt(var3, var4, var5, var6)) {
+ return false;
+ } else {
+ int var9 = MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3;
+ byte var10 = 0;
+ byte var11 = 0;
+ if(var9 == 0) {
+ var11 = 1;
+ }
+
+ if(var9 == 1) {
+ var10 = -1;
+ }
+
+ if(var9 == 2) {
+ var11 = -1;
+ }
+
+ if(var9 == 3) {
+ var10 = 1;
+ }
+
+ int var12 = (var3.doesBlockAllowAttachment(var4 - var10, var5, var6 - var11) ? 1 : 0) + (var3.doesBlockAllowAttachment(var4 - var10, var5 + 1, var6 - var11) ? 1 : 0);
+ int var13 = (var3.doesBlockAllowAttachment(var4 + var10, var5, var6 + var11) ? 1 : 0) + (var3.doesBlockAllowAttachment(var4 + var10, var5 + 1, var6 + var11) ? 1 : 0);
+ boolean var14 = var3.getBlockId(var4 - var10, var5, var6 - var11) == var8.blockID || var3.getBlockId(var4 - var10, var5 + 1, var6 - var11) == var8.blockID;
+ boolean var15 = var3.getBlockId(var4 + var10, var5, var6 + var11) == var8.blockID || var3.getBlockId(var4 + var10, var5 + 1, var6 + var11) == var8.blockID;
+ boolean var16 = false;
+ if(var14 && !var15) {
+ var16 = true;
+ } else if(var13 > var12) {
+ var16 = true;
+ }
+
+ if(var16) {
+ var9 = var9 - 1 & 3;
+ var9 += 4;
+ }
+
+ var3.setBlockWithNotify(var4, var5, var6, var8.blockID);
+ var3.setBlockMetadataWithNotify(var4, var5, var6, var9);
+ var3.setBlockWithNotify(var4, var5 + 1, var6, var8.blockID);
+ var3.setBlockMetadataWithNotify(var4, var5 + 1, var6, var9 + 8);
+ --var1.stackSize;
+ return true;
+ }
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemFishingRod.java b/minecraft_server/src/net/minecraft/src/ItemFishingRod.java
new file mode 100644
index 0000000..294a8a6
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemFishingRod.java
@@ -0,0 +1,25 @@
+package net.minecraft.src;
+
+public class ItemFishingRod extends Item {
+ public ItemFishingRod(int var1) {
+ super(var1);
+ this.maxDamage = 64;
+ }
+
+ public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) {
+ if(var3.field_6124_at != null) {
+ int var4 = var3.field_6124_at.func_6143_c();
+ var1.damageItem(var4);
+ var3.func_168_z();
+ } else {
+ var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (rand.nextFloat() * 0.4F + 0.8F));
+ if(!var2.multiplayerWorld) {
+ var2.entityJoinedWorld(new EntityFish(var2, var3));
+ }
+
+ var3.func_168_z();
+ }
+
+ return var1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemFlintAndSteel.java b/minecraft_server/src/net/minecraft/src/ItemFlintAndSteel.java
new file mode 100644
index 0000000..85812ca
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemFlintAndSteel.java
@@ -0,0 +1,44 @@
+package net.minecraft.src;
+
+public class ItemFlintAndSteel extends Item {
+ public ItemFlintAndSteel(int var1) {
+ super(var1);
+ this.maxStackSize = 1;
+ this.maxDamage = 64;
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ if(var7 == 0) {
+ --var5;
+ }
+
+ if(var7 == 1) {
+ ++var5;
+ }
+
+ if(var7 == 2) {
+ --var6;
+ }
+
+ if(var7 == 3) {
+ ++var6;
+ }
+
+ if(var7 == 4) {
+ --var4;
+ }
+
+ if(var7 == 5) {
+ ++var4;
+ }
+
+ int var8 = var3.getBlockId(var4, var5, var6);
+ if(var8 == 0) {
+ var3.playSoundEffect((double)var4 + 0.5D, (double)var5 + 0.5D, (double)var6 + 0.5D, "fire.ignite", 1.0F, rand.nextFloat() * 0.4F + 0.8F);
+ var3.setBlockWithNotify(var4, var5, var6, Block.fire.blockID);
+ }
+
+ var1.damageItem(1);
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemFood.java b/minecraft_server/src/net/minecraft/src/ItemFood.java
new file mode 100644
index 0000000..1038a34
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemFood.java
@@ -0,0 +1,17 @@
+package net.minecraft.src;
+
+public class ItemFood extends Item {
+ private int healAmount;
+
+ public ItemFood(int var1, int var2) {
+ super(var1);
+ this.healAmount = var2;
+ this.maxStackSize = 1;
+ }
+
+ public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) {
+ --var1.stackSize;
+ var3.heal(this.healAmount);
+ return var1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemHoe.java b/minecraft_server/src/net/minecraft/src/ItemHoe.java
new file mode 100644
index 0000000..a77b985
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemHoe.java
@@ -0,0 +1,41 @@
+package net.minecraft.src;
+
+public class ItemHoe extends Item {
+ public ItemHoe(int var1, int var2) {
+ super(var1);
+ this.maxStackSize = 1;
+ this.maxDamage = 32 << var2;
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ int var8 = var3.getBlockId(var4, var5, var6);
+ Material var9 = var3.getBlockMaterial(var4, var5 + 1, var6);
+ if((var9.func_216_a() || var8 != Block.grass.blockID) && var8 != Block.dirt.blockID) {
+ return false;
+ } else {
+ Block var10 = Block.tilledField;
+ var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var10.stepSound.func_737_c(), (var10.stepSound.func_738_a() + 1.0F) / 2.0F, var10.stepSound.func_739_b() * 0.8F);
+ if(var3.multiplayerWorld) {
+ return true;
+ } else {
+ var3.setBlockWithNotify(var4, var5, var6, var10.blockID);
+ var1.damageItem(1);
+ if(var3.rand.nextInt(8) == 0 && var8 == Block.grass.blockID) {
+ byte var11 = 1;
+
+ for(int var12 = 0; var12 < var11; ++var12) {
+ float var13 = 0.7F;
+ float var14 = var3.rand.nextFloat() * var13 + (1.0F - var13) * 0.5F;
+ float var15 = 1.2F;
+ float var16 = var3.rand.nextFloat() * var13 + (1.0F - var13) * 0.5F;
+ EntityItem var17 = new EntityItem(var3, (double)((float)var4 + var14), (double)((float)var5 + var15), (double)((float)var6 + var16), new ItemStack(Item.seeds));
+ var17.field_433_ad = 10;
+ var3.entityJoinedWorld(var17);
+ }
+ }
+
+ return true;
+ }
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemInWorldManager.java b/minecraft_server/src/net/minecraft/src/ItemInWorldManager.java
new file mode 100644
index 0000000..0ed3b40
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemInWorldManager.java
@@ -0,0 +1,117 @@
+package net.minecraft.src;
+
+public class ItemInWorldManager {
+ private World field_674_b;
+ public EntityPlayer field_675_a;
+ private float field_673_c;
+ private float field_672_d = 0.0F;
+ private int field_671_e = 0;
+ private float field_670_f = 0.0F;
+ private int field_669_g;
+ private int field_668_h;
+ private int field_667_i;
+
+ public ItemInWorldManager(World var1) {
+ this.field_674_b = var1;
+ }
+
+ public void func_324_a(int var1, int var2, int var3) {
+ int var4 = this.field_674_b.getBlockId(var1, var2, var3);
+ if(var4 > 0 && this.field_672_d == 0.0F) {
+ Block.blocksList[var4].onBlockClicked(this.field_674_b, var1, var2, var3, this.field_675_a);
+ }
+
+ if(var4 > 0 && Block.blocksList[var4].func_254_a(this.field_675_a) >= 1.0F) {
+ this.func_325_c(var1, var2, var3);
+ }
+
+ }
+
+ public void func_328_a() {
+ this.field_672_d = 0.0F;
+ this.field_671_e = 0;
+ }
+
+ public void func_326_a(int var1, int var2, int var3, int var4) {
+ if(this.field_671_e > 0) {
+ --this.field_671_e;
+ } else {
+ if(var1 == this.field_669_g && var2 == this.field_668_h && var3 == this.field_667_i) {
+ int var5 = this.field_674_b.getBlockId(var1, var2, var3);
+ if(var5 == 0) {
+ return;
+ }
+
+ Block var6 = Block.blocksList[var5];
+ this.field_672_d += var6.func_254_a(this.field_675_a);
+ ++this.field_670_f;
+ if(this.field_672_d >= 1.0F) {
+ this.func_325_c(var1, var2, var3);
+ this.field_672_d = 0.0F;
+ this.field_673_c = 0.0F;
+ this.field_670_f = 0.0F;
+ this.field_671_e = 5;
+ }
+ } else {
+ this.field_672_d = 0.0F;
+ this.field_673_c = 0.0F;
+ this.field_670_f = 0.0F;
+ this.field_669_g = var1;
+ this.field_668_h = var2;
+ this.field_667_i = var3;
+ }
+
+ }
+ }
+
+ public boolean func_323_b(int var1, int var2, int var3) {
+ Block var4 = Block.blocksList[this.field_674_b.getBlockId(var1, var2, var3)];
+ int var5 = this.field_674_b.getBlockMetadata(var1, var2, var3);
+ boolean var6 = this.field_674_b.setBlockWithNotify(var1, var2, var3, 0);
+ if(var4 != null && var6) {
+ var4.onBlockDestroyedByPlayer(this.field_674_b, var1, var2, var3, var5);
+ }
+
+ return var6;
+ }
+
+ public boolean func_325_c(int var1, int var2, int var3) {
+ int var4 = this.field_674_b.getBlockId(var1, var2, var3);
+ int var5 = this.field_674_b.getBlockMetadata(var1, var2, var3);
+ boolean var6 = this.func_323_b(var1, var2, var3);
+ ItemStack var7 = this.field_675_a.func_172_B();
+ if(var7 != null) {
+ var7.hitBlock(var4, var1, var2, var3);
+ if(var7.stackSize == 0) {
+ var7.func_577_a(this.field_675_a);
+ this.field_675_a.func_164_C();
+ }
+ }
+
+ if(var6 && this.field_675_a.func_167_b(Block.blocksList[var4])) {
+ Block.blocksList[var4].func_12007_g(this.field_674_b, var1, var2, var3, var5);
+ }
+
+ return var6;
+ }
+
+ public boolean func_6154_a(EntityPlayer var1, World var2, ItemStack var3) {
+ int var4 = var3.stackSize;
+ ItemStack var5 = var3.useItemRightClick(var2, var1);
+ if(var5 != var3 || var5 != null && var5.stackSize != var4) {
+ var1.inventory.mainInventory[var1.inventory.currentItem] = var5;
+ if(var5.stackSize == 0) {
+ var1.inventory.mainInventory[var1.inventory.currentItem] = null;
+ }
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public boolean func_327_a(EntityPlayer var1, World var2, ItemStack var3, int var4, int var5, int var6, int var7) {
+ int var8 = var2.getBlockId(var4, var5, var6);
+ return var8 > 0 && Block.blocksList[var8].blockActivated(var2, var4, var5, var6, var1) ? true : (var3 == null ? false : var3.useItem(var1, var2, var4, var5, var6, var7));
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemMinecart.java b/minecraft_server/src/net/minecraft/src/ItemMinecart.java
new file mode 100644
index 0000000..6f69ff6
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemMinecart.java
@@ -0,0 +1,25 @@
+package net.minecraft.src;
+
+public class ItemMinecart extends Item {
+ public int field_270_a;
+
+ public ItemMinecart(int var1, int var2) {
+ super(var1);
+ this.maxStackSize = 1;
+ this.field_270_a = var2;
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ int var8 = var3.getBlockId(var4, var5, var6);
+ if(var8 == Block.minecartTrack.blockID) {
+ if(!var3.multiplayerWorld) {
+ var3.entityJoinedWorld(new EntityMinecart(var3, (double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), this.field_270_a));
+ }
+
+ --var1.stackSize;
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemPainting.java b/minecraft_server/src/net/minecraft/src/ItemPainting.java
new file mode 100644
index 0000000..4cea786
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemPainting.java
@@ -0,0 +1,37 @@
+package net.minecraft.src;
+
+public class ItemPainting extends Item {
+ public ItemPainting(int var1) {
+ super(var1);
+ this.maxDamage = 64;
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ if(var7 == 0) {
+ return false;
+ } else if(var7 == 1) {
+ return false;
+ } else {
+ byte var8 = 0;
+ if(var7 == 4) {
+ var8 = 1;
+ }
+
+ if(var7 == 3) {
+ var8 = 2;
+ }
+
+ if(var7 == 5) {
+ var8 = 3;
+ }
+
+ EntityPainting var9 = new EntityPainting(var3, var4, var5, var6, var8);
+ if(var9.func_181_b()) {
+ var3.entityJoinedWorld(var9);
+ --var1.stackSize;
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemPickaxe.java b/minecraft_server/src/net/minecraft/src/ItemPickaxe.java
new file mode 100644
index 0000000..4638991
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemPickaxe.java
@@ -0,0 +1,15 @@
+package net.minecraft.src;
+
+public class ItemPickaxe extends ItemTool {
+ private static Block[] field_4209_bb = new Block[]{Block.cobblestone, Block.stairDouble, Block.stairSingle, Block.stone, Block.cobblestoneMossy, Block.oreIron, Block.blockSteel, Block.oreCoal, Block.blockGold, Block.oreGold, Block.oreDiamond, Block.blockDiamond, Block.ice, Block.bloodStone};
+ private int field_4208_bc;
+
+ public ItemPickaxe(int var1, int var2) {
+ super(var1, 2, var2, field_4209_bb);
+ this.field_4208_bc = var2;
+ }
+
+ public boolean canHarvestBlock(Block var1) {
+ return var1 == Block.obsidian ? this.field_4208_bc == 3 : (var1 != Block.blockDiamond && var1 != Block.oreDiamond ? (var1 != Block.blockGold && var1 != Block.oreGold ? (var1 != Block.blockSteel && var1 != Block.oreIron ? (var1 != Block.oreRedstone && var1 != Block.oreRedstoneGlowing ? (var1.blockMaterial == Material.rock ? true : var1.blockMaterial == Material.iron) : this.field_4208_bc >= 2) : this.field_4208_bc >= 1) : this.field_4208_bc >= 2) : this.field_4208_bc >= 2);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemRecord.java b/minecraft_server/src/net/minecraft/src/ItemRecord.java
new file mode 100644
index 0000000..0063f66
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemRecord.java
@@ -0,0 +1,22 @@
+package net.minecraft.src;
+
+public class ItemRecord extends Item {
+ private String recordName;
+
+ protected ItemRecord(int var1, String var2) {
+ super(var1);
+ this.recordName = var2;
+ this.maxStackSize = 1;
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ if(var3.getBlockId(var4, var5, var6) == Block.jukebox.blockID && var3.getBlockMetadata(var4, var5, var6) == 0) {
+ var3.setBlockMetadataWithNotify(var4, var5, var6, this.swiftedIndex - Item.record13.swiftedIndex + 1);
+ var3.playRecord(this.recordName, var4, var5, var6);
+ --var1.stackSize;
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemRedstone.java b/minecraft_server/src/net/minecraft/src/ItemRedstone.java
new file mode 100644
index 0000000..d680017
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemRedstone.java
@@ -0,0 +1,44 @@
+package net.minecraft.src;
+
+public class ItemRedstone extends Item {
+ public ItemRedstone(int var1) {
+ super(var1);
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ if(var7 == 0) {
+ --var5;
+ }
+
+ if(var7 == 1) {
+ ++var5;
+ }
+
+ if(var7 == 2) {
+ --var6;
+ }
+
+ if(var7 == 3) {
+ ++var6;
+ }
+
+ if(var7 == 4) {
+ --var4;
+ }
+
+ if(var7 == 5) {
+ ++var4;
+ }
+
+ if(var3.getBlockId(var4, var5, var6) != 0) {
+ return false;
+ } else {
+ if(Block.redstoneWire.canPlaceBlockAt(var3, var4, var5, var6)) {
+ --var1.stackSize;
+ var3.setBlockWithNotify(var4, var5, var6, Block.redstoneWire.blockID);
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemReed.java b/minecraft_server/src/net/minecraft/src/ItemReed.java
new file mode 100644
index 0000000..6e54332
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemReed.java
@@ -0,0 +1,55 @@
+package net.minecraft.src;
+
+public class ItemReed extends Item {
+ private int field_253_a;
+
+ public ItemReed(int var1, Block var2) {
+ super(var1);
+ this.field_253_a = var2.blockID;
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ if(var3.getBlockId(var4, var5, var6) == Block.snow.blockID) {
+ var7 = 0;
+ } else {
+ if(var7 == 0) {
+ --var5;
+ }
+
+ if(var7 == 1) {
+ ++var5;
+ }
+
+ if(var7 == 2) {
+ --var6;
+ }
+
+ if(var7 == 3) {
+ ++var6;
+ }
+
+ if(var7 == 4) {
+ --var4;
+ }
+
+ if(var7 == 5) {
+ ++var4;
+ }
+ }
+
+ if(var1.stackSize == 0) {
+ return false;
+ } else {
+ if(var3.func_516_a(this.field_253_a, var4, var5, var6, false)) {
+ Block var8 = Block.blocksList[this.field_253_a];
+ if(var3.setBlockWithNotify(var4, var5, var6, this.field_253_a)) {
+ Block.blocksList[this.field_253_a].onBlockPlaced(var3, var4, var5, var6, var7);
+ var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var8.stepSound.func_737_c(), (var8.stepSound.func_738_a() + 1.0F) / 2.0F, var8.stepSound.func_739_b() * 0.8F);
+ --var1.stackSize;
+ }
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemSaddle.java b/minecraft_server/src/net/minecraft/src/ItemSaddle.java
new file mode 100644
index 0000000..be15802
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemSaddle.java
@@ -0,0 +1,24 @@
+package net.minecraft.src;
+
+public class ItemSaddle extends Item {
+ public ItemSaddle(int var1) {
+ super(var1);
+ this.maxStackSize = 1;
+ this.maxDamage = 64;
+ }
+
+ public void func_9202_b(ItemStack var1, EntityLiving var2) {
+ if(var2 instanceof EntityPig) {
+ EntityPig var3 = (EntityPig)var2;
+ if(!var3.rideable) {
+ var3.rideable = true;
+ --var1.stackSize;
+ }
+ }
+
+ }
+
+ public void func_9201_a(ItemStack var1, EntityLiving var2) {
+ this.func_9202_b(var1, var2);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemSeeds.java b/minecraft_server/src/net/minecraft/src/ItemSeeds.java
new file mode 100644
index 0000000..89aaa56
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemSeeds.java
@@ -0,0 +1,25 @@
+package net.minecraft.src;
+
+public class ItemSeeds extends Item {
+ private int field_271_a;
+
+ public ItemSeeds(int var1, int var2) {
+ super(var1);
+ this.field_271_a = var2;
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ if(var7 != 1) {
+ return false;
+ } else {
+ int var8 = var3.getBlockId(var4, var5, var6);
+ if(var8 == Block.tilledField.blockID) {
+ var3.setBlockWithNotify(var4, var5 + 1, var6, this.field_271_a);
+ --var1.stackSize;
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemSign.java b/minecraft_server/src/net/minecraft/src/ItemSign.java
new file mode 100644
index 0000000..3d94a5f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemSign.java
@@ -0,0 +1,55 @@
+package net.minecraft.src;
+
+public class ItemSign extends Item {
+ public ItemSign(int var1) {
+ super(var1);
+ this.maxDamage = 64;
+ this.maxStackSize = 1;
+ }
+
+ public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) {
+ if(var7 == 0) {
+ return false;
+ } else if(!var3.getBlockMaterial(var4, var5, var6).func_216_a()) {
+ return false;
+ } else {
+ if(var7 == 1) {
+ ++var5;
+ }
+
+ if(var7 == 2) {
+ --var6;
+ }
+
+ if(var7 == 3) {
+ ++var6;
+ }
+
+ if(var7 == 4) {
+ --var4;
+ }
+
+ if(var7 == 5) {
+ ++var4;
+ }
+
+ if(!Block.signPost.canPlaceBlockAt(var3, var4, var5, var6)) {
+ return false;
+ } else {
+ if(var7 == 1) {
+ var3.func_507_b(var4, var5, var6, Block.signPost.blockID, MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15);
+ } else {
+ var3.func_507_b(var4, var5, var6, Block.signWall.blockID, var7);
+ }
+
+ --var1.stackSize;
+ TileEntitySign var8 = (TileEntitySign)var3.getBlock(var4, var5, var6);
+ if(var8 != null) {
+ var2.func_4048_a(var8);
+ }
+
+ return true;
+ }
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemSnowball.java b/minecraft_server/src/net/minecraft/src/ItemSnowball.java
new file mode 100644
index 0000000..a4cba52
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemSnowball.java
@@ -0,0 +1,18 @@
+package net.minecraft.src;
+
+public class ItemSnowball extends Item {
+ public ItemSnowball(int var1) {
+ super(var1);
+ this.maxStackSize = 16;
+ }
+
+ public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) {
+ --var1.stackSize;
+ var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (rand.nextFloat() * 0.4F + 0.8F));
+ if(!var2.multiplayerWorld) {
+ var2.entityJoinedWorld(new EntitySnowball(var2, var3));
+ }
+
+ return var1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemSoup.java b/minecraft_server/src/net/minecraft/src/ItemSoup.java
new file mode 100644
index 0000000..b21aef9
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemSoup.java
@@ -0,0 +1,12 @@
+package net.minecraft.src;
+
+public class ItemSoup extends ItemFood {
+ public ItemSoup(int var1, int var2) {
+ super(var1, var2);
+ }
+
+ public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) {
+ super.onItemRightClick(var1, var2, var3);
+ return new ItemStack(Item.bowlEmpty);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemSpade.java b/minecraft_server/src/net/minecraft/src/ItemSpade.java
new file mode 100644
index 0000000..957d62e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemSpade.java
@@ -0,0 +1,13 @@
+package net.minecraft.src;
+
+public class ItemSpade extends ItemTool {
+ private static Block[] field_4206_bb = new Block[]{Block.grass, Block.dirt, Block.sand, Block.gravel, Block.snow, Block.blockSnow, Block.blockClay};
+
+ public ItemSpade(int var1, int var2) {
+ super(var1, 1, var2, field_4206_bb);
+ }
+
+ public boolean canHarvestBlock(Block var1) {
+ return var1 == Block.snow ? true : var1 == Block.blockSnow;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemStack.java b/minecraft_server/src/net/minecraft/src/ItemStack.java
new file mode 100644
index 0000000..e373dfd
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemStack.java
@@ -0,0 +1,119 @@
+package net.minecraft.src;
+
+public final class ItemStack {
+ public int stackSize;
+ public int animationsToGo;
+ public int itemID;
+ public int itemDamage;
+
+ public ItemStack(Block var1) {
+ this((Block)var1, 1);
+ }
+
+ public ItemStack(Block var1, int var2) {
+ this(var1.blockID, var2);
+ }
+
+ public ItemStack(Item var1) {
+ this((Item)var1, 1);
+ }
+
+ public ItemStack(Item var1, int var2) {
+ this(var1.swiftedIndex, var2);
+ }
+
+ public ItemStack(int var1) {
+ this(var1, 1);
+ }
+
+ public ItemStack(int var1, int var2) {
+ this.stackSize = 0;
+ this.itemID = var1;
+ this.stackSize = var2;
+ }
+
+ public ItemStack(int var1, int var2, int var3) {
+ this.stackSize = 0;
+ this.itemID = var1;
+ this.stackSize = var2;
+ this.itemDamage = var3;
+ }
+
+ public ItemStack(NBTTagCompound var1) {
+ this.stackSize = 0;
+ this.readFromNBT(var1);
+ }
+
+ public Item getItem() {
+ return Item.itemsList[this.itemID];
+ }
+
+ public boolean useItem(EntityPlayer var1, World var2, int var3, int var4, int var5, int var6) {
+ return this.getItem().onItemUse(this, var1, var2, var3, var4, var5, var6);
+ }
+
+ public float getStrVsBlock(Block var1) {
+ return this.getItem().getStrVsBlock(this, var1);
+ }
+
+ public ItemStack useItemRightClick(World var1, EntityPlayer var2) {
+ return this.getItem().onItemRightClick(this, var1, var2);
+ }
+
+ public NBTTagCompound writeToNBT(NBTTagCompound var1) {
+ var1.setShort("id", (short)this.itemID);
+ var1.setByte("Count", (byte)this.stackSize);
+ var1.setShort("Damage", (short)this.itemDamage);
+ return var1;
+ }
+
+ public void readFromNBT(NBTTagCompound var1) {
+ this.itemID = var1.getShort("id");
+ this.stackSize = var1.getByte("Count");
+ this.itemDamage = var1.getShort("Damage");
+ }
+
+ public int getMaxStackSize() {
+ return this.getItem().getItemStackLimit();
+ }
+
+ public int getMaxDamage() {
+ return Item.itemsList[this.itemID].getMaxDamage();
+ }
+
+ public void damageItem(int var1) {
+ this.itemDamage += var1;
+ if(this.itemDamage > this.getMaxDamage()) {
+ --this.stackSize;
+ if(this.stackSize < 0) {
+ this.stackSize = 0;
+ }
+
+ this.itemDamage = 0;
+ }
+
+ }
+
+ public void func_9217_a(EntityLiving var1) {
+ Item.itemsList[this.itemID].func_9201_a(this, var1);
+ }
+
+ public void hitBlock(int var1, int var2, int var3, int var4) {
+ Item.itemsList[this.itemID].hitBlock(this, var1, var2, var3, var4);
+ }
+
+ public int func_9218_a(Entity var1) {
+ return Item.itemsList[this.itemID].func_9203_a(var1);
+ }
+
+ public boolean func_573_b(Block var1) {
+ return Item.itemsList[this.itemID].canHarvestBlock(var1);
+ }
+
+ public void func_577_a(EntityPlayer var1) {
+ }
+
+ public ItemStack copy() {
+ return new ItemStack(this.itemID, this.stackSize, this.itemDamage);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemSword.java b/minecraft_server/src/net/minecraft/src/ItemSword.java
new file mode 100644
index 0000000..ec24558
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemSword.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+public class ItemSword extends Item {
+ private int field_4210_a;
+
+ public ItemSword(int var1, int var2) {
+ super(var1);
+ this.maxStackSize = 1;
+ this.maxDamage = 32 << var2;
+ if(var2 == 3) {
+ this.maxDamage *= 4;
+ }
+
+ this.field_4210_a = 4 + var2 * 2;
+ }
+
+ public float getStrVsBlock(ItemStack var1, Block var2) {
+ return 1.5F;
+ }
+
+ public void func_9201_a(ItemStack var1, EntityLiving var2) {
+ var1.damageItem(1);
+ }
+
+ public void hitBlock(ItemStack var1, int var2, int var3, int var4, int var5) {
+ var1.damageItem(2);
+ }
+
+ public int func_9203_a(Entity var1) {
+ return this.field_4210_a;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ItemTool.java b/minecraft_server/src/net/minecraft/src/ItemTool.java
new file mode 100644
index 0000000..cfff62d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ItemTool.java
@@ -0,0 +1,44 @@
+package net.minecraft.src;
+
+public class ItemTool extends Item {
+ private Block[] blocksEffectiveAgainst;
+ private float field_264_aY = 4.0F;
+ private int field_263_aZ;
+ protected int field_262_a;
+
+ public ItemTool(int var1, int var2, int var3, Block[] var4) {
+ super(var1);
+ this.field_262_a = var3;
+ this.blocksEffectiveAgainst = var4;
+ this.maxStackSize = 1;
+ this.maxDamage = 32 << var3;
+ if(var3 == 3) {
+ this.maxDamage *= 4;
+ }
+
+ this.field_264_aY = (float)((var3 + 1) * 2);
+ this.field_263_aZ = var2 + var3;
+ }
+
+ public float getStrVsBlock(ItemStack var1, Block var2) {
+ for(int var3 = 0; var3 < this.blocksEffectiveAgainst.length; ++var3) {
+ if(this.blocksEffectiveAgainst[var3] == var2) {
+ return this.field_264_aY;
+ }
+ }
+
+ return 1.0F;
+ }
+
+ public void func_9201_a(ItemStack var1, EntityLiving var2) {
+ var1.damageItem(2);
+ }
+
+ public void hitBlock(ItemStack var1, int var2, int var3, int var4, int var5) {
+ var1.damageItem(1);
+ }
+
+ public int func_9203_a(Entity var1) {
+ return this.field_263_aZ;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MCHashTable.java b/minecraft_server/src/net/minecraft/src/MCHashTable.java
new file mode 100644
index 0000000..99dcd4d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MCHashTable.java
@@ -0,0 +1,151 @@
+package net.minecraft.src;
+
+public class MCHashTable {
+ private transient HashEntry[] slots = new HashEntry[16];
+ private transient int count;
+ private int threshold = 12;
+ private final float growFactor = 12.0F / 16.0F;
+ private transient volatile int versionStamp;
+
+ private static int computeHash(int var0) {
+ var0 ^= var0 >>> 20 ^ var0 >>> 12;
+ return var0 ^ var0 >>> 7 ^ var0 >>> 4;
+ }
+
+ private static int getSlotIndex(int var0, int var1) {
+ return var0 & var1 - 1;
+ }
+
+ public Object lookup(int var1) {
+ int var2 = computeHash(var1);
+
+ for(HashEntry var3 = this.slots[getSlotIndex(var2, this.slots.length)]; var3 != null; var3 = var3.field_843_c) {
+ if(var3.field_841_a == var1) {
+ return var3.field_840_b;
+ }
+ }
+
+ return null;
+ }
+
+ public boolean containsItem(int var1) {
+ return this.lookupEntry(var1) != null;
+ }
+
+ final HashEntry lookupEntry(int var1) {
+ int var2 = computeHash(var1);
+
+ for(HashEntry var3 = this.slots[getSlotIndex(var2, this.slots.length)]; var3 != null; var3 = var3.field_843_c) {
+ if(var3.field_841_a == var1) {
+ return var3;
+ }
+ }
+
+ return null;
+ }
+
+ public void addKey(int var1, Object var2) {
+ int var3 = computeHash(var1);
+ int var4 = getSlotIndex(var3, this.slots.length);
+
+ for(HashEntry var5 = this.slots[var4]; var5 != null; var5 = var5.field_843_c) {
+ if(var5.field_841_a == var1) {
+ var5.field_840_b = var2;
+ }
+ }
+
+ ++this.versionStamp;
+ this.insert(var3, var1, var2, var4);
+ }
+
+ private void grow(int var1) {
+ HashEntry[] var2 = this.slots;
+ int var3 = var2.length;
+ if(var3 == 1073741824) {
+ this.threshold = Integer.MAX_VALUE;
+ } else {
+ HashEntry[] var4 = new HashEntry[var1];
+ this.copyTo(var4);
+ this.slots = var4;
+ this.threshold = (int)((float)var1 * this.growFactor);
+ }
+ }
+
+ private void copyTo(HashEntry[] var1) {
+ HashEntry[] var2 = this.slots;
+ int var3 = var1.length;
+
+ for(int var4 = 0; var4 < var2.length; ++var4) {
+ HashEntry var5 = var2[var4];
+ if(var5 != null) {
+ var2[var4] = null;
+
+ HashEntry var6;
+ do {
+ var6 = var5.field_843_c;
+ int var7 = getSlotIndex(var5.field_842_d, var3);
+ var5.field_843_c = var1[var7];
+ var1[var7] = var5;
+ var5 = var6;
+ } while(var6 != null);
+ }
+ }
+
+ }
+
+ public Object removeObject(int var1) {
+ HashEntry var2 = this.removeEntry(var1);
+ return var2 == null ? null : var2.field_840_b;
+ }
+
+ final HashEntry removeEntry(int var1) {
+ int var2 = computeHash(var1);
+ int var3 = getSlotIndex(var2, this.slots.length);
+ HashEntry var4 = this.slots[var3];
+
+ HashEntry var5;
+ HashEntry var6;
+ for(var5 = var4; var5 != null; var5 = var6) {
+ var6 = var5.field_843_c;
+ if(var5.field_841_a == var1) {
+ ++this.versionStamp;
+ --this.count;
+ if(var4 == var5) {
+ this.slots[var3] = var6;
+ } else {
+ var4.field_843_c = var6;
+ }
+
+ return var5;
+ }
+
+ var4 = var5;
+ }
+
+ return var5;
+ }
+
+ public void clearMap() {
+ ++this.versionStamp;
+ HashEntry[] var1 = this.slots;
+
+ for(int var2 = 0; var2 < var1.length; ++var2) {
+ var1[var2] = null;
+ }
+
+ this.count = 0;
+ }
+
+ private void insert(int var1, int var2, Object var3, int var4) {
+ HashEntry var5 = this.slots[var4];
+ this.slots[var4] = new HashEntry(var1, var2, var3, var5);
+ if(this.count++ >= this.threshold) {
+ this.grow(2 * this.slots.length);
+ }
+
+ }
+
+ static int getHash(int var0) {
+ return computeHash(var0);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MCHashTable2.java b/minecraft_server/src/net/minecraft/src/MCHashTable2.java
new file mode 100644
index 0000000..1e57101
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MCHashTable2.java
@@ -0,0 +1,128 @@
+package net.minecraft.src;
+
+public class MCHashTable2 {
+ private transient HashEntry2[] field_949_a = new HashEntry2[16];
+ private transient int field_948_b;
+ private int field_952_c = 12;
+ private final float field_951_d = 12.0F / 16.0F;
+ private transient volatile int field_950_e;
+
+ private static int func_671_e(long var0) {
+ return func_676_a((int)(var0 ^ var0 >>> 32));
+ }
+
+ private static int func_676_a(int var0) {
+ var0 ^= var0 >>> 20 ^ var0 >>> 12;
+ return var0 ^ var0 >>> 7 ^ var0 >>> 4;
+ }
+
+ private static int func_678_a(int var0, int var1) {
+ return var0 & var1 - 1;
+ }
+
+ public Object func_677_a(long var1) {
+ int var3 = func_671_e(var1);
+
+ for(HashEntry2 var4 = this.field_949_a[func_678_a(var3, this.field_949_a.length)]; var4 != null; var4 = var4.field_1027_c) {
+ if(var4.field_1025_a == var1) {
+ return var4.field_1024_b;
+ }
+ }
+
+ return null;
+ }
+
+ public void func_675_a(long var1, Object var3) {
+ int var4 = func_671_e(var1);
+ int var5 = func_678_a(var4, this.field_949_a.length);
+
+ for(HashEntry2 var6 = this.field_949_a[var5]; var6 != null; var6 = var6.field_1027_c) {
+ if(var6.field_1025_a == var1) {
+ var6.field_1024_b = var3;
+ }
+ }
+
+ ++this.field_950_e;
+ this.func_679_a(var4, var1, var3, var5);
+ }
+
+ private void func_680_b(int var1) {
+ HashEntry2[] var2 = this.field_949_a;
+ int var3 = var2.length;
+ if(var3 == 1073741824) {
+ this.field_952_c = Integer.MAX_VALUE;
+ } else {
+ HashEntry2[] var4 = new HashEntry2[var1];
+ this.func_673_a(var4);
+ this.field_949_a = var4;
+ this.field_952_c = (int)((float)var1 * this.field_951_d);
+ }
+ }
+
+ private void func_673_a(HashEntry2[] var1) {
+ HashEntry2[] var2 = this.field_949_a;
+ int var3 = var1.length;
+
+ for(int var4 = 0; var4 < var2.length; ++var4) {
+ HashEntry2 var5 = var2[var4];
+ if(var5 != null) {
+ var2[var4] = null;
+
+ HashEntry2 var6;
+ do {
+ var6 = var5.field_1027_c;
+ int var7 = func_678_a(var5.field_1026_d, var3);
+ var5.field_1027_c = var1[var7];
+ var1[var7] = var5;
+ var5 = var6;
+ } while(var6 != null);
+ }
+ }
+
+ }
+
+ public Object func_670_b(long var1) {
+ HashEntry2 var3 = this.func_672_c(var1);
+ return var3 == null ? null : var3.field_1024_b;
+ }
+
+ final HashEntry2 func_672_c(long var1) {
+ int var3 = func_671_e(var1);
+ int var4 = func_678_a(var3, this.field_949_a.length);
+ HashEntry2 var5 = this.field_949_a[var4];
+
+ HashEntry2 var6;
+ HashEntry2 var7;
+ for(var6 = var5; var6 != null; var6 = var7) {
+ var7 = var6.field_1027_c;
+ if(var6.field_1025_a == var1) {
+ ++this.field_950_e;
+ --this.field_948_b;
+ if(var5 == var6) {
+ this.field_949_a[var4] = var7;
+ } else {
+ var5.field_1027_c = var7;
+ }
+
+ return var6;
+ }
+
+ var5 = var6;
+ }
+
+ return var6;
+ }
+
+ private void func_679_a(int var1, long var2, Object var4, int var5) {
+ HashEntry2 var6 = this.field_949_a[var5];
+ this.field_949_a[var5] = new HashEntry2(var1, var2, var4, var6);
+ if(this.field_948_b++ >= this.field_952_c) {
+ this.func_680_b(2 * this.field_949_a.length);
+ }
+
+ }
+
+ static int func_674_d(long var0) {
+ return func_671_e(var0);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MapGenBase.java b/minecraft_server/src/net/minecraft/src/MapGenBase.java
new file mode 100644
index 0000000..223e09d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MapGenBase.java
@@ -0,0 +1,26 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class MapGenBase {
+ protected int field_947_a = 8;
+ protected Random field_946_b = new Random();
+
+ public void func_667_a(IChunkProvider var1, World var2, int var3, int var4, byte[] var5) {
+ int var6 = this.field_947_a;
+ this.field_946_b.setSeed(var2.randomSeed);
+ long var7 = this.field_946_b.nextLong() / 2L * 2L + 1L;
+ long var9 = this.field_946_b.nextLong() / 2L * 2L + 1L;
+
+ for(int var11 = var3 - var6; var11 <= var3 + var6; ++var11) {
+ for(int var12 = var4 - var6; var12 <= var4 + var6; ++var12) {
+ this.field_946_b.setSeed((long)var11 * var7 + (long)var12 * var9 ^ var2.randomSeed);
+ this.func_666_a(var2, var11, var12, var3, var4, var5);
+ }
+ }
+
+ }
+
+ protected void func_666_a(World var1, int var2, int var3, int var4, int var5, byte[] var6) {
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MapGenCaves.java b/minecraft_server/src/net/minecraft/src/MapGenCaves.java
new file mode 100644
index 0000000..d8c5ac4
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MapGenCaves.java
@@ -0,0 +1,185 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class MapGenCaves extends MapGenBase {
+ protected void func_669_a(int var1, int var2, byte[] var3, double var4, double var6, double var8) {
+ this.func_668_a(var1, var2, var3, var4, var6, var8, 1.0F + this.field_946_b.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D);
+ }
+
+ protected void func_668_a(int var1, int var2, byte[] var3, double var4, double var6, double var8, float var10, float var11, float var12, int var13, int var14, double var15) {
+ double var17 = (double)(var1 * 16 + 8);
+ double var19 = (double)(var2 * 16 + 8);
+ float var21 = 0.0F;
+ float var22 = 0.0F;
+ Random var23 = new Random(this.field_946_b.nextLong());
+ if(var14 <= 0) {
+ int var24 = this.field_947_a * 16 - 16;
+ var14 = var24 - var23.nextInt(var24 / 4);
+ }
+
+ boolean var52 = false;
+ if(var13 == -1) {
+ var13 = var14 / 2;
+ var52 = true;
+ }
+
+ int var25 = var23.nextInt(var14 / 2) + var14 / 4;
+
+ for(boolean var26 = var23.nextInt(6) == 0; var13 < var14; ++var13) {
+ double var27 = 1.5D + (double)(MathHelper.sin((float)var13 * (float)Math.PI / (float)var14) * var10 * 1.0F);
+ double var29 = var27 * var15;
+ float var31 = MathHelper.cos(var12);
+ float var32 = MathHelper.sin(var12);
+ var4 += (double)(MathHelper.cos(var11) * var31);
+ var6 += (double)var32;
+ var8 += (double)(MathHelper.sin(var11) * var31);
+ if(var26) {
+ var12 *= 0.92F;
+ } else {
+ var12 *= 0.7F;
+ }
+
+ var12 += var22 * 0.1F;
+ var11 += var21 * 0.1F;
+ var22 *= 0.9F;
+ var21 *= 12.0F / 16.0F;
+ var22 += (var23.nextFloat() - var23.nextFloat()) * var23.nextFloat() * 2.0F;
+ var21 += (var23.nextFloat() - var23.nextFloat()) * var23.nextFloat() * 4.0F;
+ if(!var52 && var13 == var25 && var10 > 1.0F) {
+ this.func_668_a(var1, var2, var3, var4, var6, var8, var23.nextFloat() * 0.5F + 0.5F, var11 - (float)Math.PI * 0.5F, var12 / 3.0F, var13, var14, 1.0D);
+ this.func_668_a(var1, var2, var3, var4, var6, var8, var23.nextFloat() * 0.5F + 0.5F, var11 + (float)Math.PI * 0.5F, var12 / 3.0F, var13, var14, 1.0D);
+ return;
+ }
+
+ if(var52 || var23.nextInt(4) != 0) {
+ double var33 = var4 - var17;
+ double var35 = var8 - var19;
+ double var37 = (double)(var14 - var13);
+ double var39 = (double)(var10 + 2.0F + 16.0F);
+ if(var33 * var33 + var35 * var35 - var37 * var37 > var39 * var39) {
+ return;
+ }
+
+ if(var4 >= var17 - 16.0D - var27 * 2.0D && var8 >= var19 - 16.0D - var27 * 2.0D && var4 <= var17 + 16.0D + var27 * 2.0D && var8 <= var19 + 16.0D + var27 * 2.0D) {
+ int var53 = MathHelper.floor_double(var4 - var27) - var1 * 16 - 1;
+ int var34 = MathHelper.floor_double(var4 + var27) - var1 * 16 + 1;
+ int var54 = MathHelper.floor_double(var6 - var29) - 1;
+ int var36 = MathHelper.floor_double(var6 + var29) + 1;
+ int var55 = MathHelper.floor_double(var8 - var27) - var2 * 16 - 1;
+ int var38 = MathHelper.floor_double(var8 + var27) - var2 * 16 + 1;
+ if(var53 < 0) {
+ var53 = 0;
+ }
+
+ if(var34 > 16) {
+ var34 = 16;
+ }
+
+ if(var54 < 1) {
+ var54 = 1;
+ }
+
+ if(var36 > 120) {
+ var36 = 120;
+ }
+
+ if(var55 < 0) {
+ var55 = 0;
+ }
+
+ if(var38 > 16) {
+ var38 = 16;
+ }
+
+ boolean var56 = false;
+
+ int var40;
+ int var43;
+ for(var40 = var53; !var56 && var40 < var34; ++var40) {
+ for(int var41 = var55; !var56 && var41 < var38; ++var41) {
+ for(int var42 = var36 + 1; !var56 && var42 >= var54 - 1; --var42) {
+ var43 = (var40 * 16 + var41) * 128 + var42;
+ if(var42 >= 0 && var42 < 128) {
+ if(var3[var43] == Block.waterStill.blockID || var3[var43] == Block.waterMoving.blockID) {
+ var56 = true;
+ }
+
+ if(var42 != var54 - 1 && var40 != var53 && var40 != var34 - 1 && var41 != var55 && var41 != var38 - 1) {
+ var42 = var54;
+ }
+ }
+ }
+ }
+ }
+
+ if(!var56) {
+ for(var40 = var53; var40 < var34; ++var40) {
+ double var57 = ((double)(var40 + var1 * 16) + 0.5D - var4) / var27;
+
+ for(var43 = var55; var43 < var38; ++var43) {
+ double var44 = ((double)(var43 + var2 * 16) + 0.5D - var8) / var27;
+ int var46 = (var40 * 16 + var43) * 128 + var36;
+ boolean var47 = false;
+
+ for(int var48 = var36 - 1; var48 >= var54; --var48) {
+ double var49 = ((double)var48 + 0.5D - var6) / var29;
+ if(var49 > -0.7D && var57 * var57 + var49 * var49 + var44 * var44 < 1.0D) {
+ byte var51 = var3[var46];
+ if(var51 == Block.grass.blockID) {
+ var47 = true;
+ }
+
+ if(var51 == Block.stone.blockID || var51 == Block.dirt.blockID || var51 == Block.grass.blockID) {
+ if(var48 < 10) {
+ var3[var46] = (byte)Block.lavaStill.blockID;
+ } else {
+ var3[var46] = 0;
+ if(var47 && var3[var46 - 1] == Block.dirt.blockID) {
+ var3[var46 - 1] = (byte)Block.grass.blockID;
+ }
+ }
+ }
+ }
+
+ --var46;
+ }
+ }
+ }
+
+ if(var52) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ protected void func_666_a(World var1, int var2, int var3, int var4, int var5, byte[] var6) {
+ int var7 = this.field_946_b.nextInt(this.field_946_b.nextInt(this.field_946_b.nextInt(40) + 1) + 1);
+ if(this.field_946_b.nextInt(15) != 0) {
+ var7 = 0;
+ }
+
+ for(int var8 = 0; var8 < var7; ++var8) {
+ double var9 = (double)(var2 * 16 + this.field_946_b.nextInt(16));
+ double var11 = (double)this.field_946_b.nextInt(this.field_946_b.nextInt(120) + 8);
+ double var13 = (double)(var3 * 16 + this.field_946_b.nextInt(16));
+ int var15 = 1;
+ if(this.field_946_b.nextInt(4) == 0) {
+ this.func_669_a(var4, var5, var6, var9, var11, var13);
+ var15 += this.field_946_b.nextInt(4);
+ }
+
+ for(int var16 = 0; var16 < var15; ++var16) {
+ float var17 = this.field_946_b.nextFloat() * (float)Math.PI * 2.0F;
+ float var18 = (this.field_946_b.nextFloat() - 0.5F) * 2.0F / 8.0F;
+ float var19 = this.field_946_b.nextFloat() * 2.0F + this.field_946_b.nextFloat();
+ this.func_668_a(var4, var5, var6, var9, var11, var13, var19, var17, var18, 0, 0, 1.0D);
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MapGenCavesHell.java b/minecraft_server/src/net/minecraft/src/MapGenCavesHell.java
new file mode 100644
index 0000000..8e991e6
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MapGenCavesHell.java
@@ -0,0 +1,173 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class MapGenCavesHell extends MapGenBase {
+ protected void func_4106_a(int var1, int var2, byte[] var3, double var4, double var6, double var8) {
+ this.func_4105_a(var1, var2, var3, var4, var6, var8, 1.0F + this.field_946_b.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D);
+ }
+
+ protected void func_4105_a(int var1, int var2, byte[] var3, double var4, double var6, double var8, float var10, float var11, float var12, int var13, int var14, double var15) {
+ double var17 = (double)(var1 * 16 + 8);
+ double var19 = (double)(var2 * 16 + 8);
+ float var21 = 0.0F;
+ float var22 = 0.0F;
+ Random var23 = new Random(this.field_946_b.nextLong());
+ if(var14 <= 0) {
+ int var24 = this.field_947_a * 16 - 16;
+ var14 = var24 - var23.nextInt(var24 / 4);
+ }
+
+ boolean var51 = false;
+ if(var13 == -1) {
+ var13 = var14 / 2;
+ var51 = true;
+ }
+
+ int var25 = var23.nextInt(var14 / 2) + var14 / 4;
+
+ for(boolean var26 = var23.nextInt(6) == 0; var13 < var14; ++var13) {
+ double var27 = 1.5D + (double)(MathHelper.sin((float)var13 * (float)Math.PI / (float)var14) * var10 * 1.0F);
+ double var29 = var27 * var15;
+ float var31 = MathHelper.cos(var12);
+ float var32 = MathHelper.sin(var12);
+ var4 += (double)(MathHelper.cos(var11) * var31);
+ var6 += (double)var32;
+ var8 += (double)(MathHelper.sin(var11) * var31);
+ if(var26) {
+ var12 *= 0.92F;
+ } else {
+ var12 *= 0.7F;
+ }
+
+ var12 += var22 * 0.1F;
+ var11 += var21 * 0.1F;
+ var22 *= 0.9F;
+ var21 *= 12.0F / 16.0F;
+ var22 += (var23.nextFloat() - var23.nextFloat()) * var23.nextFloat() * 2.0F;
+ var21 += (var23.nextFloat() - var23.nextFloat()) * var23.nextFloat() * 4.0F;
+ if(!var51 && var13 == var25 && var10 > 1.0F) {
+ this.func_4105_a(var1, var2, var3, var4, var6, var8, var23.nextFloat() * 0.5F + 0.5F, var11 - (float)Math.PI * 0.5F, var12 / 3.0F, var13, var14, 1.0D);
+ this.func_4105_a(var1, var2, var3, var4, var6, var8, var23.nextFloat() * 0.5F + 0.5F, var11 + (float)Math.PI * 0.5F, var12 / 3.0F, var13, var14, 1.0D);
+ return;
+ }
+
+ if(var51 || var23.nextInt(4) != 0) {
+ double var33 = var4 - var17;
+ double var35 = var8 - var19;
+ double var37 = (double)(var14 - var13);
+ double var39 = (double)(var10 + 2.0F + 16.0F);
+ if(var33 * var33 + var35 * var35 - var37 * var37 > var39 * var39) {
+ return;
+ }
+
+ if(var4 >= var17 - 16.0D - var27 * 2.0D && var8 >= var19 - 16.0D - var27 * 2.0D && var4 <= var17 + 16.0D + var27 * 2.0D && var8 <= var19 + 16.0D + var27 * 2.0D) {
+ int var52 = MathHelper.floor_double(var4 - var27) - var1 * 16 - 1;
+ int var34 = MathHelper.floor_double(var4 + var27) - var1 * 16 + 1;
+ int var53 = MathHelper.floor_double(var6 - var29) - 1;
+ int var36 = MathHelper.floor_double(var6 + var29) + 1;
+ int var54 = MathHelper.floor_double(var8 - var27) - var2 * 16 - 1;
+ int var38 = MathHelper.floor_double(var8 + var27) - var2 * 16 + 1;
+ if(var52 < 0) {
+ var52 = 0;
+ }
+
+ if(var34 > 16) {
+ var34 = 16;
+ }
+
+ if(var53 < 1) {
+ var53 = 1;
+ }
+
+ if(var36 > 120) {
+ var36 = 120;
+ }
+
+ if(var54 < 0) {
+ var54 = 0;
+ }
+
+ if(var38 > 16) {
+ var38 = 16;
+ }
+
+ boolean var55 = false;
+
+ int var40;
+ int var43;
+ for(var40 = var52; !var55 && var40 < var34; ++var40) {
+ for(int var41 = var54; !var55 && var41 < var38; ++var41) {
+ for(int var42 = var36 + 1; !var55 && var42 >= var53 - 1; --var42) {
+ var43 = (var40 * 16 + var41) * 128 + var42;
+ if(var42 >= 0 && var42 < 128) {
+ if(var3[var43] == Block.lavaStill.blockID || var3[var43] == Block.lavaMoving.blockID) {
+ var55 = true;
+ }
+
+ if(var42 != var53 - 1 && var40 != var52 && var40 != var34 - 1 && var41 != var54 && var41 != var38 - 1) {
+ var42 = var53;
+ }
+ }
+ }
+ }
+ }
+
+ if(!var55) {
+ for(var40 = var52; var40 < var34; ++var40) {
+ double var56 = ((double)(var40 + var1 * 16) + 0.5D - var4) / var27;
+
+ for(var43 = var54; var43 < var38; ++var43) {
+ double var44 = ((double)(var43 + var2 * 16) + 0.5D - var8) / var27;
+ int var46 = (var40 * 16 + var43) * 128 + var36;
+
+ for(int var47 = var36 - 1; var47 >= var53; --var47) {
+ double var48 = ((double)var47 + 0.5D - var6) / var29;
+ if(var48 > -0.7D && var56 * var56 + var48 * var48 + var44 * var44 < 1.0D) {
+ byte var50 = var3[var46];
+ if(var50 == Block.bloodStone.blockID || var50 == Block.dirt.blockID || var50 == Block.grass.blockID) {
+ var3[var46] = 0;
+ }
+ }
+
+ --var46;
+ }
+ }
+ }
+
+ if(var51) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ protected void func_666_a(World var1, int var2, int var3, int var4, int var5, byte[] var6) {
+ int var7 = this.field_946_b.nextInt(this.field_946_b.nextInt(this.field_946_b.nextInt(10) + 1) + 1);
+ if(this.field_946_b.nextInt(5) != 0) {
+ var7 = 0;
+ }
+
+ for(int var8 = 0; var8 < var7; ++var8) {
+ double var9 = (double)(var2 * 16 + this.field_946_b.nextInt(16));
+ double var11 = (double)this.field_946_b.nextInt(128);
+ double var13 = (double)(var3 * 16 + this.field_946_b.nextInt(16));
+ int var15 = 1;
+ if(this.field_946_b.nextInt(4) == 0) {
+ this.func_4106_a(var4, var5, var6, var9, var11, var13);
+ var15 += this.field_946_b.nextInt(4);
+ }
+
+ for(int var16 = 0; var16 < var15; ++var16) {
+ float var17 = this.field_946_b.nextFloat() * (float)Math.PI * 2.0F;
+ float var18 = (this.field_946_b.nextFloat() - 0.5F) * 2.0F / 8.0F;
+ float var19 = this.field_946_b.nextFloat() * 2.0F + this.field_946_b.nextFloat();
+ this.func_4105_a(var4, var5, var6, var9, var11, var13, var19 * 2.0F, var17, var18, 0, 0, 0.5D);
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Material.java b/minecraft_server/src/net/minecraft/src/Material.java
new file mode 100644
index 0000000..5b65cef
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Material.java
@@ -0,0 +1,54 @@
+package net.minecraft.src;
+
+public class Material {
+ public static final Material air = new MaterialTransparent();
+ public static final Material ground = new Material();
+ public static final Material wood = (new Material()).setBurning();
+ public static final Material rock = new Material();
+ public static final Material iron = new Material();
+ public static final Material water = new MaterialLiquid();
+ public static final Material lava = new MaterialLiquid();
+ public static final Material field_4218_h = (new Material()).setBurning();
+ public static final Material plants = new MaterialLogic();
+ public static final Material sponge = new Material();
+ public static final Material field_4217_k = (new Material()).setBurning();
+ public static final Material fire = new MaterialTransparent();
+ public static final Material sand = new Material();
+ public static final Material circuits = new MaterialLogic();
+ public static final Material field_4216_o = new Material();
+ public static final Material tnt = (new Material()).setBurning();
+ public static final Material field_4215_q = new Material();
+ public static final Material ice = new Material();
+ public static final Material snow = new MaterialLogic();
+ public static final Material builtSnow = new Material();
+ public static final Material field_4214_u = new Material();
+ public static final Material clay = new Material();
+ public static final Material field_4213_w = new Material();
+ public static final Material field_4212_x = new Material();
+ private boolean canBurn;
+
+ public boolean getIsLiquid() {
+ return false;
+ }
+
+ public boolean func_216_a() {
+ return true;
+ }
+
+ public boolean getCanBlockGrass() {
+ return true;
+ }
+
+ public boolean func_218_c() {
+ return true;
+ }
+
+ private Material setBurning() {
+ this.canBurn = true;
+ return this;
+ }
+
+ public boolean getBurning() {
+ return this.canBurn;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MaterialLiquid.java b/minecraft_server/src/net/minecraft/src/MaterialLiquid.java
new file mode 100644
index 0000000..213b89b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MaterialLiquid.java
@@ -0,0 +1,15 @@
+package net.minecraft.src;
+
+public class MaterialLiquid extends Material {
+ public boolean getIsLiquid() {
+ return true;
+ }
+
+ public boolean func_218_c() {
+ return false;
+ }
+
+ public boolean func_216_a() {
+ return false;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MaterialLogic.java b/minecraft_server/src/net/minecraft/src/MaterialLogic.java
new file mode 100644
index 0000000..0dc4d99
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MaterialLogic.java
@@ -0,0 +1,15 @@
+package net.minecraft.src;
+
+public class MaterialLogic extends Material {
+ public boolean func_216_a() {
+ return false;
+ }
+
+ public boolean getCanBlockGrass() {
+ return false;
+ }
+
+ public boolean func_218_c() {
+ return false;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MaterialTransparent.java b/minecraft_server/src/net/minecraft/src/MaterialTransparent.java
new file mode 100644
index 0000000..8ca5d98
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MaterialTransparent.java
@@ -0,0 +1,15 @@
+package net.minecraft.src;
+
+public class MaterialTransparent extends Material {
+ public boolean func_216_a() {
+ return false;
+ }
+
+ public boolean getCanBlockGrass() {
+ return false;
+ }
+
+ public boolean func_218_c() {
+ return false;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MathHelper.java b/minecraft_server/src/net/minecraft/src/MathHelper.java
new file mode 100644
index 0000000..ca49da0
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MathHelper.java
@@ -0,0 +1,54 @@
+package net.minecraft.src;
+
+public class MathHelper {
+ private static float[] field_886_a = new float[65536];
+
+ public static final float sin(float var0) {
+ return field_886_a[(int)(var0 * 10430.378F) & '\uffff'];
+ }
+
+ public static final float cos(float var0) {
+ return field_886_a[(int)(var0 * 10430.378F + 16384.0F) & '\uffff'];
+ }
+
+ public static final float sqrt_float(float var0) {
+ return (float)Math.sqrt((double)var0);
+ }
+
+ public static final float sqrt_double(double var0) {
+ return (float)Math.sqrt(var0);
+ }
+
+ public static int floor_float(float var0) {
+ int var1 = (int)var0;
+ return var0 < (float)var1 ? var1 - 1 : var1;
+ }
+
+ public static int floor_double(double var0) {
+ int var2 = (int)var0;
+ return var0 < (double)var2 ? var2 - 1 : var2;
+ }
+
+ public static float abs(float var0) {
+ return var0 >= 0.0F ? var0 : -var0;
+ }
+
+ public static double abs_max(double var0, double var2) {
+ if(var0 < 0.0D) {
+ var0 = -var0;
+ }
+
+ if(var2 < 0.0D) {
+ var2 = -var2;
+ }
+
+ return var0 > var2 ? var0 : var2;
+ }
+
+ static {
+ for(int var0 = 0; var0 < 65536; ++var0) {
+ field_886_a[var0] = (float)Math.sin((double)var0 * Math.PI * 2.0D / 65536.0D);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MetadataChunkBlock.java b/minecraft_server/src/net/minecraft/src/MetadataChunkBlock.java
new file mode 100644
index 0000000..43887b3
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MetadataChunkBlock.java
@@ -0,0 +1,175 @@
+package net.minecraft.src;
+
+public class MetadataChunkBlock {
+ public final EnumSkyBlock field_957_a;
+ public int field_956_b;
+ public int field_962_c;
+ public int field_961_d;
+ public int field_960_e;
+ public int field_959_f;
+ public int field_958_g;
+
+ public MetadataChunkBlock(EnumSkyBlock var1, int var2, int var3, int var4, int var5, int var6, int var7) {
+ this.field_957_a = var1;
+ this.field_956_b = var2;
+ this.field_962_c = var3;
+ this.field_961_d = var4;
+ this.field_960_e = var5;
+ this.field_959_f = var6;
+ this.field_958_g = var7;
+ }
+
+ public void func_4107_a(World var1) {
+ int var2 = this.field_960_e - this.field_956_b + 1;
+ int var3 = this.field_959_f - this.field_962_c + 1;
+ int var4 = this.field_958_g - this.field_961_d + 1;
+ int var5 = var2 * var3 * var4;
+ if(var5 <= -Short.MIN_VALUE) {
+ for(int var6 = this.field_956_b; var6 <= this.field_960_e; ++var6) {
+ for(int var7 = this.field_961_d; var7 <= this.field_958_g; ++var7) {
+ if(var1.func_530_e(var6, 0, var7)) {
+ for(int var8 = this.field_962_c; var8 <= this.field_959_f; ++var8) {
+ if(var8 >= 0 && var8 < 128) {
+ int var9 = var1.getSavedLightValue(this.field_957_a, var6, var8, var7);
+ boolean var10 = false;
+ int var11 = var1.getBlockId(var6, var8, var7);
+ int var12 = Block.lightOpacity[var11];
+ if(var12 == 0) {
+ var12 = 1;
+ }
+
+ int var13 = 0;
+ if(this.field_957_a == EnumSkyBlock.Sky) {
+ if(var1.canExistingBlockSeeTheSky(var6, var8, var7)) {
+ var13 = 15;
+ }
+ } else if(this.field_957_a == EnumSkyBlock.Block) {
+ var13 = Block.lightValue[var11];
+ }
+
+ int var14;
+ int var20;
+ if(var12 >= 15 && var13 == 0) {
+ var20 = 0;
+ } else {
+ var14 = var1.getSavedLightValue(this.field_957_a, var6 - 1, var8, var7);
+ int var15 = var1.getSavedLightValue(this.field_957_a, var6 + 1, var8, var7);
+ int var16 = var1.getSavedLightValue(this.field_957_a, var6, var8 - 1, var7);
+ int var17 = var1.getSavedLightValue(this.field_957_a, var6, var8 + 1, var7);
+ int var18 = var1.getSavedLightValue(this.field_957_a, var6, var8, var7 - 1);
+ int var19 = var1.getSavedLightValue(this.field_957_a, var6, var8, var7 + 1);
+ var20 = var14;
+ if(var15 > var14) {
+ var20 = var15;
+ }
+
+ if(var16 > var20) {
+ var20 = var16;
+ }
+
+ if(var17 > var20) {
+ var20 = var17;
+ }
+
+ if(var18 > var20) {
+ var20 = var18;
+ }
+
+ if(var19 > var20) {
+ var20 = var19;
+ }
+
+ var20 -= var12;
+ if(var20 < 0) {
+ var20 = 0;
+ }
+
+ if(var13 > var20) {
+ var20 = var13;
+ }
+ }
+
+ if(var9 != var20) {
+ var1.setLightValue(this.field_957_a, var6, var8, var7, var20);
+ var14 = var20 - 1;
+ if(var14 < 0) {
+ var14 = 0;
+ }
+
+ var1.neighborLightPropagationChanged(this.field_957_a, var6 - 1, var8, var7, var14);
+ var1.neighborLightPropagationChanged(this.field_957_a, var6, var8 - 1, var7, var14);
+ var1.neighborLightPropagationChanged(this.field_957_a, var6, var8, var7 - 1, var14);
+ if(var6 + 1 >= this.field_960_e) {
+ var1.neighborLightPropagationChanged(this.field_957_a, var6 + 1, var8, var7, var14);
+ }
+
+ if(var8 + 1 >= this.field_959_f) {
+ var1.neighborLightPropagationChanged(this.field_957_a, var6, var8 + 1, var7, var14);
+ }
+
+ if(var7 + 1 >= this.field_958_g) {
+ var1.neighborLightPropagationChanged(this.field_957_a, var6, var8, var7 + 1, var14);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+ }
+
+ public boolean func_692_a(int var1, int var2, int var3, int var4, int var5, int var6) {
+ if(var1 >= this.field_956_b && var2 >= this.field_962_c && var3 >= this.field_961_d && var4 <= this.field_960_e && var5 <= this.field_959_f && var6 <= this.field_958_g) {
+ return true;
+ } else {
+ byte var7 = 1;
+ if(var1 >= this.field_956_b - var7 && var2 >= this.field_962_c - var7 && var3 >= this.field_961_d - var7 && var4 <= this.field_960_e + var7 && var5 <= this.field_959_f + var7 && var6 <= this.field_958_g + var7) {
+ int var8 = this.field_960_e - this.field_956_b;
+ int var9 = this.field_959_f - this.field_962_c;
+ int var10 = this.field_958_g - this.field_961_d;
+ if(var1 > this.field_956_b) {
+ var1 = this.field_956_b;
+ }
+
+ if(var2 > this.field_962_c) {
+ var2 = this.field_962_c;
+ }
+
+ if(var3 > this.field_961_d) {
+ var3 = this.field_961_d;
+ }
+
+ if(var4 < this.field_960_e) {
+ var4 = this.field_960_e;
+ }
+
+ if(var5 < this.field_959_f) {
+ var5 = this.field_959_f;
+ }
+
+ if(var6 < this.field_958_g) {
+ var6 = this.field_958_g;
+ }
+
+ int var11 = var4 - var1;
+ int var12 = var5 - var2;
+ int var13 = var6 - var3;
+ int var14 = var8 * var9 * var10;
+ int var15 = var11 * var12 * var13;
+ if(var15 - var14 <= 2) {
+ this.field_956_b = var1;
+ this.field_962_c = var2;
+ this.field_961_d = var3;
+ this.field_960_e = var4;
+ this.field_959_f = var5;
+ this.field_958_g = var6;
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MinecartTrackLogic.java b/minecraft_server/src/net/minecraft/src/MinecartTrackLogic.java
new file mode 100644
index 0000000..77ffd5d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MinecartTrackLogic.java
@@ -0,0 +1,323 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.List;
+
+class MinecartTrackLogic {
+ private World worldObj;
+ private int field_893_c;
+ private int field_892_d;
+ private int field_891_e;
+ private int field_890_f;
+ private List field_889_g;
+ final BlockMinecartTrack field_888_a;
+
+ public MinecartTrackLogic(BlockMinecartTrack var1, World var2, int var3, int var4, int var5) {
+ this.field_888_a = var1;
+ this.field_889_g = new ArrayList();
+ this.worldObj = var2;
+ this.field_893_c = var3;
+ this.field_892_d = var4;
+ this.field_891_e = var5;
+ this.field_890_f = var2.getBlockMetadata(var3, var4, var5);
+ this.func_593_a();
+ }
+
+ private void func_593_a() {
+ this.field_889_g.clear();
+ if(this.field_890_f == 0) {
+ this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e - 1));
+ this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e + 1));
+ } else if(this.field_890_f == 1) {
+ this.field_889_g.add(new ChunkPosition(this.field_893_c - 1, this.field_892_d, this.field_891_e));
+ this.field_889_g.add(new ChunkPosition(this.field_893_c + 1, this.field_892_d, this.field_891_e));
+ } else if(this.field_890_f == 2) {
+ this.field_889_g.add(new ChunkPosition(this.field_893_c - 1, this.field_892_d, this.field_891_e));
+ this.field_889_g.add(new ChunkPosition(this.field_893_c + 1, this.field_892_d + 1, this.field_891_e));
+ } else if(this.field_890_f == 3) {
+ this.field_889_g.add(new ChunkPosition(this.field_893_c - 1, this.field_892_d + 1, this.field_891_e));
+ this.field_889_g.add(new ChunkPosition(this.field_893_c + 1, this.field_892_d, this.field_891_e));
+ } else if(this.field_890_f == 4) {
+ this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d + 1, this.field_891_e - 1));
+ this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e + 1));
+ } else if(this.field_890_f == 5) {
+ this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e - 1));
+ this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d + 1, this.field_891_e + 1));
+ } else if(this.field_890_f == 6) {
+ this.field_889_g.add(new ChunkPosition(this.field_893_c + 1, this.field_892_d, this.field_891_e));
+ this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e + 1));
+ } else if(this.field_890_f == 7) {
+ this.field_889_g.add(new ChunkPosition(this.field_893_c - 1, this.field_892_d, this.field_891_e));
+ this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e + 1));
+ } else if(this.field_890_f == 8) {
+ this.field_889_g.add(new ChunkPosition(this.field_893_c - 1, this.field_892_d, this.field_891_e));
+ this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e - 1));
+ } else if(this.field_890_f == 9) {
+ this.field_889_g.add(new ChunkPosition(this.field_893_c + 1, this.field_892_d, this.field_891_e));
+ this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e - 1));
+ }
+
+ }
+
+ private void func_591_b() {
+ for(int var1 = 0; var1 < this.field_889_g.size(); ++var1) {
+ MinecartTrackLogic var2 = this.func_595_a((ChunkPosition)this.field_889_g.get(var1));
+ if(var2 != null && var2.func_590_b(this)) {
+ this.field_889_g.set(var1, new ChunkPosition(var2.field_893_c, var2.field_892_d, var2.field_891_e));
+ } else {
+ this.field_889_g.remove(var1--);
+ }
+ }
+
+ }
+
+ private boolean func_589_a(int var1, int var2, int var3) {
+ return this.worldObj.getBlockId(var1, var2, var3) == this.field_888_a.blockID ? true : (this.worldObj.getBlockId(var1, var2 + 1, var3) == this.field_888_a.blockID ? true : this.worldObj.getBlockId(var1, var2 - 1, var3) == this.field_888_a.blockID);
+ }
+
+ private MinecartTrackLogic func_595_a(ChunkPosition var1) {
+ return this.worldObj.getBlockId(var1.field_846_a, var1.field_845_b, var1.field_847_c) == this.field_888_a.blockID ? new MinecartTrackLogic(this.field_888_a, this.worldObj, var1.field_846_a, var1.field_845_b, var1.field_847_c) : (this.worldObj.getBlockId(var1.field_846_a, var1.field_845_b + 1, var1.field_847_c) == this.field_888_a.blockID ? new MinecartTrackLogic(this.field_888_a, this.worldObj, var1.field_846_a, var1.field_845_b + 1, var1.field_847_c) : (this.worldObj.getBlockId(var1.field_846_a, var1.field_845_b - 1, var1.field_847_c) == this.field_888_a.blockID ? new MinecartTrackLogic(this.field_888_a, this.worldObj, var1.field_846_a, var1.field_845_b - 1, var1.field_847_c) : null));
+ }
+
+ private boolean func_590_b(MinecartTrackLogic var1) {
+ for(int var2 = 0; var2 < this.field_889_g.size(); ++var2) {
+ ChunkPosition var3 = (ChunkPosition)this.field_889_g.get(var2);
+ if(var3.field_846_a == var1.field_893_c && var3.field_847_c == var1.field_891_e) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private boolean func_599_b(int var1, int var2, int var3) {
+ for(int var4 = 0; var4 < this.field_889_g.size(); ++var4) {
+ ChunkPosition var5 = (ChunkPosition)this.field_889_g.get(var4);
+ if(var5.field_846_a == var1 && var5.field_847_c == var3) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private int func_594_c() {
+ int var1 = 0;
+ if(this.func_589_a(this.field_893_c, this.field_892_d, this.field_891_e - 1)) {
+ ++var1;
+ }
+
+ if(this.func_589_a(this.field_893_c, this.field_892_d, this.field_891_e + 1)) {
+ ++var1;
+ }
+
+ if(this.func_589_a(this.field_893_c - 1, this.field_892_d, this.field_891_e)) {
+ ++var1;
+ }
+
+ if(this.func_589_a(this.field_893_c + 1, this.field_892_d, this.field_891_e)) {
+ ++var1;
+ }
+
+ return var1;
+ }
+
+ private boolean func_597_c(MinecartTrackLogic var1) {
+ if(this.func_590_b(var1)) {
+ return true;
+ } else if(this.field_889_g.size() == 2) {
+ return false;
+ } else if(this.field_889_g.size() == 0) {
+ return true;
+ } else {
+ ChunkPosition var2 = (ChunkPosition)this.field_889_g.get(0);
+ return var1.field_892_d == this.field_892_d && var2.field_845_b == this.field_892_d ? true : true;
+ }
+ }
+
+ private void func_598_d(MinecartTrackLogic var1) {
+ this.field_889_g.add(new ChunkPosition(var1.field_893_c, var1.field_892_d, var1.field_891_e));
+ boolean var2 = this.func_599_b(this.field_893_c, this.field_892_d, this.field_891_e - 1);
+ boolean var3 = this.func_599_b(this.field_893_c, this.field_892_d, this.field_891_e + 1);
+ boolean var4 = this.func_599_b(this.field_893_c - 1, this.field_892_d, this.field_891_e);
+ boolean var5 = this.func_599_b(this.field_893_c + 1, this.field_892_d, this.field_891_e);
+ byte var6 = -1;
+ if(var2 || var3) {
+ var6 = 0;
+ }
+
+ if(var4 || var5) {
+ var6 = 1;
+ }
+
+ if(var3 && var5 && !var2 && !var4) {
+ var6 = 6;
+ }
+
+ if(var3 && var4 && !var2 && !var5) {
+ var6 = 7;
+ }
+
+ if(var2 && var4 && !var3 && !var5) {
+ var6 = 8;
+ }
+
+ if(var2 && var5 && !var3 && !var4) {
+ var6 = 9;
+ }
+
+ if(var6 == 0) {
+ if(this.worldObj.getBlockId(this.field_893_c, this.field_892_d + 1, this.field_891_e - 1) == this.field_888_a.blockID) {
+ var6 = 4;
+ }
+
+ if(this.worldObj.getBlockId(this.field_893_c, this.field_892_d + 1, this.field_891_e + 1) == this.field_888_a.blockID) {
+ var6 = 5;
+ }
+ }
+
+ if(var6 == 1) {
+ if(this.worldObj.getBlockId(this.field_893_c + 1, this.field_892_d + 1, this.field_891_e) == this.field_888_a.blockID) {
+ var6 = 2;
+ }
+
+ if(this.worldObj.getBlockId(this.field_893_c - 1, this.field_892_d + 1, this.field_891_e) == this.field_888_a.blockID) {
+ var6 = 3;
+ }
+ }
+
+ if(var6 < 0) {
+ var6 = 0;
+ }
+
+ this.worldObj.setBlockMetadataWithNotify(this.field_893_c, this.field_892_d, this.field_891_e, var6);
+ }
+
+ private boolean func_592_c(int var1, int var2, int var3) {
+ MinecartTrackLogic var4 = this.func_595_a(new ChunkPosition(var1, var2, var3));
+ if(var4 == null) {
+ return false;
+ } else {
+ var4.func_591_b();
+ return var4.func_597_c(this);
+ }
+ }
+
+ public void func_596_a(boolean var1) {
+ boolean var2 = this.func_592_c(this.field_893_c, this.field_892_d, this.field_891_e - 1);
+ boolean var3 = this.func_592_c(this.field_893_c, this.field_892_d, this.field_891_e + 1);
+ boolean var4 = this.func_592_c(this.field_893_c - 1, this.field_892_d, this.field_891_e);
+ boolean var5 = this.func_592_c(this.field_893_c + 1, this.field_892_d, this.field_891_e);
+ byte var6 = -1;
+ if((var2 || var3) && !var4 && !var5) {
+ var6 = 0;
+ }
+
+ if((var4 || var5) && !var2 && !var3) {
+ var6 = 1;
+ }
+
+ if(var3 && var5 && !var2 && !var4) {
+ var6 = 6;
+ }
+
+ if(var3 && var4 && !var2 && !var5) {
+ var6 = 7;
+ }
+
+ if(var2 && var4 && !var3 && !var5) {
+ var6 = 8;
+ }
+
+ if(var2 && var5 && !var3 && !var4) {
+ var6 = 9;
+ }
+
+ if(var6 == -1) {
+ if(var2 || var3) {
+ var6 = 0;
+ }
+
+ if(var4 || var5) {
+ var6 = 1;
+ }
+
+ if(var1) {
+ if(var3 && var5) {
+ var6 = 6;
+ }
+
+ if(var4 && var3) {
+ var6 = 7;
+ }
+
+ if(var5 && var2) {
+ var6 = 9;
+ }
+
+ if(var2 && var4) {
+ var6 = 8;
+ }
+ } else {
+ if(var2 && var4) {
+ var6 = 8;
+ }
+
+ if(var5 && var2) {
+ var6 = 9;
+ }
+
+ if(var4 && var3) {
+ var6 = 7;
+ }
+
+ if(var3 && var5) {
+ var6 = 6;
+ }
+ }
+ }
+
+ if(var6 == 0) {
+ if(this.worldObj.getBlockId(this.field_893_c, this.field_892_d + 1, this.field_891_e - 1) == this.field_888_a.blockID) {
+ var6 = 4;
+ }
+
+ if(this.worldObj.getBlockId(this.field_893_c, this.field_892_d + 1, this.field_891_e + 1) == this.field_888_a.blockID) {
+ var6 = 5;
+ }
+ }
+
+ if(var6 == 1) {
+ if(this.worldObj.getBlockId(this.field_893_c + 1, this.field_892_d + 1, this.field_891_e) == this.field_888_a.blockID) {
+ var6 = 2;
+ }
+
+ if(this.worldObj.getBlockId(this.field_893_c - 1, this.field_892_d + 1, this.field_891_e) == this.field_888_a.blockID) {
+ var6 = 3;
+ }
+ }
+
+ if(var6 < 0) {
+ var6 = 0;
+ }
+
+ this.field_890_f = var6;
+ this.func_593_a();
+ this.worldObj.setBlockMetadataWithNotify(this.field_893_c, this.field_892_d, this.field_891_e, var6);
+
+ for(int var7 = 0; var7 < this.field_889_g.size(); ++var7) {
+ MinecartTrackLogic var8 = this.func_595_a((ChunkPosition)this.field_889_g.get(var7));
+ if(var8 != null) {
+ var8.func_591_b();
+ if(var8.func_597_c(this)) {
+ var8.func_598_d(this);
+ }
+ }
+ }
+
+ }
+
+ static int func_600_a(MinecartTrackLogic var0) {
+ return var0.func_594_c();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MinecraftException.java b/minecraft_server/src/net/minecraft/src/MinecraftException.java
new file mode 100644
index 0000000..0cf8790
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MinecraftException.java
@@ -0,0 +1,7 @@
+package net.minecraft.src;
+
+public class MinecraftException extends RuntimeException {
+ public MinecraftException(String var1) {
+ super(var1);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MobSpawnerBase.java b/minecraft_server/src/net/minecraft/src/MobSpawnerBase.java
new file mode 100644
index 0000000..979520b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MobSpawnerBase.java
@@ -0,0 +1,73 @@
+package net.minecraft.src;
+
+public class MobSpawnerBase {
+ public static final MobSpawnerBase rainforest = (new MobSpawnerBase()).func_4079_b(588342).setBiomeName("Rainforest").func_4080_a(2094168);
+ public static final MobSpawnerBase swampland = (new MobSpawnerSwamp()).func_4079_b(522674).setBiomeName("Swampland").func_4080_a(9154376);
+ public static final MobSpawnerBase seasonalForest = (new MobSpawnerBase()).func_4079_b(10215459).setBiomeName("Seasonal Forest");
+ public static final MobSpawnerBase forest = (new MobSpawnerBase()).func_4079_b(353825).setBiomeName("Forest").func_4080_a(5159473);
+ public static final MobSpawnerBase savanna = (new MobSpawnerDesert()).func_4079_b(14278691).setBiomeName("Savanna");
+ public static final MobSpawnerBase shrubland = (new MobSpawnerBase()).func_4079_b(10595616).setBiomeName("Shrubland");
+ public static final MobSpawnerBase taiga = (new MobSpawnerBase()).func_4079_b(3060051).setBiomeName("Taiga").func_4083_b().func_4080_a(8107825);
+ public static final MobSpawnerBase desert = (new MobSpawnerDesert()).func_4079_b(16421912).setBiomeName("Desert");
+ public static final MobSpawnerBase plains = (new MobSpawnerDesert()).func_4079_b(16767248).setBiomeName("Plains");
+ public static final MobSpawnerBase iceDesert = (new MobSpawnerDesert()).func_4079_b(16772499).setBiomeName("Ice Desert").func_4083_b().func_4080_a(12899129);
+ public static final MobSpawnerBase tundra = (new MobSpawnerBase()).func_4079_b(5762041).setBiomeName("Tundra").func_4083_b().func_4080_a(12899129);
+ public static final MobSpawnerBase hell = (new MobSpawnerHell()).func_4079_b(16711680).setBiomeName("Hell");
+ public String biomeName;
+ public int field_6162_n;
+ public byte topBlock = (byte)Block.grass.blockID;
+ public byte fillerBlock = (byte)Block.dirt.blockID;
+ public int field_6161_q = 5169201;
+ protected Class[] biomeMonsters = new Class[]{EntitySpider.class, EntityZombie.class, EntitySkeleton.class, EntityCreeper.class};
+ protected Class[] biomeCreatures = new Class[]{EntitySheep.class, EntityPig.class, EntityChicken.class, EntityCow.class};
+ private static MobSpawnerBase[] biomeLookupTable = new MobSpawnerBase[4096];
+
+ public static void generateBiomeLookup() {
+ for(int var0 = 0; var0 < 64; ++var0) {
+ for(int var1 = 0; var1 < 64; ++var1) {
+ biomeLookupTable[var0 + var1 * 64] = getBiome((float)var0 / 63.0F, (float)var1 / 63.0F);
+ }
+ }
+
+ desert.topBlock = desert.fillerBlock = (byte)Block.sand.blockID;
+ iceDesert.topBlock = iceDesert.fillerBlock = (byte)Block.sand.blockID;
+ }
+
+ protected MobSpawnerBase func_4083_b() {
+ return this;
+ }
+
+ protected MobSpawnerBase setBiomeName(String var1) {
+ this.biomeName = var1;
+ return this;
+ }
+
+ protected MobSpawnerBase func_4080_a(int var1) {
+ this.field_6161_q = var1;
+ return this;
+ }
+
+ protected MobSpawnerBase func_4079_b(int var1) {
+ this.field_6162_n = var1;
+ return this;
+ }
+
+ public static MobSpawnerBase getBiomeFromLookup(double var0, double var2) {
+ int var4 = (int)(var0 * 63.0D);
+ int var5 = (int)(var2 * 63.0D);
+ return biomeLookupTable[var4 + var5 * 64];
+ }
+
+ public static MobSpawnerBase getBiome(float var0, float var1) {
+ var1 *= var0;
+ return var0 < 0.1F ? tundra : (var1 < 0.2F ? (var0 < 0.5F ? tundra : (var0 < 0.95F ? savanna : desert)) : (var1 > 0.5F && var0 < 0.7F ? swampland : (var0 < 0.5F ? taiga : (var0 < 0.97F ? (var1 < 0.35F ? shrubland : forest) : (var1 < 0.45F ? plains : (var1 < 0.9F ? seasonalForest : rainforest))))));
+ }
+
+ public Class[] getEntitiesForType(EnumCreatureType var1) {
+ return var1 == EnumCreatureType.monster ? this.biomeMonsters : (var1 == EnumCreatureType.creature ? this.biomeCreatures : null);
+ }
+
+ static {
+ generateBiomeLookup();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MobSpawnerDesert.java b/minecraft_server/src/net/minecraft/src/MobSpawnerDesert.java
new file mode 100644
index 0000000..0bb8072
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MobSpawnerDesert.java
@@ -0,0 +1,4 @@
+package net.minecraft.src;
+
+public class MobSpawnerDesert extends MobSpawnerBase {
+}
diff --git a/minecraft_server/src/net/minecraft/src/MobSpawnerHell.java b/minecraft_server/src/net/minecraft/src/MobSpawnerHell.java
new file mode 100644
index 0000000..d718193
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MobSpawnerHell.java
@@ -0,0 +1,8 @@
+package net.minecraft.src;
+
+public class MobSpawnerHell extends MobSpawnerBase {
+ public MobSpawnerHell() {
+ this.biomeMonsters = new Class[]{EntityGhast.class, EntityPigZombie.class};
+ this.biomeCreatures = new Class[0];
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/MobSpawnerSwamp.java b/minecraft_server/src/net/minecraft/src/MobSpawnerSwamp.java
new file mode 100644
index 0000000..1482f7f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MobSpawnerSwamp.java
@@ -0,0 +1,4 @@
+package net.minecraft.src;
+
+public class MobSpawnerSwamp extends MobSpawnerBase {
+}
diff --git a/minecraft_server/src/net/minecraft/src/MovingObjectPosition.java b/minecraft_server/src/net/minecraft/src/MovingObjectPosition.java
new file mode 100644
index 0000000..d43bb05
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/MovingObjectPosition.java
@@ -0,0 +1,26 @@
+package net.minecraft.src;
+
+public class MovingObjectPosition {
+ public int typeOfHit;
+ public int blockX;
+ public int blockY;
+ public int blockZ;
+ public int sideHit;
+ public Vec3D hitVec;
+ public Entity entityHit;
+
+ public MovingObjectPosition(int var1, int var2, int var3, int var4, Vec3D var5) {
+ this.typeOfHit = 0;
+ this.blockX = var1;
+ this.blockY = var2;
+ this.blockZ = var3;
+ this.sideHit = var4;
+ this.hitVec = Vec3D.createVector(var5.xCoord, var5.yCoord, var5.zCoord);
+ }
+
+ public MovingObjectPosition(Entity var1) {
+ this.typeOfHit = 1;
+ this.entityHit = var1;
+ this.hitVec = Vec3D.createVector(var1.posX, var1.posY, var1.posZ);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTBase.java b/minecraft_server/src/net/minecraft/src/NBTBase.java
new file mode 100644
index 0000000..cb1b73f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTBase.java
@@ -0,0 +1,102 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public abstract class NBTBase {
+ private String key = null;
+
+ abstract void writeTagContents(DataOutput var1) throws IOException;
+
+ abstract void readTagContents(DataInput var1) throws IOException;
+
+ public abstract byte getType();
+
+ public String getKey() {
+ return this.key == null ? "" : this.key;
+ }
+
+ public NBTBase setKey(String var1) {
+ this.key = var1;
+ return this;
+ }
+
+ public static NBTBase readTag(DataInput var0) throws IOException {
+ byte var1 = var0.readByte();
+ if(var1 == 0) {
+ return new NBTTagEnd();
+ } else {
+ NBTBase var2 = createTagOfType(var1);
+ var2.key = var0.readUTF();
+ var2.readTagContents(var0);
+ return var2;
+ }
+ }
+
+ public static void writeTag(NBTBase var0, DataOutput var1) throws IOException {
+ var1.writeByte(var0.getType());
+ if(var0.getType() != 0) {
+ var1.writeUTF(var0.getKey());
+ var0.writeTagContents(var1);
+ }
+ }
+
+ public static NBTBase createTagOfType(byte var0) {
+ switch(var0) {
+ case 0:
+ return new NBTTagEnd();
+ case 1:
+ return new NBTTagByte();
+ case 2:
+ return new NBTTagShort();
+ case 3:
+ return new NBTTagInt();
+ case 4:
+ return new NBTTagLong();
+ case 5:
+ return new NBTTagFloat();
+ case 6:
+ return new NBTTagDouble();
+ case 7:
+ return new NBTTagByteArray();
+ case 8:
+ return new NBTTagString();
+ case 9:
+ return new NBTTagList();
+ case 10:
+ return new NBTTagCompound();
+ default:
+ return null;
+ }
+ }
+
+ public static String getTagName(byte var0) {
+ switch(var0) {
+ case 0:
+ return "TAG_End";
+ case 1:
+ return "TAG_Byte";
+ case 2:
+ return "TAG_Short";
+ case 3:
+ return "TAG_Int";
+ case 4:
+ return "TAG_Long";
+ case 5:
+ return "TAG_Float";
+ case 6:
+ return "TAG_Double";
+ case 7:
+ return "TAG_Byte_Array";
+ case 8:
+ return "TAG_String";
+ case 9:
+ return "TAG_List";
+ case 10:
+ return "TAG_Compound";
+ default:
+ return "UNKNOWN";
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagByte.java b/minecraft_server/src/net/minecraft/src/NBTTagByte.java
new file mode 100644
index 0000000..092f7a3
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagByte.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class NBTTagByte extends NBTBase {
+ public byte byteValue;
+
+ public NBTTagByte() {
+ }
+
+ public NBTTagByte(byte var1) {
+ this.byteValue = var1;
+ }
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ var1.writeByte(this.byteValue);
+ }
+
+ void readTagContents(DataInput var1) throws IOException {
+ this.byteValue = var1.readByte();
+ }
+
+ public byte getType() {
+ return (byte)1;
+ }
+
+ public String toString() {
+ return "" + this.byteValue;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagByteArray.java b/minecraft_server/src/net/minecraft/src/NBTTagByteArray.java
new file mode 100644
index 0000000..d35b4a8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagByteArray.java
@@ -0,0 +1,35 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class NBTTagByteArray extends NBTBase {
+ public byte[] byteArray;
+
+ public NBTTagByteArray() {
+ }
+
+ public NBTTagByteArray(byte[] var1) {
+ this.byteArray = var1;
+ }
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ var1.writeInt(this.byteArray.length);
+ var1.write(this.byteArray);
+ }
+
+ void readTagContents(DataInput var1) throws IOException {
+ int var2 = var1.readInt();
+ this.byteArray = new byte[var2];
+ var1.readFully(this.byteArray);
+ }
+
+ public byte getType() {
+ return (byte)7;
+ }
+
+ public String toString() {
+ return "[" + this.byteArray.length + " bytes]";
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagCompound.java b/minecraft_server/src/net/minecraft/src/NBTTagCompound.java
new file mode 100644
index 0000000..b95cbae
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagCompound.java
@@ -0,0 +1,136 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+public class NBTTagCompound extends NBTBase {
+ private Map tagMap = new HashMap();
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ Iterator var2 = this.tagMap.values().iterator();
+
+ while(var2.hasNext()) {
+ NBTBase var3 = (NBTBase)var2.next();
+ NBTBase.writeTag(var3, var1);
+ }
+
+ var1.writeByte(0);
+ }
+
+ void readTagContents(DataInput var1) throws IOException {
+ this.tagMap.clear();
+
+ while(true) {
+ NBTBase var2 = NBTBase.readTag(var1);
+ if(var2.getType() == 0) {
+ return;
+ }
+
+ this.tagMap.put(var2.getKey(), var2);
+ }
+ }
+
+ public byte getType() {
+ return (byte)10;
+ }
+
+ public void setTag(String var1, NBTBase var2) {
+ this.tagMap.put(var1, var2.setKey(var1));
+ }
+
+ public void setByte(String var1, byte var2) {
+ this.tagMap.put(var1, (new NBTTagByte(var2)).setKey(var1));
+ }
+
+ public void setShort(String var1, short var2) {
+ this.tagMap.put(var1, (new NBTTagShort(var2)).setKey(var1));
+ }
+
+ public void setInteger(String var1, int var2) {
+ this.tagMap.put(var1, (new NBTTagInt(var2)).setKey(var1));
+ }
+
+ public void setLong(String var1, long var2) {
+ this.tagMap.put(var1, (new NBTTagLong(var2)).setKey(var1));
+ }
+
+ public void setFloat(String var1, float var2) {
+ this.tagMap.put(var1, (new NBTTagFloat(var2)).setKey(var1));
+ }
+
+ public void setDouble(String var1, double var2) {
+ this.tagMap.put(var1, (new NBTTagDouble(var2)).setKey(var1));
+ }
+
+ public void setString(String var1, String var2) {
+ this.tagMap.put(var1, (new NBTTagString(var2)).setKey(var1));
+ }
+
+ public void setByteArray(String var1, byte[] var2) {
+ this.tagMap.put(var1, (new NBTTagByteArray(var2)).setKey(var1));
+ }
+
+ public void setCompoundTag(String var1, NBTTagCompound var2) {
+ this.tagMap.put(var1, var2.setKey(var1));
+ }
+
+ public void setBoolean(String var1, boolean var2) {
+ this.setByte(var1, (byte)(var2 ? 1 : 0));
+ }
+
+ public boolean hasKey(String var1) {
+ return this.tagMap.containsKey(var1);
+ }
+
+ public byte getByte(String var1) {
+ return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagByte)this.tagMap.get(var1)).byteValue;
+ }
+
+ public short getShort(String var1) {
+ return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagShort)this.tagMap.get(var1)).shortValue;
+ }
+
+ public int getInteger(String var1) {
+ return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagInt)this.tagMap.get(var1)).intValue;
+ }
+
+ public long getLong(String var1) {
+ return !this.tagMap.containsKey(var1) ? 0L : ((NBTTagLong)this.tagMap.get(var1)).longValue;
+ }
+
+ public float getFloat(String var1) {
+ return !this.tagMap.containsKey(var1) ? 0.0F : ((NBTTagFloat)this.tagMap.get(var1)).floatValue;
+ }
+
+ public double getDouble(String var1) {
+ return !this.tagMap.containsKey(var1) ? 0.0D : ((NBTTagDouble)this.tagMap.get(var1)).doubleValue;
+ }
+
+ public String getString(String var1) {
+ return !this.tagMap.containsKey(var1) ? "" : ((NBTTagString)this.tagMap.get(var1)).stringValue;
+ }
+
+ public byte[] getByteArray(String var1) {
+ return !this.tagMap.containsKey(var1) ? new byte[0] : ((NBTTagByteArray)this.tagMap.get(var1)).byteArray;
+ }
+
+ public NBTTagCompound getCompoundTag(String var1) {
+ return !this.tagMap.containsKey(var1) ? new NBTTagCompound() : (NBTTagCompound)this.tagMap.get(var1);
+ }
+
+ public NBTTagList getTagList(String var1) {
+ return !this.tagMap.containsKey(var1) ? new NBTTagList() : (NBTTagList)this.tagMap.get(var1);
+ }
+
+ public boolean getBoolean(String var1) {
+ return this.getByte(var1) != 0;
+ }
+
+ public String toString() {
+ return "" + this.tagMap.size() + " entries";
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagDouble.java b/minecraft_server/src/net/minecraft/src/NBTTagDouble.java
new file mode 100644
index 0000000..39caa5c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagDouble.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class NBTTagDouble extends NBTBase {
+ public double doubleValue;
+
+ public NBTTagDouble() {
+ }
+
+ public NBTTagDouble(double var1) {
+ this.doubleValue = var1;
+ }
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ var1.writeDouble(this.doubleValue);
+ }
+
+ void readTagContents(DataInput var1) throws IOException {
+ this.doubleValue = var1.readDouble();
+ }
+
+ public byte getType() {
+ return (byte)6;
+ }
+
+ public String toString() {
+ return "" + this.doubleValue;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagEnd.java b/minecraft_server/src/net/minecraft/src/NBTTagEnd.java
new file mode 100644
index 0000000..1385764
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagEnd.java
@@ -0,0 +1,21 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class NBTTagEnd extends NBTBase {
+ void readTagContents(DataInput var1) throws IOException {
+ }
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ }
+
+ public byte getType() {
+ return (byte)0;
+ }
+
+ public String toString() {
+ return "END";
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagFloat.java b/minecraft_server/src/net/minecraft/src/NBTTagFloat.java
new file mode 100644
index 0000000..d5db8ec
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagFloat.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class NBTTagFloat extends NBTBase {
+ public float floatValue;
+
+ public NBTTagFloat() {
+ }
+
+ public NBTTagFloat(float var1) {
+ this.floatValue = var1;
+ }
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ var1.writeFloat(this.floatValue);
+ }
+
+ void readTagContents(DataInput var1) throws IOException {
+ this.floatValue = var1.readFloat();
+ }
+
+ public byte getType() {
+ return (byte)5;
+ }
+
+ public String toString() {
+ return "" + this.floatValue;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagInt.java b/minecraft_server/src/net/minecraft/src/NBTTagInt.java
new file mode 100644
index 0000000..77e69ac
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagInt.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class NBTTagInt extends NBTBase {
+ public int intValue;
+
+ public NBTTagInt() {
+ }
+
+ public NBTTagInt(int var1) {
+ this.intValue = var1;
+ }
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ var1.writeInt(this.intValue);
+ }
+
+ void readTagContents(DataInput var1) throws IOException {
+ this.intValue = var1.readInt();
+ }
+
+ public byte getType() {
+ return (byte)3;
+ }
+
+ public String toString() {
+ return "" + this.intValue;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagList.java b/minecraft_server/src/net/minecraft/src/NBTTagList.java
new file mode 100644
index 0000000..3968e9b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagList.java
@@ -0,0 +1,62 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class NBTTagList extends NBTBase {
+ private List tagList = new ArrayList();
+ private byte tagType;
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ if(this.tagList.size() > 0) {
+ this.tagType = ((NBTBase)this.tagList.get(0)).getType();
+ } else {
+ this.tagType = 1;
+ }
+
+ var1.writeByte(this.tagType);
+ var1.writeInt(this.tagList.size());
+
+ for(int var2 = 0; var2 < this.tagList.size(); ++var2) {
+ ((NBTBase)this.tagList.get(var2)).writeTagContents(var1);
+ }
+
+ }
+
+ void readTagContents(DataInput var1) throws IOException {
+ this.tagType = var1.readByte();
+ int var2 = var1.readInt();
+ this.tagList = new ArrayList();
+
+ for(int var3 = 0; var3 < var2; ++var3) {
+ NBTBase var4 = NBTBase.createTagOfType(this.tagType);
+ var4.readTagContents(var1);
+ this.tagList.add(var4);
+ }
+
+ }
+
+ public byte getType() {
+ return (byte)9;
+ }
+
+ public String toString() {
+ return "" + this.tagList.size() + " entries of type " + NBTBase.getTagName(this.tagType);
+ }
+
+ public void setTag(NBTBase var1) {
+ this.tagType = var1.getType();
+ this.tagList.add(var1);
+ }
+
+ public NBTBase tagAt(int var1) {
+ return (NBTBase)this.tagList.get(var1);
+ }
+
+ public int tagCount() {
+ return this.tagList.size();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagLong.java b/minecraft_server/src/net/minecraft/src/NBTTagLong.java
new file mode 100644
index 0000000..ef65cdd
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagLong.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class NBTTagLong extends NBTBase {
+ public long longValue;
+
+ public NBTTagLong() {
+ }
+
+ public NBTTagLong(long var1) {
+ this.longValue = var1;
+ }
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ var1.writeLong(this.longValue);
+ }
+
+ void readTagContents(DataInput var1) throws IOException {
+ this.longValue = var1.readLong();
+ }
+
+ public byte getType() {
+ return (byte)4;
+ }
+
+ public String toString() {
+ return "" + this.longValue;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagShort.java b/minecraft_server/src/net/minecraft/src/NBTTagShort.java
new file mode 100644
index 0000000..b22621f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagShort.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class NBTTagShort extends NBTBase {
+ public short shortValue;
+
+ public NBTTagShort() {
+ }
+
+ public NBTTagShort(short var1) {
+ this.shortValue = var1;
+ }
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ var1.writeShort(this.shortValue);
+ }
+
+ void readTagContents(DataInput var1) throws IOException {
+ this.shortValue = var1.readShort();
+ }
+
+ public byte getType() {
+ return (byte)2;
+ }
+
+ public String toString() {
+ return "" + this.shortValue;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NBTTagString.java b/minecraft_server/src/net/minecraft/src/NBTTagString.java
new file mode 100644
index 0000000..91411d1
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NBTTagString.java
@@ -0,0 +1,35 @@
+package net.minecraft.src;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+public class NBTTagString extends NBTBase {
+ public String stringValue;
+
+ public NBTTagString() {
+ }
+
+ public NBTTagString(String var1) {
+ this.stringValue = var1;
+ if(var1 == null) {
+ throw new IllegalArgumentException("Empty string not allowed");
+ }
+ }
+
+ void writeTagContents(DataOutput var1) throws IOException {
+ var1.writeUTF(this.stringValue);
+ }
+
+ void readTagContents(DataInput var1) throws IOException {
+ this.stringValue = var1.readUTF();
+ }
+
+ public byte getType() {
+ return (byte)8;
+ }
+
+ public String toString() {
+ return "" + this.stringValue;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NetHandler.java b/minecraft_server/src/net/minecraft/src/NetHandler.java
new file mode 100644
index 0000000..312be75
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NetHandler.java
@@ -0,0 +1,140 @@
+package net.minecraft.src;
+
+public class NetHandler {
+ public void handleMapChunk(Packet51MapChunk var1) {
+ }
+
+ public void func_6001_a(Packet var1) {
+ }
+
+ public void handleErrorMessage(String var1) {
+ }
+
+ public void handleKickDisconnect(Packet255KickDisconnect var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleLogin(Packet1Login var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleFlying(Packet10Flying var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleMultiBlockChange(Packet52MultiBlockChange var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleBlockDig(Packet14BlockDig var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleBlockChange(Packet53BlockChange var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handlePreChunk(Packet50PreChunk var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleNamedEntitySpawn(Packet20NamedEntitySpawn var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleEntity(Packet30Entity var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleEntityTeleport(Packet34EntityTeleport var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handlePlace(Packet15Place var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleBlockItemSwitch(Packet16BlockItemSwitch var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleDestroyEntity(Packet29DestroyEntity var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handlePickupSpawn(Packet21PickupSpawn var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleCollect(Packet22Collect var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleChat(Packet3Chat var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleAddToInventory(Packet17AddToInventory var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleVehicleSpawn(Packet23VehicleSpawn var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleArmAnimation(Packet18ArmAnimation var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleHandshake(Packet2Handshake var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleMobSpawn(Packet24MobSpawn var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleUpdateTime(Packet4UpdateTime var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handlePlayerInventory(Packet5PlayerInventory var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleComplexEntity(Packet59ComplexEntity var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void handleSpawnPosition(Packet6SpawnPosition var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void func_6002_a(Packet28 var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void func_6003_a(Packet39 var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void func_6006_a(Packet7 var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void func_9001_a(Packet38 var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void func_9003_a(Packet8 var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void func_9002_a(Packet9 var1) {
+ this.func_6001_a(var1);
+ }
+
+ public void func_12001_a(Packet60 var1) {
+ this.func_6001_a(var1);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NetLoginHandler.java b/minecraft_server/src/net/minecraft/src/NetLoginHandler.java
new file mode 100644
index 0000000..b6dcf38
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NetLoginHandler.java
@@ -0,0 +1,118 @@
+package net.minecraft.src;
+
+import java.io.IOException;
+import java.net.Socket;
+import java.util.Random;
+import java.util.logging.Logger;
+import net.minecraft.server.MinecraftServer;
+
+public class NetLoginHandler extends NetHandler {
+ public static Logger logger = Logger.getLogger("Minecraft");
+ private static Random rand = new Random();
+ public NetworkManager netManager;
+ public boolean finishedProcessing = false;
+ private MinecraftServer mcServer;
+ private int field_9005_f = 0;
+ private String username = null;
+ private Packet1Login field_9004_h = null;
+ private String serverId = "";
+
+ public NetLoginHandler(MinecraftServer var1, Socket var2, String var3) throws IOException {
+ this.mcServer = var1;
+ this.netManager = new NetworkManager(var2, var3, this);
+ }
+
+ public void tryLogin() {
+ if(this.field_9004_h != null) {
+ this.doLogin(this.field_9004_h);
+ this.field_9004_h = null;
+ }
+
+ if(this.field_9005_f++ == 600) {
+ this.kickUser("Took too long to log in");
+ } else {
+ this.netManager.processReadPackets();
+ }
+
+ }
+
+ public void kickUser(String var1) {
+ try {
+ logger.info("Disconnecting " + this.getUserAndIPString() + ": " + var1);
+ this.netManager.addToSendQueue(new Packet255KickDisconnect(var1));
+ this.netManager.serverShutdown();
+ this.finishedProcessing = true;
+ } catch (Exception var3) {
+ var3.printStackTrace();
+ }
+
+ }
+
+ public void handleHandshake(Packet2Handshake var1) {
+ if(this.mcServer.onlineMode) {
+ this.serverId = Long.toHexString(rand.nextLong());
+ this.netManager.addToSendQueue(new Packet2Handshake(this.serverId));
+ } else {
+ this.netManager.addToSendQueue(new Packet2Handshake("-"));
+ }
+
+ }
+
+ public void handleLogin(Packet1Login var1) {
+ this.username = var1.username;
+ if(var1.protocolVersion != 6) {
+ if(var1.protocolVersion > 6) {
+ this.kickUser("Outdated server!");
+ } else {
+ this.kickUser("Outdated client!");
+ }
+
+ } else {
+ if(!this.mcServer.onlineMode) {
+ this.doLogin(var1);
+ } else {
+ (new ThreadLoginVerifier(this, var1)).start();
+ }
+
+ }
+ }
+
+ public void doLogin(Packet1Login var1) {
+ EntityPlayerMP var2 = this.mcServer.configManager.login(this, var1.username, var1.password);
+ if(var2 != null) {
+ logger.info(this.getUserAndIPString() + " logged in with entity id " + var2.field_331_c);
+ NetServerHandler var3 = new NetServerHandler(this.mcServer, this.netManager, var2);
+ var3.sendPacket(new Packet1Login("", "", var2.field_331_c, this.mcServer.worldMngr.randomSeed, (byte)this.mcServer.worldMngr.field_4272_q.field_6165_g));
+ var3.sendPacket(new Packet6SpawnPosition(this.mcServer.worldMngr.spawnX, this.mcServer.worldMngr.spawnY, this.mcServer.worldMngr.spawnZ));
+ this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat("\u00a7e" + var2.username + " joined the game."));
+ this.mcServer.configManager.playerLoggedIn(var2);
+ var3.func_41_a(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch);
+ var3.func_40_d();
+ this.mcServer.field_6036_c.func_4108_a(var3);
+ var3.sendPacket(new Packet4UpdateTime(this.mcServer.worldMngr.worldTime));
+ }
+
+ this.finishedProcessing = true;
+ }
+
+ public void handleErrorMessage(String var1) {
+ logger.info(this.getUserAndIPString() + " lost connection");
+ this.finishedProcessing = true;
+ }
+
+ public void func_6001_a(Packet var1) {
+ this.kickUser("Protocol error");
+ }
+
+ public String getUserAndIPString() {
+ return this.username != null ? this.username + " [" + this.netManager.getRemoteAddress().toString() + "]" : this.netManager.getRemoteAddress().toString();
+ }
+
+ static String getServerId(NetLoginHandler var0) {
+ return var0.serverId;
+ }
+
+ static Packet1Login setLoginPacket(NetLoginHandler var0, Packet1Login var1) {
+ return var0.field_9004_h = var1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NetServerHandler.java b/minecraft_server/src/net/minecraft/src/NetServerHandler.java
new file mode 100644
index 0000000..00b668b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NetServerHandler.java
@@ -0,0 +1,471 @@
+package net.minecraft.src;
+
+import java.util.logging.Logger;
+import net.minecraft.server.MinecraftServer;
+
+public class NetServerHandler extends NetHandler implements ICommandListener {
+ public static Logger logger = Logger.getLogger("Minecraft");
+ public NetworkManager netManager;
+ public boolean field_18_c = false;
+ private MinecraftServer mcServer;
+ private EntityPlayerMP playerEntity;
+ private int field_15_f = 0;
+ private double field_9009_g;
+ private double field_9008_h;
+ private double field_9007_i;
+ private boolean field_9006_j = true;
+ private ItemStack field_10_k = null;
+
+ public NetServerHandler(MinecraftServer var1, NetworkManager var2, EntityPlayerMP var3) {
+ this.mcServer = var1;
+ this.netManager = var2;
+ var2.setNetHandler(this);
+ this.playerEntity = var3;
+ var3.field_421_a = this;
+ }
+
+ public void func_42_a() {
+ this.netManager.processReadPackets();
+ if(this.field_15_f++ % 20 == 0) {
+ this.netManager.addToSendQueue(new Packet0KeepAlive());
+ }
+
+ }
+
+ public void func_43_c(String var1) {
+ this.netManager.addToSendQueue(new Packet255KickDisconnect(var1));
+ this.netManager.serverShutdown();
+ this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat("\u00a7e" + this.playerEntity.username + " left the game."));
+ this.mcServer.configManager.playerLoggedOut(this.playerEntity);
+ this.field_18_c = true;
+ }
+
+ public void handleFlying(Packet10Flying var1) {
+ double var2;
+ if(!this.field_9006_j) {
+ var2 = var1.yPosition - this.field_9008_h;
+ if(var1.xPosition == this.field_9009_g && var2 * var2 < 0.01D && var1.zPosition == this.field_9007_i) {
+ this.field_9006_j = true;
+ }
+ }
+
+ if(this.field_9006_j) {
+ double var4;
+ double var6;
+ double var8;
+ double var12;
+ if(this.playerEntity.field_327_g != null) {
+ float var24 = this.playerEntity.rotationYaw;
+ float var3 = this.playerEntity.rotationPitch;
+ this.playerEntity.field_327_g.func_127_w();
+ var4 = this.playerEntity.posX;
+ var6 = this.playerEntity.posY;
+ var8 = this.playerEntity.posZ;
+ double var25 = 0.0D;
+ var12 = 0.0D;
+ if(var1.rotating) {
+ var24 = var1.yaw;
+ var3 = var1.pitch;
+ }
+
+ if(var1.moving && var1.yPosition == -999.0D && var1.stance == -999.0D) {
+ var25 = var1.xPosition;
+ var12 = var1.zPosition;
+ }
+
+ this.playerEntity.onGround = var1.onGround;
+ this.playerEntity.func_175_i();
+ this.playerEntity.moveEntity(var25, 0.0D, var12);
+ this.playerEntity.setPositionAndRotation(var4, var6, var8, var24, var3);
+ this.playerEntity.motionX = var25;
+ this.playerEntity.motionZ = var12;
+ if(this.playerEntity.field_327_g != null) {
+ this.mcServer.worldMngr.func_12017_b(this.playerEntity.field_327_g, true);
+ }
+
+ if(this.playerEntity.field_327_g != null) {
+ this.playerEntity.field_327_g.func_127_w();
+ }
+
+ this.mcServer.configManager.func_613_b(this.playerEntity);
+ this.field_9009_g = this.playerEntity.posX;
+ this.field_9008_h = this.playerEntity.posY;
+ this.field_9007_i = this.playerEntity.posZ;
+ this.mcServer.worldMngr.func_520_e(this.playerEntity);
+ return;
+ }
+
+ var2 = this.playerEntity.posY;
+ this.field_9009_g = this.playerEntity.posX;
+ this.field_9008_h = this.playerEntity.posY;
+ this.field_9007_i = this.playerEntity.posZ;
+ var4 = this.playerEntity.posX;
+ var6 = this.playerEntity.posY;
+ var8 = this.playerEntity.posZ;
+ float var10 = this.playerEntity.rotationYaw;
+ float var11 = this.playerEntity.rotationPitch;
+ if(var1.moving && var1.yPosition == -999.0D && var1.stance == -999.0D) {
+ var1.moving = false;
+ }
+
+ if(var1.moving) {
+ var4 = var1.xPosition;
+ var6 = var1.yPosition;
+ var8 = var1.zPosition;
+ var12 = var1.stance - var1.yPosition;
+ if(var12 > 1.65D || var12 < 0.1D) {
+ this.func_43_c("Illegal stance");
+ logger.warning(this.playerEntity.username + " had an illegal stance: " + var12);
+ }
+
+ this.playerEntity.field_418_ai = var1.stance;
+ }
+
+ if(var1.rotating) {
+ var10 = var1.yaw;
+ var11 = var1.pitch;
+ }
+
+ this.playerEntity.func_175_i();
+ this.playerEntity.field_9068_R = 0.0F;
+ this.playerEntity.setPositionAndRotation(this.field_9009_g, this.field_9008_h, this.field_9007_i, var10, var11);
+ var12 = var4 - this.playerEntity.posX;
+ double var14 = var6 - this.playerEntity.posY;
+ double var16 = var8 - this.playerEntity.posZ;
+ float var18 = 1.0F / 16.0F;
+ boolean var19 = this.mcServer.worldMngr.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.boundingBox.copy().func_694_e((double)var18, (double)var18, (double)var18)).size() == 0;
+ this.playerEntity.moveEntity(var12, var14, var16);
+ var12 = var4 - this.playerEntity.posX;
+ var14 = var6 - this.playerEntity.posY;
+ if(var14 > -0.5D || var14 < 0.5D) {
+ var14 = 0.0D;
+ }
+
+ var16 = var8 - this.playerEntity.posZ;
+ double var20 = var12 * var12 + var14 * var14 + var16 * var16;
+ boolean var22 = false;
+ if(var20 > 1.0D / 16.0D) {
+ var22 = true;
+ logger.warning(this.playerEntity.username + " moved wrongly!");
+ System.out.println("Got position " + var4 + ", " + var6 + ", " + var8);
+ System.out.println("Expected " + this.playerEntity.posX + ", " + this.playerEntity.posY + ", " + this.playerEntity.posZ);
+ }
+
+ this.playerEntity.setPositionAndRotation(var4, var6, var8, var10, var11);
+ boolean var23 = this.mcServer.worldMngr.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.boundingBox.copy().func_694_e((double)var18, (double)var18, (double)var18)).size() == 0;
+ if(var19 && (var22 || !var23)) {
+ this.func_41_a(this.field_9009_g, this.field_9008_h, this.field_9007_i, var10, var11);
+ return;
+ }
+
+ this.playerEntity.onGround = var1.onGround;
+ this.mcServer.configManager.func_613_b(this.playerEntity);
+ this.playerEntity.func_9153_b(this.playerEntity.posY - var2, var1.onGround);
+ }
+
+ }
+
+ public void func_41_a(double var1, double var3, double var5, float var7, float var8) {
+ this.field_9006_j = false;
+ this.field_9009_g = var1;
+ this.field_9008_h = var3;
+ this.field_9007_i = var5;
+ this.playerEntity.setPositionAndRotation(var1, var3, var5, var7, var8);
+ this.playerEntity.field_421_a.sendPacket(new Packet13PlayerLookMove(var1, var3 + (double)1.62F, var3, var5, var7, var8, false));
+ }
+
+ public void handleBlockDig(Packet14BlockDig var1) {
+ this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = this.field_10_k;
+ boolean var2 = this.mcServer.worldMngr.field_819_z = this.mcServer.configManager.isOp(this.playerEntity.username);
+ boolean var3 = false;
+ if(var1.status == 0) {
+ var3 = true;
+ }
+
+ if(var1.status == 1) {
+ var3 = true;
+ }
+
+ int var4 = var1.xPosition;
+ int var5 = var1.yPosition;
+ int var6 = var1.zPosition;
+ if(var3) {
+ double var7 = this.playerEntity.posX - ((double)var4 + 0.5D);
+ double var9 = this.playerEntity.posY - ((double)var5 + 0.5D);
+ double var11 = this.playerEntity.posZ - ((double)var6 + 0.5D);
+ double var13 = var7 * var7 + var9 * var9 + var11 * var11;
+ if(var13 > 36.0D) {
+ return;
+ }
+
+ double var15 = this.playerEntity.posY;
+ this.playerEntity.posY = this.playerEntity.field_418_ai;
+ this.playerEntity.posY = var15;
+ }
+
+ int var18 = var1.face;
+ int var8 = (int)MathHelper.abs((float)(var4 - this.mcServer.worldMngr.spawnX));
+ int var19 = (int)MathHelper.abs((float)(var6 - this.mcServer.worldMngr.spawnZ));
+ if(var8 > var19) {
+ var19 = var8;
+ }
+
+ if(var1.status == 0) {
+ if(var19 > 16 || var2) {
+ this.playerEntity.field_425_ad.func_324_a(var4, var5, var6);
+ }
+ } else if(var1.status == 2) {
+ this.playerEntity.field_425_ad.func_328_a();
+ } else if(var1.status == 1) {
+ if(var19 > 16 || var2) {
+ this.playerEntity.field_425_ad.func_326_a(var4, var5, var6, var18);
+ }
+ } else if(var1.status == 3) {
+ double var10 = this.playerEntity.posX - ((double)var4 + 0.5D);
+ double var12 = this.playerEntity.posY - ((double)var5 + 0.5D);
+ double var14 = this.playerEntity.posZ - ((double)var6 + 0.5D);
+ double var16 = var10 * var10 + var12 * var12 + var14 * var14;
+ if(var16 < 256.0D) {
+ this.playerEntity.field_421_a.sendPacket(new Packet53BlockChange(var4, var5, var6, this.mcServer.worldMngr));
+ }
+ }
+
+ this.mcServer.worldMngr.field_819_z = false;
+ }
+
+ public void handlePlace(Packet15Place var1) {
+ boolean var2 = this.mcServer.worldMngr.field_819_z = this.mcServer.configManager.isOp(this.playerEntity.username);
+ if(var1.direction == 255) {
+ ItemStack var3 = var1.id >= 0 ? new ItemStack(var1.id) : null;
+ this.playerEntity.field_425_ad.func_6154_a(this.playerEntity, this.mcServer.worldMngr, var3);
+ } else {
+ int var10 = var1.xPosition;
+ int var4 = var1.yPosition;
+ int var5 = var1.zPosition;
+ int var6 = var1.direction;
+ int var7 = (int)MathHelper.abs((float)(var10 - this.mcServer.worldMngr.spawnX));
+ int var8 = (int)MathHelper.abs((float)(var5 - this.mcServer.worldMngr.spawnZ));
+ if(var7 > var8) {
+ var8 = var7;
+ }
+
+ if(var8 > 16 || var2) {
+ ItemStack var9 = var1.id >= 0 ? new ItemStack(var1.id) : null;
+ this.playerEntity.field_425_ad.func_327_a(this.playerEntity, this.mcServer.worldMngr, var9, var10, var4, var5, var6);
+ }
+
+ this.playerEntity.field_421_a.sendPacket(new Packet53BlockChange(var10, var4, var5, this.mcServer.worldMngr));
+ if(var6 == 0) {
+ --var4;
+ }
+
+ if(var6 == 1) {
+ ++var4;
+ }
+
+ if(var6 == 2) {
+ --var5;
+ }
+
+ if(var6 == 3) {
+ ++var5;
+ }
+
+ if(var6 == 4) {
+ --var10;
+ }
+
+ if(var6 == 5) {
+ ++var10;
+ }
+
+ this.playerEntity.field_421_a.sendPacket(new Packet53BlockChange(var10, var4, var5, this.mcServer.worldMngr));
+ }
+
+ this.mcServer.worldMngr.field_819_z = false;
+ }
+
+ public void handleErrorMessage(String var1) {
+ logger.info(this.playerEntity.username + " lost connection: " + var1);
+ this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat("\u00a7e" + this.playerEntity.username + " left the game."));
+ this.mcServer.configManager.playerLoggedOut(this.playerEntity);
+ this.field_18_c = true;
+ }
+
+ public void func_6001_a(Packet var1) {
+ logger.warning(this.getClass() + " wasn\'t prepared to deal with a " + var1.getClass());
+ this.func_43_c("Protocol error, unexpected packet");
+ }
+
+ public void sendPacket(Packet var1) {
+ this.netManager.addToSendQueue(var1);
+ }
+
+ public void handleBlockItemSwitch(Packet16BlockItemSwitch var1) {
+ int var2 = var1.id;
+ this.playerEntity.inventory.currentItem = this.playerEntity.inventory.mainInventory.length - 1;
+ if(var2 == 0) {
+ this.field_10_k = null;
+ } else {
+ this.field_10_k = new ItemStack(var2);
+ }
+
+ this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = this.field_10_k;
+ this.mcServer.field_6028_k.func_12021_a(this.playerEntity, new Packet16BlockItemSwitch(this.playerEntity.field_331_c, var2));
+ }
+
+ public void handlePickupSpawn(Packet21PickupSpawn var1) {
+ double var2 = (double)var1.xPosition / 32.0D;
+ double var4 = (double)var1.yPosition / 32.0D;
+ double var6 = (double)var1.zPosition / 32.0D;
+ EntityItem var8 = new EntityItem(this.mcServer.worldMngr, var2, var4, var6, new ItemStack(var1.itemId, var1.count));
+ var8.motionX = (double)var1.rotation / 128.0D;
+ var8.motionY = (double)var1.pitch / 128.0D;
+ var8.motionZ = (double)var1.roll / 128.0D;
+ var8.field_433_ad = 10;
+ this.mcServer.worldMngr.entityJoinedWorld(var8);
+ }
+
+ public void handleChat(Packet3Chat var1) {
+ String var2 = var1.message;
+ if(var2.length() > 100) {
+ this.func_43_c("Chat message too long");
+ } else {
+ var2 = var2.trim();
+
+ for(int var3 = 0; var3 < var2.length(); ++var3) {
+ if(" !\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\'abcdefghijklmnopqrstuvwxyz{|}~\u2302\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb".indexOf(var2.charAt(var3)) < 0) {
+ this.func_43_c("Illegal characters in chat");
+ return;
+ }
+ }
+
+ if(var2.startsWith("/")) {
+ this.func_4010_d(var2);
+ } else {
+ var2 = "<" + this.playerEntity.username + "> " + var2;
+ logger.info(var2);
+ this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat(var2));
+ }
+
+ }
+ }
+
+ private void func_4010_d(String var1) {
+ if(var1.toLowerCase().startsWith("/me ")) {
+ var1 = "* " + this.playerEntity.username + " " + var1.substring(var1.indexOf(" ")).trim();
+ logger.info(var1);
+ this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat(var1));
+ } else if(var1.toLowerCase().startsWith("/kill")) {
+ this.playerEntity.attackEntity((Entity)null, 1000);
+ } else if(var1.toLowerCase().startsWith("/tell ")) {
+ String[] var2 = var1.split(" ");
+ if(var2.length >= 3) {
+ var1 = var1.substring(var1.indexOf(" ")).trim();
+ var1 = var1.substring(var1.indexOf(" ")).trim();
+ var1 = "\u00a77" + this.playerEntity.username + " whispers " + var1;
+ logger.info(var1 + " to " + var2[1]);
+ if(!this.mcServer.configManager.sendPacketToPlayer(var2[1], new Packet3Chat(var1))) {
+ this.sendPacket(new Packet3Chat("\u00a7cThere\'s no player by that name online."));
+ }
+ }
+ } else {
+ String var3;
+ if(this.mcServer.configManager.isOp(this.playerEntity.username)) {
+ var3 = var1.substring(1);
+ logger.info(this.playerEntity.username + " issued server command: " + var3);
+ this.mcServer.addCommand(var3, this);
+ } else {
+ var3 = var1.substring(1);
+ logger.info(this.playerEntity.username + " tried command: " + var3);
+ }
+ }
+
+ }
+
+ public void handleArmAnimation(Packet18ArmAnimation var1) {
+ if(var1.animate == 1) {
+ this.playerEntity.func_168_z();
+ } else if(var1.animate == 104) {
+ this.playerEntity.field_12012_al = true;
+ } else if(var1.animate == 105) {
+ this.playerEntity.field_12012_al = false;
+ }
+
+ }
+
+ public void handleKickDisconnect(Packet255KickDisconnect var1) {
+ this.netManager.networkShutdown("Quitting");
+ }
+
+ public int func_38_b() {
+ return this.netManager.getNumChunkDataPackets();
+ }
+
+ public void log(String var1) {
+ this.sendPacket(new Packet3Chat("\u00a77" + var1));
+ }
+
+ public String getUsername() {
+ return this.playerEntity.username;
+ }
+
+ public void handlePlayerInventory(Packet5PlayerInventory var1) {
+ if(var1.type == -1) {
+ this.playerEntity.inventory.mainInventory = var1.stacks;
+ }
+
+ if(var1.type == -2) {
+ this.playerEntity.inventory.craftingInventory = var1.stacks;
+ }
+
+ if(var1.type == -3) {
+ this.playerEntity.inventory.armorInventory = var1.stacks;
+ }
+
+ }
+
+ public void func_40_d() {
+ this.netManager.addToSendQueue(new Packet5PlayerInventory(-1, this.playerEntity.inventory.mainInventory));
+ this.netManager.addToSendQueue(new Packet5PlayerInventory(-2, this.playerEntity.inventory.craftingInventory));
+ this.netManager.addToSendQueue(new Packet5PlayerInventory(-3, this.playerEntity.inventory.armorInventory));
+ }
+
+ public void handleComplexEntity(Packet59ComplexEntity var1) {
+ if(var1.entityNBT.getInteger("x") == var1.xPosition) {
+ if(var1.entityNBT.getInteger("y") == var1.yPosition) {
+ if(var1.entityNBT.getInteger("z") == var1.zPosition) {
+ TileEntity var2 = this.mcServer.worldMngr.getBlock(var1.xPosition, var1.yPosition, var1.zPosition);
+ if(var2 != null) {
+ try {
+ var2.readFromNBT(var1.entityNBT);
+ } catch (Exception var4) {
+ }
+
+ var2.func_183_c();
+ }
+
+ }
+ }
+ }
+ }
+
+ public void func_6006_a(Packet7 var1) {
+ Entity var2 = this.mcServer.worldMngr.func_6158_a(var1.field_9018_b);
+ this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = this.field_10_k;
+ if(var2 != null && this.playerEntity.func_145_g(var2)) {
+ if(var1.field_9020_c == 0) {
+ this.playerEntity.func_9145_g(var2);
+ } else if(var1.field_9020_c == 1) {
+ this.playerEntity.func_9146_h(var2);
+ }
+ }
+
+ }
+
+ public void func_9002_a(Packet9 var1) {
+ if(this.playerEntity.field_9109_aQ <= 0) {
+ this.playerEntity = this.mcServer.configManager.func_9242_d(this.playerEntity);
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NetworkAcceptThread.java b/minecraft_server/src/net/minecraft/src/NetworkAcceptThread.java
new file mode 100644
index 0000000..a4a5be7
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NetworkAcceptThread.java
@@ -0,0 +1,31 @@
+package net.minecraft.src;
+
+import java.io.IOException;
+import java.net.Socket;
+import net.minecraft.server.MinecraftServer;
+
+class NetworkAcceptThread extends Thread {
+ final MinecraftServer mcServer;
+ final NetworkListenThread field_985_b;
+
+ NetworkAcceptThread(NetworkListenThread var1, String var2, MinecraftServer var3) {
+ super(var2);
+ this.field_985_b = var1;
+ this.mcServer = var3;
+ }
+
+ public void run() {
+ while(this.field_985_b.field_973_b) {
+ try {
+ Socket var1 = NetworkListenThread.func_713_a(this.field_985_b).accept();
+ if(var1 != null) {
+ NetLoginHandler var2 = new NetLoginHandler(this.mcServer, var1, "Connection #" + NetworkListenThread.func_712_b(this.field_985_b));
+ NetworkListenThread.func_716_a(this.field_985_b, var2);
+ }
+ } catch (IOException var3) {
+ var3.printStackTrace();
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NetworkListenThread.java b/minecraft_server/src/net/minecraft/src/NetworkListenThread.java
new file mode 100644
index 0000000..d7e0d7a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NetworkListenThread.java
@@ -0,0 +1,87 @@
+package net.minecraft.src;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.util.ArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import net.minecraft.server.MinecraftServer;
+
+public class NetworkListenThread {
+ public static Logger logger = Logger.getLogger("Minecraft");
+ private ServerSocket field_979_d;
+ private Thread field_978_e;
+ public volatile boolean field_973_b = false;
+ private int field_977_f = 0;
+ private ArrayList field_976_g = new ArrayList();
+ private ArrayList field_975_h = new ArrayList();
+ public MinecraftServer mcServer;
+
+ public NetworkListenThread(MinecraftServer var1, InetAddress var2, int var3) throws IOException {
+ this.mcServer = var1;
+ this.field_979_d = new ServerSocket(var3, 0, var2);
+ this.field_979_d.setPerformancePreferences(0, 2, 1);
+ this.field_973_b = true;
+ this.field_978_e = new NetworkAcceptThread(this, "Listen thread", var1);
+ this.field_978_e.start();
+ }
+
+ public void func_4108_a(NetServerHandler var1) {
+ this.field_975_h.add(var1);
+ }
+
+ private void func_717_a(NetLoginHandler var1) {
+ if(var1 == null) {
+ throw new IllegalArgumentException("Got null pendingconnection!");
+ } else {
+ this.field_976_g.add(var1);
+ }
+ }
+
+ public void func_715_a() {
+ int var1;
+ for(var1 = 0; var1 < this.field_976_g.size(); ++var1) {
+ NetLoginHandler var2 = (NetLoginHandler)this.field_976_g.get(var1);
+
+ try {
+ var2.tryLogin();
+ } catch (Exception var5) {
+ var2.kickUser("Internal server error");
+ logger.log(Level.WARNING, "Failed to handle packet: " + var5, var5);
+ }
+
+ if(var2.finishedProcessing) {
+ this.field_976_g.remove(var1--);
+ }
+ }
+
+ for(var1 = 0; var1 < this.field_975_h.size(); ++var1) {
+ NetServerHandler var6 = (NetServerHandler)this.field_975_h.get(var1);
+
+ try {
+ var6.func_42_a();
+ } catch (Exception var4) {
+ logger.log(Level.WARNING, "Failed to handle packet: " + var4, var4);
+ var6.func_43_c("Internal server error");
+ }
+
+ if(var6.field_18_c) {
+ this.field_975_h.remove(var1--);
+ }
+ }
+
+ }
+
+ static ServerSocket func_713_a(NetworkListenThread var0) {
+ return var0.field_979_d;
+ }
+
+ static int func_712_b(NetworkListenThread var0) {
+ return var0.field_977_f++;
+ }
+
+ static void func_716_a(NetworkListenThread var0, NetLoginHandler var1) {
+ var0.func_717_a(var1);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NetworkManager.java b/minecraft_server/src/net/minecraft/src/NetworkManager.java
new file mode 100644
index 0000000..c58d939
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NetworkManager.java
@@ -0,0 +1,219 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class NetworkManager {
+ public static final Object threadSyncObject = new Object();
+ public static int numReadThreads;
+ public static int numWriteThreads;
+ private Object sendQueueLock = new Object();
+ private Socket networkSocket;
+ private final SocketAddress field_12032_f;
+ private DataInputStream socketInputStream;
+ private DataOutputStream socketOutputStream;
+ private boolean isRunning = true;
+ private List readPackets = Collections.synchronizedList(new ArrayList());
+ private List dataPackets = Collections.synchronizedList(new ArrayList());
+ private List chunkDataPackets = Collections.synchronizedList(new ArrayList());
+ private NetHandler netHandler;
+ private boolean isServerTerminating = false;
+ private Thread writeThread;
+ private Thread readThread;
+ private boolean isTerminating = false;
+ private String terminationReason = "";
+ private int timeSinceLastRead = 0;
+ private int sendQueueByteLength = 0;
+ private int chunkDataSendCounter = 0;
+
+ public NetworkManager(Socket var1, String var2, NetHandler var3) throws IOException {
+ this.networkSocket = var1;
+ this.field_12032_f = var1.getRemoteSocketAddress();
+ this.netHandler = var3;
+ var1.setTrafficClass(24);
+ this.socketInputStream = new DataInputStream(var1.getInputStream());
+ this.socketOutputStream = new DataOutputStream(var1.getOutputStream());
+ this.readThread = new NetworkReaderThread(this, var2 + " read thread");
+ this.writeThread = new NetworkWriterThread(this, var2 + " write thread");
+ this.readThread.start();
+ this.writeThread.start();
+ }
+
+ public void setNetHandler(NetHandler var1) {
+ this.netHandler = var1;
+ }
+
+ public void addToSendQueue(Packet var1) {
+ if(!this.isServerTerminating) {
+ Object var2 = this.sendQueueLock;
+ synchronized(var2) {
+ this.sendQueueByteLength += var1.getPacketSize() + 1;
+ if(var1.isChunkDataPacket) {
+ this.chunkDataPackets.add(var1);
+ } else {
+ this.dataPackets.add(var1);
+ }
+
+ }
+ }
+ }
+
+ private void sendPacket() {
+ try {
+ boolean var1 = true;
+ Packet var2;
+ Object var3;
+ if(!this.dataPackets.isEmpty()) {
+ var1 = false;
+ var3 = this.sendQueueLock;
+ synchronized(var3) {
+ var2 = (Packet)this.dataPackets.remove(0);
+ this.sendQueueByteLength -= var2.getPacketSize() + 1;
+ }
+
+ Packet.writePacket(var2, this.socketOutputStream);
+ }
+
+ if((var1 || this.chunkDataSendCounter-- <= 0) && !this.chunkDataPackets.isEmpty()) {
+ var1 = false;
+ var3 = this.sendQueueLock;
+ synchronized(var3) {
+ var2 = (Packet)this.chunkDataPackets.remove(0);
+ this.sendQueueByteLength -= var2.getPacketSize() + 1;
+ }
+
+ Packet.writePacket(var2, this.socketOutputStream);
+ this.chunkDataSendCounter = 50;
+ }
+
+ if(var1) {
+ Thread.sleep(10L);
+ }
+ } catch (InterruptedException var8) {
+ } catch (Exception var9) {
+ if(!this.isTerminating) {
+ this.onNetworkError(var9);
+ }
+ }
+
+ }
+
+ private void readPacket() {
+ try {
+ Packet var1 = Packet.readPacket(this.socketInputStream);
+ if(var1 != null) {
+ this.readPackets.add(var1);
+ } else {
+ this.networkShutdown("End of stream");
+ }
+ } catch (Exception var2) {
+ if(!this.isTerminating) {
+ this.onNetworkError(var2);
+ }
+ }
+
+ }
+
+ private void onNetworkError(Exception var1) {
+ var1.printStackTrace();
+ this.networkShutdown("Internal exception: " + var1.toString());
+ }
+
+ public void networkShutdown(String var1) {
+ if(this.isRunning) {
+ this.isTerminating = true;
+ this.terminationReason = var1;
+ (new NetworkMasterThread(this)).start();
+ this.isRunning = false;
+
+ try {
+ this.socketInputStream.close();
+ this.socketInputStream = null;
+ } catch (Throwable var5) {
+ }
+
+ try {
+ this.socketOutputStream.close();
+ this.socketOutputStream = null;
+ } catch (Throwable var4) {
+ }
+
+ try {
+ this.networkSocket.close();
+ this.networkSocket = null;
+ } catch (Throwable var3) {
+ }
+
+ }
+ }
+
+ public void processReadPackets() {
+ if(this.sendQueueByteLength > 1048576) {
+ this.networkShutdown("Send buffer overflow");
+ }
+
+ if(this.readPackets.isEmpty()) {
+ if(this.timeSinceLastRead++ == 1200) {
+ this.networkShutdown("Timed out");
+ }
+ } else {
+ this.timeSinceLastRead = 0;
+ }
+
+ int var1 = 100;
+
+ while(!this.readPackets.isEmpty() && var1-- >= 0) {
+ Packet var2 = (Packet)this.readPackets.remove(0);
+ var2.processPacket(this.netHandler);
+ }
+
+ if(this.isTerminating && this.readPackets.isEmpty()) {
+ this.netHandler.handleErrorMessage(this.terminationReason);
+ }
+
+ }
+
+ public SocketAddress getRemoteAddress() {
+ return this.field_12032_f;
+ }
+
+ public void serverShutdown() {
+ this.isServerTerminating = true;
+ this.readThread.interrupt();
+ (new ThreadMonitorConnection(this)).start();
+ }
+
+ public int getNumChunkDataPackets() {
+ return this.chunkDataPackets.size();
+ }
+
+ static boolean isRunning(NetworkManager var0) {
+ return var0.isRunning;
+ }
+
+ static boolean isServerTerminating(NetworkManager var0) {
+ return var0.isServerTerminating;
+ }
+
+ static void readNetworkPacket(NetworkManager var0) {
+ var0.readPacket();
+ }
+
+ static void sendNetworkPacket(NetworkManager var0) {
+ var0.sendPacket();
+ }
+
+ static Thread getReadThread(NetworkManager var0) {
+ return var0.readThread;
+ }
+
+ static Thread getWriteThread(NetworkManager var0) {
+ return var0.writeThread;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NetworkMasterThread.java b/minecraft_server/src/net/minecraft/src/NetworkMasterThread.java
new file mode 100644
index 0000000..bd6085c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NetworkMasterThread.java
@@ -0,0 +1,31 @@
+package net.minecraft.src;
+
+class NetworkMasterThread extends Thread {
+ final NetworkManager netManager;
+
+ NetworkMasterThread(NetworkManager var1) {
+ this.netManager = var1;
+ }
+
+ public void run() {
+ try {
+ Thread.sleep(5000L);
+ if(NetworkManager.getReadThread(this.netManager).isAlive()) {
+ try {
+ NetworkManager.getReadThread(this.netManager).stop();
+ } catch (Throwable var3) {
+ }
+ }
+
+ if(NetworkManager.getWriteThread(this.netManager).isAlive()) {
+ try {
+ NetworkManager.getWriteThread(this.netManager).stop();
+ } catch (Throwable var2) {
+ }
+ }
+ } catch (InterruptedException var4) {
+ var4.printStackTrace();
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NetworkReaderThread.java b/minecraft_server/src/net/minecraft/src/NetworkReaderThread.java
new file mode 100644
index 0000000..c8e5682
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NetworkReaderThread.java
@@ -0,0 +1,49 @@
+package net.minecraft.src;
+
+class NetworkReaderThread extends Thread {
+ final NetworkManager netManager;
+
+ NetworkReaderThread(NetworkManager var1, String var2) {
+ super(var2);
+ this.netManager = var1;
+ }
+
+ public void run() {
+ Object var1 = NetworkManager.threadSyncObject;
+ synchronized(var1) {
+ ++NetworkManager.numReadThreads;
+ }
+
+ while(true) {
+ boolean var11 = false;
+
+ try {
+ var11 = true;
+ if(NetworkManager.isRunning(this.netManager)) {
+ if(!NetworkManager.isServerTerminating(this.netManager)) {
+ NetworkManager.readNetworkPacket(this.netManager);
+ continue;
+ }
+
+ var11 = false;
+ break;
+ }
+
+ var11 = false;
+ break;
+ } finally {
+ if(var11) {
+ Object var5 = NetworkManager.threadSyncObject;
+ synchronized(var5) {
+ --NetworkManager.numReadThreads;
+ }
+ }
+ }
+ }
+
+ var1 = NetworkManager.threadSyncObject;
+ synchronized(var1) {
+ --NetworkManager.numReadThreads;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NetworkWriterThread.java b/minecraft_server/src/net/minecraft/src/NetworkWriterThread.java
new file mode 100644
index 0000000..8357e0b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NetworkWriterThread.java
@@ -0,0 +1,43 @@
+package net.minecraft.src;
+
+class NetworkWriterThread extends Thread {
+ final NetworkManager netManager;
+
+ NetworkWriterThread(NetworkManager var1, String var2) {
+ super(var2);
+ this.netManager = var1;
+ }
+
+ public void run() {
+ Object var1 = NetworkManager.threadSyncObject;
+ synchronized(var1) {
+ ++NetworkManager.numWriteThreads;
+ }
+
+ while(true) {
+ boolean var11 = false;
+
+ try {
+ var11 = true;
+ if(!NetworkManager.isRunning(this.netManager)) {
+ var11 = false;
+ break;
+ }
+
+ NetworkManager.sendNetworkPacket(this.netManager);
+ } finally {
+ if(var11) {
+ Object var5 = NetworkManager.threadSyncObject;
+ synchronized(var5) {
+ --NetworkManager.numWriteThreads;
+ }
+ }
+ }
+ }
+
+ var1 = NetworkManager.threadSyncObject;
+ synchronized(var1) {
+ --NetworkManager.numWriteThreads;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NextTickListEntry.java b/minecraft_server/src/net/minecraft/src/NextTickListEntry.java
new file mode 100644
index 0000000..7e28c79
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NextTickListEntry.java
@@ -0,0 +1,44 @@
+package net.minecraft.src;
+
+public class NextTickListEntry implements Comparable {
+ private static long nextTickEntryID = 0L;
+ public int xCoord;
+ public int yCoord;
+ public int zCoord;
+ public int blockID;
+ public long scheduledTime;
+ private long tickEntryID = nextTickEntryID++;
+
+ public NextTickListEntry(int var1, int var2, int var3, int var4) {
+ this.xCoord = var1;
+ this.yCoord = var2;
+ this.zCoord = var3;
+ this.blockID = var4;
+ }
+
+ public boolean equals(Object var1) {
+ if(!(var1 instanceof NextTickListEntry)) {
+ return false;
+ } else {
+ NextTickListEntry var2 = (NextTickListEntry)var1;
+ return this.xCoord == var2.xCoord && this.yCoord == var2.yCoord && this.zCoord == var2.zCoord && this.blockID == var2.blockID;
+ }
+ }
+
+ public int hashCode() {
+ return (this.xCoord * 128 * 1024 + this.zCoord * 128 + this.yCoord) * 256 + this.blockID;
+ }
+
+ public NextTickListEntry setScheduledTime(long var1) {
+ this.scheduledTime = var1;
+ return this;
+ }
+
+ public int a(NextTickListEntry var1) {
+ return this.scheduledTime < var1.scheduledTime ? -1 : (this.scheduledTime > var1.scheduledTime ? 1 : (this.tickEntryID < var1.tickEntryID ? -1 : (this.tickEntryID > var1.tickEntryID ? 1 : 0)));
+ }
+
+ public int compareTo(Object var1) {
+ return this.a((NextTickListEntry)var1);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NibbleArray.java b/minecraft_server/src/net/minecraft/src/NibbleArray.java
new file mode 100644
index 0000000..6966128
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NibbleArray.java
@@ -0,0 +1,36 @@
+package net.minecraft.src;
+
+public class NibbleArray {
+ public final byte[] data;
+
+ public NibbleArray(int var1) {
+ this.data = new byte[var1 >> 1];
+ }
+
+ public NibbleArray(byte[] var1) {
+ this.data = var1;
+ }
+
+ public int getNibble(int var1, int var2, int var3) {
+ int var4 = var1 << 11 | var3 << 7 | var2;
+ int var5 = var4 >> 1;
+ int var6 = var4 & 1;
+ return var6 == 0 ? this.data[var5] & 15 : this.data[var5] >> 4 & 15;
+ }
+
+ public void setNibble(int var1, int var2, int var3, int var4) {
+ int var5 = var1 << 11 | var3 << 7 | var2;
+ int var6 = var5 >> 1;
+ int var7 = var5 & 1;
+ if(var7 == 0) {
+ this.data[var6] = (byte)(this.data[var6] & 240 | var4 & 15);
+ } else {
+ this.data[var6] = (byte)(this.data[var6] & 15 | (var4 & 15) << 4);
+ }
+
+ }
+
+ public boolean isValid() {
+ return this.data != null;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NoiseGenerator.java b/minecraft_server/src/net/minecraft/src/NoiseGenerator.java
new file mode 100644
index 0000000..bb08431
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NoiseGenerator.java
@@ -0,0 +1,4 @@
+package net.minecraft.src;
+
+public abstract class NoiseGenerator {
+}
diff --git a/minecraft_server/src/net/minecraft/src/NoiseGenerator2.java b/minecraft_server/src/net/minecraft/src/NoiseGenerator2.java
new file mode 100644
index 0000000..cd64939
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NoiseGenerator2.java
@@ -0,0 +1,114 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class NoiseGenerator2 {
+ private static int[][] field_4317_d = new int[][]{{1, 1, 0}, {-1, 1, 0}, {1, -1, 0}, {-1, -1, 0}, {1, 0, 1}, {-1, 0, 1}, {1, 0, -1}, {-1, 0, -1}, {0, 1, 1}, {0, -1, 1}, {0, 1, -1}, {0, -1, -1}};
+ private int[] field_4316_e;
+ public double field_4313_a;
+ public double field_4312_b;
+ public double field_4318_c;
+ private static final double field_4315_f = 0.5D * (Math.sqrt(3.0D) - 1.0D);
+ private static final double field_4314_g = (3.0D - Math.sqrt(3.0D)) / 6.0D;
+
+ public NoiseGenerator2() {
+ this(new Random());
+ }
+
+ public NoiseGenerator2(Random var1) {
+ this.field_4316_e = new int[512];
+ this.field_4313_a = var1.nextDouble() * 256.0D;
+ this.field_4312_b = var1.nextDouble() * 256.0D;
+ this.field_4318_c = var1.nextDouble() * 256.0D;
+
+ int var2;
+ for(var2 = 0; var2 < 256; this.field_4316_e[var2] = var2++) {
+ }
+
+ for(var2 = 0; var2 < 256; ++var2) {
+ int var3 = var1.nextInt(256 - var2) + var2;
+ int var4 = this.field_4316_e[var2];
+ this.field_4316_e[var2] = this.field_4316_e[var3];
+ this.field_4316_e[var3] = var4;
+ this.field_4316_e[var2 + 256] = this.field_4316_e[var2];
+ }
+
+ }
+
+ private static int func_4113_a(double var0) {
+ return var0 > 0.0D ? (int)var0 : (int)var0 - 1;
+ }
+
+ private static double func_4114_a(int[] var0, double var1, double var3) {
+ return (double)var0[0] * var1 + (double)var0[1] * var3;
+ }
+
+ public void func_4115_a(double[] var1, double var2, double var4, int var6, int var7, double var8, double var10, double var12) {
+ int var14 = 0;
+
+ for(int var15 = 0; var15 < var6; ++var15) {
+ double var16 = (var2 + (double)var15) * var8 + this.field_4313_a;
+
+ for(int var18 = 0; var18 < var7; ++var18) {
+ double var19 = (var4 + (double)var18) * var10 + this.field_4312_b;
+ double var27 = (var16 + var19) * field_4315_f;
+ int var29 = func_4113_a(var16 + var27);
+ int var30 = func_4113_a(var19 + var27);
+ double var31 = (double)(var29 + var30) * field_4314_g;
+ double var33 = (double)var29 - var31;
+ double var35 = (double)var30 - var31;
+ double var37 = var16 - var33;
+ double var39 = var19 - var35;
+ byte var41;
+ byte var42;
+ if(var37 > var39) {
+ var41 = 1;
+ var42 = 0;
+ } else {
+ var41 = 0;
+ var42 = 1;
+ }
+
+ double var43 = var37 - (double)var41 + field_4314_g;
+ double var45 = var39 - (double)var42 + field_4314_g;
+ double var47 = var37 - 1.0D + 2.0D * field_4314_g;
+ double var49 = var39 - 1.0D + 2.0D * field_4314_g;
+ int var51 = var29 & 255;
+ int var52 = var30 & 255;
+ int var53 = this.field_4316_e[var51 + this.field_4316_e[var52]] % 12;
+ int var54 = this.field_4316_e[var51 + var41 + this.field_4316_e[var52 + var42]] % 12;
+ int var55 = this.field_4316_e[var51 + 1 + this.field_4316_e[var52 + 1]] % 12;
+ double var56 = 0.5D - var37 * var37 - var39 * var39;
+ double var21;
+ if(var56 < 0.0D) {
+ var21 = 0.0D;
+ } else {
+ var56 *= var56;
+ var21 = var56 * var56 * func_4114_a(field_4317_d[var53], var37, var39);
+ }
+
+ double var58 = 0.5D - var43 * var43 - var45 * var45;
+ double var23;
+ if(var58 < 0.0D) {
+ var23 = 0.0D;
+ } else {
+ var58 *= var58;
+ var23 = var58 * var58 * func_4114_a(field_4317_d[var54], var43, var45);
+ }
+
+ double var60 = 0.5D - var47 * var47 - var49 * var49;
+ double var25;
+ if(var60 < 0.0D) {
+ var25 = 0.0D;
+ } else {
+ var60 *= var60;
+ var25 = var60 * var60 * func_4114_a(field_4317_d[var55], var47, var49);
+ }
+
+ int var10001 = var14++;
+ var1[var10001] += 70.0D * (var21 + var23 + var25) * var12;
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves.java b/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves.java
new file mode 100644
index 0000000..46fc274
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves.java
@@ -0,0 +1,53 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class NoiseGeneratorOctaves extends NoiseGenerator {
+ private NoiseGeneratorPerlin[] field_939_a;
+ private int field_938_b;
+
+ public NoiseGeneratorOctaves(Random var1, int var2) {
+ this.field_938_b = var2;
+ this.field_939_a = new NoiseGeneratorPerlin[var2];
+
+ for(int var3 = 0; var3 < var2; ++var3) {
+ this.field_939_a[var3] = new NoiseGeneratorPerlin(var1);
+ }
+
+ }
+
+ public double func_647_a(double var1, double var3) {
+ double var5 = 0.0D;
+ double var7 = 1.0D;
+
+ for(int var9 = 0; var9 < this.field_938_b; ++var9) {
+ var5 += this.field_939_a[var9].func_642_a(var1 * var7, var3 * var7) / var7;
+ var7 /= 2.0D;
+ }
+
+ return var5;
+ }
+
+ public double[] func_648_a(double[] var1, double var2, double var4, double var6, int var8, int var9, int var10, double var11, double var13, double var15) {
+ if(var1 == null) {
+ var1 = new double[var8 * var9 * var10];
+ } else {
+ for(int var17 = 0; var17 < var1.length; ++var17) {
+ var1[var17] = 0.0D;
+ }
+ }
+
+ double var20 = 1.0D;
+
+ for(int var19 = 0; var19 < this.field_938_b; ++var19) {
+ this.field_939_a[var19].func_646_a(var1, var2, var4, var6, var8, var9, var10, var11 * var20, var13 * var20, var15 * var20, var20);
+ var20 /= 2.0D;
+ }
+
+ return var1;
+ }
+
+ public double[] func_4103_a(double[] var1, int var2, int var3, int var4, int var5, double var6, double var8, double var10) {
+ return this.func_648_a(var1, (double)var2, 10.0D, (double)var3, var4, 1, var5, var6, 1.0D, var8);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves2.java b/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves2.java
new file mode 100644
index 0000000..c463198
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves2.java
@@ -0,0 +1,45 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class NoiseGeneratorOctaves2 extends NoiseGenerator {
+ private NoiseGenerator2[] field_4308_a;
+ private int field_4307_b;
+
+ public NoiseGeneratorOctaves2(Random var1, int var2) {
+ this.field_4307_b = var2;
+ this.field_4308_a = new NoiseGenerator2[var2];
+
+ for(int var3 = 0; var3 < var2; ++var3) {
+ this.field_4308_a[var3] = new NoiseGenerator2(var1);
+ }
+
+ }
+
+ public double[] func_4101_a(double[] var1, double var2, double var4, int var6, int var7, double var8, double var10, double var12) {
+ return this.func_4100_a(var1, var2, var4, var6, var7, var8, var10, var12, 0.5D);
+ }
+
+ public double[] func_4100_a(double[] var1, double var2, double var4, int var6, int var7, double var8, double var10, double var12, double var14) {
+ var8 /= 1.5D;
+ var10 /= 1.5D;
+ if(var1 != null && var1.length >= var6 * var7) {
+ for(int var16 = 0; var16 < var1.length; ++var16) {
+ var1[var16] = 0.0D;
+ }
+ } else {
+ var1 = new double[var6 * var7];
+ }
+
+ double var21 = 1.0D;
+ double var18 = 1.0D;
+
+ for(int var20 = 0; var20 < this.field_4307_b; ++var20) {
+ this.field_4308_a[var20].func_4115_a(var1, var2, var4, var6, var7, var8 * var18, var10 * var18, 0.55D / var21);
+ var18 *= var12;
+ var21 *= var14;
+ }
+
+ return var1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/NoiseGeneratorPerlin.java b/minecraft_server/src/net/minecraft/src/NoiseGeneratorPerlin.java
new file mode 100644
index 0000000..3047bf0
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/NoiseGeneratorPerlin.java
@@ -0,0 +1,221 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class NoiseGeneratorPerlin extends NoiseGenerator {
+ private int[] permutations;
+ public double xCoord;
+ public double yCoord;
+ public double zCoord;
+
+ public NoiseGeneratorPerlin() {
+ this(new Random());
+ }
+
+ public NoiseGeneratorPerlin(Random var1) {
+ this.permutations = new int[512];
+ this.xCoord = var1.nextDouble() * 256.0D;
+ this.yCoord = var1.nextDouble() * 256.0D;
+ this.zCoord = var1.nextDouble() * 256.0D;
+
+ int var2;
+ for(var2 = 0; var2 < 256; this.permutations[var2] = var2++) {
+ }
+
+ for(var2 = 0; var2 < 256; ++var2) {
+ int var3 = var1.nextInt(256 - var2) + var2;
+ int var4 = this.permutations[var2];
+ this.permutations[var2] = this.permutations[var3];
+ this.permutations[var3] = var4;
+ this.permutations[var2 + 256] = this.permutations[var2];
+ }
+
+ }
+
+ public double generateNoise(double var1, double var3, double var5) {
+ double var7 = var1 + this.xCoord;
+ double var9 = var3 + this.yCoord;
+ double var11 = var5 + this.zCoord;
+ int var13 = (int)var7;
+ int var14 = (int)var9;
+ int var15 = (int)var11;
+ if(var7 < (double)var13) {
+ --var13;
+ }
+
+ if(var9 < (double)var14) {
+ --var14;
+ }
+
+ if(var11 < (double)var15) {
+ --var15;
+ }
+
+ int var16 = var13 & 255;
+ int var17 = var14 & 255;
+ int var18 = var15 & 255;
+ var7 -= (double)var13;
+ var9 -= (double)var14;
+ var11 -= (double)var15;
+ double var19 = var7 * var7 * var7 * (var7 * (var7 * 6.0D - 15.0D) + 10.0D);
+ double var21 = var9 * var9 * var9 * (var9 * (var9 * 6.0D - 15.0D) + 10.0D);
+ double var23 = var11 * var11 * var11 * (var11 * (var11 * 6.0D - 15.0D) + 10.0D);
+ int var25 = this.permutations[var16] + var17;
+ int var26 = this.permutations[var25] + var18;
+ int var27 = this.permutations[var25 + 1] + var18;
+ int var28 = this.permutations[var16 + 1] + var17;
+ int var29 = this.permutations[var28] + var18;
+ int var30 = this.permutations[var28 + 1] + var18;
+ return this.lerp(var23, this.lerp(var21, this.lerp(var19, this.grad(this.permutations[var26], var7, var9, var11), this.grad(this.permutations[var29], var7 - 1.0D, var9, var11)), this.lerp(var19, this.grad(this.permutations[var27], var7, var9 - 1.0D, var11), this.grad(this.permutations[var30], var7 - 1.0D, var9 - 1.0D, var11))), this.lerp(var21, this.lerp(var19, this.grad(this.permutations[var26 + 1], var7, var9, var11 - 1.0D), this.grad(this.permutations[var29 + 1], var7 - 1.0D, var9, var11 - 1.0D)), this.lerp(var19, this.grad(this.permutations[var27 + 1], var7, var9 - 1.0D, var11 - 1.0D), this.grad(this.permutations[var30 + 1], var7 - 1.0D, var9 - 1.0D, var11 - 1.0D))));
+ }
+
+ public final double lerp(double var1, double var3, double var5) {
+ return var3 + var1 * (var5 - var3);
+ }
+
+ public final double func_4102_a(int var1, double var2, double var4) {
+ int var6 = var1 & 15;
+ double var7 = (double)(1 - ((var6 & 8) >> 3)) * var2;
+ double var9 = var6 < 4 ? 0.0D : (var6 != 12 && var6 != 14 ? var4 : var2);
+ return ((var6 & 1) == 0 ? var7 : -var7) + ((var6 & 2) == 0 ? var9 : -var9);
+ }
+
+ public final double grad(int var1, double var2, double var4, double var6) {
+ int var8 = var1 & 15;
+ double var9 = var8 < 8 ? var2 : var4;
+ double var11 = var8 < 4 ? var4 : (var8 != 12 && var8 != 14 ? var6 : var2);
+ return ((var8 & 1) == 0 ? var9 : -var9) + ((var8 & 2) == 0 ? var11 : -var11);
+ }
+
+ public double func_642_a(double var1, double var3) {
+ return this.generateNoise(var1, var3, 0.0D);
+ }
+
+ public void func_646_a(double[] var1, double var2, double var4, double var6, int var8, int var9, int var10, double var11, double var13, double var15, double var17) {
+ int var10001;
+ int var19;
+ int var22;
+ double var31;
+ double var35;
+ int var37;
+ double var38;
+ int var40;
+ int var41;
+ double var42;
+ int var75;
+ if(var9 == 1) {
+ boolean var64 = false;
+ boolean var65 = false;
+ boolean var21 = false;
+ boolean var68 = false;
+ double var70 = 0.0D;
+ double var73 = 0.0D;
+ var75 = 0;
+ double var77 = 1.0D / var17;
+
+ for(int var30 = 0; var30 < var8; ++var30) {
+ var31 = (var2 + (double)var30) * var11 + this.xCoord;
+ int var78 = (int)var31;
+ if(var31 < (double)var78) {
+ --var78;
+ }
+
+ int var34 = var78 & 255;
+ var31 -= (double)var78;
+ var35 = var31 * var31 * var31 * (var31 * (var31 * 6.0D - 15.0D) + 10.0D);
+
+ for(var37 = 0; var37 < var10; ++var37) {
+ var38 = (var6 + (double)var37) * var15 + this.zCoord;
+ var40 = (int)var38;
+ if(var38 < (double)var40) {
+ --var40;
+ }
+
+ var41 = var40 & 255;
+ var38 -= (double)var40;
+ var42 = var38 * var38 * var38 * (var38 * (var38 * 6.0D - 15.0D) + 10.0D);
+ var19 = this.permutations[var34] + 0;
+ int var66 = this.permutations[var19] + var41;
+ int var67 = this.permutations[var34 + 1] + 0;
+ var22 = this.permutations[var67] + var41;
+ var70 = this.lerp(var35, this.func_4102_a(this.permutations[var66], var31, var38), this.grad(this.permutations[var22], var31 - 1.0D, 0.0D, var38));
+ var73 = this.lerp(var35, this.grad(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D));
+ double var79 = this.lerp(var42, var70, var73);
+ var10001 = var75++;
+ var1[var10001] += var79 * var77;
+ }
+ }
+
+ } else {
+ var19 = 0;
+ double var20 = 1.0D / var17;
+ var22 = -1;
+ boolean var23 = false;
+ boolean var24 = false;
+ boolean var25 = false;
+ boolean var26 = false;
+ boolean var27 = false;
+ boolean var28 = false;
+ double var29 = 0.0D;
+ var31 = 0.0D;
+ double var33 = 0.0D;
+ var35 = 0.0D;
+
+ for(var37 = 0; var37 < var8; ++var37) {
+ var38 = (var2 + (double)var37) * var11 + this.xCoord;
+ var40 = (int)var38;
+ if(var38 < (double)var40) {
+ --var40;
+ }
+
+ var41 = var40 & 255;
+ var38 -= (double)var40;
+ var42 = var38 * var38 * var38 * (var38 * (var38 * 6.0D - 15.0D) + 10.0D);
+
+ for(int var44 = 0; var44 < var10; ++var44) {
+ double var45 = (var6 + (double)var44) * var15 + this.zCoord;
+ int var47 = (int)var45;
+ if(var45 < (double)var47) {
+ --var47;
+ }
+
+ int var48 = var47 & 255;
+ var45 -= (double)var47;
+ double var49 = var45 * var45 * var45 * (var45 * (var45 * 6.0D - 15.0D) + 10.0D);
+
+ for(int var51 = 0; var51 < var9; ++var51) {
+ double var52 = (var4 + (double)var51) * var13 + this.yCoord;
+ int var54 = (int)var52;
+ if(var52 < (double)var54) {
+ --var54;
+ }
+
+ int var55 = var54 & 255;
+ var52 -= (double)var54;
+ double var56 = var52 * var52 * var52 * (var52 * (var52 * 6.0D - 15.0D) + 10.0D);
+ if(var51 == 0 || var55 != var22) {
+ var22 = var55;
+ int var69 = this.permutations[var41] + var55;
+ int var71 = this.permutations[var69] + var48;
+ int var72 = this.permutations[var69 + 1] + var48;
+ int var74 = this.permutations[var41 + 1] + var55;
+ var75 = this.permutations[var74] + var48;
+ int var76 = this.permutations[var74 + 1] + var48;
+ var29 = this.lerp(var42, this.grad(this.permutations[var71], var38, var52, var45), this.grad(this.permutations[var75], var38 - 1.0D, var52, var45));
+ var31 = this.lerp(var42, this.grad(this.permutations[var72], var38, var52 - 1.0D, var45), this.grad(this.permutations[var76], var38 - 1.0D, var52 - 1.0D, var45));
+ var33 = this.lerp(var42, this.grad(this.permutations[var71 + 1], var38, var52, var45 - 1.0D), this.grad(this.permutations[var75 + 1], var38 - 1.0D, var52, var45 - 1.0D));
+ var35 = this.lerp(var42, this.grad(this.permutations[var72 + 1], var38, var52 - 1.0D, var45 - 1.0D), this.grad(this.permutations[var76 + 1], var38 - 1.0D, var52 - 1.0D, var45 - 1.0D));
+ }
+
+ double var58 = this.lerp(var56, var29, var31);
+ double var60 = this.lerp(var56, var33, var35);
+ double var62 = this.lerp(var49, var58, var60);
+ var10001 = var19++;
+ var1[var10001] += var62 * var20;
+ }
+ }
+ }
+
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet.java b/minecraft_server/src/net/minecraft/src/Packet.java
new file mode 100644
index 0000000..eb9132b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet.java
@@ -0,0 +1,110 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+public abstract class Packet {
+ private static Map packetIdToClassMap = new HashMap();
+ private static Map packetClassToIdMap = new HashMap();
+ public boolean isChunkDataPacket = false;
+
+ static void addIdClassMapping(int var0, Class var1) {
+ if(packetIdToClassMap.containsKey(Integer.valueOf(var0))) {
+ throw new IllegalArgumentException("Duplicate packet id:" + var0);
+ } else if(packetClassToIdMap.containsKey(var1)) {
+ throw new IllegalArgumentException("Duplicate packet class:" + var1);
+ } else {
+ packetIdToClassMap.put(Integer.valueOf(var0), var1);
+ packetClassToIdMap.put(var1, Integer.valueOf(var0));
+ }
+ }
+
+ public static Packet getNewPacket(int var0) {
+ try {
+ Class var1 = (Class)packetIdToClassMap.get(Integer.valueOf(var0));
+ return var1 == null ? null : (Packet)var1.newInstance();
+ } catch (Exception var2) {
+ var2.printStackTrace();
+ System.out.println("Skipping packet with id " + var0);
+ return null;
+ }
+ }
+
+ public final int getPacketId() {
+ return ((Integer)packetClassToIdMap.get(this.getClass())).intValue();
+ }
+
+ public static Packet readPacket(DataInputStream var0) throws IOException {
+ int var1 = var0.read();
+ if(var1 == -1) {
+ return null;
+ } else {
+ Packet var2 = getNewPacket(var1);
+ if(var2 == null) {
+ throw new IOException("Bad packet id " + var1);
+ } else {
+ var2.readPacketData(var0);
+ return var2;
+ }
+ }
+ }
+
+ public static void writePacket(Packet var0, DataOutputStream var1) throws IOException {
+ var1.write(var0.getPacketId());
+ var0.writePacketData(var1);
+ }
+
+ public abstract void readPacketData(DataInputStream var1) throws IOException;
+
+ public abstract void writePacketData(DataOutputStream var1) throws IOException;
+
+ public abstract void processPacket(NetHandler var1);
+
+ public abstract int getPacketSize();
+
+ static {
+ addIdClassMapping(0, Packet0KeepAlive.class);
+ addIdClassMapping(1, Packet1Login.class);
+ addIdClassMapping(2, Packet2Handshake.class);
+ addIdClassMapping(3, Packet3Chat.class);
+ addIdClassMapping(4, Packet4UpdateTime.class);
+ addIdClassMapping(5, Packet5PlayerInventory.class);
+ addIdClassMapping(6, Packet6SpawnPosition.class);
+ addIdClassMapping(7, Packet7.class);
+ addIdClassMapping(8, Packet8.class);
+ addIdClassMapping(9, Packet9.class);
+ addIdClassMapping(10, Packet10Flying.class);
+ addIdClassMapping(11, Packet11PlayerPosition.class);
+ addIdClassMapping(12, Packet12PlayerLook.class);
+ addIdClassMapping(13, Packet13PlayerLookMove.class);
+ addIdClassMapping(14, Packet14BlockDig.class);
+ addIdClassMapping(15, Packet15Place.class);
+ addIdClassMapping(16, Packet16BlockItemSwitch.class);
+ addIdClassMapping(17, Packet17AddToInventory.class);
+ addIdClassMapping(18, Packet18ArmAnimation.class);
+ addIdClassMapping(20, Packet20NamedEntitySpawn.class);
+ addIdClassMapping(21, Packet21PickupSpawn.class);
+ addIdClassMapping(22, Packet22Collect.class);
+ addIdClassMapping(23, Packet23VehicleSpawn.class);
+ addIdClassMapping(24, Packet24MobSpawn.class);
+ addIdClassMapping(28, Packet28.class);
+ addIdClassMapping(29, Packet29DestroyEntity.class);
+ addIdClassMapping(30, Packet30Entity.class);
+ addIdClassMapping(31, Packet31RelEntityMove.class);
+ addIdClassMapping(32, Packet32EntityLook.class);
+ addIdClassMapping(33, Packet33RelEntityMoveLook.class);
+ addIdClassMapping(34, Packet34EntityTeleport.class);
+ addIdClassMapping(38, Packet38.class);
+ addIdClassMapping(39, Packet39.class);
+ addIdClassMapping(50, Packet50PreChunk.class);
+ addIdClassMapping(51, Packet51MapChunk.class);
+ addIdClassMapping(52, Packet52MultiBlockChange.class);
+ addIdClassMapping(53, Packet53BlockChange.class);
+ addIdClassMapping(59, Packet59ComplexEntity.class);
+ addIdClassMapping(60, Packet60.class);
+ addIdClassMapping(255, Packet255KickDisconnect.class);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet0KeepAlive.java b/minecraft_server/src/net/minecraft/src/Packet0KeepAlive.java
new file mode 100644
index 0000000..08bfb61
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet0KeepAlive.java
@@ -0,0 +1,20 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet0KeepAlive extends Packet {
+ public void processPacket(NetHandler var1) {
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ }
+
+ public int getPacketSize() {
+ return 0;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet10Flying.java b/minecraft_server/src/net/minecraft/src/Packet10Flying.java
new file mode 100644
index 0000000..373c931
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet10Flying.java
@@ -0,0 +1,33 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet10Flying extends Packet {
+ public double xPosition;
+ public double yPosition;
+ public double zPosition;
+ public double stance;
+ public float yaw;
+ public float pitch;
+ public boolean onGround;
+ public boolean moving;
+ public boolean rotating;
+
+ public void processPacket(NetHandler var1) {
+ var1.handleFlying(this);
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.onGround = var1.read() != 0;
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.write(this.onGround ? 1 : 0);
+ }
+
+ public int getPacketSize() {
+ return 1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet11PlayerPosition.java b/minecraft_server/src/net/minecraft/src/Packet11PlayerPosition.java
new file mode 100644
index 0000000..cff453c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet11PlayerPosition.java
@@ -0,0 +1,31 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet11PlayerPosition extends Packet10Flying {
+ public Packet11PlayerPosition() {
+ this.moving = true;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.xPosition = var1.readDouble();
+ this.yPosition = var1.readDouble();
+ this.stance = var1.readDouble();
+ this.zPosition = var1.readDouble();
+ super.readPacketData(var1);
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeDouble(this.xPosition);
+ var1.writeDouble(this.yPosition);
+ var1.writeDouble(this.stance);
+ var1.writeDouble(this.zPosition);
+ super.writePacketData(var1);
+ }
+
+ public int getPacketSize() {
+ return 33;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet12PlayerLook.java b/minecraft_server/src/net/minecraft/src/Packet12PlayerLook.java
new file mode 100644
index 0000000..5a2fe36
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet12PlayerLook.java
@@ -0,0 +1,27 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet12PlayerLook extends Packet10Flying {
+ public Packet12PlayerLook() {
+ this.rotating = true;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.yaw = var1.readFloat();
+ this.pitch = var1.readFloat();
+ super.readPacketData(var1);
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeFloat(this.yaw);
+ var1.writeFloat(this.pitch);
+ super.writePacketData(var1);
+ }
+
+ public int getPacketSize() {
+ return 9;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet13PlayerLookMove.java b/minecraft_server/src/net/minecraft/src/Packet13PlayerLookMove.java
new file mode 100644
index 0000000..db7001e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet13PlayerLookMove.java
@@ -0,0 +1,48 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet13PlayerLookMove extends Packet10Flying {
+ public Packet13PlayerLookMove() {
+ this.rotating = true;
+ this.moving = true;
+ }
+
+ public Packet13PlayerLookMove(double var1, double var3, double var5, double var7, float var9, float var10, boolean var11) {
+ this.xPosition = var1;
+ this.yPosition = var3;
+ this.stance = var5;
+ this.zPosition = var7;
+ this.yaw = var9;
+ this.pitch = var10;
+ this.onGround = var11;
+ this.rotating = true;
+ this.moving = true;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.xPosition = var1.readDouble();
+ this.yPosition = var1.readDouble();
+ this.stance = var1.readDouble();
+ this.zPosition = var1.readDouble();
+ this.yaw = var1.readFloat();
+ this.pitch = var1.readFloat();
+ super.readPacketData(var1);
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeDouble(this.xPosition);
+ var1.writeDouble(this.yPosition);
+ var1.writeDouble(this.stance);
+ var1.writeDouble(this.zPosition);
+ var1.writeFloat(this.yaw);
+ var1.writeFloat(this.pitch);
+ super.writePacketData(var1);
+ }
+
+ public int getPacketSize() {
+ return 41;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet14BlockDig.java b/minecraft_server/src/net/minecraft/src/Packet14BlockDig.java
new file mode 100644
index 0000000..446c68f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet14BlockDig.java
@@ -0,0 +1,37 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet14BlockDig extends Packet {
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+ public int face;
+ public int status;
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.status = var1.read();
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.read();
+ this.zPosition = var1.readInt();
+ this.face = var1.read();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.write(this.status);
+ var1.writeInt(this.xPosition);
+ var1.write(this.yPosition);
+ var1.writeInt(this.zPosition);
+ var1.write(this.face);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleBlockDig(this);
+ }
+
+ public int getPacketSize() {
+ return 11;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet15Place.java b/minecraft_server/src/net/minecraft/src/Packet15Place.java
new file mode 100644
index 0000000..e73efd2
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet15Place.java
@@ -0,0 +1,37 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet15Place extends Packet {
+ public int id;
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+ public int direction;
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.id = var1.readShort();
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.read();
+ this.zPosition = var1.readInt();
+ this.direction = var1.read();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeShort(this.id);
+ var1.writeInt(this.xPosition);
+ var1.write(this.yPosition);
+ var1.writeInt(this.zPosition);
+ var1.write(this.direction);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handlePlace(this);
+ }
+
+ public int getPacketSize() {
+ return 12;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet16BlockItemSwitch.java b/minecraft_server/src/net/minecraft/src/Packet16BlockItemSwitch.java
new file mode 100644
index 0000000..c89c716
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet16BlockItemSwitch.java
@@ -0,0 +1,36 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet16BlockItemSwitch extends Packet {
+ public int unused;
+ public int id;
+
+ public Packet16BlockItemSwitch() {
+ }
+
+ public Packet16BlockItemSwitch(int var1, int var2) {
+ this.unused = var1;
+ this.id = var2;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.unused = var1.readInt();
+ this.id = var1.readShort();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.unused);
+ var1.writeShort(this.id);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleBlockItemSwitch(this);
+ }
+
+ public int getPacketSize() {
+ return 6;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet17AddToInventory.java b/minecraft_server/src/net/minecraft/src/Packet17AddToInventory.java
new file mode 100644
index 0000000..5ad5b45
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet17AddToInventory.java
@@ -0,0 +1,44 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet17AddToInventory extends Packet {
+ public int id;
+ public int count;
+ public int durability;
+
+ public Packet17AddToInventory() {
+ }
+
+ public Packet17AddToInventory(ItemStack var1, int var2) {
+ this.id = var1.itemID;
+ this.count = var2;
+ this.durability = var1.itemDamage;
+ if(var2 == 0) {
+ boolean var3 = true;
+ }
+
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.id = var1.readShort();
+ this.count = var1.readByte();
+ this.durability = var1.readShort();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeShort(this.id);
+ var1.writeByte(this.count);
+ var1.writeShort(this.durability);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleAddToInventory(this);
+ }
+
+ public int getPacketSize() {
+ return 5;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet18ArmAnimation.java b/minecraft_server/src/net/minecraft/src/Packet18ArmAnimation.java
new file mode 100644
index 0000000..dbf7fbf
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet18ArmAnimation.java
@@ -0,0 +1,36 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet18ArmAnimation extends Packet {
+ public int entityId;
+ public int animate;
+
+ public Packet18ArmAnimation() {
+ }
+
+ public Packet18ArmAnimation(Entity var1, int var2) {
+ this.entityId = var1.field_331_c;
+ this.animate = var2;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.entityId = var1.readInt();
+ this.animate = var1.readByte();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.entityId);
+ var1.writeByte(this.animate);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleArmAnimation(this);
+ }
+
+ public int getPacketSize() {
+ return 5;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet1Login.java b/minecraft_server/src/net/minecraft/src/Packet1Login.java
new file mode 100644
index 0000000..d34017e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet1Login.java
@@ -0,0 +1,48 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet1Login extends Packet {
+ public int protocolVersion;
+ public String username;
+ public String password;
+ public long field_4026_d;
+ public byte field_4025_e;
+
+ public Packet1Login() {
+ }
+
+ public Packet1Login(String var1, String var2, int var3, long var4, byte var6) {
+ this.username = var1;
+ this.password = var2;
+ this.protocolVersion = var3;
+ this.field_4026_d = var4;
+ this.field_4025_e = var6;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.protocolVersion = var1.readInt();
+ this.username = var1.readUTF();
+ this.password = var1.readUTF();
+ this.field_4026_d = var1.readLong();
+ this.field_4025_e = var1.readByte();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.protocolVersion);
+ var1.writeUTF(this.username);
+ var1.writeUTF(this.password);
+ var1.writeLong(this.field_4026_d);
+ var1.writeByte(this.field_4025_e);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleLogin(this);
+ }
+
+ public int getPacketSize() {
+ return 4 + this.username.length() + this.password.length() + 4 + 5;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet20NamedEntitySpawn.java b/minecraft_server/src/net/minecraft/src/Packet20NamedEntitySpawn.java
new file mode 100644
index 0000000..95a4f1a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet20NamedEntitySpawn.java
@@ -0,0 +1,61 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet20NamedEntitySpawn extends Packet {
+ public int entityId;
+ public String name;
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+ public byte rotation;
+ public byte pitch;
+ public int currentItem;
+
+ public Packet20NamedEntitySpawn() {
+ }
+
+ public Packet20NamedEntitySpawn(EntityPlayer var1) {
+ this.entityId = var1.field_331_c;
+ this.name = var1.username;
+ this.xPosition = MathHelper.floor_double(var1.posX * 32.0D);
+ this.yPosition = MathHelper.floor_double(var1.posY * 32.0D);
+ this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D);
+ this.rotation = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F));
+ this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F));
+ ItemStack var2 = var1.inventory.getCurrentItem();
+ this.currentItem = var2 == null ? 0 : var2.itemID;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.entityId = var1.readInt();
+ this.name = var1.readUTF();
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.readInt();
+ this.zPosition = var1.readInt();
+ this.rotation = var1.readByte();
+ this.pitch = var1.readByte();
+ this.currentItem = var1.readShort();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.entityId);
+ var1.writeUTF(this.name);
+ var1.writeInt(this.xPosition);
+ var1.writeInt(this.yPosition);
+ var1.writeInt(this.zPosition);
+ var1.writeByte(this.rotation);
+ var1.writeByte(this.pitch);
+ var1.writeShort(this.currentItem);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleNamedEntitySpawn(this);
+ }
+
+ public int getPacketSize() {
+ return 28;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet21PickupSpawn.java b/minecraft_server/src/net/minecraft/src/Packet21PickupSpawn.java
new file mode 100644
index 0000000..06794e3
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet21PickupSpawn.java
@@ -0,0 +1,64 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet21PickupSpawn extends Packet {
+ public int entityId;
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+ public byte rotation;
+ public byte pitch;
+ public byte roll;
+ public int itemId;
+ public int count;
+
+ public Packet21PickupSpawn() {
+ }
+
+ public Packet21PickupSpawn(EntityItem var1) {
+ this.entityId = var1.field_331_c;
+ this.itemId = var1.item.itemID;
+ this.count = var1.item.stackSize;
+ this.xPosition = MathHelper.floor_double(var1.posX * 32.0D);
+ this.yPosition = MathHelper.floor_double(var1.posY * 32.0D);
+ this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D);
+ this.rotation = (byte)((int)(var1.motionX * 128.0D));
+ this.pitch = (byte)((int)(var1.motionY * 128.0D));
+ this.roll = (byte)((int)(var1.motionZ * 128.0D));
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.entityId = var1.readInt();
+ this.itemId = var1.readShort();
+ this.count = var1.readByte();
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.readInt();
+ this.zPosition = var1.readInt();
+ this.rotation = var1.readByte();
+ this.pitch = var1.readByte();
+ this.roll = var1.readByte();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.entityId);
+ var1.writeShort(this.itemId);
+ var1.writeByte(this.count);
+ var1.writeInt(this.xPosition);
+ var1.writeInt(this.yPosition);
+ var1.writeInt(this.zPosition);
+ var1.writeByte(this.rotation);
+ var1.writeByte(this.pitch);
+ var1.writeByte(this.roll);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handlePickupSpawn(this);
+ }
+
+ public int getPacketSize() {
+ return 22;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet22Collect.java b/minecraft_server/src/net/minecraft/src/Packet22Collect.java
new file mode 100644
index 0000000..f8b199f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet22Collect.java
@@ -0,0 +1,36 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet22Collect extends Packet {
+ public int collectedEntityId;
+ public int collectorEntityId;
+
+ public Packet22Collect() {
+ }
+
+ public Packet22Collect(int var1, int var2) {
+ this.collectedEntityId = var1;
+ this.collectorEntityId = var2;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.collectedEntityId = var1.readInt();
+ this.collectorEntityId = var1.readInt();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.collectedEntityId);
+ var1.writeInt(this.collectorEntityId);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleCollect(this);
+ }
+
+ public int getPacketSize() {
+ return 8;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet23VehicleSpawn.java b/minecraft_server/src/net/minecraft/src/Packet23VehicleSpawn.java
new file mode 100644
index 0000000..f010810
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet23VehicleSpawn.java
@@ -0,0 +1,48 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet23VehicleSpawn extends Packet {
+ public int entityId;
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+ public int type;
+
+ public Packet23VehicleSpawn() {
+ }
+
+ public Packet23VehicleSpawn(Entity var1, int var2) {
+ this.entityId = var1.field_331_c;
+ this.xPosition = MathHelper.floor_double(var1.posX * 32.0D);
+ this.yPosition = MathHelper.floor_double(var1.posY * 32.0D);
+ this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D);
+ this.type = var2;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.entityId = var1.readInt();
+ this.type = var1.readByte();
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.readInt();
+ this.zPosition = var1.readInt();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.entityId);
+ var1.writeByte(this.type);
+ var1.writeInt(this.xPosition);
+ var1.writeInt(this.yPosition);
+ var1.writeInt(this.zPosition);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleVehicleSpawn(this);
+ }
+
+ public int getPacketSize() {
+ return 17;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet24MobSpawn.java b/minecraft_server/src/net/minecraft/src/Packet24MobSpawn.java
new file mode 100644
index 0000000..6065d34
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet24MobSpawn.java
@@ -0,0 +1,56 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet24MobSpawn extends Packet {
+ public int entityId;
+ public byte type;
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+ public byte yaw;
+ public byte pitch;
+
+ public Packet24MobSpawn() {
+ }
+
+ public Packet24MobSpawn(EntityLiving var1) {
+ this.entityId = var1.field_331_c;
+ this.type = (byte)EntityList.func_565_a(var1);
+ this.xPosition = MathHelper.floor_double(var1.posX * 32.0D);
+ this.yPosition = MathHelper.floor_double(var1.posY * 32.0D);
+ this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D);
+ this.yaw = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F));
+ this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F));
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.entityId = var1.readInt();
+ this.type = var1.readByte();
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.readInt();
+ this.zPosition = var1.readInt();
+ this.yaw = var1.readByte();
+ this.pitch = var1.readByte();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.entityId);
+ var1.writeByte(this.type);
+ var1.writeInt(this.xPosition);
+ var1.writeInt(this.yPosition);
+ var1.writeInt(this.zPosition);
+ var1.writeByte(this.yaw);
+ var1.writeByte(this.pitch);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleMobSpawn(this);
+ }
+
+ public int getPacketSize() {
+ return 19;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet255KickDisconnect.java b/minecraft_server/src/net/minecraft/src/Packet255KickDisconnect.java
new file mode 100644
index 0000000..c662be3
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet255KickDisconnect.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet255KickDisconnect extends Packet {
+ public String reason;
+
+ public Packet255KickDisconnect() {
+ }
+
+ public Packet255KickDisconnect(String var1) {
+ this.reason = var1;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.reason = var1.readUTF();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeUTF(this.reason);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleKickDisconnect(this);
+ }
+
+ public int getPacketSize() {
+ return this.reason.length();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet28.java b/minecraft_server/src/net/minecraft/src/Packet28.java
new file mode 100644
index 0000000..f074b4a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet28.java
@@ -0,0 +1,73 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet28 extends Packet {
+ public int field_6040_a;
+ public int field_6039_b;
+ public int field_6042_c;
+ public int field_6041_d;
+
+ public Packet28() {
+ }
+
+ public Packet28(Entity var1) {
+ this(var1.field_331_c, var1.motionX, var1.motionY, var1.motionZ);
+ }
+
+ public Packet28(int var1, double var2, double var4, double var6) {
+ this.field_6040_a = var1;
+ double var8 = 3.9D;
+ if(var2 < -var8) {
+ var2 = -var8;
+ }
+
+ if(var4 < -var8) {
+ var4 = -var8;
+ }
+
+ if(var6 < -var8) {
+ var6 = -var8;
+ }
+
+ if(var2 > var8) {
+ var2 = var8;
+ }
+
+ if(var4 > var8) {
+ var4 = var8;
+ }
+
+ if(var6 > var8) {
+ var6 = var8;
+ }
+
+ this.field_6039_b = (int)(var2 * 8000.0D);
+ this.field_6042_c = (int)(var4 * 8000.0D);
+ this.field_6041_d = (int)(var6 * 8000.0D);
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.field_6040_a = var1.readInt();
+ this.field_6039_b = var1.readShort();
+ this.field_6042_c = var1.readShort();
+ this.field_6041_d = var1.readShort();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.field_6040_a);
+ var1.writeShort(this.field_6039_b);
+ var1.writeShort(this.field_6042_c);
+ var1.writeShort(this.field_6041_d);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.func_6002_a(this);
+ }
+
+ public int getPacketSize() {
+ return 10;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet29DestroyEntity.java b/minecraft_server/src/net/minecraft/src/Packet29DestroyEntity.java
new file mode 100644
index 0000000..9ab5b1c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet29DestroyEntity.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet29DestroyEntity extends Packet {
+ public int entityId;
+
+ public Packet29DestroyEntity() {
+ }
+
+ public Packet29DestroyEntity(int var1) {
+ this.entityId = var1;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.entityId = var1.readInt();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.entityId);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleDestroyEntity(this);
+ }
+
+ public int getPacketSize() {
+ return 4;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet2Handshake.java b/minecraft_server/src/net/minecraft/src/Packet2Handshake.java
new file mode 100644
index 0000000..d621dca
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet2Handshake.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet2Handshake extends Packet {
+ public String username;
+
+ public Packet2Handshake() {
+ }
+
+ public Packet2Handshake(String var1) {
+ this.username = var1;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.username = var1.readUTF();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeUTF(this.username);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleHandshake(this);
+ }
+
+ public int getPacketSize() {
+ return 4 + this.username.length() + 4;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet30Entity.java b/minecraft_server/src/net/minecraft/src/Packet30Entity.java
new file mode 100644
index 0000000..ca8c1c7
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet30Entity.java
@@ -0,0 +1,38 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet30Entity extends Packet {
+ public int entityId;
+ public byte xPosition;
+ public byte yPosition;
+ public byte zPosition;
+ public byte yaw;
+ public byte pitch;
+ public boolean rotating = false;
+
+ public Packet30Entity() {
+ }
+
+ public Packet30Entity(int var1) {
+ this.entityId = var1;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.entityId = var1.readInt();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.entityId);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleEntity(this);
+ }
+
+ public int getPacketSize() {
+ return 4;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet31RelEntityMove.java b/minecraft_server/src/net/minecraft/src/Packet31RelEntityMove.java
new file mode 100644
index 0000000..cace71e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet31RelEntityMove.java
@@ -0,0 +1,35 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet31RelEntityMove extends Packet30Entity {
+ public Packet31RelEntityMove() {
+ }
+
+ public Packet31RelEntityMove(int var1, byte var2, byte var3, byte var4) {
+ super(var1);
+ this.xPosition = var2;
+ this.yPosition = var3;
+ this.zPosition = var4;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ super.readPacketData(var1);
+ this.xPosition = var1.readByte();
+ this.yPosition = var1.readByte();
+ this.zPosition = var1.readByte();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ super.writePacketData(var1);
+ var1.writeByte(this.xPosition);
+ var1.writeByte(this.yPosition);
+ var1.writeByte(this.zPosition);
+ }
+
+ public int getPacketSize() {
+ return 7;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet32EntityLook.java b/minecraft_server/src/net/minecraft/src/Packet32EntityLook.java
new file mode 100644
index 0000000..d63043e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet32EntityLook.java
@@ -0,0 +1,34 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet32EntityLook extends Packet30Entity {
+ public Packet32EntityLook() {
+ this.rotating = true;
+ }
+
+ public Packet32EntityLook(int var1, byte var2, byte var3) {
+ super(var1);
+ this.yaw = var2;
+ this.pitch = var3;
+ this.rotating = true;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ super.readPacketData(var1);
+ this.yaw = var1.readByte();
+ this.pitch = var1.readByte();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ super.writePacketData(var1);
+ var1.writeByte(this.yaw);
+ var1.writeByte(this.pitch);
+ }
+
+ public int getPacketSize() {
+ return 6;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet33RelEntityMoveLook.java b/minecraft_server/src/net/minecraft/src/Packet33RelEntityMoveLook.java
new file mode 100644
index 0000000..5d821d1
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet33RelEntityMoveLook.java
@@ -0,0 +1,43 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet33RelEntityMoveLook extends Packet30Entity {
+ public Packet33RelEntityMoveLook() {
+ this.rotating = true;
+ }
+
+ public Packet33RelEntityMoveLook(int var1, byte var2, byte var3, byte var4, byte var5, byte var6) {
+ super(var1);
+ this.xPosition = var2;
+ this.yPosition = var3;
+ this.zPosition = var4;
+ this.yaw = var5;
+ this.pitch = var6;
+ this.rotating = true;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ super.readPacketData(var1);
+ this.xPosition = var1.readByte();
+ this.yPosition = var1.readByte();
+ this.zPosition = var1.readByte();
+ this.yaw = var1.readByte();
+ this.pitch = var1.readByte();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ super.writePacketData(var1);
+ var1.writeByte(this.xPosition);
+ var1.writeByte(this.yPosition);
+ var1.writeByte(this.zPosition);
+ var1.writeByte(this.yaw);
+ var1.writeByte(this.pitch);
+ }
+
+ public int getPacketSize() {
+ return 9;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet34EntityTeleport.java b/minecraft_server/src/net/minecraft/src/Packet34EntityTeleport.java
new file mode 100644
index 0000000..7b0a325
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet34EntityTeleport.java
@@ -0,0 +1,61 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet34EntityTeleport extends Packet {
+ public int entityId;
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+ public byte yaw;
+ public byte pitch;
+
+ public Packet34EntityTeleport() {
+ }
+
+ public Packet34EntityTeleport(Entity var1) {
+ this.entityId = var1.field_331_c;
+ this.xPosition = MathHelper.floor_double(var1.posX * 32.0D);
+ this.yPosition = MathHelper.floor_double(var1.posY * 32.0D);
+ this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D);
+ this.yaw = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F));
+ this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F));
+ }
+
+ public Packet34EntityTeleport(int var1, int var2, int var3, int var4, byte var5, byte var6) {
+ this.entityId = var1;
+ this.xPosition = var2;
+ this.yPosition = var3;
+ this.zPosition = var4;
+ this.yaw = var5;
+ this.pitch = var6;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.entityId = var1.readInt();
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.readInt();
+ this.zPosition = var1.readInt();
+ this.yaw = (byte)var1.read();
+ this.pitch = (byte)var1.read();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.entityId);
+ var1.writeInt(this.xPosition);
+ var1.writeInt(this.yPosition);
+ var1.writeInt(this.zPosition);
+ var1.write(this.yaw);
+ var1.write(this.pitch);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleEntityTeleport(this);
+ }
+
+ public int getPacketSize() {
+ return 34;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet38.java b/minecraft_server/src/net/minecraft/src/Packet38.java
new file mode 100644
index 0000000..bb35b9d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet38.java
@@ -0,0 +1,36 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet38 extends Packet {
+ public int field_9016_a;
+ public byte field_9015_b;
+
+ public Packet38() {
+ }
+
+ public Packet38(int var1, byte var2) {
+ this.field_9016_a = var1;
+ this.field_9015_b = var2;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.field_9016_a = var1.readInt();
+ this.field_9015_b = var1.readByte();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.field_9016_a);
+ var1.writeByte(this.field_9015_b);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.func_9001_a(this);
+ }
+
+ public int getPacketSize() {
+ return 5;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet39.java b/minecraft_server/src/net/minecraft/src/Packet39.java
new file mode 100644
index 0000000..00f2f07
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet39.java
@@ -0,0 +1,36 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet39 extends Packet {
+ public int field_6044_a;
+ public int field_6043_b;
+
+ public Packet39() {
+ }
+
+ public Packet39(Entity var1, Entity var2) {
+ this.field_6044_a = var1.field_331_c;
+ this.field_6043_b = var2 != null ? var2.field_331_c : -1;
+ }
+
+ public int getPacketSize() {
+ return 8;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.field_6044_a = var1.readInt();
+ this.field_6043_b = var1.readInt();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.field_6044_a);
+ var1.writeInt(this.field_6043_b);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.func_6003_a(this);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet3Chat.java b/minecraft_server/src/net/minecraft/src/Packet3Chat.java
new file mode 100644
index 0000000..b622a04
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet3Chat.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet3Chat extends Packet {
+ public String message;
+
+ public Packet3Chat() {
+ }
+
+ public Packet3Chat(String var1) {
+ this.message = var1;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.message = var1.readUTF();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeUTF(this.message);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleChat(this);
+ }
+
+ public int getPacketSize() {
+ return this.message.length();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet4UpdateTime.java b/minecraft_server/src/net/minecraft/src/Packet4UpdateTime.java
new file mode 100644
index 0000000..5bfffe3
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet4UpdateTime.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet4UpdateTime extends Packet {
+ public long time;
+
+ public Packet4UpdateTime() {
+ }
+
+ public Packet4UpdateTime(long var1) {
+ this.time = var1;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.time = var1.readLong();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeLong(this.time);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleUpdateTime(this);
+ }
+
+ public int getPacketSize() {
+ return 8;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet50PreChunk.java b/minecraft_server/src/net/minecraft/src/Packet50PreChunk.java
new file mode 100644
index 0000000..47ddb4f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet50PreChunk.java
@@ -0,0 +1,41 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet50PreChunk extends Packet {
+ public int xPosition;
+ public int yPosition;
+ public boolean mode;
+
+ public Packet50PreChunk() {
+ }
+
+ public Packet50PreChunk(int var1, int var2, boolean var3) {
+ this.isChunkDataPacket = true;
+ this.xPosition = var1;
+ this.yPosition = var2;
+ this.mode = var3;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.readInt();
+ this.mode = var1.read() != 0;
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.xPosition);
+ var1.writeInt(this.yPosition);
+ var1.write(this.mode ? 1 : 0);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handlePreChunk(this);
+ }
+
+ public int getPacketSize() {
+ return 9;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet51MapChunk.java b/minecraft_server/src/net/minecraft/src/Packet51MapChunk.java
new file mode 100644
index 0000000..41251a4
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet51MapChunk.java
@@ -0,0 +1,88 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.zip.DataFormatException;
+import java.util.zip.Deflater;
+import java.util.zip.Inflater;
+
+public class Packet51MapChunk extends Packet {
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+ public int xSize;
+ public int ySize;
+ public int zSize;
+ public byte[] chunk;
+ private int chunkSize;
+
+ public Packet51MapChunk() {
+ this.isChunkDataPacket = true;
+ }
+
+ public Packet51MapChunk(int var1, int var2, int var3, int var4, int var5, int var6, World var7) {
+ this.isChunkDataPacket = true;
+ this.xPosition = var1;
+ this.yPosition = var2;
+ this.zPosition = var3;
+ this.xSize = var4;
+ this.ySize = var5;
+ this.zSize = var6;
+ byte[] var8 = var7.func_504_c(var1, var2, var3, var4, var5, var6);
+ Deflater var9 = new Deflater(1);
+
+ try {
+ var9.setInput(var8);
+ var9.finish();
+ this.chunk = new byte[var4 * var5 * var6 * 5 / 2];
+ this.chunkSize = var9.deflate(this.chunk);
+ } finally {
+ var9.end();
+ }
+
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.readShort();
+ this.zPosition = var1.readInt();
+ this.xSize = var1.read() + 1;
+ this.ySize = var1.read() + 1;
+ this.zSize = var1.read() + 1;
+ int var2 = var1.readInt();
+ byte[] var3 = new byte[var2];
+ var1.readFully(var3);
+ this.chunk = new byte[this.xSize * this.ySize * this.zSize * 5 / 2];
+ Inflater var4 = new Inflater();
+ var4.setInput(var3);
+
+ try {
+ var4.inflate(this.chunk);
+ } catch (DataFormatException var9) {
+ throw new IOException("Bad compressed data format");
+ } finally {
+ var4.end();
+ }
+
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.xPosition);
+ var1.writeShort(this.yPosition);
+ var1.writeInt(this.zPosition);
+ var1.write(this.xSize - 1);
+ var1.write(this.ySize - 1);
+ var1.write(this.zSize - 1);
+ var1.writeInt(this.chunkSize);
+ var1.write(this.chunk, 0, this.chunkSize);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleMapChunk(this);
+ }
+
+ public int getPacketSize() {
+ return 17 + this.chunkSize;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet52MultiBlockChange.java b/minecraft_server/src/net/minecraft/src/Packet52MultiBlockChange.java
new file mode 100644
index 0000000..d31094c
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet52MultiBlockChange.java
@@ -0,0 +1,76 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet52MultiBlockChange extends Packet {
+ public int xPosition;
+ public int zPosition;
+ public short[] coordinateArray;
+ public byte[] typeArray;
+ public byte[] metadataArray;
+ public int size;
+
+ public Packet52MultiBlockChange() {
+ this.isChunkDataPacket = true;
+ }
+
+ public Packet52MultiBlockChange(int var1, int var2, short[] var3, int var4, World var5) {
+ this.isChunkDataPacket = true;
+ this.xPosition = var1;
+ this.zPosition = var2;
+ this.size = var4;
+ this.coordinateArray = new short[var4];
+ this.typeArray = new byte[var4];
+ this.metadataArray = new byte[var4];
+ Chunk var6 = var5.getChunkFromChunkCoords(var1, var2);
+
+ for(int var7 = 0; var7 < var4; ++var7) {
+ int var8 = var3[var7] >> 12 & 15;
+ int var9 = var3[var7] >> 8 & 15;
+ int var10 = var3[var7] & 255;
+ this.coordinateArray[var7] = var3[var7];
+ this.typeArray[var7] = (byte)var6.getBlockID(var8, var10, var9);
+ this.metadataArray[var7] = (byte)var6.getBlockMetadata(var8, var10, var9);
+ }
+
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.xPosition = var1.readInt();
+ this.zPosition = var1.readInt();
+ this.size = var1.readShort() & '\uffff';
+ this.coordinateArray = new short[this.size];
+ this.typeArray = new byte[this.size];
+ this.metadataArray = new byte[this.size];
+
+ for(int var2 = 0; var2 < this.size; ++var2) {
+ this.coordinateArray[var2] = var1.readShort();
+ }
+
+ var1.readFully(this.typeArray);
+ var1.readFully(this.metadataArray);
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.xPosition);
+ var1.writeInt(this.zPosition);
+ var1.writeShort((short)this.size);
+
+ for(int var2 = 0; var2 < this.size; ++var2) {
+ var1.writeShort(this.coordinateArray[var2]);
+ }
+
+ var1.write(this.typeArray);
+ var1.write(this.metadataArray);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleMultiBlockChange(this);
+ }
+
+ public int getPacketSize() {
+ return 10 + this.size * 4;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet53BlockChange.java b/minecraft_server/src/net/minecraft/src/Packet53BlockChange.java
new file mode 100644
index 0000000..91c32c8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet53BlockChange.java
@@ -0,0 +1,50 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet53BlockChange extends Packet {
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+ public int type;
+ public int metadata;
+
+ public Packet53BlockChange() {
+ this.isChunkDataPacket = true;
+ }
+
+ public Packet53BlockChange(int var1, int var2, int var3, World var4) {
+ this.isChunkDataPacket = true;
+ this.xPosition = var1;
+ this.yPosition = var2;
+ this.zPosition = var3;
+ this.type = var4.getBlockId(var1, var2, var3);
+ this.metadata = var4.getBlockMetadata(var1, var2, var3);
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.read();
+ this.zPosition = var1.readInt();
+ this.type = var1.read();
+ this.metadata = var1.read();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.xPosition);
+ var1.write(this.yPosition);
+ var1.writeInt(this.zPosition);
+ var1.write(this.type);
+ var1.write(this.metadata);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleBlockChange(this);
+ }
+
+ public int getPacketSize() {
+ return 11;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet59ComplexEntity.java b/minecraft_server/src/net/minecraft/src/Packet59ComplexEntity.java
new file mode 100644
index 0000000..4baee83
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet59ComplexEntity.java
@@ -0,0 +1,59 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet59ComplexEntity extends Packet {
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+ public byte[] entityData;
+ public NBTTagCompound entityNBT;
+
+ public Packet59ComplexEntity() {
+ this.isChunkDataPacket = true;
+ }
+
+ public Packet59ComplexEntity(int var1, int var2, int var3, TileEntity var4) {
+ this.isChunkDataPacket = true;
+ this.xPosition = var1;
+ this.yPosition = var2;
+ this.zPosition = var3;
+ this.entityNBT = new NBTTagCompound();
+ var4.writeToNBT(this.entityNBT);
+
+ try {
+ this.entityData = CompressedStreamTools.func_772_a(this.entityNBT);
+ } catch (IOException var6) {
+ var6.printStackTrace();
+ }
+
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.readShort();
+ this.zPosition = var1.readInt();
+ int var2 = var1.readShort() & '\uffff';
+ this.entityData = new byte[var2];
+ var1.readFully(this.entityData);
+ this.entityNBT = CompressedStreamTools.func_773_a(this.entityData);
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.xPosition);
+ var1.writeShort(this.yPosition);
+ var1.writeInt(this.zPosition);
+ var1.writeShort((short)this.entityData.length);
+ var1.write(this.entityData);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleComplexEntity(this);
+ }
+
+ public int getPacketSize() {
+ return this.entityData.length + 2 + 10;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet5PlayerInventory.java b/minecraft_server/src/net/minecraft/src/Packet5PlayerInventory.java
new file mode 100644
index 0000000..52b9467
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet5PlayerInventory.java
@@ -0,0 +1,63 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet5PlayerInventory extends Packet {
+ public int type;
+ public ItemStack[] stacks;
+
+ public Packet5PlayerInventory() {
+ }
+
+ public Packet5PlayerInventory(int var1, ItemStack[] var2) {
+ this.type = var1;
+ this.stacks = new ItemStack[var2.length];
+
+ for(int var3 = 0; var3 < this.stacks.length; ++var3) {
+ this.stacks[var3] = var2[var3] == null ? null : var2[var3].copy();
+ }
+
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.type = var1.readInt();
+ short var2 = var1.readShort();
+ this.stacks = new ItemStack[var2];
+
+ for(int var3 = 0; var3 < var2; ++var3) {
+ short var4 = var1.readShort();
+ if(var4 >= 0) {
+ byte var5 = var1.readByte();
+ short var6 = var1.readShort();
+ this.stacks[var3] = new ItemStack(var4, var5, var6);
+ }
+ }
+
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.type);
+ var1.writeShort(this.stacks.length);
+
+ for(int var2 = 0; var2 < this.stacks.length; ++var2) {
+ if(this.stacks[var2] == null) {
+ var1.writeShort(-1);
+ } else {
+ var1.writeShort((short)this.stacks[var2].itemID);
+ var1.writeByte((byte)this.stacks[var2].stackSize);
+ var1.writeShort((short)this.stacks[var2].itemDamage);
+ }
+ }
+
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handlePlayerInventory(this);
+ }
+
+ public int getPacketSize() {
+ return 6 + this.stacks.length * 5;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet60.java b/minecraft_server/src/net/minecraft/src/Packet60.java
new file mode 100644
index 0000000..f6ab13a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet60.java
@@ -0,0 +1,78 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+public class Packet60 extends Packet {
+ public double field_12003_a;
+ public double field_12002_b;
+ public double field_12006_c;
+ public float field_12005_d;
+ public Set field_12004_e;
+
+ public Packet60() {
+ }
+
+ public Packet60(double var1, double var3, double var5, float var7, Set var8) {
+ this.field_12003_a = var1;
+ this.field_12002_b = var3;
+ this.field_12006_c = var5;
+ this.field_12005_d = var7;
+ this.field_12004_e = new HashSet(var8);
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.field_12003_a = var1.readDouble();
+ this.field_12002_b = var1.readDouble();
+ this.field_12006_c = var1.readDouble();
+ this.field_12005_d = var1.readFloat();
+ int var2 = var1.readInt();
+ this.field_12004_e = new HashSet();
+ int var3 = (int)this.field_12003_a;
+ int var4 = (int)this.field_12002_b;
+ int var5 = (int)this.field_12006_c;
+
+ for(int var6 = 0; var6 < var2; ++var6) {
+ int var7 = var1.readByte() + var3;
+ int var8 = var1.readByte() + var4;
+ int var9 = var1.readByte() + var5;
+ this.field_12004_e.add(new ChunkPosition(var7, var8, var9));
+ }
+
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeDouble(this.field_12003_a);
+ var1.writeDouble(this.field_12002_b);
+ var1.writeDouble(this.field_12006_c);
+ var1.writeFloat(this.field_12005_d);
+ var1.writeInt(this.field_12004_e.size());
+ int var2 = (int)this.field_12003_a;
+ int var3 = (int)this.field_12002_b;
+ int var4 = (int)this.field_12006_c;
+ Iterator var5 = this.field_12004_e.iterator();
+
+ while(var5.hasNext()) {
+ ChunkPosition var6 = (ChunkPosition)var5.next();
+ int var7 = var6.field_846_a - var2;
+ int var8 = var6.field_845_b - var3;
+ int var9 = var6.field_847_c - var4;
+ var1.writeByte(var7);
+ var1.writeByte(var8);
+ var1.writeByte(var9);
+ }
+
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.func_12001_a(this);
+ }
+
+ public int getPacketSize() {
+ return 32 + this.field_12004_e.size() * 3;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet6SpawnPosition.java b/minecraft_server/src/net/minecraft/src/Packet6SpawnPosition.java
new file mode 100644
index 0000000..0cb0d6a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet6SpawnPosition.java
@@ -0,0 +1,40 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet6SpawnPosition extends Packet {
+ public int xPosition;
+ public int yPosition;
+ public int zPosition;
+
+ public Packet6SpawnPosition() {
+ }
+
+ public Packet6SpawnPosition(int var1, int var2, int var3) {
+ this.xPosition = var1;
+ this.yPosition = var2;
+ this.zPosition = var3;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.xPosition = var1.readInt();
+ this.yPosition = var1.readInt();
+ this.zPosition = var1.readInt();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.xPosition);
+ var1.writeInt(this.yPosition);
+ var1.writeInt(this.zPosition);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.handleSpawnPosition(this);
+ }
+
+ public int getPacketSize() {
+ return 12;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet7.java b/minecraft_server/src/net/minecraft/src/Packet7.java
new file mode 100644
index 0000000..575c4ef
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet7.java
@@ -0,0 +1,31 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet7 extends Packet {
+ public int field_9019_a;
+ public int field_9018_b;
+ public int field_9020_c;
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.field_9019_a = var1.readInt();
+ this.field_9018_b = var1.readInt();
+ this.field_9020_c = var1.readByte();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeInt(this.field_9019_a);
+ var1.writeInt(this.field_9018_b);
+ var1.writeByte(this.field_9020_c);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.func_6006_a(this);
+ }
+
+ public int getPacketSize() {
+ return 9;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet8.java b/minecraft_server/src/net/minecraft/src/Packet8.java
new file mode 100644
index 0000000..b395bc8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet8.java
@@ -0,0 +1,32 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+public class Packet8 extends Packet {
+ public int field_9017_a;
+
+ public Packet8() {
+ }
+
+ public Packet8(int var1) {
+ this.field_9017_a = var1;
+ }
+
+ public void readPacketData(DataInputStream var1) throws IOException {
+ this.field_9017_a = var1.readByte();
+ }
+
+ public void writePacketData(DataOutputStream var1) throws IOException {
+ var1.writeByte(this.field_9017_a);
+ }
+
+ public void processPacket(NetHandler var1) {
+ var1.func_9003_a(this);
+ }
+
+ public int getPacketSize() {
+ return 1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Packet9.java b/minecraft_server/src/net/minecraft/src/Packet9.java
new file mode 100644
index 0000000..e5d7c94
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Packet9.java
@@ -0,0 +1,20 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+
+public class Packet9 extends Packet {
+ public void processPacket(NetHandler var1) {
+ var1.func_9002_a(this);
+ }
+
+ public void readPacketData(DataInputStream var1) {
+ }
+
+ public void writePacketData(DataOutputStream var1) {
+ }
+
+ public int getPacketSize() {
+ return 0;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Path.java b/minecraft_server/src/net/minecraft/src/Path.java
new file mode 100644
index 0000000..fc08afe
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Path.java
@@ -0,0 +1,119 @@
+package net.minecraft.src;
+
+public class Path {
+ private PathPoint[] pathPoints = new PathPoint[1024];
+ private int count = 0;
+
+ public PathPoint addPoint(PathPoint var1) {
+ if(var1.index >= 0) {
+ throw new IllegalStateException("OW KNOWS!");
+ } else {
+ if(this.count == this.pathPoints.length) {
+ PathPoint[] var2 = new PathPoint[this.count << 1];
+ System.arraycopy(this.pathPoints, 0, var2, 0, this.count);
+ this.pathPoints = var2;
+ }
+
+ this.pathPoints[this.count] = var1;
+ var1.index = this.count;
+ this.sortBack(this.count++);
+ return var1;
+ }
+ }
+
+ public void clearPath() {
+ this.count = 0;
+ }
+
+ public PathPoint dequeue() {
+ PathPoint var1 = this.pathPoints[0];
+ this.pathPoints[0] = this.pathPoints[--this.count];
+ this.pathPoints[this.count] = null;
+ if(this.count > 0) {
+ this.sortForward(0);
+ }
+
+ var1.index = -1;
+ return var1;
+ }
+
+ public void changeDistance(PathPoint var1, float var2) {
+ float var3 = var1.distanceToTarget;
+ var1.distanceToTarget = var2;
+ if(var2 < var3) {
+ this.sortBack(var1.index);
+ } else {
+ this.sortForward(var1.index);
+ }
+
+ }
+
+ private void sortBack(int var1) {
+ PathPoint var2 = this.pathPoints[var1];
+
+ int var4;
+ for(float var3 = var2.distanceToTarget; var1 > 0; var1 = var4) {
+ var4 = var1 - 1 >> 1;
+ PathPoint var5 = this.pathPoints[var4];
+ if(var3 >= var5.distanceToTarget) {
+ break;
+ }
+
+ this.pathPoints[var1] = var5;
+ var5.index = var1;
+ }
+
+ this.pathPoints[var1] = var2;
+ var2.index = var1;
+ }
+
+ private void sortForward(int var1) {
+ PathPoint var2 = this.pathPoints[var1];
+ float var3 = var2.distanceToTarget;
+
+ while(true) {
+ int var4 = 1 + (var1 << 1);
+ int var5 = var4 + 1;
+ if(var4 >= this.count) {
+ break;
+ }
+
+ PathPoint var6 = this.pathPoints[var4];
+ float var7 = var6.distanceToTarget;
+ PathPoint var8;
+ float var9;
+ if(var5 >= this.count) {
+ var8 = null;
+ var9 = Float.POSITIVE_INFINITY;
+ } else {
+ var8 = this.pathPoints[var5];
+ var9 = var8.distanceToTarget;
+ }
+
+ if(var7 < var9) {
+ if(var7 >= var3) {
+ break;
+ }
+
+ this.pathPoints[var1] = var6;
+ var6.index = var1;
+ var1 = var4;
+ } else {
+ if(var9 >= var3) {
+ break;
+ }
+
+ this.pathPoints[var1] = var8;
+ var8.index = var1;
+ var1 = var5;
+ }
+ }
+
+ this.pathPoints[var1] = var2;
+ var2.index = var1;
+ }
+
+ public boolean isPathEmpty() {
+ return this.count == 0;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/PathEntity.java b/minecraft_server/src/net/minecraft/src/PathEntity.java
new file mode 100644
index 0000000..1f2856a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/PathEntity.java
@@ -0,0 +1,27 @@
+package net.minecraft.src;
+
+public class PathEntity {
+ private final PathPoint[] points;
+ public final int pathLength;
+ private int pathIndex;
+
+ public PathEntity(PathPoint[] var1) {
+ this.points = var1;
+ this.pathLength = var1.length;
+ }
+
+ public void incrementPathIndex() {
+ ++this.pathIndex;
+ }
+
+ public boolean isFinished() {
+ return this.pathIndex >= this.points.length;
+ }
+
+ public Vec3D getPosition(Entity var1) {
+ double var2 = (double)this.points[this.pathIndex].xCoord + (double)((int)(var1.width + 1.0F)) * 0.5D;
+ double var4 = (double)this.points[this.pathIndex].yCoord;
+ double var6 = (double)this.points[this.pathIndex].zCoord + (double)((int)(var1.width + 1.0F)) * 0.5D;
+ return Vec3D.createVector(var2, var4, var6);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/PathPoint.java b/minecraft_server/src/net/minecraft/src/PathPoint.java
new file mode 100644
index 0000000..b12351d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/PathPoint.java
@@ -0,0 +1,44 @@
+package net.minecraft.src;
+
+public class PathPoint {
+ public final int xCoord;
+ public final int yCoord;
+ public final int zCoord;
+ public final int hash;
+ int index = -1;
+ float totalPathDistance;
+ float distanceToNext;
+ float distanceToTarget;
+ PathPoint previous;
+ public boolean isFirst = false;
+
+ public PathPoint(int var1, int var2, int var3) {
+ this.xCoord = var1;
+ this.yCoord = var2;
+ this.zCoord = var3;
+ this.hash = var1 | var2 << 10 | var3 << 20;
+ }
+
+ public float distanceTo(PathPoint var1) {
+ float var2 = (float)(var1.xCoord - this.xCoord);
+ float var3 = (float)(var1.yCoord - this.yCoord);
+ float var4 = (float)(var1.zCoord - this.zCoord);
+ return MathHelper.sqrt_float(var2 * var2 + var3 * var3 + var4 * var4);
+ }
+
+ public boolean equals(Object var1) {
+ return ((PathPoint)var1).hash == this.hash;
+ }
+
+ public int hashCode() {
+ return this.hash;
+ }
+
+ public boolean isAssigned() {
+ return this.index >= 0;
+ }
+
+ public String toString() {
+ return this.xCoord + ", " + this.yCoord + ", " + this.zCoord;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Pathfinder.java b/minecraft_server/src/net/minecraft/src/Pathfinder.java
new file mode 100644
index 0000000..110e142
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Pathfinder.java
@@ -0,0 +1,193 @@
+package net.minecraft.src;
+
+public class Pathfinder {
+ private IBlockAccess worldMap;
+ private Path path = new Path();
+ private MCHashTable pointMap = new MCHashTable();
+ private PathPoint[] pathOptions = new PathPoint[32];
+
+ public Pathfinder(IBlockAccess var1) {
+ this.worldMap = var1;
+ }
+
+ public PathEntity createEntityPathTo(Entity var1, Entity var2, float var3) {
+ return this.createEntityPathTo(var1, var2.posX, var2.boundingBox.minY, var2.posZ, var3);
+ }
+
+ public PathEntity createEntityPathTo(Entity var1, int var2, int var3, int var4, float var5) {
+ return this.createEntityPathTo(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), var5);
+ }
+
+ private PathEntity createEntityPathTo(Entity var1, double var2, double var4, double var6, float var8) {
+ this.path.clearPath();
+ this.pointMap.clearMap();
+ PathPoint var9 = this.openPoint(MathHelper.floor_double(var1.boundingBox.minX), MathHelper.floor_double(var1.boundingBox.minY), MathHelper.floor_double(var1.boundingBox.minZ));
+ PathPoint var10 = this.openPoint(MathHelper.floor_double(var2 - (double)(var1.width / 2.0F)), MathHelper.floor_double(var4), MathHelper.floor_double(var6 - (double)(var1.width / 2.0F)));
+ PathPoint var11 = new PathPoint(MathHelper.floor_float(var1.width + 1.0F), MathHelper.floor_float(var1.height + 1.0F), MathHelper.floor_float(var1.width + 1.0F));
+ PathEntity var12 = this.addToPath(var1, var9, var10, var11, var8);
+ return var12;
+ }
+
+ private PathEntity addToPath(Entity var1, PathPoint var2, PathPoint var3, PathPoint var4, float var5) {
+ var2.totalPathDistance = 0.0F;
+ var2.distanceToNext = var2.distanceTo(var3);
+ var2.distanceToTarget = var2.distanceToNext;
+ this.path.clearPath();
+ this.path.addPoint(var2);
+ PathPoint var6 = var2;
+
+ while(!this.path.isPathEmpty()) {
+ PathPoint var7 = this.path.dequeue();
+ if(var7.hash == var3.hash) {
+ return this.createEntityPath(var2, var3);
+ }
+
+ if(var7.distanceTo(var3) < var6.distanceTo(var3)) {
+ var6 = var7;
+ }
+
+ var7.isFirst = true;
+ int var8 = this.findPathOptions(var1, var7, var4, var3, var5);
+
+ for(int var9 = 0; var9 < var8; ++var9) {
+ PathPoint var10 = this.pathOptions[var9];
+ float var11 = var7.totalPathDistance + var7.distanceTo(var10);
+ if(!var10.isAssigned() || var11 < var10.totalPathDistance) {
+ var10.previous = var7;
+ var10.totalPathDistance = var11;
+ var10.distanceToNext = var10.distanceTo(var3);
+ if(var10.isAssigned()) {
+ this.path.changeDistance(var10, var10.totalPathDistance + var10.distanceToNext);
+ } else {
+ var10.distanceToTarget = var10.totalPathDistance + var10.distanceToNext;
+ this.path.addPoint(var10);
+ }
+ }
+ }
+ }
+
+ if(var6 == var2) {
+ return null;
+ } else {
+ return this.createEntityPath(var2, var6);
+ }
+ }
+
+ private int findPathOptions(Entity var1, PathPoint var2, PathPoint var3, PathPoint var4, float var5) {
+ int var6 = 0;
+ byte var7 = 0;
+ if(this.getVerticalOffset(var1, var2.xCoord, var2.yCoord + 1, var2.zCoord, var3) > 0) {
+ var7 = 1;
+ }
+
+ PathPoint var8 = this.getSafePoint(var1, var2.xCoord, var2.yCoord, var2.zCoord + 1, var3, var7);
+ PathPoint var9 = this.getSafePoint(var1, var2.xCoord - 1, var2.yCoord, var2.zCoord, var3, var7);
+ PathPoint var10 = this.getSafePoint(var1, var2.xCoord + 1, var2.yCoord, var2.zCoord, var3, var7);
+ PathPoint var11 = this.getSafePoint(var1, var2.xCoord, var2.yCoord, var2.zCoord - 1, var3, var7);
+ if(var8 != null && !var8.isFirst && var8.distanceTo(var4) < var5) {
+ this.pathOptions[var6++] = var8;
+ }
+
+ if(var9 != null && !var9.isFirst && var9.distanceTo(var4) < var5) {
+ this.pathOptions[var6++] = var9;
+ }
+
+ if(var10 != null && !var10.isFirst && var10.distanceTo(var4) < var5) {
+ this.pathOptions[var6++] = var10;
+ }
+
+ if(var11 != null && !var11.isFirst && var11.distanceTo(var4) < var5) {
+ this.pathOptions[var6++] = var11;
+ }
+
+ return var6;
+ }
+
+ private PathPoint getSafePoint(Entity var1, int var2, int var3, int var4, PathPoint var5, int var6) {
+ PathPoint var7 = null;
+ if(this.getVerticalOffset(var1, var2, var3, var4, var5) > 0) {
+ var7 = this.openPoint(var2, var3, var4);
+ }
+
+ if(var7 == null && this.getVerticalOffset(var1, var2, var3 + var6, var4, var5) > 0) {
+ var7 = this.openPoint(var2, var3 + var6, var4);
+ var3 += var6;
+ }
+
+ if(var7 != null) {
+ int var8 = 0;
+
+ for(boolean var9 = false; var3 > 0; --var3) {
+ int var10 = this.getVerticalOffset(var1, var2, var3 - 1, var4, var5);
+ if(var10 <= 0) {
+ break;
+ }
+
+ if(var10 < 0) {
+ return null;
+ }
+
+ ++var8;
+ if(var8 >= 4) {
+ return null;
+ }
+ }
+
+ if(var3 > 0) {
+ var7 = this.openPoint(var2, var3, var4);
+ }
+ }
+
+ return var7;
+ }
+
+ private final PathPoint openPoint(int var1, int var2, int var3) {
+ int var4 = var1 | var2 << 10 | var3 << 20;
+ PathPoint var5 = (PathPoint)this.pointMap.lookup(var4);
+ if(var5 == null) {
+ var5 = new PathPoint(var1, var2, var3);
+ this.pointMap.addKey(var4, var5);
+ }
+
+ return var5;
+ }
+
+ private int getVerticalOffset(Entity var1, int var2, int var3, int var4, PathPoint var5) {
+ for(int var6 = var2; var6 < var2 + var5.xCoord; ++var6) {
+ for(int var7 = var3; var7 < var3 + var5.yCoord; ++var7) {
+ for(int var8 = var4; var8 < var4 + var5.zCoord; ++var8) {
+ Material var9 = this.worldMap.getBlockMaterial(var2, var3, var4);
+ if(var9.func_218_c()) {
+ return 0;
+ }
+
+ if(var9 == Material.water || var9 == Material.lava) {
+ return -1;
+ }
+ }
+ }
+ }
+
+ return 1;
+ }
+
+ private PathEntity createEntityPath(PathPoint var1, PathPoint var2) {
+ int var3 = 1;
+
+ PathPoint var4;
+ for(var4 = var2; var4.previous != null; var4 = var4.previous) {
+ ++var3;
+ }
+
+ PathPoint[] var5 = new PathPoint[var3];
+ var4 = var2;
+ --var3;
+
+ for(var5[var3] = var2; var4.previous != null; var5[var3] = var4) {
+ var4 = var4.previous;
+ --var3;
+ }
+
+ return new PathEntity(var5);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/PlayerInstance.java b/minecraft_server/src/net/minecraft/src/PlayerInstance.java
new file mode 100644
index 0000000..1c343ef
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/PlayerInstance.java
@@ -0,0 +1,170 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.List;
+
+class PlayerInstance {
+ private List field_1072_b;
+ private int field_1071_c;
+ private int field_1070_d;
+ private ChunkCoordIntPair field_1069_e;
+ private short[] field_1068_f;
+ private int field_1067_g;
+ private int field_1066_h;
+ private int field_1065_i;
+ private int field_1064_j;
+ private int field_1063_k;
+ private int field_1062_l;
+ private int field_1061_m;
+ final PlayerManager field_1073_a;
+
+ public PlayerInstance(PlayerManager var1, int var2, int var3) {
+ this.field_1073_a = var1;
+ this.field_1072_b = new ArrayList();
+ this.field_1068_f = new short[10];
+ this.field_1067_g = 0;
+ this.field_1071_c = var2;
+ this.field_1070_d = var3;
+ this.field_1069_e = new ChunkCoordIntPair(var2, var3);
+ PlayerManager.getMinecraftServer(var1).worldMngr.A.loadChunk(var2, var3);
+ }
+
+ public void func_779_a(EntityPlayerMP var1) {
+ if(this.field_1072_b.contains(var1)) {
+ throw new IllegalStateException("Failed to add player. " + var1 + " already is in chunk " + this.field_1071_c + ", " + this.field_1070_d);
+ } else {
+ var1.field_420_ah.add(this.field_1069_e);
+ var1.field_421_a.sendPacket(new Packet50PreChunk(this.field_1069_e.field_152_a, this.field_1069_e.field_151_b, true));
+ this.field_1072_b.add(var1);
+ var1.field_422_ag.add(this.field_1069_e);
+ }
+ }
+
+ public void func_778_b(EntityPlayerMP var1) {
+ if(!this.field_1072_b.contains(var1)) {
+ (new IllegalStateException("Failed to remove player. " + var1 + " isn\'t in chunk " + this.field_1071_c + ", " + this.field_1070_d)).printStackTrace();
+ } else {
+ this.field_1072_b.remove(var1);
+ if(this.field_1072_b.size() == 0) {
+ long var2 = (long)this.field_1071_c + 2147483647L | (long)this.field_1070_d + 2147483647L << 32;
+ PlayerManager.func_539_b(this.field_1073_a).func_670_b(var2);
+ if(this.field_1067_g > 0) {
+ PlayerManager.func_533_c(this.field_1073_a).remove(this);
+ }
+
+ PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.A.func_374_c(this.field_1071_c, this.field_1070_d);
+ }
+
+ var1.field_422_ag.remove(this.field_1069_e);
+ if(var1.field_420_ah.contains(this.field_1069_e)) {
+ var1.field_421_a.sendPacket(new Packet50PreChunk(this.field_1071_c, this.field_1070_d, false));
+ }
+
+ }
+ }
+
+ public void func_775_a(int var1, int var2, int var3) {
+ if(this.field_1067_g == 0) {
+ PlayerManager.func_533_c(this.field_1073_a).add(this);
+ this.field_1066_h = this.field_1065_i = var1;
+ this.field_1064_j = this.field_1063_k = var2;
+ this.field_1062_l = this.field_1061_m = var3;
+ }
+
+ if(this.field_1066_h > var1) {
+ this.field_1066_h = var1;
+ }
+
+ if(this.field_1065_i < var1) {
+ this.field_1065_i = var1;
+ }
+
+ if(this.field_1064_j > var2) {
+ this.field_1064_j = var2;
+ }
+
+ if(this.field_1063_k < var2) {
+ this.field_1063_k = var2;
+ }
+
+ if(this.field_1062_l > var3) {
+ this.field_1062_l = var3;
+ }
+
+ if(this.field_1061_m < var3) {
+ this.field_1061_m = var3;
+ }
+
+ if(this.field_1067_g < 10) {
+ short var4 = (short)(var1 << 12 | var3 << 8 | var2);
+
+ for(int var5 = 0; var5 < this.field_1067_g; ++var5) {
+ if(this.field_1068_f[var5] == var4) {
+ return;
+ }
+ }
+
+ this.field_1068_f[this.field_1067_g++] = var4;
+ }
+
+ }
+
+ public void func_776_a(Packet var1) {
+ for(int var2 = 0; var2 < this.field_1072_b.size(); ++var2) {
+ EntityPlayerMP var3 = (EntityPlayerMP)this.field_1072_b.get(var2);
+ if(var3.field_420_ah.contains(this.field_1069_e)) {
+ var3.field_421_a.sendPacket(var1);
+ }
+ }
+
+ }
+
+ public void func_777_a() {
+ if(this.field_1067_g != 0) {
+ int var1;
+ int var2;
+ int var3;
+ if(this.field_1067_g == 1) {
+ var1 = this.field_1071_c * 16 + this.field_1066_h;
+ var2 = this.field_1064_j;
+ var3 = this.field_1070_d * 16 + this.field_1062_l;
+ this.func_776_a(new Packet53BlockChange(var1, var2, var3, PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr));
+ if(Block.isBlockContainer[PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.getBlockId(var1, var2, var3)]) {
+ this.func_776_a(new Packet59ComplexEntity(var1, var2, var3, PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.getBlock(var1, var2, var3)));
+ }
+ } else {
+ int var4;
+ if(this.field_1067_g == 10) {
+ this.field_1064_j = this.field_1064_j / 2 * 2;
+ this.field_1063_k = (this.field_1063_k / 2 + 1) * 2;
+ var1 = this.field_1066_h + this.field_1071_c * 16;
+ var2 = this.field_1064_j;
+ var3 = this.field_1062_l + this.field_1070_d * 16;
+ var4 = this.field_1065_i - this.field_1066_h + 1;
+ int var5 = this.field_1063_k - this.field_1064_j + 2;
+ int var6 = this.field_1061_m - this.field_1062_l + 1;
+ this.func_776_a(new Packet51MapChunk(var1, var2, var3, var4, var5, var6, PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr));
+ List var7 = PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.func_532_d(var1, var2, var3, var1 + var4, var2 + var5, var3 + var6);
+
+ for(int var8 = 0; var8 < var7.size(); ++var8) {
+ TileEntity var9 = (TileEntity)var7.get(var8);
+ this.func_776_a(new Packet59ComplexEntity(var9.xCoord, var9.yCoord, var9.zCoord, var9));
+ }
+ } else {
+ this.func_776_a(new Packet52MultiBlockChange(this.field_1071_c, this.field_1070_d, this.field_1068_f, this.field_1067_g, PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr));
+
+ for(var1 = 0; var1 < this.field_1067_g; ++var1) {
+ var2 = this.field_1071_c * 16 + (this.field_1067_g >> 12 & 15);
+ var3 = this.field_1067_g & 255;
+ var4 = this.field_1070_d * 16 + (this.field_1067_g >> 8 & 15);
+ if(Block.isBlockContainer[PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.getBlockId(var2, var3, var4)]) {
+ this.func_776_a(new Packet59ComplexEntity(var2, var3, var4, PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.getBlock(var2, var3, var4)));
+ }
+ }
+ }
+ }
+
+ this.field_1067_g = 0;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/PlayerListBox.java b/minecraft_server/src/net/minecraft/src/PlayerListBox.java
new file mode 100644
index 0000000..ec78876
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/PlayerListBox.java
@@ -0,0 +1,28 @@
+package net.minecraft.src;
+
+import java.util.Vector;
+import javax.swing.JList;
+import net.minecraft.server.MinecraftServer;
+
+public class PlayerListBox extends JList implements IUpdatePlayerListBox {
+ private MinecraftServer mcServer;
+ private int updateCounter = 0;
+
+ public PlayerListBox(MinecraftServer var1) {
+ this.mcServer = var1;
+ var1.func_6022_a(this);
+ }
+
+ public void update() {
+ if(this.updateCounter++ % 20 == 0) {
+ Vector var1 = new Vector();
+
+ for(int var2 = 0; var2 < this.mcServer.configManager.playerEntities.size(); ++var2) {
+ var1.add(((EntityPlayerMP)this.mcServer.configManager.playerEntities.get(var2)).username);
+ }
+
+ this.setListData(var1);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/PlayerManager.java b/minecraft_server/src/net/minecraft/src/PlayerManager.java
new file mode 100644
index 0000000..81c1282
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/PlayerManager.java
@@ -0,0 +1,141 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.List;
+import net.minecraft.server.MinecraftServer;
+
+public class PlayerManager {
+ private List field_9216_a = new ArrayList();
+ private MCHashTable2 field_9215_b = new MCHashTable2();
+ private List field_833_c = new ArrayList();
+ private MinecraftServer mcServer;
+
+ public PlayerManager(MinecraftServer var1) {
+ this.mcServer = var1;
+ }
+
+ public void func_538_a() {
+ for(int var1 = 0; var1 < this.field_833_c.size(); ++var1) {
+ ((PlayerInstance)this.field_833_c.get(var1)).func_777_a();
+ }
+
+ this.field_833_c.clear();
+ }
+
+ private PlayerInstance func_537_a(int var1, int var2, boolean var3) {
+ long var4 = (long)var1 + 2147483647L | (long)var2 + 2147483647L << 32;
+ PlayerInstance var6 = (PlayerInstance)this.field_9215_b.func_677_a(var4);
+ if(var6 == null && var3) {
+ var6 = new PlayerInstance(this, var1, var2);
+ this.field_9215_b.func_675_a(var4, var6);
+ }
+
+ return var6;
+ }
+
+ public void func_541_a(Packet var1, int var2, int var3, int var4) {
+ int var5 = var2 >> 4;
+ int var6 = var4 >> 4;
+ PlayerInstance var7 = this.func_537_a(var5, var6, false);
+ if(var7 != null) {
+ var7.func_776_a(var1);
+ }
+
+ }
+
+ public void func_535_a(int var1, int var2, int var3) {
+ int var4 = var1 >> 4;
+ int var5 = var3 >> 4;
+ PlayerInstance var6 = this.func_537_a(var4, var5, false);
+ if(var6 != null) {
+ var6.func_775_a(var1 & 15, var2, var3 & 15);
+ }
+
+ }
+
+ public void func_9214_a(EntityPlayerMP var1) {
+ int var2 = (int)var1.posX >> 4;
+ int var3 = (int)var1.posZ >> 4;
+ var1.field_9155_d = var1.posX;
+ var1.field_9154_e = var1.posZ;
+
+ for(int var4 = var2 - 10; var4 <= var2 + 10; ++var4) {
+ for(int var5 = var3 - 10; var5 <= var3 + 10; ++var5) {
+ this.func_537_a(var4, var5, true).func_779_a(var1);
+ }
+ }
+
+ this.field_9216_a.add(var1);
+ }
+
+ public void func_9213_b(EntityPlayerMP var1) {
+ int var2 = (int)var1.field_9155_d >> 4;
+ int var3 = (int)var1.field_9154_e >> 4;
+
+ for(int var4 = var2 - 10; var4 <= var2 + 10; ++var4) {
+ for(int var5 = var3 - 10; var5 <= var3 + 10; ++var5) {
+ PlayerInstance var6 = this.func_537_a(var4, var5, false);
+ if(var6 != null) {
+ var6.func_778_b(var1);
+ }
+ }
+ }
+
+ this.field_9216_a.remove(var1);
+ }
+
+ private boolean func_544_a(int var1, int var2, int var3, int var4) {
+ int var5 = var1 - var3;
+ int var6 = var2 - var4;
+ return var5 >= -10 && var5 <= 10 ? var6 >= -10 && var6 <= 10 : false;
+ }
+
+ public void func_543_c(EntityPlayerMP var1) {
+ int var2 = (int)var1.posX >> 4;
+ int var3 = (int)var1.posZ >> 4;
+ double var4 = var1.field_9155_d - var1.posX;
+ double var6 = var1.field_9154_e - var1.posZ;
+ double var8 = var4 * var4 + var6 * var6;
+ if(var8 >= 64.0D) {
+ int var10 = (int)var1.field_9155_d >> 4;
+ int var11 = (int)var1.field_9154_e >> 4;
+ int var12 = var2 - var10;
+ int var13 = var3 - var11;
+ if(var12 != 0 || var13 != 0) {
+ for(int var14 = var2 - 10; var14 <= var2 + 10; ++var14) {
+ for(int var15 = var3 - 10; var15 <= var3 + 10; ++var15) {
+ if(!this.func_544_a(var14, var15, var10, var11)) {
+ this.func_537_a(var14, var15, true).func_779_a(var1);
+ }
+
+ if(!this.func_544_a(var14 - var12, var15 - var13, var2, var3)) {
+ PlayerInstance var16 = this.func_537_a(var14 - var12, var15 - var13, false);
+ if(var16 != null) {
+ var16.func_778_b(var1);
+ }
+ }
+ }
+ }
+
+ var1.field_9155_d = var1.posX;
+ var1.field_9154_e = var1.posZ;
+ }
+ }
+ }
+
+ public int func_542_b() {
+ return 144;
+ }
+
+ static MinecraftServer getMinecraftServer(PlayerManager var0) {
+ return var0.mcServer;
+ }
+
+ static MCHashTable2 func_539_b(PlayerManager var0) {
+ return var0.field_9215_b;
+ }
+
+ static List func_533_c(PlayerManager var0) {
+ return var0.field_833_c;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/PlayerNBTManager.java b/minecraft_server/src/net/minecraft/src/PlayerNBTManager.java
new file mode 100644
index 0000000..d782473
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/PlayerNBTManager.java
@@ -0,0 +1,49 @@
+package net.minecraft.src;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.logging.Logger;
+
+public class PlayerNBTManager {
+ public static Logger logger = Logger.getLogger("Minecraft");
+ private File worldFile;
+
+ public PlayerNBTManager(File var1) {
+ this.worldFile = var1;
+ var1.mkdir();
+ }
+
+ public void writePlayerData(EntityPlayerMP var1) {
+ try {
+ NBTTagCompound var2 = new NBTTagCompound();
+ var1.writeToNBT(var2);
+ File var3 = new File(this.worldFile, "_tmp_.dat");
+ File var4 = new File(this.worldFile, var1.username + ".dat");
+ CompressedStreamTools.func_769_a(var2, new FileOutputStream(var3));
+ if(var4.exists()) {
+ var4.delete();
+ }
+
+ var3.renameTo(var4);
+ } catch (Exception var5) {
+ logger.warning("Failed to save player data for " + var1.username);
+ }
+
+ }
+
+ public void readPlayerData(EntityPlayerMP var1) {
+ try {
+ File var2 = new File(this.worldFile, var1.username + ".dat");
+ if(var2.exists()) {
+ NBTTagCompound var3 = CompressedStreamTools.func_770_a(new FileInputStream(var2));
+ if(var3 != null) {
+ var1.readFromNBT(var3);
+ }
+ }
+ } catch (Exception var4) {
+ logger.warning("Failed to load player data for " + var1.username);
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/PropertyManager.java b/minecraft_server/src/net/minecraft/src/PropertyManager.java
new file mode 100644
index 0000000..5ff9dab
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/PropertyManager.java
@@ -0,0 +1,72 @@
+package net.minecraft.src;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class PropertyManager {
+ public static Logger logger = Logger.getLogger("Minecraft");
+ private Properties serverProperties = new Properties();
+ private File serverPropertiesFile;
+
+ public PropertyManager(File var1) {
+ this.serverPropertiesFile = var1;
+ if(var1.exists()) {
+ try {
+ this.serverProperties.load(new FileInputStream(var1));
+ } catch (Exception var3) {
+ logger.log(Level.WARNING, "Failed to load " + var1, var3);
+ this.generateNewProperties();
+ }
+ } else {
+ logger.log(Level.WARNING, var1 + " does not exist");
+ this.generateNewProperties();
+ }
+
+ }
+
+ public void generateNewProperties() {
+ logger.log(Level.INFO, "Generating new properties file");
+ this.saveProperties();
+ }
+
+ public void saveProperties() {
+ try {
+ this.serverProperties.store(new FileOutputStream(this.serverPropertiesFile), "Minecraft server properties");
+ } catch (Exception var2) {
+ logger.log(Level.WARNING, "Failed to save " + this.serverPropertiesFile, var2);
+ this.generateNewProperties();
+ }
+
+ }
+
+ public String getStringProperty(String var1, String var2) {
+ if(!this.serverProperties.containsKey(var1)) {
+ this.serverProperties.setProperty(var1, var2);
+ this.saveProperties();
+ }
+
+ return this.serverProperties.getProperty(var1, var2);
+ }
+
+ public int getIntProperty(String var1, int var2) {
+ try {
+ return Integer.parseInt(this.getStringProperty(var1, "" + var2));
+ } catch (Exception var4) {
+ this.serverProperties.setProperty(var1, "" + var2);
+ return var2;
+ }
+ }
+
+ public boolean getBooleanProperty(String var1, boolean var2) {
+ try {
+ return Boolean.parseBoolean(this.getStringProperty(var1, "" + var2));
+ } catch (Exception var4) {
+ this.serverProperties.setProperty(var1, "" + var2);
+ return var2;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/RedstoneUpdateInfo.java b/minecraft_server/src/net/minecraft/src/RedstoneUpdateInfo.java
new file mode 100644
index 0000000..27017b5
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/RedstoneUpdateInfo.java
@@ -0,0 +1,15 @@
+package net.minecraft.src;
+
+class RedstoneUpdateInfo {
+ int field_775_a;
+ int field_774_b;
+ int field_777_c;
+ long field_776_d;
+
+ public RedstoneUpdateInfo(int var1, int var2, int var3, long var4) {
+ this.field_775_a = var1;
+ this.field_774_b = var2;
+ this.field_777_c = var3;
+ this.field_776_d = var4;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ServerCommand.java b/minecraft_server/src/net/minecraft/src/ServerCommand.java
new file mode 100644
index 0000000..741f466
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ServerCommand.java
@@ -0,0 +1,11 @@
+package net.minecraft.src;
+
+public class ServerCommand {
+ public final String command;
+ public final ICommandListener commandListener;
+
+ public ServerCommand(String var1, ICommandListener var2) {
+ this.command = var1;
+ this.commandListener = var2;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ServerConfigurationManager.java b/minecraft_server/src/net/minecraft/src/ServerConfigurationManager.java
new file mode 100644
index 0000000..f5e61b8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ServerConfigurationManager.java
@@ -0,0 +1,369 @@
+package net.minecraft.src;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Logger;
+import net.minecraft.server.MinecraftServer;
+
+public class ServerConfigurationManager {
+ public static Logger logger = Logger.getLogger("Minecraft");
+ public List playerEntities = new ArrayList();
+ private MinecraftServer mcServer;
+ private PlayerManager playerManagerObj;
+ private int maxPlayers;
+ private Set field_9252_f = new HashSet();
+ private Set bannedIPs = new HashSet();
+ private Set ops = new HashSet();
+ private File bannedPlayersFile;
+ private File ipBanFile;
+ private File opFile;
+ private PlayerNBTManager playerNBTManagerObj;
+
+ public ServerConfigurationManager(MinecraftServer var1) {
+ this.mcServer = var1;
+ this.bannedPlayersFile = var1.getFile("banned-players.txt");
+ this.ipBanFile = var1.getFile("banned-ips.txt");
+ this.opFile = var1.getFile("ops.txt");
+ this.playerManagerObj = new PlayerManager(var1);
+ this.maxPlayers = var1.propertyManagerObj.getIntProperty("max-players", 20);
+ this.readBannedPlayers();
+ this.loadBannedList();
+ this.loadOps();
+ this.writeBannedPlayers();
+ this.saveBannedList();
+ this.saveOps();
+ }
+
+ public void setPlayerManager(WorldServer var1) {
+ this.playerNBTManagerObj = new PlayerNBTManager(new File(var1.field_797_s, "players"));
+ }
+
+ public int func_640_a() {
+ return this.playerManagerObj.func_542_b();
+ }
+
+ public void playerLoggedIn(EntityPlayerMP var1) {
+ this.playerEntities.add(var1);
+ this.playerNBTManagerObj.readPlayerData(var1);
+ this.mcServer.worldMngr.A.loadChunk((int)var1.posX >> 4, (int)var1.posZ >> 4);
+
+ while(this.mcServer.worldMngr.getCollidingBoundingBoxes(var1, var1.boundingBox).size() != 0) {
+ var1.setPosition(var1.posX, var1.posY + 1.0D, var1.posZ);
+ }
+
+ this.mcServer.worldMngr.entityJoinedWorld(var1);
+ this.playerManagerObj.func_9214_a(var1);
+ }
+
+ public void func_613_b(EntityPlayerMP var1) {
+ this.playerManagerObj.func_543_c(var1);
+ }
+
+ public void playerLoggedOut(EntityPlayerMP var1) {
+ this.playerNBTManagerObj.writePlayerData(var1);
+ this.mcServer.worldMngr.func_12016_d(var1);
+ this.playerEntities.remove(var1);
+ this.playerManagerObj.func_9213_b(var1);
+ }
+
+ public EntityPlayerMP login(NetLoginHandler var1, String var2, String var3) {
+ if(this.field_9252_f.contains(var2.trim().toLowerCase())) {
+ var1.kickUser("You are banned from this server!");
+ return null;
+ } else {
+ String var4 = var1.netManager.getRemoteAddress().toString();
+ var4 = var4.substring(var4.indexOf("/") + 1);
+ var4 = var4.substring(0, var4.indexOf(":"));
+ if(this.bannedIPs.contains(var4)) {
+ var1.kickUser("Your IP address is banned from this server!");
+ return null;
+ } else if(this.playerEntities.size() >= this.maxPlayers) {
+ var1.kickUser("The server is full!");
+ return null;
+ } else {
+ for(int var5 = 0; var5 < this.playerEntities.size(); ++var5) {
+ EntityPlayerMP var6 = (EntityPlayerMP)this.playerEntities.get(var5);
+ if(var6.username.equalsIgnoreCase(var2)) {
+ var6.field_421_a.func_43_c("You logged in from another location");
+ }
+ }
+
+ return new EntityPlayerMP(this.mcServer, this.mcServer.worldMngr, var2, new ItemInWorldManager(this.mcServer.worldMngr));
+ }
+ }
+ }
+
+ public EntityPlayerMP func_9242_d(EntityPlayerMP var1) {
+ this.mcServer.field_6028_k.func_9238_a(var1);
+ this.mcServer.field_6028_k.func_610_b(var1);
+ this.playerManagerObj.func_9213_b(var1);
+ this.playerEntities.remove(var1);
+ this.mcServer.worldMngr.func_12014_e(var1);
+ EntityPlayerMP var2 = new EntityPlayerMP(this.mcServer, this.mcServer.worldMngr, var1.username, new ItemInWorldManager(this.mcServer.worldMngr));
+ var2.field_331_c = var1.field_331_c;
+ var2.field_421_a = var1.field_421_a;
+ this.mcServer.worldMngr.A.loadChunk((int)var2.posX >> 4, (int)var2.posZ >> 4);
+
+ while(this.mcServer.worldMngr.getCollidingBoundingBoxes(var2, var2.boundingBox).size() != 0) {
+ var2.setPosition(var2.posX, var2.posY + 1.0D, var2.posZ);
+ }
+
+ var2.field_421_a.sendPacket(new Packet9());
+ var2.field_421_a.func_41_a(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch);
+ this.playerManagerObj.func_9214_a(var2);
+ this.mcServer.worldMngr.entityJoinedWorld(var2);
+ this.playerEntities.add(var2);
+ return var2;
+ }
+
+ public void func_637_b() {
+ this.playerManagerObj.func_538_a();
+ }
+
+ public void func_622_a(int var1, int var2, int var3) {
+ this.playerManagerObj.func_535_a(var1, var2, var3);
+ }
+
+ public void sendPacketToAllPlayers(Packet var1) {
+ for(int var2 = 0; var2 < this.playerEntities.size(); ++var2) {
+ EntityPlayerMP var3 = (EntityPlayerMP)this.playerEntities.get(var2);
+ var3.field_421_a.sendPacket(var1);
+ }
+
+ }
+
+ public String getPlayerList() {
+ String var1 = "";
+
+ for(int var2 = 0; var2 < this.playerEntities.size(); ++var2) {
+ if(var2 > 0) {
+ var1 = var1 + ", ";
+ }
+
+ var1 = var1 + ((EntityPlayerMP)this.playerEntities.get(var2)).username;
+ }
+
+ return var1;
+ }
+
+ public void banPlayer(String var1) {
+ this.field_9252_f.add(var1.toLowerCase());
+ this.writeBannedPlayers();
+ }
+
+ public void unbanPlayer(String var1) {
+ this.field_9252_f.remove(var1.toLowerCase());
+ this.writeBannedPlayers();
+ }
+
+ private void readBannedPlayers() {
+ try {
+ this.field_9252_f.clear();
+ BufferedReader var1 = new BufferedReader(new FileReader(this.bannedPlayersFile));
+ String var2 = "";
+
+ while(true) {
+ var2 = var1.readLine();
+ if(var2 == null) {
+ var1.close();
+ break;
+ }
+
+ this.field_9252_f.add(var2.trim().toLowerCase());
+ }
+ } catch (Exception var3) {
+ logger.warning("Failed to load ban list: " + var3);
+ }
+
+ }
+
+ private void writeBannedPlayers() {
+ try {
+ PrintWriter var1 = new PrintWriter(new FileWriter(this.bannedPlayersFile, false));
+ Iterator var2 = this.field_9252_f.iterator();
+
+ while(var2.hasNext()) {
+ String var3 = (String)var2.next();
+ var1.println(var3);
+ }
+
+ var1.close();
+ } catch (Exception var4) {
+ logger.warning("Failed to save ban list: " + var4);
+ }
+
+ }
+
+ public void banIP(String var1) {
+ this.bannedIPs.add(var1.toLowerCase());
+ this.saveBannedList();
+ }
+
+ public void unbanIP(String var1) {
+ this.bannedIPs.remove(var1.toLowerCase());
+ this.saveBannedList();
+ }
+
+ private void loadBannedList() {
+ try {
+ this.bannedIPs.clear();
+ BufferedReader var1 = new BufferedReader(new FileReader(this.ipBanFile));
+ String var2 = "";
+
+ while(true) {
+ var2 = var1.readLine();
+ if(var2 == null) {
+ var1.close();
+ break;
+ }
+
+ this.bannedIPs.add(var2.trim().toLowerCase());
+ }
+ } catch (Exception var3) {
+ logger.warning("Failed to load ip ban list: " + var3);
+ }
+
+ }
+
+ private void saveBannedList() {
+ try {
+ PrintWriter var1 = new PrintWriter(new FileWriter(this.ipBanFile, false));
+ Iterator var2 = this.bannedIPs.iterator();
+
+ while(var2.hasNext()) {
+ String var3 = (String)var2.next();
+ var1.println(var3);
+ }
+
+ var1.close();
+ } catch (Exception var4) {
+ logger.warning("Failed to save ip ban list: " + var4);
+ }
+
+ }
+
+ public void opPlayer(String var1) {
+ this.ops.add(var1.toLowerCase());
+ this.saveOps();
+ }
+
+ public void deopPlayer(String var1) {
+ this.ops.remove(var1.toLowerCase());
+ this.saveOps();
+ }
+
+ private void loadOps() {
+ try {
+ this.ops.clear();
+ BufferedReader var1 = new BufferedReader(new FileReader(this.opFile));
+ String var2 = "";
+
+ while(true) {
+ var2 = var1.readLine();
+ if(var2 == null) {
+ var1.close();
+ break;
+ }
+
+ this.ops.add(var2.trim().toLowerCase());
+ }
+ } catch (Exception var3) {
+ logger.warning("Failed to load ip ban list: " + var3);
+ }
+
+ }
+
+ private void saveOps() {
+ try {
+ PrintWriter var1 = new PrintWriter(new FileWriter(this.opFile, false));
+ Iterator var2 = this.ops.iterator();
+
+ while(var2.hasNext()) {
+ String var3 = (String)var2.next();
+ var1.println(var3);
+ }
+
+ var1.close();
+ } catch (Exception var4) {
+ logger.warning("Failed to save ip ban list: " + var4);
+ }
+
+ }
+
+ public boolean isOp(String var1) {
+ return this.ops.contains(var1.trim().toLowerCase());
+ }
+
+ public EntityPlayerMP getPlayerEntity(String var1) {
+ for(int var2 = 0; var2 < this.playerEntities.size(); ++var2) {
+ EntityPlayerMP var3 = (EntityPlayerMP)this.playerEntities.get(var2);
+ if(var3.username.equalsIgnoreCase(var1)) {
+ return var3;
+ }
+ }
+
+ return null;
+ }
+
+ public void sendChatMessageToPlayer(String var1, String var2) {
+ EntityPlayerMP var3 = this.getPlayerEntity(var1);
+ if(var3 != null) {
+ var3.field_421_a.sendPacket(new Packet3Chat(var2));
+ }
+
+ }
+
+ public void func_12022_a(double var1, double var3, double var5, double var7, Packet var9) {
+ for(int var10 = 0; var10 < this.playerEntities.size(); ++var10) {
+ EntityPlayerMP var11 = (EntityPlayerMP)this.playerEntities.get(var10);
+ double var12 = var1 - var11.posX;
+ double var14 = var3 - var11.posY;
+ double var16 = var5 - var11.posZ;
+ if(var12 * var12 + var14 * var14 + var16 * var16 < var7 * var7) {
+ var11.field_421_a.sendPacket(var9);
+ }
+ }
+
+ }
+
+ public void sendChatMessageToAllPlayers(String var1) {
+ Packet3Chat var2 = new Packet3Chat(var1);
+
+ for(int var3 = 0; var3 < this.playerEntities.size(); ++var3) {
+ EntityPlayerMP var4 = (EntityPlayerMP)this.playerEntities.get(var3);
+ if(this.isOp(var4.username)) {
+ var4.field_421_a.sendPacket(var2);
+ }
+ }
+
+ }
+
+ public boolean sendPacketToPlayer(String var1, Packet var2) {
+ EntityPlayerMP var3 = this.getPlayerEntity(var1);
+ if(var3 != null) {
+ var3.field_421_a.sendPacket(var2);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public void sentTileEntityToPlayer(int var1, int var2, int var3, TileEntity var4) {
+ this.playerManagerObj.func_541_a(new Packet59ComplexEntity(var1, var2, var3, var4), var1, var2, var3);
+ }
+
+ public void savePlayerStates() {
+ for(int var1 = 0; var1 < this.playerEntities.size(); ++var1) {
+ this.playerNBTManagerObj.writePlayerData((EntityPlayerMP)this.playerEntities.get(var1));
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ServerGUI.java b/minecraft_server/src/net/minecraft/src/ServerGUI.java
new file mode 100644
index 0000000..0514bfa
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ServerGUI.java
@@ -0,0 +1,92 @@
+package net.minecraft.src;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.util.logging.Logger;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.UIManager;
+import javax.swing.border.EtchedBorder;
+import javax.swing.border.TitledBorder;
+import net.minecraft.server.MinecraftServer;
+
+public class ServerGUI extends JComponent implements ICommandListener {
+ public static Logger logger = Logger.getLogger("Minecraft");
+ private MinecraftServer mcServer;
+
+ public static void initGui(MinecraftServer var0) {
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception var3) {
+ }
+
+ ServerGUI var1 = new ServerGUI(var0);
+ JFrame var2 = new JFrame("Minecraft server");
+ var2.add(var1);
+ var2.pack();
+ var2.setLocationRelativeTo((Component)null);
+ var2.setVisible(true);
+ var2.addWindowListener(new ServerWindowAdapter(var0));
+ }
+
+ public ServerGUI(MinecraftServer var1) {
+ this.mcServer = var1;
+ this.setPreferredSize(new Dimension(854, 480));
+ this.setLayout(new BorderLayout());
+
+ try {
+ this.add(this.getLogComponent(), "Center");
+ this.add(this.getStatsComponent(), "West");
+ } catch (Exception var3) {
+ var3.printStackTrace();
+ }
+
+ }
+
+ private JComponent getStatsComponent() {
+ JPanel var1 = new JPanel(new BorderLayout());
+ var1.add(new GuiStatsComponent(), "North");
+ var1.add(this.getPlayerListComponent(), "Center");
+ var1.setBorder(new TitledBorder(new EtchedBorder(), "Stats"));
+ return var1;
+ }
+
+ private JComponent getPlayerListComponent() {
+ PlayerListBox var1 = new PlayerListBox(this.mcServer);
+ JScrollPane var2 = new JScrollPane(var1, 22, 30);
+ var2.setBorder(new TitledBorder(new EtchedBorder(), "Players"));
+ return var2;
+ }
+
+ private JComponent getLogComponent() {
+ JPanel var1 = new JPanel(new BorderLayout());
+ JTextArea var2 = new JTextArea();
+ logger.addHandler(new GuiLogOutputHandler(var2));
+ JScrollPane var3 = new JScrollPane(var2, 22, 30);
+ var2.setEditable(false);
+ JTextField var4 = new JTextField();
+ var4.addActionListener(new ServerGuiCommandListener(this, var4));
+ var2.addFocusListener(new ServerGuiFocusAdapter(this));
+ var1.add(var3, "Center");
+ var1.add(var4, "South");
+ var1.setBorder(new TitledBorder(new EtchedBorder(), "Log and chat"));
+ return var1;
+ }
+
+ public void log(String var1) {
+ logger.info(var1);
+ }
+
+ public String getUsername() {
+ return "CONSOLE";
+ }
+
+ static MinecraftServer getMinecraftServer(ServerGUI var0) {
+ return var0.mcServer;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ServerGuiCommandListener.java b/minecraft_server/src/net/minecraft/src/ServerGuiCommandListener.java
new file mode 100644
index 0000000..e6e14bb
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ServerGuiCommandListener.java
@@ -0,0 +1,24 @@
+package net.minecraft.src;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.JTextField;
+
+class ServerGuiCommandListener implements ActionListener {
+ final JTextField textField;
+ final ServerGUI mcServerGui;
+
+ ServerGuiCommandListener(ServerGUI var1, JTextField var2) {
+ this.mcServerGui = var1;
+ this.textField = var2;
+ }
+
+ public void actionPerformed(ActionEvent var1) {
+ String var2 = this.textField.getText().trim();
+ if(var2.length() > 0) {
+ ServerGUI.getMinecraftServer(this.mcServerGui).addCommand(var2, this.mcServerGui);
+ }
+
+ this.textField.setText("");
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ServerGuiFocusAdapter.java b/minecraft_server/src/net/minecraft/src/ServerGuiFocusAdapter.java
new file mode 100644
index 0000000..8fa603f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ServerGuiFocusAdapter.java
@@ -0,0 +1,15 @@
+package net.minecraft.src;
+
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
+
+class ServerGuiFocusAdapter extends FocusAdapter {
+ final ServerGUI mcServerGui;
+
+ ServerGuiFocusAdapter(ServerGUI var1) {
+ this.mcServerGui = var1;
+ }
+
+ public void focusGained(FocusEvent var1) {
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ServerWindowAdapter.java b/minecraft_server/src/net/minecraft/src/ServerWindowAdapter.java
new file mode 100644
index 0000000..3a3c77d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ServerWindowAdapter.java
@@ -0,0 +1,27 @@
+package net.minecraft.src;
+
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import net.minecraft.server.MinecraftServer;
+
+final class ServerWindowAdapter extends WindowAdapter {
+ final MinecraftServer mcServer;
+
+ ServerWindowAdapter(MinecraftServer var1) {
+ this.mcServer = var1;
+ }
+
+ public void windowClosing(WindowEvent var1) {
+ this.mcServer.func_6016_a();
+
+ while(!this.mcServer.field_6032_g) {
+ try {
+ Thread.sleep(100L);
+ } catch (InterruptedException var3) {
+ var3.printStackTrace();
+ }
+ }
+
+ System.exit(0);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/SpawnerAnimals.java b/minecraft_server/src/net/minecraft/src/SpawnerAnimals.java
new file mode 100644
index 0000000..6289187
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/SpawnerAnimals.java
@@ -0,0 +1,133 @@
+package net.minecraft.src;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+public final class SpawnerAnimals {
+ private static Set field_4311_a = new HashSet();
+
+ protected static ChunkPosition func_4112_a(World var0, int var1, int var2) {
+ int var3 = var1 + var0.rand.nextInt(16);
+ int var4 = var0.rand.nextInt(128);
+ int var5 = var2 + var0.rand.nextInt(16);
+ return new ChunkPosition(var3, var4, var5);
+ }
+
+ public static final int func_4111_a(World var0) {
+ field_4311_a.clear();
+
+ int var1;
+ for(var1 = 0; var1 < var0.playerEntities.size(); ++var1) {
+ EntityPlayer var2 = (EntityPlayer)var0.playerEntities.get(var1);
+ int var3 = MathHelper.floor_double(var2.posX / 16.0D);
+ int var4 = MathHelper.floor_double(var2.posZ / 16.0D);
+ byte var5 = 8;
+
+ for(int var6 = -var5; var6 <= var5; ++var6) {
+ for(int var7 = -var5; var7 <= var5; ++var7) {
+ field_4311_a.add(new ChunkCoordIntPair(var6 + var3, var7 + var4));
+ }
+ }
+ }
+
+ var1 = 0;
+
+ label113:
+ for(int var28 = 0; var28 < EnumCreatureType.values().length; ++var28) {
+ EnumCreatureType var29 = EnumCreatureType.values()[var28];
+ if(var0.countEntities(var29.field_4221_c) <= var29.field_4220_d * field_4311_a.size() / 256) {
+ Iterator var30 = field_4311_a.iterator();
+
+ label110:
+ while(true) {
+ int var8;
+ int var10;
+ int var11;
+ int var12;
+ Class[] var33;
+ do {
+ do {
+ ChunkCoordIntPair var31;
+ do {
+ do {
+ do {
+ if(!var30.hasNext()) {
+ continue label113;
+ }
+
+ var31 = (ChunkCoordIntPair)var30.next();
+ } while(var0.rand.nextInt(50) != 0);
+
+ MobSpawnerBase var32 = var0.func_4077_a().func_4066_a(var31);
+ var33 = var32.getEntitiesForType(var29);
+ } while(var33 == null);
+ } while(var33.length == 0);
+
+ var8 = var0.rand.nextInt(var33.length);
+ ChunkPosition var9 = func_4112_a(var0, var31.field_152_a * 16, var31.field_151_b * 16);
+ var10 = var9.field_846_a;
+ var11 = var9.field_845_b;
+ var12 = var9.field_847_c;
+ } while(var0.doesBlockAllowAttachment(var10, var11, var12));
+ } while(var0.getBlockMaterial(var10, var11, var12) != Material.air);
+
+ int var13 = 0;
+
+ for(int var14 = 0; var14 < 3; ++var14) {
+ int var15 = var10;
+ int var16 = var11;
+ int var17 = var12;
+ byte var18 = 6;
+
+ for(int var19 = 0; var19 < 4; ++var19) {
+ var15 += var0.rand.nextInt(var18) - var0.rand.nextInt(var18);
+ var16 += var0.rand.nextInt(1) - var0.rand.nextInt(1);
+ var17 += var0.rand.nextInt(var18) - var0.rand.nextInt(var18);
+ if(var0.doesBlockAllowAttachment(var15, var16 - 1, var17) && !var0.doesBlockAllowAttachment(var15, var16, var17) && !var0.getBlockMaterial(var15, var16, var17).getIsLiquid() && !var0.doesBlockAllowAttachment(var15, var16 + 1, var17)) {
+ float var20 = (float)var15 + 0.5F;
+ float var21 = (float)var16;
+ float var22 = (float)var17 + 0.5F;
+ if(var0.getClosestPlayer((double)var20, (double)var21, (double)var22, 24.0D) == null) {
+ float var23 = var20 - (float)var0.spawnX;
+ float var24 = var21 - (float)var0.spawnY;
+ float var25 = var22 - (float)var0.spawnZ;
+ float var26 = var23 * var23 + var24 * var24 + var25 * var25;
+ if(var26 >= 576.0F) {
+ EntityLiving var34;
+ try {
+ var34 = (EntityLiving)var33[var8].getConstructor(new Class[]{World.class}).newInstance(new Object[]{var0});
+ } catch (Exception var27) {
+ var27.printStackTrace();
+ return var1;
+ }
+
+ var34.func_107_c((double)var20, (double)var21, (double)var22, var0.rand.nextFloat() * 360.0F, 0.0F);
+ if(var34.getCanSpawnHere()) {
+ ++var13;
+ var0.entityJoinedWorld(var34);
+ if(var34 instanceof EntitySpider && var0.rand.nextInt(100) == 0) {
+ EntitySkeleton var35 = new EntitySkeleton(var0);
+ var35.func_107_c((double)var20, (double)var21, (double)var22, var34.rotationYaw, 0.0F);
+ var0.entityJoinedWorld(var35);
+ var35.func_6094_e(var34);
+ }
+
+ if(var13 >= var34.func_4045_i()) {
+ continue label110;
+ }
+ }
+
+ var1 += var13;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return var1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/StepSound.java b/minecraft_server/src/net/minecraft/src/StepSound.java
new file mode 100644
index 0000000..e5424cf
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/StepSound.java
@@ -0,0 +1,25 @@
+package net.minecraft.src;
+
+public class StepSound {
+ public final String field_1029_a;
+ public final float field_1028_b;
+ public final float field_1030_c;
+
+ public StepSound(String var1, float var2, float var3) {
+ this.field_1029_a = var1;
+ this.field_1028_b = var2;
+ this.field_1030_c = var3;
+ }
+
+ public float func_738_a() {
+ return this.field_1028_b;
+ }
+
+ public float func_739_b() {
+ return this.field_1030_c;
+ }
+
+ public String func_737_c() {
+ return "step." + this.field_1029_a;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/StepSoundSand.java b/minecraft_server/src/net/minecraft/src/StepSoundSand.java
new file mode 100644
index 0000000..f5eb99e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/StepSoundSand.java
@@ -0,0 +1,7 @@
+package net.minecraft.src;
+
+final class StepSoundSand extends StepSound {
+ StepSoundSand(String var1, float var2, float var3) {
+ super(var1, var2, var3);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/StepSoundStone.java b/minecraft_server/src/net/minecraft/src/StepSoundStone.java
new file mode 100644
index 0000000..e12a567
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/StepSoundStone.java
@@ -0,0 +1,7 @@
+package net.minecraft.src;
+
+final class StepSoundStone extends StepSound {
+ StepSoundStone(String var1, float var2, float var3) {
+ super(var1, var2, var3);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ThreadCommandReader.java b/minecraft_server/src/net/minecraft/src/ThreadCommandReader.java
new file mode 100644
index 0000000..ec2e34f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ThreadCommandReader.java
@@ -0,0 +1,33 @@
+package net.minecraft.src;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import net.minecraft.server.MinecraftServer;
+
+public class ThreadCommandReader extends Thread {
+ final MinecraftServer mcServer;
+
+ public ThreadCommandReader(MinecraftServer var1) {
+ this.mcServer = var1;
+ }
+
+ public void run() {
+ BufferedReader var1 = new BufferedReader(new InputStreamReader(System.in));
+ String var2 = null;
+
+ try {
+ while(!this.mcServer.field_6032_g && MinecraftServer.func_6015_a(this.mcServer)) {
+ var2 = var1.readLine();
+ if(var2 == null) {
+ break;
+ }
+
+ this.mcServer.addCommand(var2, this.mcServer);
+ }
+ } catch (IOException var4) {
+ var4.printStackTrace();
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ThreadLoginVerifier.java b/minecraft_server/src/net/minecraft/src/ThreadLoginVerifier.java
new file mode 100644
index 0000000..8afe7a4
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ThreadLoginVerifier.java
@@ -0,0 +1,34 @@
+package net.minecraft.src;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URL;
+
+class ThreadLoginVerifier extends Thread {
+ final Packet1Login loginPacket;
+ final NetLoginHandler loginHandler;
+
+ ThreadLoginVerifier(NetLoginHandler var1, Packet1Login var2) {
+ this.loginHandler = var1;
+ this.loginPacket = var2;
+ }
+
+ public void run() {
+ try {
+ String var1 = NetLoginHandler.getServerId(this.loginHandler);
+ URL var2 = new URL("http://www.minecraft.net/game/checkserver.jsp?user=" + this.loginPacket.username + "&serverId=" + var1);
+ BufferedReader var3 = new BufferedReader(new InputStreamReader(var2.openStream()));
+ String var4 = var3.readLine();
+ var3.close();
+ System.out.println("THE REPLY IS " + var4);
+ if(var4.equals("YES")) {
+ NetLoginHandler.setLoginPacket(this.loginHandler, this.loginPacket);
+ } else {
+ this.loginHandler.kickUser("Failed to verify username!");
+ }
+ } catch (Exception var5) {
+ var5.printStackTrace();
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ThreadMonitorConnection.java b/minecraft_server/src/net/minecraft/src/ThreadMonitorConnection.java
new file mode 100644
index 0000000..b244c52
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ThreadMonitorConnection.java
@@ -0,0 +1,22 @@
+package net.minecraft.src;
+
+class ThreadMonitorConnection extends Thread {
+ final NetworkManager netManager;
+
+ ThreadMonitorConnection(NetworkManager var1) {
+ this.netManager = var1;
+ }
+
+ public void run() {
+ try {
+ Thread.sleep(2000L);
+ if(NetworkManager.isRunning(this.netManager)) {
+ NetworkManager.getWriteThread(this.netManager).interrupt();
+ this.netManager.networkShutdown("Connection closed");
+ }
+ } catch (Exception var2) {
+ var2.printStackTrace();
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ThreadServerApplication.java b/minecraft_server/src/net/minecraft/src/ThreadServerApplication.java
new file mode 100644
index 0000000..39eca63
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ThreadServerApplication.java
@@ -0,0 +1,16 @@
+package net.minecraft.src;
+
+import net.minecraft.server.MinecraftServer;
+
+public final class ThreadServerApplication extends Thread {
+ final MinecraftServer mcServer;
+
+ public ThreadServerApplication(String var1, MinecraftServer var2) {
+ super(var1);
+ this.mcServer = var2;
+ }
+
+ public void run() {
+ this.mcServer.run();
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/ThreadSleepForever.java b/minecraft_server/src/net/minecraft/src/ThreadSleepForever.java
new file mode 100644
index 0000000..1590ef0
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/ThreadSleepForever.java
@@ -0,0 +1,22 @@
+package net.minecraft.src;
+
+import net.minecraft.server.MinecraftServer;
+
+public class ThreadSleepForever extends Thread {
+ final MinecraftServer mc;
+
+ public ThreadSleepForever(MinecraftServer var1) {
+ this.mc = var1;
+ this.setDaemon(true);
+ this.start();
+ }
+
+ public void run() {
+ while(true) {
+ try {
+ Thread.sleep(2147483647L);
+ } catch (InterruptedException var2) {
+ }
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/TileEntity.java b/minecraft_server/src/net/minecraft/src/TileEntity.java
new file mode 100644
index 0000000..9c4e2b2
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/TileEntity.java
@@ -0,0 +1,75 @@
+package net.minecraft.src;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class TileEntity {
+ private static Map nameToClassMap = new HashMap();
+ private static Map classToNameMap = new HashMap();
+ public World worldObj;
+ public int xCoord;
+ public int yCoord;
+ public int zCoord;
+
+ private static void addMapping(Class var0, String var1) {
+ if(classToNameMap.containsKey(var1)) {
+ throw new IllegalArgumentException("Duplicate id: " + var1);
+ } else {
+ nameToClassMap.put(var1, var0);
+ classToNameMap.put(var0, var1);
+ }
+ }
+
+ public void readFromNBT(NBTTagCompound var1) {
+ this.xCoord = var1.getInteger("x");
+ this.yCoord = var1.getInteger("y");
+ this.zCoord = var1.getInteger("z");
+ }
+
+ public void writeToNBT(NBTTagCompound var1) {
+ String var2 = (String)classToNameMap.get(this.getClass());
+ if(var2 == null) {
+ throw new RuntimeException(this.getClass() + " is missing a mapping! This is a bug!");
+ } else {
+ var1.setString("id", var2);
+ var1.setInteger("x", this.xCoord);
+ var1.setInteger("y", this.yCoord);
+ var1.setInteger("z", this.zCoord);
+ }
+ }
+
+ public void updateEntity() {
+ }
+
+ public static TileEntity createAndLoadEntity(NBTTagCompound var0) {
+ TileEntity var1 = null;
+
+ try {
+ Class var2 = (Class)nameToClassMap.get(var0.getString("id"));
+ if(var2 != null) {
+ var1 = (TileEntity)var2.newInstance();
+ }
+ } catch (Exception var3) {
+ var3.printStackTrace();
+ }
+
+ if(var1 != null) {
+ var1.readFromNBT(var0);
+ } else {
+ System.out.println("Skipping TileEntity with id " + var0.getString("id"));
+ }
+
+ return var1;
+ }
+
+ public void func_183_c() {
+ this.worldObj.func_515_b(this.xCoord, this.yCoord, this.zCoord, this);
+ }
+
+ static {
+ addMapping(TileEntityFurnace.class, "Furnace");
+ addMapping(TileEntityChest.class, "Chest");
+ addMapping(TileEntitySign.class, "Sign");
+ addMapping(TileEntityMobSpawner.class, "MobSpawner");
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/TileEntityChest.java b/minecraft_server/src/net/minecraft/src/TileEntityChest.java
new file mode 100644
index 0000000..ff18dd9
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/TileEntityChest.java
@@ -0,0 +1,57 @@
+package net.minecraft.src;
+
+public class TileEntityChest extends TileEntity implements IInventory {
+ private ItemStack[] field_494_e = new ItemStack[36];
+
+ public int func_83_a() {
+ return 27;
+ }
+
+ public ItemStack getStackInSlot(int var1) {
+ return this.field_494_e[var1];
+ }
+
+ public void func_197_a(int var1, ItemStack var2) {
+ this.field_494_e[var1] = var2;
+ if(var2 != null && var2.stackSize > this.func_198_d()) {
+ var2.stackSize = this.func_198_d();
+ }
+
+ this.func_183_c();
+ }
+
+ public void readFromNBT(NBTTagCompound var1) {
+ super.readFromNBT(var1);
+ NBTTagList var2 = var1.getTagList("Items");
+ this.field_494_e = new ItemStack[this.func_83_a()];
+
+ for(int var3 = 0; var3 < var2.tagCount(); ++var3) {
+ NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);
+ int var5 = var4.getByte("Slot") & 255;
+ if(var5 >= 0 && var5 < this.field_494_e.length) {
+ this.field_494_e[var5] = new ItemStack(var4);
+ }
+ }
+
+ }
+
+ public void writeToNBT(NBTTagCompound var1) {
+ super.writeToNBT(var1);
+ NBTTagList var2 = new NBTTagList();
+
+ for(int var3 = 0; var3 < this.field_494_e.length; ++var3) {
+ if(this.field_494_e[var3] != null) {
+ NBTTagCompound var4 = new NBTTagCompound();
+ var4.setByte("Slot", (byte)var3);
+ this.field_494_e[var3].writeToNBT(var4);
+ var2.setTag(var4);
+ }
+ }
+
+ var1.setTag("Items", var2);
+ }
+
+ public int func_198_d() {
+ return 64;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/TileEntityFurnace.java b/minecraft_server/src/net/minecraft/src/TileEntityFurnace.java
new file mode 100644
index 0000000..66fe1d7
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/TileEntityFurnace.java
@@ -0,0 +1,143 @@
+package net.minecraft.src;
+
+public class TileEntityFurnace extends TileEntity implements IInventory {
+ private ItemStack[] field_489_e = new ItemStack[3];
+ private int field_488_f = 0;
+ private int field_487_g = 0;
+ private int field_486_h = 0;
+
+ public int func_83_a() {
+ return this.field_489_e.length;
+ }
+
+ public ItemStack getStackInSlot(int var1) {
+ return this.field_489_e[var1];
+ }
+
+ public void readFromNBT(NBTTagCompound var1) {
+ super.readFromNBT(var1);
+ NBTTagList var2 = var1.getTagList("Items");
+ this.field_489_e = new ItemStack[this.func_83_a()];
+
+ for(int var3 = 0; var3 < var2.tagCount(); ++var3) {
+ NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);
+ byte var5 = var4.getByte("Slot");
+ if(var5 >= 0 && var5 < this.field_489_e.length) {
+ this.field_489_e[var5] = new ItemStack(var4);
+ }
+ }
+
+ this.field_488_f = var1.getShort("BurnTime");
+ this.field_486_h = var1.getShort("CookTime");
+ this.field_487_g = this.func_194_a(this.field_489_e[1]);
+ }
+
+ public void writeToNBT(NBTTagCompound var1) {
+ super.writeToNBT(var1);
+ var1.setShort("BurnTime", (short)this.field_488_f);
+ var1.setShort("CookTime", (short)this.field_486_h);
+ NBTTagList var2 = new NBTTagList();
+
+ for(int var3 = 0; var3 < this.field_489_e.length; ++var3) {
+ if(this.field_489_e[var3] != null) {
+ NBTTagCompound var4 = new NBTTagCompound();
+ var4.setByte("Slot", (byte)var3);
+ this.field_489_e[var3].writeToNBT(var4);
+ var2.setTag(var4);
+ }
+ }
+
+ var1.setTag("Items", var2);
+ }
+
+ public int func_190_d() {
+ return 64;
+ }
+
+ public boolean func_191_e() {
+ return this.field_488_f > 0;
+ }
+
+ public void updateEntity() {
+ boolean var1 = this.field_488_f > 0;
+ boolean var2 = false;
+ if(this.field_488_f > 0) {
+ --this.field_488_f;
+ }
+
+ if(!this.worldObj.multiplayerWorld) {
+ if(this.field_488_f == 0 && this.func_193_g()) {
+ this.field_487_g = this.field_488_f = this.func_194_a(this.field_489_e[1]);
+ if(this.field_488_f > 0) {
+ var2 = true;
+ if(this.field_489_e[1] != null) {
+ --this.field_489_e[1].stackSize;
+ if(this.field_489_e[1].stackSize == 0) {
+ this.field_489_e[1] = null;
+ }
+ }
+ }
+ }
+
+ if(this.func_191_e() && this.func_193_g()) {
+ ++this.field_486_h;
+ if(this.field_486_h == 200) {
+ this.field_486_h = 0;
+ this.func_189_f();
+ var2 = true;
+ }
+ } else {
+ this.field_486_h = 0;
+ }
+
+ if(var1 != this.field_488_f > 0) {
+ var2 = true;
+ BlockFurnace.func_295_a(this.field_488_f > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
+ }
+ }
+
+ if(var2) {
+ this.func_183_c();
+ }
+
+ }
+
+ private boolean func_193_g() {
+ if(this.field_489_e[0] == null) {
+ return false;
+ } else {
+ int var1 = this.func_192_b(this.field_489_e[0].getItem().swiftedIndex);
+ return var1 < 0 ? false : (this.field_489_e[2] == null ? true : (this.field_489_e[2].itemID != var1 ? false : (this.field_489_e[2].stackSize < this.func_190_d() && this.field_489_e[2].stackSize < this.field_489_e[2].getMaxStackSize() ? true : this.field_489_e[2].stackSize < Item.itemsList[var1].getItemStackLimit())));
+ }
+ }
+
+ public void func_189_f() {
+ if(this.func_193_g()) {
+ int var1 = this.func_192_b(this.field_489_e[0].getItem().swiftedIndex);
+ if(this.field_489_e[2] == null) {
+ this.field_489_e[2] = new ItemStack(var1, 1);
+ } else if(this.field_489_e[2].itemID == var1) {
+ ++this.field_489_e[2].stackSize;
+ }
+
+ --this.field_489_e[0].stackSize;
+ if(this.field_489_e[0].stackSize <= 0) {
+ this.field_489_e[0] = null;
+ }
+
+ }
+ }
+
+ private int func_192_b(int var1) {
+ return var1 == Block.oreIron.blockID ? Item.ingotIron.swiftedIndex : (var1 == Block.oreGold.blockID ? Item.ingotGold.swiftedIndex : (var1 == Block.oreDiamond.blockID ? Item.diamond.swiftedIndex : (var1 == Block.sand.blockID ? Block.glass.blockID : (var1 == Item.porkRaw.swiftedIndex ? Item.porkCooked.swiftedIndex : (var1 == Item.fishRaw.swiftedIndex ? Item.fishCooked.swiftedIndex : (var1 == Block.cobblestone.blockID ? Block.stone.blockID : (var1 == Item.clay.swiftedIndex ? Item.brick.swiftedIndex : -1)))))));
+ }
+
+ private int func_194_a(ItemStack var1) {
+ if(var1 == null) {
+ return 0;
+ } else {
+ int var2 = var1.getItem().swiftedIndex;
+ return var2 < 256 && Block.blocksList[var2].blockMaterial == Material.wood ? 300 : (var2 == Item.stick.swiftedIndex ? 100 : (var2 == Item.coal.swiftedIndex ? 1600 : (var2 == Item.bucketLava.swiftedIndex ? 20000 : 0)));
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/TileEntityMobSpawner.java b/minecraft_server/src/net/minecraft/src/TileEntityMobSpawner.java
new file mode 100644
index 0000000..86ab851
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/TileEntityMobSpawner.java
@@ -0,0 +1,93 @@
+package net.minecraft.src;
+
+public class TileEntityMobSpawner extends TileEntity {
+ public int delay = -1;
+ public String entityID = "Pig";
+ public double field_491_g;
+ public double field_490_h = 0.0D;
+
+ public TileEntityMobSpawner() {
+ this.delay = 20;
+ }
+
+ public boolean func_195_a() {
+ return this.worldObj.getClosestPlayer((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D, 16.0D) != null;
+ }
+
+ public void updateEntity() {
+ this.field_490_h = this.field_491_g;
+ if(this.func_195_a()) {
+ double var1 = (double)((float)this.xCoord + this.worldObj.rand.nextFloat());
+ double var3 = (double)((float)this.yCoord + this.worldObj.rand.nextFloat());
+ double var5 = (double)((float)this.zCoord + this.worldObj.rand.nextFloat());
+ this.worldObj.spawnParticle("smoke", var1, var3, var5, 0.0D, 0.0D, 0.0D);
+ this.worldObj.spawnParticle("flame", var1, var3, var5, 0.0D, 0.0D, 0.0D);
+
+ for(this.field_491_g += (double)(1000.0F / ((float)this.delay + 200.0F)); this.field_491_g > 360.0D; this.field_490_h -= 360.0D) {
+ this.field_491_g -= 360.0D;
+ }
+
+ if(this.delay == -1) {
+ this.updateDelay();
+ }
+
+ if(this.delay > 0) {
+ --this.delay;
+ } else {
+ byte var7 = 4;
+
+ for(int var8 = 0; var8 < var7; ++var8) {
+ EntityLiving var9 = (EntityLiving)((EntityLiving)EntityList.func_567_a(this.entityID, this.worldObj));
+ if(var9 == null) {
+ return;
+ }
+
+ int var10 = this.worldObj.getEntitiesWithinAABB(var9.getClass(), AxisAlignedBB.getBoundingBoxFromPool((double)this.xCoord, (double)this.yCoord, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 1), (double)(this.zCoord + 1)).expands(8.0D, 4.0D, 8.0D)).size();
+ if(var10 >= 6) {
+ this.updateDelay();
+ return;
+ }
+
+ if(var9 != null) {
+ double var11 = (double)this.xCoord + (this.worldObj.rand.nextDouble() - this.worldObj.rand.nextDouble()) * 4.0D;
+ double var13 = (double)(this.yCoord + this.worldObj.rand.nextInt(3) - 1);
+ double var15 = (double)this.zCoord + (this.worldObj.rand.nextDouble() - this.worldObj.rand.nextDouble()) * 4.0D;
+ var9.func_107_c(var11, var13, var15, this.worldObj.rand.nextFloat() * 360.0F, 0.0F);
+ if(var9.getCanSpawnHere()) {
+ this.worldObj.entityJoinedWorld(var9);
+
+ for(int var17 = 0; var17 < 20; ++var17) {
+ var1 = (double)this.xCoord + 0.5D + ((double)this.worldObj.rand.nextFloat() - 0.5D) * 2.0D;
+ var3 = (double)this.yCoord + 0.5D + ((double)this.worldObj.rand.nextFloat() - 0.5D) * 2.0D;
+ var5 = (double)this.zCoord + 0.5D + ((double)this.worldObj.rand.nextFloat() - 0.5D) * 2.0D;
+ this.worldObj.spawnParticle("smoke", var1, var3, var5, 0.0D, 0.0D, 0.0D);
+ this.worldObj.spawnParticle("flame", var1, var3, var5, 0.0D, 0.0D, 0.0D);
+ }
+
+ var9.func_156_D();
+ this.updateDelay();
+ }
+ }
+ }
+
+ super.updateEntity();
+ }
+ }
+ }
+
+ private void updateDelay() {
+ this.delay = 200 + this.worldObj.rand.nextInt(600);
+ }
+
+ public void readFromNBT(NBTTagCompound var1) {
+ super.readFromNBT(var1);
+ this.entityID = var1.getString("EntityId");
+ this.delay = var1.getShort("Delay");
+ }
+
+ public void writeToNBT(NBTTagCompound var1) {
+ super.writeToNBT(var1);
+ var1.setString("EntityId", this.entityID);
+ var1.setShort("Delay", (short)this.delay);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/TileEntitySign.java b/minecraft_server/src/net/minecraft/src/TileEntitySign.java
new file mode 100644
index 0000000..a2c8421
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/TileEntitySign.java
@@ -0,0 +1,26 @@
+package net.minecraft.src;
+
+public class TileEntitySign extends TileEntity {
+ public String[] signText = new String[]{"", "", "", ""};
+ public int lineBeingEdited = -1;
+
+ public void writeToNBT(NBTTagCompound var1) {
+ super.writeToNBT(var1);
+ var1.setString("Text1", this.signText[0]);
+ var1.setString("Text2", this.signText[1]);
+ var1.setString("Text3", this.signText[2]);
+ var1.setString("Text4", this.signText[3]);
+ }
+
+ public void readFromNBT(NBTTagCompound var1) {
+ super.readFromNBT(var1);
+
+ for(int var2 = 0; var2 < 4; ++var2) {
+ this.signText[var2] = var1.getString("Text" + (var2 + 1));
+ if(this.signText[var2].length() > 15) {
+ this.signText[var2] = this.signText[var2].substring(0, 15);
+ }
+ }
+
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/Vec3D.java b/minecraft_server/src/net/minecraft/src/Vec3D.java
new file mode 100644
index 0000000..bbfcba8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/Vec3D.java
@@ -0,0 +1,127 @@
+package net.minecraft.src;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Vec3D {
+ private static List vectorList = new ArrayList();
+ private static int nextVector = 0;
+ public double xCoord;
+ public double yCoord;
+ public double zCoord;
+
+ public static Vec3D createVectorHelper(double var0, double var2, double var4) {
+ return new Vec3D(var0, var2, var4);
+ }
+
+ public static void initialize() {
+ nextVector = 0;
+ }
+
+ public static Vec3D createVector(double var0, double var2, double var4) {
+ if(nextVector >= vectorList.size()) {
+ vectorList.add(createVectorHelper(0.0D, 0.0D, 0.0D));
+ }
+
+ return ((Vec3D)vectorList.get(nextVector++)).setComponents(var0, var2, var4);
+ }
+
+ private Vec3D(double var1, double var3, double var5) {
+ if(var1 == -0.0D) {
+ var1 = 0.0D;
+ }
+
+ if(var3 == -0.0D) {
+ var3 = 0.0D;
+ }
+
+ if(var5 == -0.0D) {
+ var5 = 0.0D;
+ }
+
+ this.xCoord = var1;
+ this.yCoord = var3;
+ this.zCoord = var5;
+ }
+
+ private Vec3D setComponents(double var1, double var3, double var5) {
+ this.xCoord = var1;
+ this.yCoord = var3;
+ this.zCoord = var5;
+ return this;
+ }
+
+ public Vec3D normalize() {
+ double var1 = (double)MathHelper.sqrt_double(this.xCoord * this.xCoord + this.yCoord * this.yCoord + this.zCoord * this.zCoord);
+ return var1 < 1.0E-4D ? createVector(0.0D, 0.0D, 0.0D) : createVector(this.xCoord / var1, this.yCoord / var1, this.zCoord / var1);
+ }
+
+ public Vec3D addVector(double var1, double var3, double var5) {
+ return createVector(this.xCoord + var1, this.yCoord + var3, this.zCoord + var5);
+ }
+
+ public double distanceTo(Vec3D var1) {
+ double var2 = var1.xCoord - this.xCoord;
+ double var4 = var1.yCoord - this.yCoord;
+ double var6 = var1.zCoord - this.zCoord;
+ return (double)MathHelper.sqrt_double(var2 * var2 + var4 * var4 + var6 * var6);
+ }
+
+ public double squareDistanceTo(Vec3D var1) {
+ double var2 = var1.xCoord - this.xCoord;
+ double var4 = var1.yCoord - this.yCoord;
+ double var6 = var1.zCoord - this.zCoord;
+ return var2 * var2 + var4 * var4 + var6 * var6;
+ }
+
+ public double squareDistanceTo(double var1, double var3, double var5) {
+ double var7 = var1 - this.xCoord;
+ double var9 = var3 - this.yCoord;
+ double var11 = var5 - this.zCoord;
+ return var7 * var7 + var9 * var9 + var11 * var11;
+ }
+
+ public double lengthVector() {
+ return (double)MathHelper.sqrt_double(this.xCoord * this.xCoord + this.yCoord * this.yCoord + this.zCoord * this.zCoord);
+ }
+
+ public Vec3D getIntermediateWithXValue(Vec3D var1, double var2) {
+ double var4 = var1.xCoord - this.xCoord;
+ double var6 = var1.yCoord - this.yCoord;
+ double var8 = var1.zCoord - this.zCoord;
+ if(var4 * var4 < (double)1.0E-7F) {
+ return null;
+ } else {
+ double var10 = (var2 - this.xCoord) / var4;
+ return var10 >= 0.0D && var10 <= 1.0D ? createVector(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null;
+ }
+ }
+
+ public Vec3D getIntermediateWithYValue(Vec3D var1, double var2) {
+ double var4 = var1.xCoord - this.xCoord;
+ double var6 = var1.yCoord - this.yCoord;
+ double var8 = var1.zCoord - this.zCoord;
+ if(var6 * var6 < (double)1.0E-7F) {
+ return null;
+ } else {
+ double var10 = (var2 - this.yCoord) / var6;
+ return var10 >= 0.0D && var10 <= 1.0D ? createVector(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null;
+ }
+ }
+
+ public Vec3D getIntermediateWithZValue(Vec3D var1, double var2) {
+ double var4 = var1.xCoord - this.xCoord;
+ double var6 = var1.yCoord - this.yCoord;
+ double var8 = var1.zCoord - this.zCoord;
+ if(var8 * var8 < (double)1.0E-7F) {
+ return null;
+ } else {
+ double var10 = (var2 - this.zCoord) / var8;
+ return var10 >= 0.0D && var10 <= 1.0D ? createVector(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null;
+ }
+ }
+
+ public String toString() {
+ return "(" + this.xCoord + ", " + this.yCoord + ", " + this.zCoord + ")";
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/World.java b/minecraft_server/src/net/minecraft/src/World.java
new file mode 100644
index 0000000..246af30
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/World.java
@@ -0,0 +1,1658 @@
+package net.minecraft.src;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+import java.util.TreeSet;
+
+public class World implements IBlockAccess {
+ public boolean field_4280_a = false;
+ private List field_821 = new ArrayList();
+ public List field_815_a = new ArrayList();
+ private List field_790_z = new ArrayList();
+ private TreeSet scheduledTickTreeSet = new TreeSet();
+ private Set scheduledTickSet = new HashSet();
+ public List field_814_b = new ArrayList();
+ public List playerEntities = new ArrayList();
+ public long worldTime = 0L;
+ private long field_6159_E = 16777215L;
+ public int skylightSubtracted = 0;
+ protected int field_4279_g = (new Random()).nextInt();
+ protected int field_4278_h = 1013904223;
+ public boolean field_808_h = false;
+ private long field_784_F = System.currentTimeMillis();
+ protected int field_4277_j = 40;
+ public int monstersEnabled;
+ public Random rand = new Random();
+ public int spawnX;
+ public int spawnY;
+ public int spawnZ;
+ public boolean field_9212_p = false;
+ public final WorldProvider field_4272_q;
+ protected List field_798_r = new ArrayList();
+ private IChunkProvider chunkProvider;
+ public File field_9211_s;
+ public File field_797_s;
+ public long randomSeed = 0L;
+ private NBTTagCompound nbtCompoundPlayer;
+ public long sizeOnDisk = 0L;
+ public final String field_9210_w;
+ public boolean field_9209_x;
+ private ArrayList field_9207_I = new ArrayList();
+ private int field_4265_J = 0;
+ static int field_4268_y = 0;
+ private Set field_4264_K = new HashSet();
+ private int field_4263_L = this.rand.nextInt(12000);
+ private List field_778_L = new ArrayList();
+ public boolean multiplayerWorld = false;
+
+ public WorldChunkManager func_4077_a() {
+ return this.field_4272_q.field_4301_b;
+ }
+
+ public World(File var1, String var2, long var3, WorldProvider var5) {
+ this.field_9211_s = var1;
+ this.field_9210_w = var2;
+ var1.mkdirs();
+ this.field_797_s = new File(var1, var2);
+ this.field_797_s.mkdirs();
+
+ try {
+ File var6 = new File(this.field_797_s, "session.lock");
+ DataOutputStream var7 = new DataOutputStream(new FileOutputStream(var6));
+
+ try {
+ var7.writeLong(this.field_784_F);
+ } finally {
+ var7.close();
+ }
+ } catch (IOException var16) {
+ var16.printStackTrace();
+ throw new RuntimeException("Failed to check session lock, aborting");
+ }
+
+ Object var17 = new WorldProvider();
+ File var18 = new File(this.field_797_s, "level.dat");
+ this.field_9212_p = !var18.exists();
+ if(var18.exists()) {
+ try {
+ NBTTagCompound var8 = CompressedStreamTools.func_770_a(new FileInputStream(var18));
+ NBTTagCompound var9 = var8.getCompoundTag("Data");
+ this.randomSeed = var9.getLong("RandomSeed");
+ this.spawnX = var9.getInteger("SpawnX");
+ this.spawnY = var9.getInteger("SpawnY");
+ this.spawnZ = var9.getInteger("SpawnZ");
+ this.worldTime = var9.getLong("Time");
+ this.sizeOnDisk = var9.getLong("SizeOnDisk");
+ if(var9.hasKey("Player")) {
+ this.nbtCompoundPlayer = var9.getCompoundTag("Player");
+ int var10 = this.nbtCompoundPlayer.getInteger("Dimension");
+ if(var10 == -1) {
+ var17 = new WorldProviderHell();
+ }
+ }
+ } catch (Exception var14) {
+ var14.printStackTrace();
+ }
+ }
+
+ if(var5 != null) {
+ var17 = var5;
+ }
+
+ boolean var19 = false;
+ if(this.randomSeed == 0L) {
+ this.randomSeed = var3;
+ var19 = true;
+ }
+
+ this.field_4272_q = (WorldProvider)var17;
+ this.field_4272_q.func_4093_a(this);
+ this.chunkProvider = this.func_4076_a(this.field_797_s);
+ if(var19) {
+ this.field_9209_x = true;
+ this.spawnX = 0;
+ this.spawnY = 64;
+
+ for(this.spawnZ = 0; !this.field_4272_q.canCoordinateBeSpawn(this.spawnX, this.spawnZ); this.spawnZ += this.rand.nextInt(64) - this.rand.nextInt(64)) {
+ this.spawnX += this.rand.nextInt(64) - this.rand.nextInt(64);
+ }
+
+ this.field_9209_x = false;
+ }
+
+ this.calculateInitialSkylight();
+ }
+
+ protected IChunkProvider func_4076_a(File var1) {
+ return new ChunkProviderLoadOrGenerate(this, this.field_4272_q.getChunkLoader(var1), this.field_4272_q.getChunkProvider());
+ }
+
+ public int func_528_f(int var1, int var2) {
+ int var3;
+ for(var3 = 63; this.getBlockId(var1, var3 + 1, var2) != 0; ++var3) {
+ }
+
+ return this.getBlockId(var1, var3, var2);
+ }
+
+ public void func_485_a(boolean var1, IProgressUpdate var2) {
+ if(this.chunkProvider.func_364_b()) {
+ if(var2 != null) {
+ var2.func_438_a("Saving level");
+ }
+
+ this.func_478_h();
+ if(var2 != null) {
+ var2.func_439_b("Saving chunks");
+ }
+
+ this.chunkProvider.saveWorld(var1, var2);
+ }
+ }
+
+ private void func_478_h() {
+ this.func_476_g();
+ NBTTagCompound var1 = new NBTTagCompound();
+ var1.setLong("RandomSeed", this.randomSeed);
+ var1.setInteger("SpawnX", this.spawnX);
+ var1.setInteger("SpawnY", this.spawnY);
+ var1.setInteger("SpawnZ", this.spawnZ);
+ var1.setLong("Time", this.worldTime);
+ var1.setLong("SizeOnDisk", this.sizeOnDisk);
+ var1.setLong("LastPlayed", System.currentTimeMillis());
+ EntityPlayer var2 = null;
+ if(this.playerEntities.size() > 0) {
+ var2 = (EntityPlayer)this.playerEntities.get(0);
+ }
+
+ NBTTagCompound var3;
+ if(var2 != null) {
+ var3 = new NBTTagCompound();
+ var2.writeToNBT(var3);
+ var1.setCompoundTag("Player", var3);
+ }
+
+ var3 = new NBTTagCompound();
+ var3.setTag("Data", var1);
+
+ try {
+ File var4 = new File(this.field_797_s, "level.dat_new");
+ File var5 = new File(this.field_797_s, "level.dat_old");
+ File var6 = new File(this.field_797_s, "level.dat");
+ CompressedStreamTools.func_769_a(var3, new FileOutputStream(var4));
+ if(var5.exists()) {
+ var5.delete();
+ }
+
+ var6.renameTo(var5);
+ if(var6.exists()) {
+ var6.delete();
+ }
+
+ var4.renameTo(var6);
+ if(var4.exists()) {
+ var4.delete();
+ }
+ } catch (Exception var7) {
+ var7.printStackTrace();
+ }
+
+ }
+
+ public int getBlockId(int var1, int var2, int var3) {
+ return var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000 ? (var2 < 0 ? 0 : (var2 >= 128 ? 0 : this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4).getBlockID(var1 & 15, var2, var3 & 15))) : 0;
+ }
+
+ public boolean func_530_e(int var1, int var2, int var3) {
+ return var2 >= 0 && var2 < 128 ? this.chunkExists(var1 >> 4, var3 >> 4) : false;
+ }
+
+ public boolean checkChunksExist(int var1, int var2, int var3, int var4, int var5, int var6) {
+ if(var5 >= 0 && var2 < 128) {
+ var1 >>= 4;
+ var2 >>= 4;
+ var3 >>= 4;
+ var4 >>= 4;
+ var5 >>= 4;
+ var6 >>= 4;
+
+ for(int var7 = var1; var7 <= var4; ++var7) {
+ for(int var8 = var3; var8 <= var6; ++var8) {
+ if(!this.chunkExists(var7, var8)) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ private boolean chunkExists(int var1, int var2) {
+ return this.chunkProvider.chunkExists(var1, var2);
+ }
+
+ public Chunk getChunkFromBlockCoords(int var1, int var2) {
+ return this.getChunkFromChunkCoords(var1 >> 4, var2 >> 4);
+ }
+
+ public Chunk getChunkFromChunkCoords(int var1, int var2) {
+ return this.chunkProvider.func_363_b(var1, var2);
+ }
+
+ public boolean func_470_a(int var1, int var2, int var3, int var4, int var5) {
+ if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) {
+ if(var2 < 0) {
+ return false;
+ } else if(var2 >= 128) {
+ return false;
+ } else {
+ Chunk var6 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4);
+ return var6.setBlockIDWithMetadata(var1 & 15, var2, var3 & 15, var4, var5);
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public boolean setBlock(int var1, int var2, int var3, int var4) {
+ if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) {
+ if(var2 < 0) {
+ return false;
+ } else if(var2 >= 128) {
+ return false;
+ } else {
+ Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4);
+ return var5.setBlockID(var1 & 15, var2, var3 & 15, var4);
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public Material getBlockMaterial(int var1, int var2, int var3) {
+ int var4 = this.getBlockId(var1, var2, var3);
+ return var4 == 0 ? Material.air : Block.blocksList[var4].blockMaterial;
+ }
+
+ public int getBlockMetadata(int var1, int var2, int var3) {
+ if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) {
+ if(var2 < 0) {
+ return 0;
+ } else if(var2 >= 128) {
+ return 0;
+ } else {
+ Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4);
+ var1 &= 15;
+ var3 &= 15;
+ return var4.getBlockMetadata(var1, var2, var3);
+ }
+ } else {
+ return 0;
+ }
+ }
+
+ public void setBlockMetadataWithNotify(int var1, int var2, int var3, int var4) {
+ if(this.setBlockMetadata(var1, var2, var3, var4)) {
+ this.notifyBlockChange(var1, var2, var3, this.getBlockId(var1, var2, var3));
+ }
+
+ }
+
+ public boolean setBlockMetadata(int var1, int var2, int var3, int var4) {
+ if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) {
+ if(var2 < 0) {
+ return false;
+ } else if(var2 >= 128) {
+ return false;
+ } else {
+ Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4);
+ var1 &= 15;
+ var3 &= 15;
+ var5.setBlockMetadata(var1, var2, var3, var4);
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public boolean setBlockWithNotify(int var1, int var2, int var3, int var4) {
+ if(this.setBlock(var1, var2, var3, var4)) {
+ this.notifyBlockChange(var1, var2, var3, var4);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public boolean func_507_b(int var1, int var2, int var3, int var4, int var5) {
+ if(this.func_470_a(var1, var2, var3, var4, var5)) {
+ this.notifyBlockChange(var1, var2, var3, var4);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public void func_521_f(int var1, int var2, int var3) {
+ for(int var4 = 0; var4 < this.field_798_r.size(); ++var4) {
+ ((IWorldAccess)this.field_798_r.get(var4)).func_683_a(var1, var2, var3);
+ }
+
+ }
+
+ protected void notifyBlockChange(int var1, int var2, int var3, int var4) {
+ this.func_521_f(var1, var2, var3);
+ this.notifyBlocksOfNeighborChange(var1, var2, var3, var4);
+ }
+
+ public void func_498_f(int var1, int var2, int var3, int var4) {
+ if(var3 > var4) {
+ int var5 = var4;
+ var4 = var3;
+ var3 = var5;
+ }
+
+ this.func_519_b(var1, var3, var2, var1, var4, var2);
+ }
+
+ public void func_519_b(int var1, int var2, int var3, int var4, int var5, int var6) {
+ for(int var7 = 0; var7 < this.field_798_r.size(); ++var7) {
+ ((IWorldAccess)this.field_798_r.get(var7)).func_685_a(var1, var2, var3, var4, var5, var6);
+ }
+
+ }
+
+ public void notifyBlocksOfNeighborChange(int var1, int var2, int var3, int var4) {
+ this.notifyBlockOfNeighborChange(var1 - 1, var2, var3, var4);
+ this.notifyBlockOfNeighborChange(var1 + 1, var2, var3, var4);
+ this.notifyBlockOfNeighborChange(var1, var2 - 1, var3, var4);
+ this.notifyBlockOfNeighborChange(var1, var2 + 1, var3, var4);
+ this.notifyBlockOfNeighborChange(var1, var2, var3 - 1, var4);
+ this.notifyBlockOfNeighborChange(var1, var2, var3 + 1, var4);
+ }
+
+ private void notifyBlockOfNeighborChange(int var1, int var2, int var3, int var4) {
+ if(!this.field_808_h && !this.multiplayerWorld) {
+ Block var5 = Block.blocksList[this.getBlockId(var1, var2, var3)];
+ if(var5 != null) {
+ var5.onNeighborBlockChange(this, var1, var2, var3, var4);
+ }
+
+ }
+ }
+
+ public boolean canBlockSeeTheSky(int var1, int var2, int var3) {
+ return this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4).canBlockSeeTheSky(var1 & 15, var2, var3 & 15);
+ }
+
+ public int getBlockLightValue(int var1, int var2, int var3) {
+ return this.getBlockLightValue(var1, var2, var3, true);
+ }
+
+ public int getBlockLightValue(int var1, int var2, int var3, boolean var4) {
+ if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) {
+ int var5;
+ if(var4) {
+ var5 = this.getBlockId(var1, var2, var3);
+ if(var5 == Block.stairSingle.blockID || var5 == Block.tilledField.blockID) {
+ int var6 = this.getBlockLightValue(var1, var2 + 1, var3, false);
+ int var7 = this.getBlockLightValue(var1 + 1, var2, var3, false);
+ int var8 = this.getBlockLightValue(var1 - 1, var2, var3, false);
+ int var9 = this.getBlockLightValue(var1, var2, var3 + 1, false);
+ int var10 = this.getBlockLightValue(var1, var2, var3 - 1, false);
+ if(var7 > var6) {
+ var6 = var7;
+ }
+
+ if(var8 > var6) {
+ var6 = var8;
+ }
+
+ if(var9 > var6) {
+ var6 = var9;
+ }
+
+ if(var10 > var6) {
+ var6 = var10;
+ }
+
+ return var6;
+ }
+ }
+
+ if(var2 < 0) {
+ return 0;
+ } else if(var2 >= 128) {
+ var5 = 15 - this.skylightSubtracted;
+ if(var5 < 0) {
+ var5 = 0;
+ }
+
+ return var5;
+ } else {
+ Chunk var11 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4);
+ var1 &= 15;
+ var3 &= 15;
+ return var11.getBlockLightValue(var1, var2, var3, this.skylightSubtracted);
+ }
+ } else {
+ return 15;
+ }
+ }
+
+ public boolean canExistingBlockSeeTheSky(int var1, int var2, int var3) {
+ if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) {
+ if(var2 < 0) {
+ return false;
+ } else if(var2 >= 128) {
+ return true;
+ } else if(!this.chunkExists(var1 >> 4, var3 >> 4)) {
+ return false;
+ } else {
+ Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4);
+ var1 &= 15;
+ var3 &= 15;
+ return var4.canBlockSeeTheSky(var1, var2, var3);
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public int getHeightValue(int var1, int var2) {
+ if(var1 >= -32000000 && var2 >= -32000000 && var1 < 32000000 && var2 <= 32000000) {
+ if(!this.chunkExists(var1 >> 4, var2 >> 4)) {
+ return 0;
+ } else {
+ Chunk var3 = this.getChunkFromChunkCoords(var1 >> 4, var2 >> 4);
+ return var3.getHeightValue(var1 & 15, var2 & 15);
+ }
+ } else {
+ return 0;
+ }
+ }
+
+ public void neighborLightPropagationChanged(EnumSkyBlock var1, int var2, int var3, int var4, int var5) {
+ if(!this.field_4272_q.field_4306_c || var1 != EnumSkyBlock.Sky) {
+ if(this.func_530_e(var2, var3, var4)) {
+ if(var1 == EnumSkyBlock.Sky) {
+ if(this.canExistingBlockSeeTheSky(var2, var3, var4)) {
+ var5 = 15;
+ }
+ } else if(var1 == EnumSkyBlock.Block) {
+ int var6 = this.getBlockId(var2, var3, var4);
+ if(Block.lightValue[var6] > var5) {
+ var5 = Block.lightValue[var6];
+ }
+ }
+
+ if(this.getSavedLightValue(var1, var2, var3, var4) != var5) {
+ this.func_483_a(var1, var2, var3, var4, var2, var3, var4);
+ }
+
+ }
+ }
+ }
+
+ public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) {
+ if(var3 >= 0 && var3 < 128 && var2 >= -32000000 && var4 >= -32000000 && var2 < 32000000 && var4 <= 32000000) {
+ int var5 = var2 >> 4;
+ int var6 = var4 >> 4;
+ if(!this.chunkExists(var5, var6)) {
+ return 0;
+ } else {
+ Chunk var7 = this.getChunkFromChunkCoords(var5, var6);
+ return var7.getSavedLightValue(var1, var2 & 15, var3, var4 & 15);
+ }
+ } else {
+ return var1.field_984_c;
+ }
+ }
+
+ public void setLightValue(EnumSkyBlock var1, int var2, int var3, int var4, int var5) {
+ if(var2 >= -32000000 && var4 >= -32000000 && var2 < 32000000 && var4 <= 32000000) {
+ if(var3 >= 0) {
+ if(var3 < 128) {
+ if(this.chunkExists(var2 >> 4, var4 >> 4)) {
+ Chunk var6 = this.getChunkFromChunkCoords(var2 >> 4, var4 >> 4);
+ var6.setLightValue(var1, var2 & 15, var3, var4 & 15, var5);
+
+ for(int var7 = 0; var7 < this.field_798_r.size(); ++var7) {
+ ((IWorldAccess)this.field_798_r.get(var7)).func_683_a(var2, var3, var4);
+ }
+
+ }
+ }
+ }
+ }
+ }
+
+ public float getLightBrightness(int var1, int var2, int var3) {
+ return this.field_4272_q.lightBrightnessTable[this.getBlockLightValue(var1, var2, var3)];
+ }
+
+ public boolean isDaytime() {
+ return this.skylightSubtracted < 4;
+ }
+
+ public MovingObjectPosition func_486_a(Vec3D var1, Vec3D var2) {
+ return this.func_505_a(var1, var2, false);
+ }
+
+ public MovingObjectPosition func_505_a(Vec3D var1, Vec3D var2, boolean var3) {
+ if(!Double.isNaN(var1.xCoord) && !Double.isNaN(var1.yCoord) && !Double.isNaN(var1.zCoord)) {
+ if(!Double.isNaN(var2.xCoord) && !Double.isNaN(var2.yCoord) && !Double.isNaN(var2.zCoord)) {
+ int var4 = MathHelper.floor_double(var2.xCoord);
+ int var5 = MathHelper.floor_double(var2.yCoord);
+ int var6 = MathHelper.floor_double(var2.zCoord);
+ int var7 = MathHelper.floor_double(var1.xCoord);
+ int var8 = MathHelper.floor_double(var1.yCoord);
+ int var9 = MathHelper.floor_double(var1.zCoord);
+ int var10 = 200;
+
+ while(var10-- >= 0) {
+ if(Double.isNaN(var1.xCoord) || Double.isNaN(var1.yCoord) || Double.isNaN(var1.zCoord)) {
+ return null;
+ }
+
+ if(var7 == var4 && var8 == var5 && var9 == var6) {
+ return null;
+ }
+
+ double var11 = 999.0D;
+ double var13 = 999.0D;
+ double var15 = 999.0D;
+ if(var4 > var7) {
+ var11 = (double)var7 + 1.0D;
+ }
+
+ if(var4 < var7) {
+ var11 = (double)var7 + 0.0D;
+ }
+
+ if(var5 > var8) {
+ var13 = (double)var8 + 1.0D;
+ }
+
+ if(var5 < var8) {
+ var13 = (double)var8 + 0.0D;
+ }
+
+ if(var6 > var9) {
+ var15 = (double)var9 + 1.0D;
+ }
+
+ if(var6 < var9) {
+ var15 = (double)var9 + 0.0D;
+ }
+
+ double var17 = 999.0D;
+ double var19 = 999.0D;
+ double var21 = 999.0D;
+ double var23 = var2.xCoord - var1.xCoord;
+ double var25 = var2.yCoord - var1.yCoord;
+ double var27 = var2.zCoord - var1.zCoord;
+ if(var11 != 999.0D) {
+ var17 = (var11 - var1.xCoord) / var23;
+ }
+
+ if(var13 != 999.0D) {
+ var19 = (var13 - var1.yCoord) / var25;
+ }
+
+ if(var15 != 999.0D) {
+ var21 = (var15 - var1.zCoord) / var27;
+ }
+
+ boolean var29 = false;
+ byte var35;
+ if(var17 < var19 && var17 < var21) {
+ if(var4 > var7) {
+ var35 = 4;
+ } else {
+ var35 = 5;
+ }
+
+ var1.xCoord = var11;
+ var1.yCoord += var25 * var17;
+ var1.zCoord += var27 * var17;
+ } else if(var19 < var21) {
+ if(var5 > var8) {
+ var35 = 0;
+ } else {
+ var35 = 1;
+ }
+
+ var1.xCoord += var23 * var19;
+ var1.yCoord = var13;
+ var1.zCoord += var27 * var19;
+ } else {
+ if(var6 > var9) {
+ var35 = 2;
+ } else {
+ var35 = 3;
+ }
+
+ var1.xCoord += var23 * var21;
+ var1.yCoord += var25 * var21;
+ var1.zCoord = var15;
+ }
+
+ Vec3D var30 = Vec3D.createVector(var1.xCoord, var1.yCoord, var1.zCoord);
+ var7 = (int)(var30.xCoord = (double)MathHelper.floor_double(var1.xCoord));
+ if(var35 == 5) {
+ --var7;
+ ++var30.xCoord;
+ }
+
+ var8 = (int)(var30.yCoord = (double)MathHelper.floor_double(var1.yCoord));
+ if(var35 == 1) {
+ --var8;
+ ++var30.yCoord;
+ }
+
+ var9 = (int)(var30.zCoord = (double)MathHelper.floor_double(var1.zCoord));
+ if(var35 == 3) {
+ --var9;
+ ++var30.zCoord;
+ }
+
+ int var31 = this.getBlockId(var7, var8, var9);
+ int var32 = this.getBlockMetadata(var7, var8, var9);
+ Block var33 = Block.blocksList[var31];
+ if(var31 > 0 && var33.canCollideCheck(var32, var3)) {
+ MovingObjectPosition var34 = var33.collisionRayTrace(this, var7, var8, var9, var1, var2);
+ if(var34 != null) {
+ return var34;
+ }
+ }
+ }
+
+ return null;
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ }
+
+ public void playSoundAtEntity(Entity var1, String var2, float var3, float var4) {
+ for(int var5 = 0; var5 < this.field_798_r.size(); ++var5) {
+ ((IWorldAccess)this.field_798_r.get(var5)).playSound(var2, var1.posX, var1.posY - (double)var1.yOffset, var1.posZ, var3, var4);
+ }
+
+ }
+
+ public void playSoundEffect(double var1, double var3, double var5, String var7, float var8, float var9) {
+ for(int var10 = 0; var10 < this.field_798_r.size(); ++var10) {
+ ((IWorldAccess)this.field_798_r.get(var10)).playSound(var7, var1, var3, var5, var8, var9);
+ }
+
+ }
+
+ public void playRecord(String var1, int var2, int var3, int var4) {
+ for(int var5 = 0; var5 < this.field_798_r.size(); ++var5) {
+ ((IWorldAccess)this.field_798_r.get(var5)).playRecord(var1, var2, var3, var4);
+ }
+
+ }
+
+ public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) {
+ for(int var14 = 0; var14 < this.field_798_r.size(); ++var14) {
+ ((IWorldAccess)this.field_798_r.get(var14)).spawnParticle(var1, var2, var4, var6, var8, var10, var12);
+ }
+
+ }
+
+ public boolean entityJoinedWorld(Entity var1) {
+ int var2 = MathHelper.floor_double(var1.posX / 16.0D);
+ int var3 = MathHelper.floor_double(var1.posZ / 16.0D);
+ boolean var4 = false;
+ if(var1 instanceof EntityPlayer) {
+ var4 = true;
+ }
+
+ if(!var4 && !this.chunkExists(var2, var3)) {
+ return false;
+ } else {
+ if(var1 instanceof EntityPlayer) {
+ this.playerEntities.add((EntityPlayer)var1);
+ System.out.println("Player count: " + this.playerEntities.size());
+ }
+
+ this.getChunkFromChunkCoords(var2, var3).addEntity(var1);
+ this.field_815_a.add(var1);
+ this.func_479_b(var1);
+ return true;
+ }
+ }
+
+ protected void func_479_b(Entity var1) {
+ for(int var2 = 0; var2 < this.field_798_r.size(); ++var2) {
+ ((IWorldAccess)this.field_798_r.get(var2)).func_681_a(var1);
+ }
+
+ }
+
+ protected void func_531_c(Entity var1) {
+ for(int var2 = 0; var2 < this.field_798_r.size(); ++var2) {
+ ((IWorldAccess)this.field_798_r.get(var2)).func_688_b(var1);
+ }
+
+ }
+
+ public void func_12016_d(Entity var1) {
+ var1.setEntityDead();
+ if(var1 instanceof EntityPlayer) {
+ this.playerEntities.remove((EntityPlayer)var1);
+ }
+
+ }
+
+ public void func_12014_e(Entity var1) {
+ var1.setEntityDead();
+ if(var1 instanceof EntityPlayer) {
+ this.playerEntities.remove((EntityPlayer)var1);
+ }
+
+ int var2 = var1.field_307_aa;
+ int var3 = var1.field_303_ac;
+ if(var1.field_276_Z && this.chunkExists(var2, var3)) {
+ this.getChunkFromChunkCoords(var2, var3).func_350_b(var1);
+ }
+
+ this.field_815_a.remove(var1);
+ this.func_531_c(var1);
+ }
+
+ public void func_4072_a(IWorldAccess var1) {
+ this.field_798_r.add(var1);
+ }
+
+ public List getCollidingBoundingBoxes(Entity var1, AxisAlignedBB var2) {
+ this.field_9207_I.clear();
+ int var3 = MathHelper.floor_double(var2.minX);
+ int var4 = MathHelper.floor_double(var2.maxX + 1.0D);
+ int var5 = MathHelper.floor_double(var2.minY);
+ int var6 = MathHelper.floor_double(var2.maxY + 1.0D);
+ int var7 = MathHelper.floor_double(var2.minZ);
+ int var8 = MathHelper.floor_double(var2.maxZ + 1.0D);
+
+ for(int var9 = var3; var9 < var4; ++var9) {
+ for(int var10 = var7; var10 < var8; ++var10) {
+ if(this.func_530_e(var9, 64, var10)) {
+ for(int var11 = var5 - 1; var11 < var6; ++var11) {
+ Block var12 = Block.blocksList[this.getBlockId(var9, var11, var10)];
+ if(var12 != null) {
+ var12.getCollidingBoundingBoxes(this, var9, var11, var10, var2, this.field_9207_I);
+ }
+ }
+ }
+ }
+ }
+
+ double var14 = 0.25D;
+ List var15 = this.getEntitiesWithinAABBExcludingEntity(var1, var2.expands(var14, var14, var14));
+
+ for(int var16 = 0; var16 < var15.size(); ++var16) {
+ AxisAlignedBB var13 = ((Entity)var15.get(var16)).func_93_n();
+ if(var13 != null && var13.intersectsWith(var2)) {
+ this.field_9207_I.add(var13);
+ }
+
+ var13 = var1.func_89_d((Entity)var15.get(var16));
+ if(var13 != null && var13.intersectsWith(var2)) {
+ this.field_9207_I.add(var13);
+ }
+ }
+
+ return this.field_9207_I;
+ }
+
+ public int calculateSkylightSubtracted(float var1) {
+ float var2 = this.func_477_b(var1);
+ float var3 = 1.0F - (MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 0.5F);
+ if(var3 < 0.0F) {
+ var3 = 0.0F;
+ }
+
+ if(var3 > 1.0F) {
+ var3 = 1.0F;
+ }
+
+ return (int)(var3 * 11.0F);
+ }
+
+ public float func_477_b(float var1) {
+ return this.field_4272_q.func_4089_a(this.worldTime, var1);
+ }
+
+ public int func_4075_e(int var1, int var2) {
+ Chunk var3 = this.getChunkFromBlockCoords(var1, var2);
+
+ int var4;
+ for(var4 = 127; this.getBlockMaterial(var1, var4, var2).func_218_c() && var4 > 0; --var4) {
+ }
+
+ var1 &= 15;
+
+ for(var2 &= 15; var4 > 0; --var4) {
+ int var5 = var3.getBlockID(var1, var4, var2);
+ if(var5 != 0 && (Block.blocksList[var5].blockMaterial.func_218_c() || Block.blocksList[var5].blockMaterial.getIsLiquid())) {
+ return var4 + 1;
+ }
+ }
+
+ return -1;
+ }
+
+ public void scheduleBlockUpdate(int var1, int var2, int var3, int var4) {
+ NextTickListEntry var5 = new NextTickListEntry(var1, var2, var3, var4);
+ byte var6 = 8;
+ if(this.field_4280_a) {
+ if(this.checkChunksExist(var5.xCoord - var6, var5.yCoord - var6, var5.zCoord - var6, var5.xCoord + var6, var5.yCoord + var6, var5.zCoord + var6)) {
+ int var7 = this.getBlockId(var5.xCoord, var5.yCoord, var5.zCoord);
+ if(var7 == var5.blockID && var7 > 0) {
+ Block.blocksList[var7].updateTick(this, var5.xCoord, var5.yCoord, var5.zCoord, this.rand);
+ }
+ }
+
+ } else {
+ if(this.checkChunksExist(var1 - var6, var2 - var6, var3 - var6, var1 + var6, var2 + var6, var3 + var6)) {
+ if(var4 > 0) {
+ var5.setScheduledTime((long)Block.blocksList[var4].tickRate() + this.worldTime);
+ }
+
+ if(!this.scheduledTickSet.contains(var5)) {
+ this.scheduledTickSet.add(var5);
+ this.scheduledTickTreeSet.add(var5);
+ }
+ }
+
+ }
+ }
+
+ public void func_459_b() {
+ this.field_815_a.removeAll(this.field_790_z);
+
+ int var1;
+ Entity var2;
+ int var3;
+ int var4;
+ for(var1 = 0; var1 < this.field_790_z.size(); ++var1) {
+ var2 = (Entity)this.field_790_z.get(var1);
+ var3 = var2.field_307_aa;
+ var4 = var2.field_303_ac;
+ if(var2.field_276_Z && this.chunkExists(var3, var4)) {
+ this.getChunkFromChunkCoords(var3, var4).func_350_b(var2);
+ }
+ }
+
+ for(var1 = 0; var1 < this.field_790_z.size(); ++var1) {
+ this.func_531_c((Entity)this.field_790_z.get(var1));
+ }
+
+ this.field_790_z.clear();
+
+ for(var1 = 0; var1 < this.field_815_a.size(); ++var1) {
+ var2 = (Entity)this.field_815_a.get(var1);
+ if(var2.field_327_g != null) {
+ if(!var2.field_327_g.field_304_B && var2.field_327_g.field_328_f == var2) {
+ continue;
+ }
+
+ var2.field_327_g.field_328_f = null;
+ var2.field_327_g = null;
+ }
+
+ if(!var2.field_304_B) {
+ this.func_520_e(var2);
+ }
+
+ if(var2.field_304_B) {
+ var3 = var2.field_307_aa;
+ var4 = var2.field_303_ac;
+ if(var2.field_276_Z && this.chunkExists(var3, var4)) {
+ this.getChunkFromChunkCoords(var3, var4).func_350_b(var2);
+ }
+
+ this.field_815_a.remove(var1--);
+ this.func_531_c(var2);
+ }
+ }
+
+ for(var1 = 0; var1 < this.field_814_b.size(); ++var1) {
+ TileEntity var5 = (TileEntity)this.field_814_b.get(var1);
+ var5.updateEntity();
+ }
+
+ }
+
+ public void func_520_e(Entity var1) {
+ this.func_4074_a(var1, true);
+ }
+
+ public void func_4074_a(Entity var1, boolean var2) {
+ int var3 = MathHelper.floor_double(var1.posX);
+ int var4 = MathHelper.floor_double(var1.posZ);
+ byte var5 = 16;
+ if(var2 || this.checkChunksExist(var3 - var5, 0, var4 - var5, var3 + var5, 128, var4 + var5)) {
+ var1.field_9071_O = var1.posX;
+ var1.field_9070_P = var1.posY;
+ var1.field_9069_Q = var1.posZ;
+ var1.prevRotationYaw = var1.rotationYaw;
+ var1.prevRotationPitch = var1.rotationPitch;
+ if(var2 && var1.field_276_Z) {
+ if(var1.field_327_g != null) {
+ var1.func_115_v();
+ } else {
+ var1.onUpdate();
+ }
+ }
+
+ if(Double.isNaN(var1.posX) || Double.isInfinite(var1.posX)) {
+ var1.posX = var1.field_9071_O;
+ }
+
+ if(Double.isNaN(var1.posY) || Double.isInfinite(var1.posY)) {
+ var1.posY = var1.field_9070_P;
+ }
+
+ if(Double.isNaN(var1.posZ) || Double.isInfinite(var1.posZ)) {
+ var1.posZ = var1.field_9069_Q;
+ }
+
+ if(Double.isNaN((double)var1.rotationPitch) || Double.isInfinite((double)var1.rotationPitch)) {
+ var1.rotationPitch = var1.prevRotationPitch;
+ }
+
+ if(Double.isNaN((double)var1.rotationYaw) || Double.isInfinite((double)var1.rotationYaw)) {
+ var1.rotationYaw = var1.prevRotationYaw;
+ }
+
+ int var6 = MathHelper.floor_double(var1.posX / 16.0D);
+ int var7 = MathHelper.floor_double(var1.posY / 16.0D);
+ int var8 = MathHelper.floor_double(var1.posZ / 16.0D);
+ if(!var1.field_276_Z || var1.field_307_aa != var6 || var1.field_305_ab != var7 || var1.field_303_ac != var8) {
+ if(var1.field_276_Z && this.chunkExists(var1.field_307_aa, var1.field_303_ac)) {
+ this.getChunkFromChunkCoords(var1.field_307_aa, var1.field_303_ac).func_332_a(var1, var1.field_305_ab);
+ }
+
+ if(this.chunkExists(var6, var8)) {
+ var1.field_276_Z = true;
+ this.getChunkFromChunkCoords(var6, var8).addEntity(var1);
+ } else {
+ var1.field_276_Z = false;
+ }
+ }
+
+ if(var2 && var1.field_276_Z && var1.field_328_f != null) {
+ if(!var1.field_328_f.field_304_B && var1.field_328_f.field_327_g == var1) {
+ this.func_520_e(var1.field_328_f);
+ } else {
+ var1.field_328_f.field_327_g = null;
+ var1.field_328_f = null;
+ }
+ }
+
+ }
+ }
+
+ public boolean func_522_a(AxisAlignedBB var1) {
+ List var2 = this.getEntitiesWithinAABBExcludingEntity((Entity)null, var1);
+
+ for(int var3 = 0; var3 < var2.size(); ++var3) {
+ Entity var4 = (Entity)var2.get(var3);
+ if(!var4.field_304_B && var4.field_329_e) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public boolean getIsAnyLiquid(AxisAlignedBB var1) {
+ int var2 = MathHelper.floor_double(var1.minX);
+ int var3 = MathHelper.floor_double(var1.maxX + 1.0D);
+ int var4 = MathHelper.floor_double(var1.minY);
+ int var5 = MathHelper.floor_double(var1.maxY + 1.0D);
+ int var6 = MathHelper.floor_double(var1.minZ);
+ int var7 = MathHelper.floor_double(var1.maxZ + 1.0D);
+ if(var1.minX < 0.0D) {
+ --var2;
+ }
+
+ if(var1.minY < 0.0D) {
+ --var4;
+ }
+
+ if(var1.minZ < 0.0D) {
+ --var6;
+ }
+
+ for(int var8 = var2; var8 < var3; ++var8) {
+ for(int var9 = var4; var9 < var5; ++var9) {
+ for(int var10 = var6; var10 < var7; ++var10) {
+ Block var11 = Block.blocksList[this.getBlockId(var8, var9, var10)];
+ if(var11 != null && var11.blockMaterial.getIsLiquid()) {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public boolean func_523_c(AxisAlignedBB var1) {
+ int var2 = MathHelper.floor_double(var1.minX);
+ int var3 = MathHelper.floor_double(var1.maxX + 1.0D);
+ int var4 = MathHelper.floor_double(var1.minY);
+ int var5 = MathHelper.floor_double(var1.maxY + 1.0D);
+ int var6 = MathHelper.floor_double(var1.minZ);
+ int var7 = MathHelper.floor_double(var1.maxZ + 1.0D);
+
+ for(int var8 = var2; var8 < var3; ++var8) {
+ for(int var9 = var4; var9 < var5; ++var9) {
+ for(int var10 = var6; var10 < var7; ++var10) {
+ int var11 = this.getBlockId(var8, var9, var10);
+ if(var11 == Block.fire.blockID || var11 == Block.lavaStill.blockID || var11 == Block.lavaMoving.blockID) {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public boolean func_490_a(AxisAlignedBB var1, Material var2, Entity var3) {
+ int var4 = MathHelper.floor_double(var1.minX);
+ int var5 = MathHelper.floor_double(var1.maxX + 1.0D);
+ int var6 = MathHelper.floor_double(var1.minY);
+ int var7 = MathHelper.floor_double(var1.maxY + 1.0D);
+ int var8 = MathHelper.floor_double(var1.minZ);
+ int var9 = MathHelper.floor_double(var1.maxZ + 1.0D);
+ boolean var10 = false;
+ Vec3D var11 = Vec3D.createVector(0.0D, 0.0D, 0.0D);
+
+ for(int var12 = var4; var12 < var5; ++var12) {
+ for(int var13 = var6; var13 < var7; ++var13) {
+ for(int var14 = var8; var14 < var9; ++var14) {
+ Block var15 = Block.blocksList[this.getBlockId(var12, var13, var14)];
+ if(var15 != null && var15.blockMaterial == var2) {
+ double var16 = (double)((float)(var13 + 1) - BlockFluids.setFluidHeight(this.getBlockMetadata(var12, var13, var14)));
+ if((double)var7 >= var16) {
+ var10 = true;
+ var15.velocityToAddToEntity(this, var12, var13, var14, var3, var11);
+ }
+ }
+ }
+ }
+ }
+
+ if(var11.lengthVector() > 0.0D) {
+ var11 = var11.normalize();
+ double var18 = 0.004D;
+ var3.motionX += var11.xCoord * var18;
+ var3.motionY += var11.yCoord * var18;
+ var3.motionZ += var11.zCoord * var18;
+ }
+
+ return var10;
+ }
+
+ public boolean isMaterialInBB(AxisAlignedBB var1, Material var2) {
+ int var3 = MathHelper.floor_double(var1.minX);
+ int var4 = MathHelper.floor_double(var1.maxX + 1.0D);
+ int var5 = MathHelper.floor_double(var1.minY);
+ int var6 = MathHelper.floor_double(var1.maxY + 1.0D);
+ int var7 = MathHelper.floor_double(var1.minZ);
+ int var8 = MathHelper.floor_double(var1.maxZ + 1.0D);
+
+ for(int var9 = var3; var9 < var4; ++var9) {
+ for(int var10 = var5; var10 < var6; ++var10) {
+ for(int var11 = var7; var11 < var8; ++var11) {
+ Block var12 = Block.blocksList[this.getBlockId(var9, var10, var11)];
+ if(var12 != null && var12.blockMaterial == var2) {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public boolean func_524_b(AxisAlignedBB var1, Material var2) {
+ int var3 = MathHelper.floor_double(var1.minX);
+ int var4 = MathHelper.floor_double(var1.maxX + 1.0D);
+ int var5 = MathHelper.floor_double(var1.minY);
+ int var6 = MathHelper.floor_double(var1.maxY + 1.0D);
+ int var7 = MathHelper.floor_double(var1.minZ);
+ int var8 = MathHelper.floor_double(var1.maxZ + 1.0D);
+
+ for(int var9 = var3; var9 < var4; ++var9) {
+ for(int var10 = var5; var10 < var6; ++var10) {
+ for(int var11 = var7; var11 < var8; ++var11) {
+ Block var12 = Block.blocksList[this.getBlockId(var9, var10, var11)];
+ if(var12 != null && var12.blockMaterial == var2) {
+ int var13 = this.getBlockMetadata(var9, var10, var11);
+ double var14 = (double)(var10 + 1);
+ if(var13 < 8) {
+ var14 = (double)(var10 + 1) - (double)var13 / 8.0D;
+ }
+
+ if(var14 >= var1.minY) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public Explosion func_12013_a(Entity var1, double var2, double var4, double var6, float var8) {
+ return this.func_12015_a(var1, var2, var4, var6, var8, false);
+ }
+
+ public Explosion func_12015_a(Entity var1, double var2, double var4, double var6, float var8, boolean var9) {
+ Explosion var10 = new Explosion(this, var1, var2, var4, var6, var8);
+ var10.field_12031_a = var9;
+ var10.func_12023_a();
+ var10.func_732_a();
+ return var10;
+ }
+
+ public float func_494_a(Vec3D var1, AxisAlignedBB var2) {
+ double var3 = 1.0D / ((var2.maxX - var2.minX) * 2.0D + 1.0D);
+ double var5 = 1.0D / ((var2.maxY - var2.minY) * 2.0D + 1.0D);
+ double var7 = 1.0D / ((var2.maxZ - var2.minZ) * 2.0D + 1.0D);
+ int var9 = 0;
+ int var10 = 0;
+
+ for(float var11 = 0.0F; var11 <= 1.0F; var11 = (float)((double)var11 + var3)) {
+ for(float var12 = 0.0F; var12 <= 1.0F; var12 = (float)((double)var12 + var5)) {
+ for(float var13 = 0.0F; var13 <= 1.0F; var13 = (float)((double)var13 + var7)) {
+ double var14 = var2.minX + (var2.maxX - var2.minX) * (double)var11;
+ double var16 = var2.minY + (var2.maxY - var2.minY) * (double)var12;
+ double var18 = var2.minZ + (var2.maxZ - var2.minZ) * (double)var13;
+ if(this.func_486_a(Vec3D.createVector(var14, var16, var18), var1) == null) {
+ ++var9;
+ }
+
+ ++var10;
+ }
+ }
+ }
+
+ return (float)var9 / (float)var10;
+ }
+
+ public TileEntity getBlock(int var1, int var2, int var3) {
+ Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4);
+ return var4 != null ? var4.func_338_d(var1 & 15, var2, var3 & 15) : null;
+ }
+
+ public void func_473_a(int var1, int var2, int var3, TileEntity var4) {
+ Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4);
+ if(var5 != null) {
+ var5.func_352_a(var1 & 15, var2, var3 & 15, var4);
+ }
+
+ }
+
+ public void func_513_l(int var1, int var2, int var3) {
+ Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4);
+ if(var4 != null) {
+ var4.func_359_e(var1 & 15, var2, var3 & 15);
+ }
+
+ }
+
+ public boolean doesBlockAllowAttachment(int var1, int var2, int var3) {
+ Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)];
+ return var4 == null ? false : var4.allowsAttachment();
+ }
+
+ public boolean func_6156_d() {
+ if(this.field_4265_J >= 50) {
+ return false;
+ } else {
+ ++this.field_4265_J;
+
+ try {
+ int var1 = 5000;
+
+ boolean var2;
+ while(this.field_821.size() > 0) {
+ --var1;
+ if(var1 <= 0) {
+ var2 = true;
+ return var2;
+ }
+
+ ((MetadataChunkBlock)this.field_821.remove(this.field_821.size() - 1)).func_4107_a(this);
+ }
+
+ var2 = false;
+ return var2;
+ } finally {
+ --this.field_4265_J;
+ }
+ }
+ }
+
+ public void func_483_a(EnumSkyBlock var1, int var2, int var3, int var4, int var5, int var6, int var7) {
+ this.func_484_a(var1, var2, var3, var4, var5, var6, var7, true);
+ }
+
+ public void func_484_a(EnumSkyBlock var1, int var2, int var3, int var4, int var5, int var6, int var7, boolean var8) {
+ if(!this.field_4272_q.field_4306_c || var1 != EnumSkyBlock.Sky) {
+ ++field_4268_y;
+ if(field_4268_y == 50) {
+ --field_4268_y;
+ } else {
+ int var9 = (var5 + var2) / 2;
+ int var10 = (var7 + var4) / 2;
+ if(!this.func_530_e(var9, 64, var10)) {
+ --field_4268_y;
+ } else {
+ int var11 = this.field_821.size();
+ if(var8) {
+ int var12 = 4;
+ if(var12 > var11) {
+ var12 = var11;
+ }
+
+ for(int var13 = 0; var13 < var12; ++var13) {
+ MetadataChunkBlock var14 = (MetadataChunkBlock)this.field_821.get(this.field_821.size() - var13 - 1);
+ if(var14.field_957_a == var1 && var14.func_692_a(var2, var3, var4, var5, var6, var7)) {
+ --field_4268_y;
+ return;
+ }
+ }
+ }
+
+ this.field_821.add(new MetadataChunkBlock(var1, var2, var3, var4, var5, var6, var7));
+ if(this.field_821.size() > 100000) {
+ this.field_821.clear();
+ }
+
+ --field_4268_y;
+ }
+ }
+ }
+ }
+
+ public void calculateInitialSkylight() {
+ int var1 = this.calculateSkylightSubtracted(1.0F);
+ if(var1 != this.skylightSubtracted) {
+ this.skylightSubtracted = var1;
+ }
+
+ }
+
+ public void tick() {
+ SpawnerAnimals.func_4111_a(this);
+ this.chunkProvider.func_361_a();
+ int var1 = this.calculateSkylightSubtracted(1.0F);
+ if(var1 != this.skylightSubtracted) {
+ this.skylightSubtracted = var1;
+
+ for(int var2 = 0; var2 < this.field_798_r.size(); ++var2) {
+ ((IWorldAccess)this.field_798_r.get(var2)).func_684_a();
+ }
+ }
+
+ ++this.worldTime;
+ if(this.worldTime % (long)this.field_4277_j == 0L) {
+ this.func_485_a(false, (IProgressUpdate)null);
+ }
+
+ this.TickUpdates(false);
+ this.func_4073_g();
+ }
+
+ protected void func_4073_g() {
+ this.field_4264_K.clear();
+
+ int var3;
+ int var4;
+ int var6;
+ int var7;
+ for(int var1 = 0; var1 < this.playerEntities.size(); ++var1) {
+ EntityPlayer var2 = (EntityPlayer)this.playerEntities.get(var1);
+ var3 = MathHelper.floor_double(var2.posX / 16.0D);
+ var4 = MathHelper.floor_double(var2.posZ / 16.0D);
+ byte var5 = 9;
+
+ for(var6 = -var5; var6 <= var5; ++var6) {
+ for(var7 = -var5; var7 <= var5; ++var7) {
+ this.field_4264_K.add(new ChunkCoordIntPair(var6 + var3, var7 + var4));
+ }
+ }
+ }
+
+ if(this.field_4263_L > 0) {
+ --this.field_4263_L;
+ }
+
+ Iterator var12 = this.field_4264_K.iterator();
+
+ while(var12.hasNext()) {
+ ChunkCoordIntPair var13 = (ChunkCoordIntPair)var12.next();
+ var3 = var13.field_152_a * 16;
+ var4 = var13.field_151_b * 16;
+ Chunk var14 = this.getChunkFromChunkCoords(var13.field_152_a, var13.field_151_b);
+ int var8;
+ int var9;
+ int var10;
+ if(this.field_4263_L == 0) {
+ this.field_4279_g = this.field_4279_g * 3 + this.field_4278_h;
+ var6 = this.field_4279_g >> 2;
+ var7 = var6 & 15;
+ var8 = var6 >> 8 & 15;
+ var9 = var6 >> 16 & 127;
+ var10 = var14.getBlockID(var7, var9, var8);
+ var7 += var3;
+ var8 += var4;
+ if(var10 == 0 && this.getBlockLightValue(var7, var9, var8) <= this.rand.nextInt(8) && this.getSavedLightValue(EnumSkyBlock.Sky, var7, var9, var8) <= 0) {
+ EntityPlayer var11 = this.getClosestPlayer((double)var7 + 0.5D, (double)var9 + 0.5D, (double)var8 + 0.5D, 8.0D);
+ if(var11 != null && var11.getDistanceSq((double)var7 + 0.5D, (double)var9 + 0.5D, (double)var8 + 0.5D) > 4.0D) {
+ this.playSoundEffect((double)var7 + 0.5D, (double)var9 + 0.5D, (double)var8 + 0.5D, "ambient.cave.cave", 0.7F, 0.8F + this.rand.nextFloat() * 0.2F);
+ this.field_4263_L = this.rand.nextInt(12000) + 6000;
+ }
+ }
+ }
+
+ for(var6 = 0; var6 < 80; ++var6) {
+ this.field_4279_g = this.field_4279_g * 3 + this.field_4278_h;
+ var7 = this.field_4279_g >> 2;
+ var8 = var7 & 15;
+ var9 = var7 >> 8 & 15;
+ var10 = var7 >> 16 & 127;
+ byte var15 = var14.blocks[var8 << 11 | var9 << 7 | var10];
+ if(Block.tickOnLoad[var15]) {
+ Block.blocksList[var15].updateTick(this, var8 + var3, var10, var9 + var4, this.rand);
+ }
+ }
+ }
+
+ }
+
+ public boolean TickUpdates(boolean var1) {
+ int var2 = this.scheduledTickTreeSet.size();
+ if(var2 != this.scheduledTickSet.size()) {
+ throw new IllegalStateException("TickNextTick list out of synch");
+ } else {
+ if(var2 > 1000) {
+ var2 = 1000;
+ }
+
+ for(int var3 = 0; var3 < var2; ++var3) {
+ NextTickListEntry var4 = (NextTickListEntry)this.scheduledTickTreeSet.first();
+ if(!var1 && var4.scheduledTime > this.worldTime) {
+ break;
+ }
+
+ this.scheduledTickTreeSet.remove(var4);
+ this.scheduledTickSet.remove(var4);
+ byte var5 = 8;
+ if(this.checkChunksExist(var4.xCoord - var5, var4.yCoord - var5, var4.zCoord - var5, var4.xCoord + var5, var4.yCoord + var5, var4.zCoord + var5)) {
+ int var6 = this.getBlockId(var4.xCoord, var4.yCoord, var4.zCoord);
+ if(var6 == var4.blockID && var6 > 0) {
+ Block.blocksList[var6].updateTick(this, var4.xCoord, var4.yCoord, var4.zCoord, this.rand);
+ }
+ }
+ }
+
+ return this.scheduledTickTreeSet.size() != 0;
+ }
+ }
+
+ public List getEntitiesWithinAABBExcludingEntity(Entity var1, AxisAlignedBB var2) {
+ this.field_778_L.clear();
+ int var3 = MathHelper.floor_double((var2.minX - 2.0D) / 16.0D);
+ int var4 = MathHelper.floor_double((var2.maxX + 2.0D) / 16.0D);
+ int var5 = MathHelper.floor_double((var2.minZ - 2.0D) / 16.0D);
+ int var6 = MathHelper.floor_double((var2.maxZ + 2.0D) / 16.0D);
+
+ for(int var7 = var3; var7 <= var4; ++var7) {
+ for(int var8 = var5; var8 <= var6; ++var8) {
+ if(this.chunkExists(var7, var8)) {
+ this.getChunkFromChunkCoords(var7, var8).getEntitiesWithinAABBForEntity(var1, var2, this.field_778_L);
+ }
+ }
+ }
+
+ return this.field_778_L;
+ }
+
+ public List getEntitiesWithinAABB(Class var1, AxisAlignedBB var2) {
+ int var3 = MathHelper.floor_double((var2.minX - 2.0D) / 16.0D);
+ int var4 = MathHelper.floor_double((var2.maxX + 2.0D) / 16.0D);
+ int var5 = MathHelper.floor_double((var2.minZ - 2.0D) / 16.0D);
+ int var6 = MathHelper.floor_double((var2.maxZ + 2.0D) / 16.0D);
+ ArrayList var7 = new ArrayList();
+
+ for(int var8 = var3; var8 <= var4; ++var8) {
+ for(int var9 = var5; var9 <= var6; ++var9) {
+ if(this.chunkExists(var8, var9)) {
+ this.getChunkFromChunkCoords(var8, var9).getEntitiesOfTypeWithinAAAB(var1, var2, var7);
+ }
+ }
+ }
+
+ return var7;
+ }
+
+ public void func_515_b(int var1, int var2, int var3, TileEntity var4) {
+ if(this.func_530_e(var1, var2, var3)) {
+ this.getChunkFromBlockCoords(var1, var3).func_336_e();
+ }
+
+ for(int var5 = 0; var5 < this.field_798_r.size(); ++var5) {
+ ((IWorldAccess)this.field_798_r.get(var5)).func_686_a(var1, var2, var3, var4);
+ }
+
+ }
+
+ public int countEntities(Class var1) {
+ int var2 = 0;
+
+ for(int var3 = 0; var3 < this.field_815_a.size(); ++var3) {
+ Entity var4 = (Entity)this.field_815_a.get(var3);
+ if(var1.isAssignableFrom(var4.getClass())) {
+ ++var2;
+ }
+ }
+
+ return var2;
+ }
+
+ public void func_464_a(List var1) {
+ this.field_815_a.addAll(var1);
+
+ for(int var2 = 0; var2 < var1.size(); ++var2) {
+ this.func_479_b((Entity)var1.get(var2));
+ }
+
+ }
+
+ public void func_461_b(List var1) {
+ this.field_790_z.addAll(var1);
+ }
+
+ public boolean func_516_a(int var1, int var2, int var3, int var4, boolean var5) {
+ int var6 = this.getBlockId(var2, var3, var4);
+ Block var7 = Block.blocksList[var6];
+ Block var8 = Block.blocksList[var1];
+ AxisAlignedBB var9 = var8.getCollisionBoundingBoxFromPool(this, var2, var3, var4);
+ if(var5) {
+ var9 = null;
+ }
+
+ return var9 != null && !this.func_522_a(var9) ? false : (var7 != Block.waterStill && var7 != Block.waterMoving && var7 != Block.lavaStill && var7 != Block.lavaMoving && var7 != Block.fire && var7 != Block.snow ? var1 > 0 && var7 == null && var8.canPlaceBlockAt(this, var2, var3, var4) : true);
+ }
+
+ public PathEntity func_482_a(Entity var1, Entity var2, float var3) {
+ int var4 = MathHelper.floor_double(var1.posX);
+ int var5 = MathHelper.floor_double(var1.posY);
+ int var6 = MathHelper.floor_double(var1.posZ);
+ int var7 = (int)(var3 + 16.0F);
+ int var8 = var4 - var7;
+ int var9 = var5 - var7;
+ int var10 = var6 - var7;
+ int var11 = var4 + var7;
+ int var12 = var5 + var7;
+ int var13 = var6 + var7;
+ ChunkCache var14 = new ChunkCache(this, var8, var9, var10, var11, var12, var13);
+ return (new Pathfinder(var14)).createEntityPathTo(var1, var2, var3);
+ }
+
+ public PathEntity func_501_a(Entity var1, int var2, int var3, int var4, float var5) {
+ int var6 = MathHelper.floor_double(var1.posX);
+ int var7 = MathHelper.floor_double(var1.posY);
+ int var8 = MathHelper.floor_double(var1.posZ);
+ int var9 = (int)(var5 + 8.0F);
+ int var10 = var6 - var9;
+ int var11 = var7 - var9;
+ int var12 = var8 - var9;
+ int var13 = var6 + var9;
+ int var14 = var7 + var9;
+ int var15 = var8 + var9;
+ ChunkCache var16 = new ChunkCache(this, var10, var11, var12, var13, var14, var15);
+ return (new Pathfinder(var16)).createEntityPathTo(var1, var2, var3, var4, var5);
+ }
+
+ public boolean isBlockProvidingPowerTo(int var1, int var2, int var3, int var4) {
+ int var5 = this.getBlockId(var1, var2, var3);
+ return var5 == 0 ? false : Block.blocksList[var5].isIndirectlyPoweringTo(this, var1, var2, var3, var4);
+ }
+
+ public boolean isBlockGettingPowered(int var1, int var2, int var3) {
+ return this.isBlockProvidingPowerTo(var1, var2 - 1, var3, 0) ? true : (this.isBlockProvidingPowerTo(var1, var2 + 1, var3, 1) ? true : (this.isBlockProvidingPowerTo(var1, var2, var3 - 1, 2) ? true : (this.isBlockProvidingPowerTo(var1, var2, var3 + 1, 3) ? true : (this.isBlockProvidingPowerTo(var1 - 1, var2, var3, 4) ? true : this.isBlockProvidingPowerTo(var1 + 1, var2, var3, 5)))));
+ }
+
+ public boolean isBlockIndirectlyProvidingPowerTo(int var1, int var2, int var3, int var4) {
+ if(this.doesBlockAllowAttachment(var1, var2, var3)) {
+ return this.isBlockGettingPowered(var1, var2, var3);
+ } else {
+ int var5 = this.getBlockId(var1, var2, var3);
+ return var5 == 0 ? false : Block.blocksList[var5].isPoweringTo(this, var1, var2, var3, var4);
+ }
+ }
+
+ public boolean isBlockIndirectlyGettingPowered(int var1, int var2, int var3) {
+ return this.isBlockIndirectlyProvidingPowerTo(var1, var2 - 1, var3, 0) ? true : (this.isBlockIndirectlyProvidingPowerTo(var1, var2 + 1, var3, 1) ? true : (this.isBlockIndirectlyProvidingPowerTo(var1, var2, var3 - 1, 2) ? true : (this.isBlockIndirectlyProvidingPowerTo(var1, var2, var3 + 1, 3) ? true : (this.isBlockIndirectlyProvidingPowerTo(var1 - 1, var2, var3, 4) ? true : this.isBlockIndirectlyProvidingPowerTo(var1 + 1, var2, var3, 5)))));
+ }
+
+ public EntityPlayer getClosestPlayerToEntity(Entity var1, double var2) {
+ return this.getClosestPlayer(var1.posX, var1.posY, var1.posZ, var2);
+ }
+
+ public EntityPlayer getClosestPlayer(double var1, double var3, double var5, double var7) {
+ double var9 = -1.0D;
+ EntityPlayer var11 = null;
+
+ for(int var12 = 0; var12 < this.playerEntities.size(); ++var12) {
+ EntityPlayer var13 = (EntityPlayer)this.playerEntities.get(var12);
+ double var14 = var13.getDistanceSq(var1, var3, var5);
+ if((var7 < 0.0D || var14 < var7 * var7) && (var9 == -1.0D || var14 < var9)) {
+ var9 = var14;
+ var11 = var13;
+ }
+ }
+
+ return var11;
+ }
+
+ public byte[] func_504_c(int var1, int var2, int var3, int var4, int var5, int var6) {
+ byte[] var7 = new byte[var4 * var5 * var6 * 5 / 2];
+ int var8 = var1 >> 4;
+ int var9 = var3 >> 4;
+ int var10 = var1 + var4 - 1 >> 4;
+ int var11 = var3 + var6 - 1 >> 4;
+ int var12 = 0;
+ int var13 = var2;
+ int var14 = var2 + var5;
+ if(var2 < 0) {
+ var13 = 0;
+ }
+
+ if(var14 > 128) {
+ var14 = 128;
+ }
+
+ for(int var15 = var8; var15 <= var10; ++var15) {
+ int var16 = var1 - var15 * 16;
+ int var17 = var1 + var4 - var15 * 16;
+ if(var16 < 0) {
+ var16 = 0;
+ }
+
+ if(var17 > 16) {
+ var17 = 16;
+ }
+
+ for(int var18 = var9; var18 <= var11; ++var18) {
+ int var19 = var3 - var18 * 16;
+ int var20 = var3 + var6 - var18 * 16;
+ if(var19 < 0) {
+ var19 = 0;
+ }
+
+ if(var20 > 16) {
+ var20 = 16;
+ }
+
+ var12 = this.getChunkFromChunkCoords(var15, var18).func_340_a(var7, var16, var13, var19, var17, var14, var20, var12);
+ }
+ }
+
+ return var7;
+ }
+
+ public void func_476_g() {
+ try {
+ File var1 = new File(this.field_797_s, "session.lock");
+ DataInputStream var2 = new DataInputStream(new FileInputStream(var1));
+
+ try {
+ if(var2.readLong() != this.field_784_F) {
+ throw new MinecraftException("The save is being accessed from another location, aborting");
+ }
+ } finally {
+ var2.close();
+ }
+
+ } catch (IOException var7) {
+ throw new MinecraftException("Failed to check session lock, aborting");
+ }
+ }
+
+ public boolean func_6157_a(EntityPlayer var1, int var2, int var3, int var4) {
+ return true;
+ }
+
+ public void func_9206_a(Entity var1, byte var2) {
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldChunkManager.java b/minecraft_server/src/net/minecraft/src/WorldChunkManager.java
new file mode 100644
index 0000000..33703f4
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldChunkManager.java
@@ -0,0 +1,112 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldChunkManager {
+ private NoiseGeneratorOctaves2 field_4255_e;
+ private NoiseGeneratorOctaves2 field_4254_f;
+ private NoiseGeneratorOctaves2 field_4253_g;
+ public double[] temperature;
+ public double[] humidity;
+ public double[] field_4257_c;
+ public MobSpawnerBase[] field_4256_d;
+
+ protected WorldChunkManager() {
+ }
+
+ public WorldChunkManager(World var1) {
+ this.field_4255_e = new NoiseGeneratorOctaves2(new Random(var1.randomSeed * 9871L), 4);
+ this.field_4254_f = new NoiseGeneratorOctaves2(new Random(var1.randomSeed * 39811L), 4);
+ this.field_4253_g = new NoiseGeneratorOctaves2(new Random(var1.randomSeed * 543321L), 2);
+ }
+
+ public MobSpawnerBase func_4066_a(ChunkCoordIntPair var1) {
+ return this.func_4067_a(var1.field_152_a, var1.field_151_b);
+ }
+
+ public MobSpawnerBase func_4067_a(int var1, int var2) {
+ return this.func_4065_a(var1, var2, 1, 1)[0];
+ }
+
+ public MobSpawnerBase[] func_4065_a(int var1, int var2, int var3, int var4) {
+ this.field_4256_d = this.loadBlockGeneratorData(this.field_4256_d, var1, var2, var3, var4);
+ return this.field_4256_d;
+ }
+
+ public double[] getTemperatures(double[] var1, int var2, int var3, int var4, int var5) {
+ if(var1 == null || var1.length < var4 * var5) {
+ var1 = new double[var4 * var5];
+ }
+
+ var1 = this.field_4255_e.func_4101_a(var1, (double)var2, (double)var3, var4, var4, (double)0.025F, (double)0.025F, 0.25D);
+ this.field_4257_c = this.field_4253_g.func_4101_a(this.field_4257_c, (double)var2, (double)var3, var4, var4, 0.25D, 0.25D, 0.5882352941176471D);
+ int var6 = 0;
+
+ for(int var7 = 0; var7 < var4; ++var7) {
+ for(int var8 = 0; var8 < var5; ++var8) {
+ double var9 = this.field_4257_c[var6] * 1.1D + 0.5D;
+ double var11 = 0.01D;
+ double var13 = 1.0D - var11;
+ double var15 = (var1[var6] * 0.15D + 0.7D) * var13 + var9 * var11;
+ var15 = 1.0D - (1.0D - var15) * (1.0D - var15);
+ if(var15 < 0.0D) {
+ var15 = 0.0D;
+ }
+
+ if(var15 > 1.0D) {
+ var15 = 1.0D;
+ }
+
+ var1[var6] = var15;
+ ++var6;
+ }
+ }
+
+ return var1;
+ }
+
+ public MobSpawnerBase[] loadBlockGeneratorData(MobSpawnerBase[] var1, int var2, int var3, int var4, int var5) {
+ if(var1 == null || var1.length < var4 * var5) {
+ var1 = new MobSpawnerBase[var4 * var5];
+ }
+
+ this.temperature = this.field_4255_e.func_4101_a(this.temperature, (double)var2, (double)var3, var4, var4, (double)0.025F, (double)0.025F, 0.25D);
+ this.humidity = this.field_4254_f.func_4101_a(this.humidity, (double)var2, (double)var3, var4, var4, (double)0.05F, (double)0.05F, 1.0D / 3.0D);
+ this.field_4257_c = this.field_4253_g.func_4101_a(this.field_4257_c, (double)var2, (double)var3, var4, var4, 0.25D, 0.25D, 0.5882352941176471D);
+ int var6 = 0;
+
+ for(int var7 = 0; var7 < var4; ++var7) {
+ for(int var8 = 0; var8 < var5; ++var8) {
+ double var9 = this.field_4257_c[var6] * 1.1D + 0.5D;
+ double var11 = 0.01D;
+ double var13 = 1.0D - var11;
+ double var15 = (this.temperature[var6] * 0.15D + 0.7D) * var13 + var9 * var11;
+ var11 = 0.002D;
+ var13 = 1.0D - var11;
+ double var17 = (this.humidity[var6] * 0.15D + 0.5D) * var13 + var9 * var11;
+ var15 = 1.0D - (1.0D - var15) * (1.0D - var15);
+ if(var15 < 0.0D) {
+ var15 = 0.0D;
+ }
+
+ if(var17 < 0.0D) {
+ var17 = 0.0D;
+ }
+
+ if(var15 > 1.0D) {
+ var15 = 1.0D;
+ }
+
+ if(var17 > 1.0D) {
+ var17 = 1.0D;
+ }
+
+ this.temperature[var6] = var15;
+ this.humidity[var6] = var17;
+ var1[var6++] = MobSpawnerBase.getBiomeFromLookup(var15, var17);
+ }
+ }
+
+ return var1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldChunkManagerHell.java b/minecraft_server/src/net/minecraft/src/WorldChunkManagerHell.java
new file mode 100644
index 0000000..55eb19d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldChunkManagerHell.java
@@ -0,0 +1,50 @@
+package net.minecraft.src;
+
+import java.util.Arrays;
+
+public class WorldChunkManagerHell extends WorldChunkManager {
+ private MobSpawnerBase field_4262_e;
+ private double field_4261_f;
+ private double field_4260_g;
+
+ public WorldChunkManagerHell(MobSpawnerBase var1, double var2, double var4) {
+ this.field_4262_e = var1;
+ this.field_4261_f = var2;
+ this.field_4260_g = var4;
+ }
+
+ public MobSpawnerBase func_4066_a(ChunkCoordIntPair var1) {
+ return this.field_4262_e;
+ }
+
+ public MobSpawnerBase func_4067_a(int var1, int var2) {
+ return this.field_4262_e;
+ }
+
+ public MobSpawnerBase[] func_4065_a(int var1, int var2, int var3, int var4) {
+ this.field_4256_d = this.loadBlockGeneratorData(this.field_4256_d, var1, var2, var3, var4);
+ return this.field_4256_d;
+ }
+
+ public double[] getTemperatures(double[] var1, int var2, int var3, int var4, int var5) {
+ if(var1 == null || var1.length < var4 * var5) {
+ var1 = new double[var4 * var5];
+ }
+
+ Arrays.fill(var1, 0, var4 * var5, this.field_4261_f);
+ return var1;
+ }
+
+ public MobSpawnerBase[] loadBlockGeneratorData(MobSpawnerBase[] var1, int var2, int var3, int var4, int var5) {
+ if(var1 == null || var1.length < var4 * var5) {
+ var1 = new MobSpawnerBase[var4 * var5];
+ this.temperature = new double[var4 * var5];
+ this.humidity = new double[var4 * var5];
+ }
+
+ Arrays.fill(var1, 0, var4 * var5, this.field_4262_e);
+ Arrays.fill(this.humidity, 0, var4 * var5, this.field_4260_g);
+ Arrays.fill(this.temperature, 0, var4 * var5, this.field_4261_f);
+ return var1;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenBigTree.java b/minecraft_server/src/net/minecraft/src/WorldGenBigTree.java
new file mode 100644
index 0000000..e4643e8
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenBigTree.java
@@ -0,0 +1,348 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenBigTree extends WorldGenerator {
+ static final byte[] field_760_a = new byte[]{(byte)2, (byte)0, (byte)0, (byte)1, (byte)2, (byte)1};
+ Random field_759_b = new Random();
+ World worldObj;
+ int[] field_757_d = new int[]{0, 0, 0};
+ int field_756_e = 0;
+ int field_755_f;
+ double field_754_g = 0.618D;
+ double field_753_h = 1.0D;
+ double field_752_i = 0.381D;
+ double field_751_j = 1.0D;
+ double field_750_k = 1.0D;
+ int field_749_l = 1;
+ int field_748_m = 12;
+ int field_747_n = 4;
+ int[][] field_746_o;
+
+ void func_424_a() {
+ this.field_755_f = (int)((double)this.field_756_e * this.field_754_g);
+ if(this.field_755_f >= this.field_756_e) {
+ this.field_755_f = this.field_756_e - 1;
+ }
+
+ int var1 = (int)(1.382D + Math.pow(this.field_750_k * (double)this.field_756_e / 13.0D, 2.0D));
+ if(var1 < 1) {
+ var1 = 1;
+ }
+
+ int[][] var2 = new int[var1 * this.field_756_e][4];
+ int var3 = this.field_757_d[1] + this.field_756_e - this.field_747_n;
+ int var4 = 1;
+ int var5 = this.field_757_d[1] + this.field_755_f;
+ int var6 = var3 - this.field_757_d[1];
+ var2[0][0] = this.field_757_d[0];
+ var2[0][1] = var3;
+ var2[0][2] = this.field_757_d[2];
+ var2[0][3] = var5;
+ --var3;
+
+ while(true) {
+ while(var6 >= 0) {
+ int var7 = 0;
+ float var8 = this.func_431_a(var6);
+ if(var8 < 0.0F) {
+ --var3;
+ --var6;
+ } else {
+ for(double var9 = 0.5D; var7 < var1; ++var7) {
+ double var11 = this.field_751_j * (double)var8 * ((double)this.field_759_b.nextFloat() + 0.328D);
+ double var13 = (double)this.field_759_b.nextFloat() * 2.0D * 3.14159D;
+ int var15 = (int)(var11 * Math.sin(var13) + (double)this.field_757_d[0] + var9);
+ int var16 = (int)(var11 * Math.cos(var13) + (double)this.field_757_d[2] + var9);
+ int[] var17 = new int[]{var15, var3, var16};
+ int[] var18 = new int[]{var15, var3 + this.field_747_n, var16};
+ if(this.func_427_a(var17, var18) == -1) {
+ int[] var19 = new int[]{this.field_757_d[0], this.field_757_d[1], this.field_757_d[2]};
+ double var20 = Math.sqrt(Math.pow((double)Math.abs(this.field_757_d[0] - var17[0]), 2.0D) + Math.pow((double)Math.abs(this.field_757_d[2] - var17[2]), 2.0D));
+ double var22 = var20 * this.field_752_i;
+ if((double)var17[1] - var22 > (double)var5) {
+ var19[1] = var5;
+ } else {
+ var19[1] = (int)((double)var17[1] - var22);
+ }
+
+ if(this.func_427_a(var19, var17) == -1) {
+ var2[var4][0] = var15;
+ var2[var4][1] = var3;
+ var2[var4][2] = var16;
+ var2[var4][3] = var19[1];
+ ++var4;
+ }
+ }
+ }
+
+ --var3;
+ --var6;
+ }
+ }
+
+ this.field_746_o = new int[var4][4];
+ System.arraycopy(var2, 0, this.field_746_o, 0, var4);
+ return;
+ }
+ }
+
+ void func_426_a(int var1, int var2, int var3, float var4, byte var5, int var6) {
+ int var7 = (int)((double)var4 + 0.618D);
+ byte var8 = field_760_a[var5];
+ byte var9 = field_760_a[var5 + 3];
+ int[] var10 = new int[]{var1, var2, var3};
+ int[] var11 = new int[]{0, 0, 0};
+ int var12 = -var7;
+ int var13 = -var7;
+
+ label32:
+ for(var11[var5] = var10[var5]; var12 <= var7; ++var12) {
+ var11[var8] = var10[var8] + var12;
+ var13 = -var7;
+
+ while(true) {
+ while(true) {
+ if(var13 > var7) {
+ continue label32;
+ }
+
+ double var15 = Math.sqrt(Math.pow((double)Math.abs(var12) + 0.5D, 2.0D) + Math.pow((double)Math.abs(var13) + 0.5D, 2.0D));
+ if(var15 > (double)var4) {
+ ++var13;
+ } else {
+ var11[var9] = var10[var9] + var13;
+ int var14 = this.worldObj.getBlockId(var11[0], var11[1], var11[2]);
+ if(var14 != 0 && var14 != 18) {
+ ++var13;
+ } else {
+ this.worldObj.setBlock(var11[0], var11[1], var11[2], var6);
+ ++var13;
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ float func_431_a(int var1) {
+ if((double)var1 < (double)((float)this.field_756_e) * 0.3D) {
+ return -1.618F;
+ } else {
+ float var2 = (float)this.field_756_e / 2.0F;
+ float var3 = (float)this.field_756_e / 2.0F - (float)var1;
+ float var4;
+ if(var3 == 0.0F) {
+ var4 = var2;
+ } else if(Math.abs(var3) >= var2) {
+ var4 = 0.0F;
+ } else {
+ var4 = (float)Math.sqrt(Math.pow((double)Math.abs(var2), 2.0D) - Math.pow((double)Math.abs(var3), 2.0D));
+ }
+
+ var4 *= 0.5F;
+ return var4;
+ }
+ }
+
+ float func_429_b(int var1) {
+ return var1 >= 0 && var1 < this.field_747_n ? (var1 != 0 && var1 != this.field_747_n - 1 ? 3.0F : 2.0F) : -1.0F;
+ }
+
+ void func_423_a(int var1, int var2, int var3) {
+ int var4 = var2;
+
+ for(int var5 = var2 + this.field_747_n; var4 < var5; ++var4) {
+ float var6 = this.func_429_b(var4 - var2);
+ this.func_426_a(var1, var4, var3, var6, (byte)1, 18);
+ }
+
+ }
+
+ void func_425_a(int[] var1, int[] var2, int var3) {
+ int[] var4 = new int[]{0, 0, 0};
+ byte var5 = 0;
+
+ byte var6;
+ for(var6 = 0; var5 < 3; ++var5) {
+ var4[var5] = var2[var5] - var1[var5];
+ if(Math.abs(var4[var5]) > Math.abs(var4[var6])) {
+ var6 = var5;
+ }
+ }
+
+ if(var4[var6] != 0) {
+ byte var7 = field_760_a[var6];
+ byte var8 = field_760_a[var6 + 3];
+ byte var9;
+ if(var4[var6] > 0) {
+ var9 = 1;
+ } else {
+ var9 = -1;
+ }
+
+ double var10 = (double)var4[var7] / (double)var4[var6];
+ double var12 = (double)var4[var8] / (double)var4[var6];
+ int[] var14 = new int[]{0, 0, 0};
+ int var15 = 0;
+
+ for(int var16 = var4[var6] + var9; var15 != var16; var15 += var9) {
+ var14[var6] = MathHelper.floor_double((double)(var1[var6] + var15) + 0.5D);
+ var14[var7] = MathHelper.floor_double((double)var1[var7] + (double)var15 * var10 + 0.5D);
+ var14[var8] = MathHelper.floor_double((double)var1[var8] + (double)var15 * var12 + 0.5D);
+ this.worldObj.setBlock(var14[0], var14[1], var14[2], var3);
+ }
+
+ }
+ }
+
+ void func_421_b() {
+ int var1 = 0;
+
+ for(int var2 = this.field_746_o.length; var1 < var2; ++var1) {
+ int var3 = this.field_746_o[var1][0];
+ int var4 = this.field_746_o[var1][1];
+ int var5 = this.field_746_o[var1][2];
+ this.func_423_a(var3, var4, var5);
+ }
+
+ }
+
+ boolean func_430_c(int var1) {
+ return (double)var1 >= (double)this.field_756_e * 0.2D;
+ }
+
+ void func_432_c() {
+ int var1 = this.field_757_d[0];
+ int var2 = this.field_757_d[1];
+ int var3 = this.field_757_d[1] + this.field_755_f;
+ int var4 = this.field_757_d[2];
+ int[] var5 = new int[]{var1, var2, var4};
+ int[] var6 = new int[]{var1, var3, var4};
+ this.func_425_a(var5, var6, 17);
+ if(this.field_749_l == 2) {
+ ++var5[0];
+ ++var6[0];
+ this.func_425_a(var5, var6, 17);
+ ++var5[2];
+ ++var6[2];
+ this.func_425_a(var5, var6, 17);
+ var5[0] += -1;
+ var6[0] += -1;
+ this.func_425_a(var5, var6, 17);
+ }
+
+ }
+
+ void func_428_d() {
+ int var1 = 0;
+ int var2 = this.field_746_o.length;
+
+ for(int[] var3 = new int[]{this.field_757_d[0], this.field_757_d[1], this.field_757_d[2]}; var1 < var2; ++var1) {
+ int[] var4 = this.field_746_o[var1];
+ int[] var5 = new int[]{var4[0], var4[1], var4[2]};
+ var3[1] = var4[3];
+ int var6 = var3[1] - this.field_757_d[1];
+ if(this.func_430_c(var6)) {
+ this.func_425_a(var3, var5, 17);
+ }
+ }
+
+ }
+
+ int func_427_a(int[] var1, int[] var2) {
+ int[] var3 = new int[]{0, 0, 0};
+ byte var4 = 0;
+
+ byte var5;
+ for(var5 = 0; var4 < 3; ++var4) {
+ var3[var4] = var2[var4] - var1[var4];
+ if(Math.abs(var3[var4]) > Math.abs(var3[var5])) {
+ var5 = var4;
+ }
+ }
+
+ if(var3[var5] == 0) {
+ return -1;
+ } else {
+ byte var6 = field_760_a[var5];
+ byte var7 = field_760_a[var5 + 3];
+ byte var8;
+ if(var3[var5] > 0) {
+ var8 = 1;
+ } else {
+ var8 = -1;
+ }
+
+ double var9 = (double)var3[var6] / (double)var3[var5];
+ double var11 = (double)var3[var7] / (double)var3[var5];
+ int[] var13 = new int[]{0, 0, 0};
+ int var14 = 0;
+
+ int var15;
+ for(var15 = var3[var5] + var8; var14 != var15; var14 += var8) {
+ var13[var5] = var1[var5] + var14;
+ var13[var6] = (int)((double)var1[var6] + (double)var14 * var9);
+ var13[var7] = (int)((double)var1[var7] + (double)var14 * var11);
+ int var16 = this.worldObj.getBlockId(var13[0], var13[1], var13[2]);
+ if(var16 != 0 && var16 != 18) {
+ break;
+ }
+ }
+
+ return var14 == var15 ? -1 : Math.abs(var14);
+ }
+ }
+
+ boolean func_422_e() {
+ int[] var1 = new int[]{this.field_757_d[0], this.field_757_d[1], this.field_757_d[2]};
+ int[] var2 = new int[]{this.field_757_d[0], this.field_757_d[1] + this.field_756_e - 1, this.field_757_d[2]};
+ int var3 = this.worldObj.getBlockId(this.field_757_d[0], this.field_757_d[1] - 1, this.field_757_d[2]);
+ if(var3 != 2 && var3 != 3) {
+ return false;
+ } else {
+ int var4 = this.func_427_a(var1, var2);
+ if(var4 == -1) {
+ return true;
+ } else if(var4 < 6) {
+ return false;
+ } else {
+ this.field_756_e = var4;
+ return true;
+ }
+ }
+ }
+
+ public void func_420_a(double var1, double var3, double var5) {
+ this.field_748_m = (int)(var1 * 12.0D);
+ if(var1 > 0.5D) {
+ this.field_747_n = 5;
+ }
+
+ this.field_751_j = var3;
+ this.field_750_k = var5;
+ }
+
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ this.worldObj = var1;
+ long var6 = var2.nextLong();
+ this.field_759_b.setSeed(var6);
+ this.field_757_d[0] = var3;
+ this.field_757_d[1] = var4;
+ this.field_757_d[2] = var5;
+ if(this.field_756_e == 0) {
+ this.field_756_e = 5 + this.field_759_b.nextInt(this.field_748_m);
+ }
+
+ if(!this.func_422_e()) {
+ return false;
+ } else {
+ this.func_424_a();
+ this.func_421_b();
+ this.func_432_c();
+ this.func_428_d();
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenCactus.java b/minecraft_server/src/net/minecraft/src/WorldGenCactus.java
new file mode 100644
index 0000000..1429c39
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenCactus.java
@@ -0,0 +1,24 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenCactus extends WorldGenerator {
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ for(int var6 = 0; var6 < 10; ++var6) {
+ int var7 = var3 + var2.nextInt(8) - var2.nextInt(8);
+ int var8 = var4 + var2.nextInt(4) - var2.nextInt(4);
+ int var9 = var5 + var2.nextInt(8) - var2.nextInt(8);
+ if(var1.getBlockId(var7, var8, var9) == 0) {
+ int var10 = 1 + var2.nextInt(var2.nextInt(3) + 1);
+
+ for(int var11 = 0; var11 < var10; ++var11) {
+ if(Block.cactus.canBlockStay(var1, var7, var8 + var11, var9)) {
+ var1.setBlock(var7, var8 + var11, var9, Block.cactus.blockID);
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenClay.java b/minecraft_server/src/net/minecraft/src/WorldGenClay.java
new file mode 100644
index 0000000..03906d0
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenClay.java
@@ -0,0 +1,53 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenClay extends WorldGenerator {
+ private int clayBlockId = Block.blockClay.blockID;
+ private int numberOfBlocks;
+
+ public WorldGenClay(int var1) {
+ this.numberOfBlocks = var1;
+ }
+
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ if(var1.getBlockMaterial(var3, var4, var5) != Material.water) {
+ return false;
+ } else {
+ float var6 = var2.nextFloat() * (float)Math.PI;
+ double var7 = (double)((float)(var3 + 8) + MathHelper.sin(var6) * (float)this.numberOfBlocks / 8.0F);
+ double var9 = (double)((float)(var3 + 8) - MathHelper.sin(var6) * (float)this.numberOfBlocks / 8.0F);
+ double var11 = (double)((float)(var5 + 8) + MathHelper.cos(var6) * (float)this.numberOfBlocks / 8.0F);
+ double var13 = (double)((float)(var5 + 8) - MathHelper.cos(var6) * (float)this.numberOfBlocks / 8.0F);
+ double var15 = (double)(var4 + var2.nextInt(3) + 2);
+ double var17 = (double)(var4 + var2.nextInt(3) + 2);
+
+ for(int var19 = 0; var19 <= this.numberOfBlocks; ++var19) {
+ double var20 = var7 + (var9 - var7) * (double)var19 / (double)this.numberOfBlocks;
+ double var22 = var15 + (var17 - var15) * (double)var19 / (double)this.numberOfBlocks;
+ double var24 = var11 + (var13 - var11) * (double)var19 / (double)this.numberOfBlocks;
+ double var26 = var2.nextDouble() * (double)this.numberOfBlocks / 16.0D;
+ double var28 = (double)(MathHelper.sin((float)var19 * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * var26 + 1.0D;
+ double var30 = (double)(MathHelper.sin((float)var19 * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * var26 + 1.0D;
+
+ for(int var32 = (int)(var20 - var28 / 2.0D); var32 <= (int)(var20 + var28 / 2.0D); ++var32) {
+ for(int var33 = (int)(var22 - var30 / 2.0D); var33 <= (int)(var22 + var30 / 2.0D); ++var33) {
+ for(int var34 = (int)(var24 - var28 / 2.0D); var34 <= (int)(var24 + var28 / 2.0D); ++var34) {
+ double var35 = ((double)var32 + 0.5D - var20) / (var28 / 2.0D);
+ double var37 = ((double)var33 + 0.5D - var22) / (var30 / 2.0D);
+ double var39 = ((double)var34 + 0.5D - var24) / (var28 / 2.0D);
+ if(var35 * var35 + var37 * var37 + var39 * var39 < 1.0D) {
+ int var41 = var1.getBlockId(var32, var33, var34);
+ if(var41 == Block.sand.blockID) {
+ var1.setBlock(var32, var33, var34, this.clayBlockId);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenDungeons.java b/minecraft_server/src/net/minecraft/src/WorldGenDungeons.java
new file mode 100644
index 0000000..675b16b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenDungeons.java
@@ -0,0 +1,116 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenDungeons extends WorldGenerator {
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ byte var6 = 3;
+ int var7 = var2.nextInt(2) + 2;
+ int var8 = var2.nextInt(2) + 2;
+ int var9 = 0;
+
+ int var10;
+ int var11;
+ int var12;
+ for(var10 = var3 - var7 - 1; var10 <= var3 + var7 + 1; ++var10) {
+ for(var11 = var4 - 1; var11 <= var4 + var6 + 1; ++var11) {
+ for(var12 = var5 - var8 - 1; var12 <= var5 + var8 + 1; ++var12) {
+ Material var13 = var1.getBlockMaterial(var10, var11, var12);
+ if(var11 == var4 - 1 && !var13.func_216_a()) {
+ return false;
+ }
+
+ if(var11 == var4 + var6 + 1 && !var13.func_216_a()) {
+ return false;
+ }
+
+ if((var10 == var3 - var7 - 1 || var10 == var3 + var7 + 1 || var12 == var5 - var8 - 1 || var12 == var5 + var8 + 1) && var11 == var4 && var1.getBlockId(var10, var11, var12) == 0 && var1.getBlockId(var10, var11 + 1, var12) == 0) {
+ ++var9;
+ }
+ }
+ }
+ }
+
+ if(var9 >= 1 && var9 <= 5) {
+ for(var10 = var3 - var7 - 1; var10 <= var3 + var7 + 1; ++var10) {
+ for(var11 = var4 + var6; var11 >= var4 - 1; --var11) {
+ for(var12 = var5 - var8 - 1; var12 <= var5 + var8 + 1; ++var12) {
+ if(var10 != var3 - var7 - 1 && var11 != var4 - 1 && var12 != var5 - var8 - 1 && var10 != var3 + var7 + 1 && var11 != var4 + var6 + 1 && var12 != var5 + var8 + 1) {
+ var1.setBlockWithNotify(var10, var11, var12, 0);
+ } else if(var11 >= 0 && !var1.getBlockMaterial(var10, var11 - 1, var12).func_216_a()) {
+ var1.setBlockWithNotify(var10, var11, var12, 0);
+ } else if(var1.getBlockMaterial(var10, var11, var12).func_216_a()) {
+ if(var11 == var4 - 1 && var2.nextInt(4) != 0) {
+ var1.setBlockWithNotify(var10, var11, var12, Block.cobblestoneMossy.blockID);
+ } else {
+ var1.setBlockWithNotify(var10, var11, var12, Block.cobblestone.blockID);
+ }
+ }
+ }
+ }
+ }
+
+ label110:
+ for(var10 = 0; var10 < 2; ++var10) {
+ for(var11 = 0; var11 < 3; ++var11) {
+ var12 = var3 + var2.nextInt(var7 * 2 + 1) - var7;
+ int var14 = var5 + var2.nextInt(var8 * 2 + 1) - var8;
+ if(var1.getBlockId(var12, var4, var14) == 0) {
+ int var15 = 0;
+ if(var1.getBlockMaterial(var12 - 1, var4, var14).func_216_a()) {
+ ++var15;
+ }
+
+ if(var1.getBlockMaterial(var12 + 1, var4, var14).func_216_a()) {
+ ++var15;
+ }
+
+ if(var1.getBlockMaterial(var12, var4, var14 - 1).func_216_a()) {
+ ++var15;
+ }
+
+ if(var1.getBlockMaterial(var12, var4, var14 + 1).func_216_a()) {
+ ++var15;
+ }
+
+ if(var15 == 1) {
+ var1.setBlockWithNotify(var12, var4, var14, Block.crate.blockID);
+ TileEntityChest var16 = (TileEntityChest)var1.getBlock(var12, var4, var14);
+ int var17 = 0;
+
+ while(true) {
+ if(var17 >= 8) {
+ continue label110;
+ }
+
+ ItemStack var18 = this.func_434_a(var2);
+ if(var18 != null) {
+ var16.func_197_a(var2.nextInt(var16.func_83_a()), var18);
+ }
+
+ ++var17;
+ }
+ }
+ }
+ }
+ }
+
+ var1.setBlockWithNotify(var3, var4, var5, Block.mobSpawner.blockID);
+ TileEntityMobSpawner var19 = (TileEntityMobSpawner)var1.getBlock(var3, var4, var5);
+ var19.entityID = this.func_433_b(var2);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ private ItemStack func_434_a(Random var1) {
+ int var2 = var1.nextInt(11);
+ return var2 == 0 ? new ItemStack(Item.saddle) : (var2 == 1 ? new ItemStack(Item.ingotIron, var1.nextInt(4) + 1) : (var2 == 2 ? new ItemStack(Item.bread) : (var2 == 3 ? new ItemStack(Item.wheat, var1.nextInt(4) + 1) : (var2 == 4 ? new ItemStack(Item.gunpowder, var1.nextInt(4) + 1) : (var2 == 5 ? new ItemStack(Item.silk, var1.nextInt(4) + 1) : (var2 == 6 ? new ItemStack(Item.bucketEmpty) : (var2 == 7 && var1.nextInt(100) == 0 ? new ItemStack(Item.appleGold) : (var2 == 8 && var1.nextInt(2) == 0 ? new ItemStack(Item.redstone, var1.nextInt(4) + 1) : (var2 == 9 && var1.nextInt(10) == 0 ? new ItemStack(Item.itemsList[Item.record13.swiftedIndex + var1.nextInt(2)]) : null)))))))));
+ }
+
+ private String func_433_b(Random var1) {
+ int var2 = var1.nextInt(4);
+ return var2 == 0 ? "Skeleton" : (var2 == 1 ? "Zombie" : (var2 == 2 ? "Zombie" : (var2 == 3 ? "Spider" : "")));
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenFire.java b/minecraft_server/src/net/minecraft/src/WorldGenFire.java
new file mode 100644
index 0000000..aa1d9dd
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenFire.java
@@ -0,0 +1,18 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenFire extends WorldGenerator {
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ for(int var6 = 0; var6 < 64; ++var6) {
+ int var7 = var3 + var2.nextInt(8) - var2.nextInt(8);
+ int var8 = var4 + var2.nextInt(4) - var2.nextInt(4);
+ int var9 = var5 + var2.nextInt(8) - var2.nextInt(8);
+ if(var1.getBlockId(var7, var8, var9) == 0 && var1.getBlockId(var7, var8 - 1, var9) == Block.bloodStone.blockID) {
+ var1.setBlockWithNotify(var7, var8, var9, Block.fire.blockID);
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenFlowers.java b/minecraft_server/src/net/minecraft/src/WorldGenFlowers.java
new file mode 100644
index 0000000..0434d48
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenFlowers.java
@@ -0,0 +1,24 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenFlowers extends WorldGenerator {
+ private int plantBlockId;
+
+ public WorldGenFlowers(int var1) {
+ this.plantBlockId = var1;
+ }
+
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ for(int var6 = 0; var6 < 64; ++var6) {
+ int var7 = var3 + var2.nextInt(8) - var2.nextInt(8);
+ int var8 = var4 + var2.nextInt(4) - var2.nextInt(4);
+ int var9 = var5 + var2.nextInt(8) - var2.nextInt(8);
+ if(var1.getBlockId(var7, var8, var9) == 0 && ((BlockFlower)Block.blocksList[this.plantBlockId]).canBlockStay(var1, var7, var8, var9)) {
+ var1.setBlock(var7, var8, var9, this.plantBlockId);
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenHellLava.java b/minecraft_server/src/net/minecraft/src/WorldGenHellLava.java
new file mode 100644
index 0000000..c75918b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenHellLava.java
@@ -0,0 +1,70 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenHellLava extends WorldGenerator {
+ private int field_4250_a;
+
+ public WorldGenHellLava(int var1) {
+ this.field_4250_a = var1;
+ }
+
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ if(var1.getBlockId(var3, var4 + 1, var5) != Block.bloodStone.blockID) {
+ return false;
+ } else if(var1.getBlockId(var3, var4, var5) != 0 && var1.getBlockId(var3, var4, var5) != Block.bloodStone.blockID) {
+ return false;
+ } else {
+ int var6 = 0;
+ if(var1.getBlockId(var3 - 1, var4, var5) == Block.bloodStone.blockID) {
+ ++var6;
+ }
+
+ if(var1.getBlockId(var3 + 1, var4, var5) == Block.bloodStone.blockID) {
+ ++var6;
+ }
+
+ if(var1.getBlockId(var3, var4, var5 - 1) == Block.bloodStone.blockID) {
+ ++var6;
+ }
+
+ if(var1.getBlockId(var3, var4, var5 + 1) == Block.bloodStone.blockID) {
+ ++var6;
+ }
+
+ if(var1.getBlockId(var3, var4 - 1, var5) == Block.bloodStone.blockID) {
+ ++var6;
+ }
+
+ int var7 = 0;
+ if(var1.getBlockId(var3 - 1, var4, var5) == 0) {
+ ++var7;
+ }
+
+ if(var1.getBlockId(var3 + 1, var4, var5) == 0) {
+ ++var7;
+ }
+
+ if(var1.getBlockId(var3, var4, var5 - 1) == 0) {
+ ++var7;
+ }
+
+ if(var1.getBlockId(var3, var4, var5 + 1) == 0) {
+ ++var7;
+ }
+
+ if(var1.getBlockId(var3, var4 - 1, var5) == 0) {
+ ++var7;
+ }
+
+ if(var6 == 4 && var7 == 1) {
+ var1.setBlockWithNotify(var3, var4, var5, this.field_4250_a);
+ var1.field_4280_a = true;
+ Block.blocksList[this.field_4250_a].updateTick(var1, var3, var4, var5, var2);
+ var1.field_4280_a = false;
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenLakes.java b/minecraft_server/src/net/minecraft/src/WorldGenLakes.java
new file mode 100644
index 0000000..80c560f
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenLakes.java
@@ -0,0 +1,88 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenLakes extends WorldGenerator {
+ private int field_15005_a;
+
+ public WorldGenLakes(int var1) {
+ this.field_15005_a = var1;
+ }
+
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ var3 -= 8;
+
+ for(var5 -= 8; var4 > 0 && var1.getBlockId(var3, var4, var5) == 0; --var4) {
+ }
+
+ var4 -= 4;
+ boolean[] var6 = new boolean[2048];
+ int var7 = var2.nextInt(4) + 4;
+
+ int var8;
+ for(var8 = 0; var8 < var7; ++var8) {
+ double var9 = var2.nextDouble() * 6.0D + 3.0D;
+ double var11 = var2.nextDouble() * 4.0D + 2.0D;
+ double var13 = var2.nextDouble() * 6.0D + 3.0D;
+ double var15 = var2.nextDouble() * (16.0D - var9 - 2.0D) + 1.0D + var9 / 2.0D;
+ double var17 = var2.nextDouble() * (8.0D - var11 - 4.0D) + 2.0D + var11 / 2.0D;
+ double var19 = var2.nextDouble() * (16.0D - var13 - 2.0D) + 1.0D + var13 / 2.0D;
+
+ for(int var21 = 1; var21 < 15; ++var21) {
+ for(int var22 = 1; var22 < 15; ++var22) {
+ for(int var23 = 1; var23 < 7; ++var23) {
+ double var24 = ((double)var21 - var15) / (var9 / 2.0D);
+ double var26 = ((double)var23 - var17) / (var11 / 2.0D);
+ double var28 = ((double)var22 - var19) / (var13 / 2.0D);
+ double var30 = var24 * var24 + var26 * var26 + var28 * var28;
+ if(var30 < 1.0D) {
+ var6[(var21 * 16 + var22) * 8 + var23] = true;
+ }
+ }
+ }
+ }
+ }
+
+ int var10;
+ int var32;
+ for(var8 = 0; var8 < 16; ++var8) {
+ for(var32 = 0; var32 < 16; ++var32) {
+ for(var10 = 0; var10 < 8; ++var10) {
+ boolean var33 = !var6[(var8 * 16 + var32) * 8 + var10] && (var8 < 15 && var6[((var8 + 1) * 16 + var32) * 8 + var10] || var8 > 0 && var6[((var8 - 1) * 16 + var32) * 8 + var10] || var32 < 15 && var6[(var8 * 16 + var32 + 1) * 8 + var10] || var32 > 0 && var6[(var8 * 16 + (var32 - 1)) * 8 + var10] || var10 < 7 && var6[(var8 * 16 + var32) * 8 + var10 + 1] || var10 > 0 && var6[(var8 * 16 + var32) * 8 + (var10 - 1)]);
+ if(var33) {
+ Material var12 = var1.getBlockMaterial(var3 + var8, var4 + var10, var5 + var32);
+ if(var10 >= 4 && var12.getIsLiquid()) {
+ return false;
+ }
+
+ if(var10 < 4 && !var12.func_216_a() && var1.getBlockId(var3 + var8, var4 + var10, var5 + var32) != this.field_15005_a) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+
+ for(var8 = 0; var8 < 16; ++var8) {
+ for(var32 = 0; var32 < 16; ++var32) {
+ for(var10 = 0; var10 < 8; ++var10) {
+ if(var6[(var8 * 16 + var32) * 8 + var10]) {
+ var1.setBlockWithNotify(var3 + var8, var4 + var10, var5 + var32, var10 >= 4 ? 0 : this.field_15005_a);
+ }
+ }
+ }
+ }
+
+ for(var8 = 0; var8 < 16; ++var8) {
+ for(var32 = 0; var32 < 16; ++var32) {
+ for(var10 = 4; var10 < 8; ++var10) {
+ if(var6[(var8 * 16 + var32) * 8 + var10] && var1.getBlockId(var3 + var8, var4 + var10 - 1, var5 + var32) == Block.dirt.blockID && var1.getSavedLightValue(EnumSkyBlock.Sky, var3 + var8, var4 + var10, var5 + var32) > 0) {
+ var1.setBlockWithNotify(var3 + var8, var4 + var10 - 1, var5 + var32, Block.grass.blockID);
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenLightStone1.java b/minecraft_server/src/net/minecraft/src/WorldGenLightStone1.java
new file mode 100644
index 0000000..1a3fe1a
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenLightStone1.java
@@ -0,0 +1,61 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenLightStone1 extends WorldGenerator {
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ if(var1.getBlockId(var3, var4, var5) != 0) {
+ return false;
+ } else if(var1.getBlockId(var3, var4 + 1, var5) != Block.bloodStone.blockID) {
+ return false;
+ } else {
+ var1.setBlockWithNotify(var3, var4, var5, Block.lightStone.blockID);
+
+ for(int var6 = 0; var6 < 1500; ++var6) {
+ int var7 = var3 + var2.nextInt(8) - var2.nextInt(8);
+ int var8 = var4 - var2.nextInt(12);
+ int var9 = var5 + var2.nextInt(8) - var2.nextInt(8);
+ if(var1.getBlockId(var7, var8, var9) == 0) {
+ int var10 = 0;
+
+ for(int var11 = 0; var11 < 6; ++var11) {
+ int var12 = 0;
+ if(var11 == 0) {
+ var12 = var1.getBlockId(var7 - 1, var8, var9);
+ }
+
+ if(var11 == 1) {
+ var12 = var1.getBlockId(var7 + 1, var8, var9);
+ }
+
+ if(var11 == 2) {
+ var12 = var1.getBlockId(var7, var8 - 1, var9);
+ }
+
+ if(var11 == 3) {
+ var12 = var1.getBlockId(var7, var8 + 1, var9);
+ }
+
+ if(var11 == 4) {
+ var12 = var1.getBlockId(var7, var8, var9 - 1);
+ }
+
+ if(var11 == 5) {
+ var12 = var1.getBlockId(var7, var8, var9 + 1);
+ }
+
+ if(var12 == Block.lightStone.blockID) {
+ ++var10;
+ }
+ }
+
+ if(var10 == 1) {
+ var1.setBlockWithNotify(var7, var8, var9, Block.lightStone.blockID);
+ }
+ }
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenLightStone2.java b/minecraft_server/src/net/minecraft/src/WorldGenLightStone2.java
new file mode 100644
index 0000000..9ec8ec3
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenLightStone2.java
@@ -0,0 +1,61 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenLightStone2 extends WorldGenerator {
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ if(var1.getBlockId(var3, var4, var5) != 0) {
+ return false;
+ } else if(var1.getBlockId(var3, var4 + 1, var5) != Block.bloodStone.blockID) {
+ return false;
+ } else {
+ var1.setBlockWithNotify(var3, var4, var5, Block.lightStone.blockID);
+
+ for(int var6 = 0; var6 < 1500; ++var6) {
+ int var7 = var3 + var2.nextInt(8) - var2.nextInt(8);
+ int var8 = var4 - var2.nextInt(12);
+ int var9 = var5 + var2.nextInt(8) - var2.nextInt(8);
+ if(var1.getBlockId(var7, var8, var9) == 0) {
+ int var10 = 0;
+
+ for(int var11 = 0; var11 < 6; ++var11) {
+ int var12 = 0;
+ if(var11 == 0) {
+ var12 = var1.getBlockId(var7 - 1, var8, var9);
+ }
+
+ if(var11 == 1) {
+ var12 = var1.getBlockId(var7 + 1, var8, var9);
+ }
+
+ if(var11 == 2) {
+ var12 = var1.getBlockId(var7, var8 - 1, var9);
+ }
+
+ if(var11 == 3) {
+ var12 = var1.getBlockId(var7, var8 + 1, var9);
+ }
+
+ if(var11 == 4) {
+ var12 = var1.getBlockId(var7, var8, var9 - 1);
+ }
+
+ if(var11 == 5) {
+ var12 = var1.getBlockId(var7, var8, var9 + 1);
+ }
+
+ if(var12 == Block.lightStone.blockID) {
+ ++var10;
+ }
+ }
+
+ if(var10 == 1) {
+ var1.setBlockWithNotify(var7, var8, var9, Block.lightStone.blockID);
+ }
+ }
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenLiquids.java b/minecraft_server/src/net/minecraft/src/WorldGenLiquids.java
new file mode 100644
index 0000000..15b3d45
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenLiquids.java
@@ -0,0 +1,64 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenLiquids extends WorldGenerator {
+ private int liquidBlockId;
+
+ public WorldGenLiquids(int var1) {
+ this.liquidBlockId = var1;
+ }
+
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ if(var1.getBlockId(var3, var4 + 1, var5) != Block.stone.blockID) {
+ return false;
+ } else if(var1.getBlockId(var3, var4 - 1, var5) != Block.stone.blockID) {
+ return false;
+ } else if(var1.getBlockId(var3, var4, var5) != 0 && var1.getBlockId(var3, var4, var5) != Block.stone.blockID) {
+ return false;
+ } else {
+ int var6 = 0;
+ if(var1.getBlockId(var3 - 1, var4, var5) == Block.stone.blockID) {
+ ++var6;
+ }
+
+ if(var1.getBlockId(var3 + 1, var4, var5) == Block.stone.blockID) {
+ ++var6;
+ }
+
+ if(var1.getBlockId(var3, var4, var5 - 1) == Block.stone.blockID) {
+ ++var6;
+ }
+
+ if(var1.getBlockId(var3, var4, var5 + 1) == Block.stone.blockID) {
+ ++var6;
+ }
+
+ int var7 = 0;
+ if(var1.getBlockId(var3 - 1, var4, var5) == 0) {
+ ++var7;
+ }
+
+ if(var1.getBlockId(var3 + 1, var4, var5) == 0) {
+ ++var7;
+ }
+
+ if(var1.getBlockId(var3, var4, var5 - 1) == 0) {
+ ++var7;
+ }
+
+ if(var1.getBlockId(var3, var4, var5 + 1) == 0) {
+ ++var7;
+ }
+
+ if(var6 == 3 && var7 == 1) {
+ var1.setBlockWithNotify(var3, var4, var5, this.liquidBlockId);
+ var1.field_4280_a = true;
+ Block.blocksList[this.liquidBlockId].updateTick(var1, var3, var4, var5, var2);
+ var1.field_4280_a = false;
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenMinable.java b/minecraft_server/src/net/minecraft/src/WorldGenMinable.java
new file mode 100644
index 0000000..f852d5b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenMinable.java
@@ -0,0 +1,47 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenMinable extends WorldGenerator {
+ private int minableBlockId;
+ private int numberOfBlocks;
+
+ public WorldGenMinable(int var1, int var2) {
+ this.minableBlockId = var1;
+ this.numberOfBlocks = var2;
+ }
+
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ float var6 = var2.nextFloat() * (float)Math.PI;
+ double var7 = (double)((float)(var3 + 8) + MathHelper.sin(var6) * (float)this.numberOfBlocks / 8.0F);
+ double var9 = (double)((float)(var3 + 8) - MathHelper.sin(var6) * (float)this.numberOfBlocks / 8.0F);
+ double var11 = (double)((float)(var5 + 8) + MathHelper.cos(var6) * (float)this.numberOfBlocks / 8.0F);
+ double var13 = (double)((float)(var5 + 8) - MathHelper.cos(var6) * (float)this.numberOfBlocks / 8.0F);
+ double var15 = (double)(var4 + var2.nextInt(3) + 2);
+ double var17 = (double)(var4 + var2.nextInt(3) + 2);
+
+ for(int var19 = 0; var19 <= this.numberOfBlocks; ++var19) {
+ double var20 = var7 + (var9 - var7) * (double)var19 / (double)this.numberOfBlocks;
+ double var22 = var15 + (var17 - var15) * (double)var19 / (double)this.numberOfBlocks;
+ double var24 = var11 + (var13 - var11) * (double)var19 / (double)this.numberOfBlocks;
+ double var26 = var2.nextDouble() * (double)this.numberOfBlocks / 16.0D;
+ double var28 = (double)(MathHelper.sin((float)var19 * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * var26 + 1.0D;
+ double var30 = (double)(MathHelper.sin((float)var19 * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * var26 + 1.0D;
+
+ for(int var32 = (int)(var20 - var28 / 2.0D); var32 <= (int)(var20 + var28 / 2.0D); ++var32) {
+ for(int var33 = (int)(var22 - var30 / 2.0D); var33 <= (int)(var22 + var30 / 2.0D); ++var33) {
+ for(int var34 = (int)(var24 - var28 / 2.0D); var34 <= (int)(var24 + var28 / 2.0D); ++var34) {
+ double var35 = ((double)var32 + 0.5D - var20) / (var28 / 2.0D);
+ double var37 = ((double)var33 + 0.5D - var22) / (var30 / 2.0D);
+ double var39 = ((double)var34 + 0.5D - var24) / (var28 / 2.0D);
+ if(var35 * var35 + var37 * var37 + var39 * var39 < 1.0D && var1.getBlockId(var32, var33, var34) == Block.stone.blockID) {
+ var1.setBlock(var32, var33, var34, this.minableBlockId);
+ }
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenPumpkin.java b/minecraft_server/src/net/minecraft/src/WorldGenPumpkin.java
new file mode 100644
index 0000000..9cdacc5
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenPumpkin.java
@@ -0,0 +1,18 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenPumpkin extends WorldGenerator {
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ for(int var6 = 0; var6 < 64; ++var6) {
+ int var7 = var3 + var2.nextInt(8) - var2.nextInt(8);
+ int var8 = var4 + var2.nextInt(4) - var2.nextInt(4);
+ int var9 = var5 + var2.nextInt(8) - var2.nextInt(8);
+ if(var1.getBlockId(var7, var8, var9) == 0 && var1.getBlockId(var7, var8 - 1, var9) == Block.grass.blockID && Block.pumpkin.canPlaceBlockAt(var1, var7, var8, var9)) {
+ var1.func_470_a(var7, var8, var9, Block.pumpkin.blockID, var2.nextInt(4));
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenReed.java b/minecraft_server/src/net/minecraft/src/WorldGenReed.java
new file mode 100644
index 0000000..cfd177e
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenReed.java
@@ -0,0 +1,24 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenReed extends WorldGenerator {
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ for(int var6 = 0; var6 < 20; ++var6) {
+ int var7 = var3 + var2.nextInt(4) - var2.nextInt(4);
+ int var8 = var4;
+ int var9 = var5 + var2.nextInt(4) - var2.nextInt(4);
+ if(var1.getBlockId(var7, var4, var9) == 0 && (var1.getBlockMaterial(var7 - 1, var4 - 1, var9) == Material.water || var1.getBlockMaterial(var7 + 1, var4 - 1, var9) == Material.water || var1.getBlockMaterial(var7, var4 - 1, var9 - 1) == Material.water || var1.getBlockMaterial(var7, var4 - 1, var9 + 1) == Material.water)) {
+ int var10 = 2 + var2.nextInt(var2.nextInt(3) + 1);
+
+ for(int var11 = 0; var11 < var10; ++var11) {
+ if(Block.reed.canBlockStay(var1, var7, var8 + var11, var9)) {
+ var1.setBlock(var7, var8 + var11, var9, Block.reed.blockID);
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenTrees.java b/minecraft_server/src/net/minecraft/src/WorldGenTrees.java
new file mode 100644
index 0000000..985f46d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenTrees.java
@@ -0,0 +1,78 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public class WorldGenTrees extends WorldGenerator {
+ public boolean generate(World var1, Random var2, int var3, int var4, int var5) {
+ int var6 = var2.nextInt(3) + 4;
+ boolean var7 = true;
+ if(var4 >= 1 && var4 + var6 + 1 <= 128) {
+ int var8;
+ int var10;
+ int var11;
+ int var12;
+ for(var8 = var4; var8 <= var4 + 1 + var6; ++var8) {
+ byte var9 = 1;
+ if(var8 == var4) {
+ var9 = 0;
+ }
+
+ if(var8 >= var4 + 1 + var6 - 2) {
+ var9 = 2;
+ }
+
+ for(var10 = var3 - var9; var10 <= var3 + var9 && var7; ++var10) {
+ for(var11 = var5 - var9; var11 <= var5 + var9 && var7; ++var11) {
+ if(var8 >= 0 && var8 < 128) {
+ var12 = var1.getBlockId(var10, var8, var11);
+ if(var12 != 0 && var12 != Block.leaves.blockID) {
+ var7 = false;
+ }
+ } else {
+ var7 = false;
+ }
+ }
+ }
+ }
+
+ if(!var7) {
+ return false;
+ } else {
+ var8 = var1.getBlockId(var3, var4 - 1, var5);
+ if((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && var4 < 128 - var6 - 1) {
+ var1.setBlock(var3, var4 - 1, var5, Block.dirt.blockID);
+
+ int var16;
+ for(var16 = var4 - 3 + var6; var16 <= var4 + var6; ++var16) {
+ var10 = var16 - (var4 + var6);
+ var11 = 1 - var10 / 2;
+
+ for(var12 = var3 - var11; var12 <= var3 + var11; ++var12) {
+ int var13 = var12 - var3;
+
+ for(int var14 = var5 - var11; var14 <= var5 + var11; ++var14) {
+ int var15 = var14 - var5;
+ if((Math.abs(var13) != var11 || Math.abs(var15) != var11 || var2.nextInt(2) != 0 && var10 != 0) && !Block.field_540_p[var1.getBlockId(var12, var16, var14)]) {
+ var1.setBlock(var12, var16, var14, Block.leaves.blockID);
+ }
+ }
+ }
+ }
+
+ for(var16 = 0; var16 < var6; ++var16) {
+ var10 = var1.getBlockId(var3, var4 + var16, var5);
+ if(var10 == 0 || var10 == Block.leaves.blockID) {
+ var1.setBlock(var3, var4 + var16, var5, Block.wood.blockID);
+ }
+ }
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldGenerator.java b/minecraft_server/src/net/minecraft/src/WorldGenerator.java
new file mode 100644
index 0000000..53289b0
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldGenerator.java
@@ -0,0 +1,10 @@
+package net.minecraft.src;
+
+import java.util.Random;
+
+public abstract class WorldGenerator {
+ public abstract boolean generate(World var1, Random var2, int var3, int var4, int var5);
+
+ public void func_420_a(double var1, double var3, double var5) {
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldManager.java b/minecraft_server/src/net/minecraft/src/WorldManager.java
new file mode 100644
index 0000000..6c98c2d
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldManager.java
@@ -0,0 +1,42 @@
+package net.minecraft.src;
+
+import net.minecraft.server.MinecraftServer;
+
+public class WorldManager implements IWorldAccess {
+ private MinecraftServer mcServer;
+
+ public WorldManager(MinecraftServer var1) {
+ this.mcServer = var1;
+ }
+
+ public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) {
+ }
+
+ public void func_681_a(Entity var1) {
+ this.mcServer.field_6028_k.func_611_a(var1);
+ }
+
+ public void func_688_b(Entity var1) {
+ this.mcServer.field_6028_k.func_610_b(var1);
+ }
+
+ public void playSound(String var1, double var2, double var4, double var6, float var8, float var9) {
+ }
+
+ public void func_685_a(int var1, int var2, int var3, int var4, int var5, int var6) {
+ }
+
+ public void func_684_a() {
+ }
+
+ public void func_683_a(int var1, int var2, int var3) {
+ this.mcServer.configManager.func_622_a(var1, var2, var3);
+ }
+
+ public void playRecord(String var1, int var2, int var3, int var4) {
+ }
+
+ public void func_686_a(int var1, int var2, int var3, TileEntity var4) {
+ this.mcServer.configManager.sentTileEntityToPlayer(var1, var2, var3, var4);
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldProvider.java b/minecraft_server/src/net/minecraft/src/WorldProvider.java
new file mode 100644
index 0000000..e7d64ed
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldProvider.java
@@ -0,0 +1,68 @@
+package net.minecraft.src;
+
+import java.io.File;
+
+public class WorldProvider {
+ public World field_4302_a;
+ public WorldChunkManager field_4301_b;
+ public boolean field_6167_c = false;
+ public boolean field_6166_d = false;
+ public boolean field_4306_c = false;
+ public float[] lightBrightnessTable = new float[16];
+ public int field_6165_g = 0;
+ private float[] field_6164_h = new float[4];
+
+ public final void func_4093_a(World var1) {
+ this.field_4302_a = var1;
+ this.func_4090_a();
+ this.generateLightBrightnessTable();
+ }
+
+ protected void generateLightBrightnessTable() {
+ float var1 = 0.05F;
+
+ for(int var2 = 0; var2 <= 15; ++var2) {
+ float var3 = 1.0F - (float)var2 / 15.0F;
+ this.lightBrightnessTable[var2] = (1.0F - var3) / (var3 * 3.0F + 1.0F) * (1.0F - var1) + var1;
+ }
+
+ }
+
+ protected void func_4090_a() {
+ this.field_4301_b = new WorldChunkManager(this.field_4302_a);
+ }
+
+ public IChunkProvider getChunkProvider() {
+ return new ChunkProviderGenerate(this.field_4302_a, this.field_4302_a.randomSeed);
+ }
+
+ public IChunkLoader getChunkLoader(File var1) {
+ return new ChunkLoader(var1, true);
+ }
+
+ public boolean canCoordinateBeSpawn(int var1, int var2) {
+ int var3 = this.field_4302_a.func_528_f(var1, var2);
+ return var3 == Block.sand.blockID;
+ }
+
+ public float func_4089_a(long var1, float var3) {
+ int var4 = (int)(var1 % 24000L);
+ float var5 = ((float)var4 + var3) / 24000.0F - 0.25F;
+ if(var5 < 0.0F) {
+ ++var5;
+ }
+
+ if(var5 > 1.0F) {
+ --var5;
+ }
+
+ float var6 = var5;
+ var5 = 1.0F - (float)((Math.cos((double)var5 * Math.PI) + 1.0D) / 2.0D);
+ var5 = var6 + (var5 - var6) / 3.0F;
+ return var5;
+ }
+
+ public static WorldProvider func_4091_a(int var0) {
+ return (WorldProvider)(var0 == 0 ? new WorldProvider() : (var0 == -1 ? new WorldProviderHell() : null));
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldProviderHell.java b/minecraft_server/src/net/minecraft/src/WorldProviderHell.java
new file mode 100644
index 0000000..406085b
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldProviderHell.java
@@ -0,0 +1,42 @@
+package net.minecraft.src;
+
+import java.io.File;
+
+public class WorldProviderHell extends WorldProvider {
+ public void func_4090_a() {
+ this.field_4301_b = new WorldChunkManagerHell(MobSpawnerBase.hell, 1.0D, 0.0D);
+ this.field_6167_c = true;
+ this.field_6166_d = true;
+ this.field_4306_c = true;
+ this.field_6165_g = -1;
+ }
+
+ protected void generateLightBrightnessTable() {
+ float var1 = 0.1F;
+
+ for(int var2 = 0; var2 <= 15; ++var2) {
+ float var3 = 1.0F - (float)var2 / 15.0F;
+ this.lightBrightnessTable[var2] = (1.0F - var3) / (var3 * 3.0F + 1.0F) * (1.0F - var1) + var1;
+ }
+
+ }
+
+ public IChunkProvider getChunkProvider() {
+ return new ChunkProviderHell(this.field_4302_a, this.field_4302_a.randomSeed);
+ }
+
+ public IChunkLoader getChunkLoader(File var1) {
+ File var2 = new File(var1, "DIM-1");
+ var2.mkdirs();
+ return new ChunkLoader(var2, true);
+ }
+
+ public boolean canCoordinateBeSpawn(int var1, int var2) {
+ int var3 = this.field_4302_a.func_528_f(var1, var2);
+ return var3 == Block.bedrock.blockID ? false : (var3 == 0 ? false : Block.field_540_p[var3]);
+ }
+
+ public float func_4089_a(long var1, float var3) {
+ return 0.5F;
+ }
+}
diff --git a/minecraft_server/src/net/minecraft/src/WorldServer.java b/minecraft_server/src/net/minecraft/src/WorldServer.java
new file mode 100644
index 0000000..2b5a575
--- /dev/null
+++ b/minecraft_server/src/net/minecraft/src/WorldServer.java
@@ -0,0 +1,92 @@
+package net.minecraft.src;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+import net.minecraft.server.MinecraftServer;
+
+public class WorldServer extends World {
+ public ChunkProviderServer A;
+ public boolean field_819_z = false;
+ public boolean field_816_A;
+ private MinecraftServer field_6160_D;
+ private MCHashTable E = new MCHashTable();
+
+ public WorldServer(MinecraftServer var1, File var2, String var3, int var4) {
+ super(var2, var3, (new Random()).nextLong(), WorldProvider.func_4091_a(var4));
+ this.field_6160_D = var1;
+ }
+
+ public void tick() {
+ super.tick();
+ }
+
+ public void func_4074_a(Entity var1, boolean var2) {
+ if(!this.field_6160_D.noAnimals && var1 instanceof EntityAnimals) {
+ var1.setEntityDead();
+ }
+
+ if(var1.field_328_f == null || !(var1.field_328_f instanceof EntityPlayer)) {
+ super.func_4074_a(var1, var2);
+ }
+
+ }
+
+ public void func_12017_b(Entity var1, boolean var2) {
+ super.func_4074_a(var1, var2);
+ }
+
+ protected IChunkProvider func_4076_a(File var1) {
+ this.A = new ChunkProviderServer(this, this.field_4272_q.getChunkLoader(var1), this.field_4272_q.getChunkProvider());
+ return this.A;
+ }
+
+ public List func_532_d(int var1, int var2, int var3, int var4, int var5, int var6) {
+ ArrayList var7 = new ArrayList();
+
+ for(int var8 = 0; var8 < this.field_814_b.size(); ++var8) {
+ TileEntity var9 = (TileEntity)this.field_814_b.get(var8);
+ if(var9.xCoord >= var1 && var9.yCoord >= var2 && var9.zCoord >= var3 && var9.xCoord < var4 && var9.yCoord < var5 && var9.zCoord < var6) {
+ var7.add(var9);
+ }
+ }
+
+ return var7;
+ }
+
+ public boolean func_6157_a(EntityPlayer var1, int var2, int var3, int var4) {
+ int var5 = (int)MathHelper.abs((float)(var2 - this.spawnX));
+ int var6 = (int)MathHelper.abs((float)(var4 - this.spawnZ));
+ if(var5 > var6) {
+ var6 = var5;
+ }
+
+ return var6 > 16 || this.field_6160_D.configManager.isOp(var1.username);
+ }
+
+ protected void func_479_b(Entity var1) {
+ super.func_479_b(var1);
+ this.E.addKey(var1.field_331_c, var1);
+ }
+
+ protected void func_531_c(Entity var1) {
+ super.func_531_c(var1);
+ this.E.removeObject(var1.field_331_c);
+ }
+
+ public Entity func_6158_a(int var1) {
+ return (Entity)this.E.lookup(var1);
+ }
+
+ public void func_9206_a(Entity var1, byte var2) {
+ Packet38 var3 = new Packet38(var1.field_331_c, var2);
+ this.field_6160_D.field_6028_k.func_609_a(var1, var3);
+ }
+
+ public Explosion func_12015_a(Entity var1, double var2, double var4, double var6, float var8, boolean var9) {
+ Explosion var10 = super.func_12015_a(var1, var2, var4, var6, var8, var9);
+ this.field_6160_D.configManager.func_12022_a(var2, var4, var6, 64.0D, new Packet60(var2, var4, var6, var8, var10.field_12025_g));
+ return var10;
+ }
+}