added server sources

This commit is contained in:
2025-09-28 13:36:00 +03:00
parent 3dc2057ef8
commit ffb978e82f
449 changed files with 41235 additions and 0 deletions

View File

@@ -0,0 +1,415 @@
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.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.minecraft.src.AxisAlignedBB;
import net.minecraft.src.ChunkCoordinates;
import net.minecraft.src.ConsoleCommandHandler;
import net.minecraft.src.ConsoleLogManager;
import net.minecraft.src.ConvertProgressUpdater;
import net.minecraft.src.EntityTracker;
import net.minecraft.src.ICommandListener;
import net.minecraft.src.IProgressUpdate;
import net.minecraft.src.ISaveFormat;
import net.minecraft.src.IUpdatePlayerListBox;
import net.minecraft.src.NetworkListenThread;
import net.minecraft.src.Packet4UpdateTime;
import net.minecraft.src.PropertyManager;
import net.minecraft.src.SaveConverterMcRegion;
import net.minecraft.src.SaveOldDir;
import net.minecraft.src.ServerCommand;
import net.minecraft.src.ServerConfigurationManager;
import net.minecraft.src.ServerGUI;
import net.minecraft.src.StatList;
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;
import net.minecraft.src.WorldServerMulti;
public class MinecraftServer implements Runnable, ICommandListener {
public static Logger logger = Logger.getLogger("Minecraft");
public static HashMap field_6037_b = new HashMap();
public NetworkListenThread networkServer;
public PropertyManager propertyManagerObj;
public WorldServer[] worldMngr;
public ServerConfigurationManager configManager;
private ConsoleCommandHandler commandHandler;
private boolean serverRunning = true;
public boolean serverStopped = false;
int deathTime = 0;
public String currentTask;
public int percentDone;
private List field_9010_p = new ArrayList();
private List commands = Collections.synchronizedList(new ArrayList());
public EntityTracker[] entityTracker = new EntityTracker[2];
public boolean onlineMode;
public boolean spawnPeacefulMobs;
public boolean pvpOn;
public boolean allowFlight;
public MinecraftServer() {
new ThreadSleepForever(this);
}
private boolean startServer() throws UnknownHostException {
this.commandHandler = new ConsoleCommandHandler(this);
ThreadCommandReader var1 = new ThreadCommandReader(this);
var1.setDaemon(true);
var1.start();
ConsoleLogManager.init();
logger.info("Starting minecraft server version Beta 1.7.3");
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.spawnPeacefulMobs = this.propertyManagerObj.getBooleanProperty("spawn-animals", true);
this.pvpOn = this.propertyManagerObj.getBooleanProperty("pvp", true);
this.allowFlight = this.propertyManagerObj.getBooleanProperty("allow-flight", false);
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.networkServer = new NetworkListenThread(this, var3, var4);
} catch (IOException var13) {
logger.warning("**** FAILED TO BIND TO PORT!");
logger.log(Level.WARNING, "The exception was: " + var13.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.entityTracker[0] = new EntityTracker(this, 0);
this.entityTracker[1] = new EntityTracker(this, -1);
long var5 = System.nanoTime();
String var7 = this.propertyManagerObj.getStringProperty("level-name", "world");
String var8 = this.propertyManagerObj.getStringProperty("level-seed", "");
long var9 = (new Random()).nextLong();
if(var8.length() > 0) {
try {
var9 = Long.parseLong(var8);
} catch (NumberFormatException var12) {
var9 = (long)var8.hashCode();
}
}
logger.info("Preparing level \"" + var7 + "\"");
this.initWorld(new SaveConverterMcRegion(new File(".")), var7, var9);
logger.info("Done (" + (System.nanoTime() - var5) + "ns)! For help, type \"help\" or \"?\"");
return true;
}
private void initWorld(ISaveFormat var1, String var2, long var3) {
if(var1.isOldSaveType(var2)) {
logger.info("Converting map!");
var1.converMapToMCRegion(var2, new ConvertProgressUpdater(this));
}
this.worldMngr = new WorldServer[2];
SaveOldDir var5 = new SaveOldDir(new File("."), var2, true);
for(int var6 = 0; var6 < this.worldMngr.length; ++var6) {
if(var6 == 0) {
this.worldMngr[var6] = new WorldServer(this, var5, var2, var6 == 0 ? 0 : -1, var3);
} else {
this.worldMngr[var6] = new WorldServerMulti(this, var5, var2, var6 == 0 ? 0 : -1, var3, this.worldMngr[0]);
}
this.worldMngr[var6].addWorldAccess(new WorldManager(this, this.worldMngr[var6]));
this.worldMngr[var6].difficultySetting = this.propertyManagerObj.getBooleanProperty("spawn-monsters", true) ? 1 : 0;
this.worldMngr[var6].setAllowedSpawnTypes(this.propertyManagerObj.getBooleanProperty("spawn-monsters", true), this.spawnPeacefulMobs);
this.configManager.setPlayerManager(this.worldMngr);
}
short var18 = 196;
long var7 = System.currentTimeMillis();
for(int var9 = 0; var9 < this.worldMngr.length; ++var9) {
logger.info("Preparing start region for level " + var9);
if(var9 == 0 || this.propertyManagerObj.getBooleanProperty("allow-nether", true)) {
WorldServer var10 = this.worldMngr[var9];
ChunkCoordinates var11 = var10.getSpawnPoint();
for(int var12 = -var18; var12 <= var18 && this.serverRunning; var12 += 16) {
for(int var13 = -var18; var13 <= var18 && this.serverRunning; var13 += 16) {
long var14 = System.currentTimeMillis();
if(var14 < var7) {
var7 = var14;
}
if(var14 > var7 + 1000L) {
int var16 = (var18 * 2 + 1) * (var18 * 2 + 1);
int var17 = (var12 + var18) * (var18 * 2 + 1) + var13 + 1;
this.outputPercentRemaining("Preparing spawn area", var17 * 100 / var16);
var7 = var14;
}
var10.chunkProviderServer.loadChunk(var11.posX + var12 >> 4, var11.posZ + var13 >> 4);
while(var10.func_6156_d() && this.serverRunning) {
}
}
}
}
}
this.clearCurrentTask();
}
private void outputPercentRemaining(String var1, int var2) {
this.currentTask = var1;
this.percentDone = var2;
logger.info(var1 + ": " + var2 + "%");
}
private void clearCurrentTask() {
this.currentTask = null;
this.percentDone = 0;
}
private void saveServerWorld() {
logger.info("Saving chunks");
for(int var1 = 0; var1 < this.worldMngr.length; ++var1) {
WorldServer var2 = this.worldMngr[var1];
var2.saveWorld(true, (IProgressUpdate)null);
var2.func_30006_w();
}
}
private void stopServer() {
logger.info("Stopping server");
if(this.configManager != null) {
this.configManager.savePlayerStates();
}
for(int var1 = 0; var1 < this.worldMngr.length; ++var1) {
WorldServer var2 = this.worldMngr[var1];
if(var2 != null) {
this.saveServerWorld();
}
}
}
public void initiateShutdown() {
this.serverRunning = false;
}
public void run() {
try {
if(this.startServer()) {
long var1 = System.currentTimeMillis();
for(long var3 = 0L; this.serverRunning; Thread.sleep(1L)) {
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;
if(this.worldMngr[0].isAllPlayersFullyAsleep()) {
this.doTick();
var3 = 0L;
} else {
while(var3 > 50L) {
var3 -= 50L;
this.doTick();
}
}
}
} else {
while(this.serverRunning) {
this.commandLineParser();
try {
Thread.sleep(10L);
} catch (InterruptedException var57) {
var57.printStackTrace();
}
}
}
} catch (Throwable var58) {
var58.printStackTrace();
logger.log(Level.SEVERE, "Unexpected exception", var58);
while(this.serverRunning) {
this.commandLineParser();
try {
Thread.sleep(10L);
} catch (InterruptedException var56) {
var56.printStackTrace();
}
}
} finally {
try {
this.stopServer();
this.serverStopped = true;
} catch (Throwable var54) {
var54.printStackTrace();
} finally {
System.exit(0);
}
}
}
private void doTick() {
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.deathTime;
for(var6 = 0; var6 < this.worldMngr.length; ++var6) {
if(var6 == 0 || this.propertyManagerObj.getBooleanProperty("allow-nether", true)) {
WorldServer var7 = this.worldMngr[var6];
if(this.deathTime % 20 == 0) {
this.configManager.sendPacketToAllPlayersInDimension(new Packet4UpdateTime(var7.getWorldTime()), var7.worldProvider.worldType);
}
var7.tick();
while(var7.func_6156_d()) {
}
var7.updateEntities();
}
}
this.networkServer.handleNetworkListenThread();
this.configManager.onTick();
for(var6 = 0; var6 < this.entityTracker.length; ++var6) {
this.entityTracker[var6].updateTrackedEntities();
}
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);
this.commandHandler.handleCommand(var1);
}
}
public void func_6022_a(IUpdatePlayerListBox var1) {
this.field_9010_p.add(var1);
}
public static void main(String[] var0) {
StatList.func_27092_a();
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 void logWarning(String var1) {
logger.warning(var1);
}
public String getUsername() {
return "CONSOLE";
}
public WorldServer getWorldManager(int var1) {
return var1 == -1 ? this.worldMngr[1] : this.worldMngr[0];
}
public EntityTracker getEntityTracker(int var1) {
return var1 == -1 ? this.entityTracker[1] : this.entityTracker[0];
}
public static boolean isServerRunning(MinecraftServer var0) {
return var0.serverRunning;
}
}

View File

@@ -0,0 +1,67 @@
package net.minecraft.src;
public class Achievement extends StatBase {
public final int field_25067_a;
public final int field_27991_b;
public final Achievement field_27992_c;
private final String field_27063_l;
public final ItemStack theItemStack;
private boolean field_27062_m;
public Achievement(int var1, String var2, int var3, int var4, Item var5, Achievement var6) {
this(var1, var2, var3, var4, new ItemStack(var5), var6);
}
public Achievement(int var1, String var2, int var3, int var4, Block var5, Achievement var6) {
this(var1, var2, var3, var4, new ItemStack(var5), var6);
}
public Achievement(int var1, String var2, int var3, int var4, ItemStack var5, Achievement var6) {
super(5242880 + var1, StatCollector.translateToLocal("achievement." + var2));
this.theItemStack = var5;
this.field_27063_l = StatCollector.translateToLocal("achievement." + var2 + ".desc");
this.field_25067_a = var3;
this.field_27991_b = var4;
if(var3 < AchievementList.field_27114_a) {
AchievementList.field_27114_a = var3;
}
if(var4 < AchievementList.field_27113_b) {
AchievementList.field_27113_b = var4;
}
if(var3 > AchievementList.field_27112_c) {
AchievementList.field_27112_c = var3;
}
if(var4 > AchievementList.field_27111_d) {
AchievementList.field_27111_d = var4;
}
this.field_27992_c = var6;
}
public Achievement func_27059_a() {
this.field_27058_g = true;
return this;
}
public Achievement func_27060_b() {
this.field_27062_m = true;
return this;
}
public Achievement func_27061_c() {
super.func_27053_d();
AchievementList.field_25129_a.add(this);
return this;
}
public StatBase func_27053_d() {
return this.func_27061_c();
}
public StatBase func_27052_e() {
return this.func_27059_a();
}
}

View File

@@ -0,0 +1,35 @@
package net.minecraft.src;
import java.util.ArrayList;
import java.util.List;
public class AchievementList {
public static int field_27114_a;
public static int field_27113_b;
public static int field_27112_c;
public static int field_27111_d;
public static List field_25129_a = new ArrayList();
public static Achievement field_25128_b = (new Achievement(0, "openInventory", 0, 0, Item.book, (Achievement)null)).func_27059_a().func_27061_c();
public static Achievement field_25131_c = (new Achievement(1, "mineWood", 2, 1, Block.wood, field_25128_b)).func_27061_c();
public static Achievement field_25130_d = (new Achievement(2, "buildWorkBench", 4, -1, Block.workbench, field_25131_c)).func_27061_c();
public static Achievement field_27110_i = (new Achievement(3, "buildPickaxe", 4, 2, Item.pickaxeWood, field_25130_d)).func_27061_c();
public static Achievement field_27109_j = (new Achievement(4, "buildFurnace", 3, 4, Block.stoneOvenActive, field_27110_i)).func_27061_c();
public static Achievement field_27108_k = (new Achievement(5, "acquireIron", 1, 4, Item.ingotIron, field_27109_j)).func_27061_c();
public static Achievement field_27107_l = (new Achievement(6, "buildHoe", 2, -3, Item.hoeWood, field_25130_d)).func_27061_c();
public static Achievement field_27106_m = (new Achievement(7, "makeBread", -1, -3, Item.bread, field_27107_l)).func_27061_c();
public static Achievement field_27105_n = (new Achievement(8, "bakeCake", 0, -5, Item.cake, field_27107_l)).func_27061_c();
public static Achievement field_27104_o = (new Achievement(9, "buildBetterPickaxe", 6, 2, Item.pickaxeStone, field_27110_i)).func_27061_c();
public static Achievement field_27103_p = (new Achievement(10, "cookFish", 2, 6, Item.fishCooked, field_27109_j)).func_27061_c();
public static Achievement field_27102_q = (new Achievement(11, "onARail", 2, 3, Block.minecartTrack, field_27108_k)).func_27060_b().func_27061_c();
public static Achievement field_27101_r = (new Achievement(12, "buildSword", 6, -1, Item.swordWood, field_25130_d)).func_27061_c();
public static Achievement field_27100_s = (new Achievement(13, "killEnemy", 8, -1, Item.bone, field_27101_r)).func_27061_c();
public static Achievement field_27099_t = (new Achievement(14, "killCow", 7, -3, Item.leather, field_27101_r)).func_27061_c();
public static Achievement field_27098_u = (new Achievement(15, "flyPig", 8, -4, Item.saddle, field_27099_t)).func_27060_b().func_27061_c();
public static void func_27097_a() {
}
static {
System.out.println(field_25129_a.size() + " achievements");
}
}

View File

@@ -0,0 +1,36 @@
package net.minecraft.src;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class AchievementMap {
public static AchievementMap field_25134_a = new AchievementMap();
private Map field_25133_b = new HashMap();
private AchievementMap() {
try {
BufferedReader var1 = new BufferedReader(new InputStreamReader(AchievementMap.class.getResourceAsStream("/achievement/map.txt")));
while(true) {
String var2 = var1.readLine();
if(var2 == null) {
var1.close();
break;
}
String[] var3 = var2.split(",");
int var4 = Integer.parseInt(var3[0]);
this.field_25133_b.put(Integer.valueOf(var4), var3[1]);
}
} catch (Exception var5) {
var5.printStackTrace();
}
}
public static String func_25132_a(int var0) {
return (String)field_25134_a.field_25133_b.get(Integer.valueOf(var0));
}
}

View File

@@ -0,0 +1,324 @@
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 expand(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 calculateXOffset(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 calculateYOffset(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 calculateZOffset(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 boolean isVecInXYZ(Vec3D var1) {
return var1.xCoord > this.minX && var1.xCoord < this.maxX ? (var1.yCoord > this.minY && var1.yCoord < this.maxY ? var1.zCoord > this.minZ && var1.zCoord < this.maxZ : false) : false;
}
public AxisAlignedBB getInsetBoundingBox(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 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;
}
public String toString() {
return "box[" + this.minX + ", " + this.minY + ", " + this.minZ + " -> " + this.maxX + ", " + this.maxY + ", " + this.maxZ + "]";
}
}

View File

@@ -0,0 +1,112 @@
package net.minecraft.src;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class BiomeGenBase {
public static final BiomeGenBase rainforest = (new BiomeGenRainforest()).setColor(588342).setBiomeName("Rainforest").func_4080_a(2094168);
public static final BiomeGenBase swampland = (new BiomeGenSwamp()).setColor(522674).setBiomeName("Swampland").func_4080_a(9154376);
public static final BiomeGenBase seasonalForest = (new BiomeGenBase()).setColor(10215459).setBiomeName("Seasonal Forest");
public static final BiomeGenBase forest = (new BiomeGenForest()).setColor(353825).setBiomeName("Forest").func_4080_a(5159473);
public static final BiomeGenBase savanna = (new BiomeGenDesert()).setColor(14278691).setBiomeName("Savanna");
public static final BiomeGenBase shrubland = (new BiomeGenBase()).setColor(10595616).setBiomeName("Shrubland");
public static final BiomeGenBase taiga = (new BiomeGenTaiga()).setColor(3060051).setBiomeName("Taiga").setEnableSnow().func_4080_a(8107825);
public static final BiomeGenBase desert = (new BiomeGenDesert()).setColor(16421912).setBiomeName("Desert").setDisableRain();
public static final BiomeGenBase plains = (new BiomeGenDesert()).setColor(16767248).setBiomeName("Plains");
public static final BiomeGenBase iceDesert = (new BiomeGenDesert()).setColor(16772499).setBiomeName("Ice Desert").setEnableSnow().setDisableRain().func_4080_a(12899129);
public static final BiomeGenBase tundra = (new BiomeGenBase()).setColor(5762041).setBiomeName("Tundra").setEnableSnow().func_4080_a(12899129);
public static final BiomeGenBase hell = (new BiomeGenHell()).setColor(16711680).setBiomeName("Hell").setDisableRain();
public static final BiomeGenBase field_28054_m = (new BiomeGenSky()).setColor(8421631).setBiomeName("Sky").setDisableRain();
public String biomeName;
public int color;
public byte topBlock = (byte)Block.grass.blockID;
public byte fillerBlock = (byte)Block.dirt.blockID;
public int field_6161_q = 5169201;
protected List spawnableMonsterList = new ArrayList();
protected List spawnableCreatureList = new ArrayList();
protected List spawnableWaterCreatureList = new ArrayList();
private boolean enableSnow;
private boolean enableRain = true;
private static BiomeGenBase[] biomeLookupTable = new BiomeGenBase[4096];
protected BiomeGenBase() {
this.spawnableMonsterList.add(new SpawnListEntry(EntitySpider.class, 10));
this.spawnableMonsterList.add(new SpawnListEntry(EntityZombie.class, 10));
this.spawnableMonsterList.add(new SpawnListEntry(EntitySkeleton.class, 10));
this.spawnableMonsterList.add(new SpawnListEntry(EntityCreeper.class, 10));
this.spawnableMonsterList.add(new SpawnListEntry(EntitySlime.class, 10));
this.spawnableCreatureList.add(new SpawnListEntry(EntitySheep.class, 12));
this.spawnableCreatureList.add(new SpawnListEntry(EntityPig.class, 10));
this.spawnableCreatureList.add(new SpawnListEntry(EntityChicken.class, 10));
this.spawnableCreatureList.add(new SpawnListEntry(EntityCow.class, 8));
this.spawnableWaterCreatureList.add(new SpawnListEntry(EntitySquid.class, 10));
}
private BiomeGenBase setDisableRain() {
this.enableRain = false;
return this;
}
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;
}
public WorldGenerator getRandomWorldGenForTrees(Random var1) {
return (WorldGenerator)(var1.nextInt(10) == 0 ? new WorldGenBigTree() : new WorldGenTrees());
}
protected BiomeGenBase setEnableSnow() {
this.enableSnow = true;
return this;
}
protected BiomeGenBase setBiomeName(String var1) {
this.biomeName = var1;
return this;
}
protected BiomeGenBase func_4080_a(int var1) {
this.field_6161_q = var1;
return this;
}
protected BiomeGenBase setColor(int var1) {
this.color = var1;
return this;
}
public static BiomeGenBase getBiomeFromLookup(double var0, double var2) {
int var4 = (int)(var0 * 63.0D);
int var5 = (int)(var2 * 63.0D);
return biomeLookupTable[var4 + var5 * 64];
}
public static BiomeGenBase 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 List getSpawnableList(EnumCreatureType var1) {
return var1 == EnumCreatureType.monster ? this.spawnableMonsterList : (var1 == EnumCreatureType.creature ? this.spawnableCreatureList : (var1 == EnumCreatureType.waterCreature ? this.spawnableWaterCreatureList : null));
}
public boolean getEnableSnow() {
return this.enableSnow;
}
public boolean canSpawnLightningBolt() {
return this.enableSnow ? false : this.enableRain;
}
static {
generateBiomeLookup();
}
}

View File

@@ -0,0 +1,4 @@
package net.minecraft.src;
public class BiomeGenDesert extends BiomeGenBase {
}

View File

@@ -0,0 +1,13 @@
package net.minecraft.src;
import java.util.Random;
public class BiomeGenForest extends BiomeGenBase {
public BiomeGenForest() {
this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 2));
}
public WorldGenerator getRandomWorldGenForTrees(Random var1) {
return (WorldGenerator)(var1.nextInt(5) == 0 ? new WorldGenForest() : (var1.nextInt(3) == 0 ? new WorldGenBigTree() : new WorldGenTrees()));
}
}

View File

@@ -0,0 +1,11 @@
package net.minecraft.src;
public class BiomeGenHell extends BiomeGenBase {
public BiomeGenHell() {
this.spawnableMonsterList.clear();
this.spawnableCreatureList.clear();
this.spawnableWaterCreatureList.clear();
this.spawnableMonsterList.add(new SpawnListEntry(EntityGhast.class, 10));
this.spawnableMonsterList.add(new SpawnListEntry(EntityPigZombie.class, 10));
}
}

View File

@@ -0,0 +1,9 @@
package net.minecraft.src;
import java.util.Random;
public class BiomeGenRainforest extends BiomeGenBase {
public WorldGenerator getRandomWorldGenForTrees(Random var1) {
return (WorldGenerator)(var1.nextInt(3) == 0 ? new WorldGenBigTree() : new WorldGenTrees());
}
}

View File

@@ -0,0 +1,10 @@
package net.minecraft.src;
public class BiomeGenSky extends BiomeGenBase {
public BiomeGenSky() {
this.spawnableMonsterList.clear();
this.spawnableCreatureList.clear();
this.spawnableWaterCreatureList.clear();
this.spawnableCreatureList.add(new SpawnListEntry(EntityChicken.class, 10));
}
}

View File

@@ -0,0 +1,4 @@
package net.minecraft.src;
public class BiomeGenSwamp extends BiomeGenBase {
}

View File

@@ -0,0 +1,13 @@
package net.minecraft.src;
import java.util.Random;
public class BiomeGenTaiga extends BiomeGenBase {
public BiomeGenTaiga() {
this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 2));
}
public WorldGenerator getRandomWorldGenForTrees(Random var1) {
return (WorldGenerator)(var1.nextInt(3) == 0 ? new WorldGenTaiga1() : new WorldGenTaiga2());
}
}

View File

@@ -0,0 +1,543 @@
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[] opaqueCubeLookup = new boolean[256];
public static final boolean[] isBlockContainer = new boolean[256];
public static final int[] lightOpacity = new int[256];
public static final boolean[] canBlockGrass = new boolean[256];
public static final int[] lightValue = new int[256];
public static final boolean[] requiresSelfNotify = new boolean[256];
public static final Block stone = (new BlockStone(1, 1)).setHardness(1.5F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("stone");
public static final BlockGrass grass = (BlockGrass)(new BlockGrass(2)).setHardness(0.6F).setStepSound(soundGrassFootstep).setBlockName("grass");
public static final Block dirt = (new BlockDirt(3, 2)).setHardness(0.5F).setStepSound(soundGravelFootstep).setBlockName("dirt");
public static final Block cobblestone = (new Block(4, 16, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("stonebrick");
public static final Block planks = (new Block(5, 4, Material.wood)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep).setBlockName("wood").setRequiresSelfNotify();
public static final Block sapling = (new BlockSapling(6, 15)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("sapling").setRequiresSelfNotify();
public static final Block bedrock = (new Block(7, 17, Material.rock)).setBlockUnbreakable().setResistance(6000000.0F).setStepSound(soundStoneFootstep).setBlockName("bedrock").disableStats();
public static final Block waterMoving = (new BlockFlowing(8, Material.water)).setHardness(100.0F).setLightOpacity(3).setBlockName("water").disableStats().setRequiresSelfNotify();
public static final Block waterStill = (new BlockStationary(9, Material.water)).setHardness(100.0F).setLightOpacity(3).setBlockName("water").disableStats().setRequiresSelfNotify();
public static final Block lavaMoving = (new BlockFlowing(10, Material.lava)).setHardness(0.0F).setLightValue(1.0F).setLightOpacity(255).setBlockName("lava").disableStats().setRequiresSelfNotify();
public static final Block lavaStill = (new BlockStationary(11, Material.lava)).setHardness(100.0F).setLightValue(1.0F).setLightOpacity(255).setBlockName("lava").disableStats().setRequiresSelfNotify();
public static final Block sand = (new BlockSand(12, 18)).setHardness(0.5F).setStepSound(soundSandFootstep).setBlockName("sand");
public static final Block gravel = (new BlockGravel(13, 19)).setHardness(0.6F).setStepSound(soundGravelFootstep).setBlockName("gravel");
public static final Block oreGold = (new BlockOre(14, 32)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreGold");
public static final Block oreIron = (new BlockOre(15, 33)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreIron");
public static final Block oreCoal = (new BlockOre(16, 34)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreCoal");
public static final Block wood = (new BlockLog(17)).setHardness(2.0F).setStepSound(soundWoodFootstep).setBlockName("log").setRequiresSelfNotify();
public static final BlockLeaves leaves = (BlockLeaves)(new BlockLeaves(18, 52)).setHardness(0.2F).setLightOpacity(1).setStepSound(soundGrassFootstep).setBlockName("leaves").disableStats().setRequiresSelfNotify();
public static final Block sponge = (new BlockSponge(19)).setHardness(0.6F).setStepSound(soundGrassFootstep).setBlockName("sponge");
public static final Block glass = (new BlockGlass(20, 49, Material.glass, false)).setHardness(0.3F).setStepSound(soundGlassFootstep).setBlockName("glass");
public static final Block oreLapis = (new BlockOre(21, 160)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreLapis");
public static final Block blockLapis = (new Block(22, 144, Material.rock)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("blockLapis");
public static final Block dispenser = (new BlockDispenser(23)).setHardness(3.5F).setStepSound(soundStoneFootstep).setBlockName("dispenser").setRequiresSelfNotify();
public static final Block sandStone = (new BlockSandStone(24)).setStepSound(soundStoneFootstep).setHardness(0.8F).setBlockName("sandStone");
public static final Block musicBlock = (new BlockNote(25)).setHardness(0.8F).setBlockName("musicBlock").setRequiresSelfNotify();
public static final Block bed = (new BlockBed(26)).setHardness(0.2F).setBlockName("bed").disableStats().setRequiresSelfNotify();
public static final Block railPowered = (new BlockRail(27, 179, true)).setHardness(0.7F).setStepSound(soundMetalFootstep).setBlockName("goldenRail").setRequiresSelfNotify();
public static final Block railDetector = (new BlockDetectorRail(28, 195)).setHardness(0.7F).setStepSound(soundMetalFootstep).setBlockName("detectorRail").setRequiresSelfNotify();
public static final Block pistonStickyBase = (new BlockPistonBase(29, 106, true)).setBlockName("pistonStickyBase").setRequiresSelfNotify();
public static final Block web = (new BlockWeb(30, 11)).setLightOpacity(1).setHardness(4.0F).setBlockName("web");
public static final BlockTallGrass tallGrass = (BlockTallGrass)(new BlockTallGrass(31, 39)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("tallgrass");
public static final BlockDeadBush deadBush = (BlockDeadBush)(new BlockDeadBush(32, 55)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("deadbush");
public static final Block pistonBase = (new BlockPistonBase(33, 107, false)).setBlockName("pistonBase").setRequiresSelfNotify();
public static final BlockPistonExtension pistonExtension = (BlockPistonExtension)(new BlockPistonExtension(34, 107)).setRequiresSelfNotify();
public static final Block cloth = (new BlockCloth()).setHardness(0.8F).setStepSound(soundClothFootstep).setBlockName("cloth").setRequiresSelfNotify();
public static final BlockPistonMoving pistonMoving = new BlockPistonMoving(36);
public static final BlockFlower plantYellow = (BlockFlower)(new BlockFlower(37, 13)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("flower");
public static final BlockFlower plantRed = (BlockFlower)(new BlockFlower(38, 12)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("rose");
public static final BlockFlower mushroomBrown = (BlockFlower)(new BlockMushroom(39, 29)).setHardness(0.0F).setStepSound(soundGrassFootstep).setLightValue(2.0F / 16.0F).setBlockName("mushroom");
public static final BlockFlower mushroomRed = (BlockFlower)(new BlockMushroom(40, 28)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("mushroom");
public static final Block blockGold = (new BlockOreStorage(41, 23)).setHardness(3.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setBlockName("blockGold");
public static final Block blockSteel = (new BlockOreStorage(42, 22)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setBlockName("blockIron");
public static final Block stairDouble = (new BlockStep(43, true)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("stoneSlab");
public static final Block stairSingle = (new BlockStep(44, false)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("stoneSlab");
public static final Block brick = (new Block(45, 7, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("brick");
public static final Block tnt = (new BlockTNT(46, 8)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("tnt");
public static final Block bookShelf = (new BlockBookshelf(47, 35)).setHardness(1.5F).setStepSound(soundWoodFootstep).setBlockName("bookshelf");
public static final Block cobblestoneMossy = (new Block(48, 36, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("stoneMoss");
public static final Block obsidian = (new BlockObsidian(49, 37)).setHardness(10.0F).setResistance(2000.0F).setStepSound(soundStoneFootstep).setBlockName("obsidian");
public static final Block torchWood = (new BlockTorch(50, 80)).setHardness(0.0F).setLightValue(15.0F / 16.0F).setStepSound(soundWoodFootstep).setBlockName("torch").setRequiresSelfNotify();
public static final BlockFire fire = (BlockFire)(new BlockFire(51, 31)).setHardness(0.0F).setLightValue(1.0F).setStepSound(soundWoodFootstep).setBlockName("fire").disableStats().setRequiresSelfNotify();
public static final Block mobSpawner = (new BlockMobSpawner(52, 65)).setHardness(5.0F).setStepSound(soundMetalFootstep).setBlockName("mobSpawner").disableStats();
public static final Block stairCompactPlanks = (new BlockStairs(53, planks)).setBlockName("stairsWood").setRequiresSelfNotify();
public static final Block chest = (new BlockChest(54)).setHardness(2.5F).setStepSound(soundWoodFootstep).setBlockName("chest").setRequiresSelfNotify();
public static final Block redstoneWire = (new BlockRedstoneWire(55, 164)).setHardness(0.0F).setStepSound(soundPowderFootstep).setBlockName("redstoneDust").disableStats().setRequiresSelfNotify();
public static final Block oreDiamond = (new BlockOre(56, 50)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreDiamond");
public static final Block blockDiamond = (new BlockOreStorage(57, 24)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setBlockName("blockDiamond");
public static final Block workbench = (new BlockWorkbench(58)).setHardness(2.5F).setStepSound(soundWoodFootstep).setBlockName("workbench");
public static final Block crops = (new BlockCrops(59, 88)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("crops").disableStats().setRequiresSelfNotify();
public static final Block tilledField = (new BlockFarmland(60)).setHardness(0.6F).setStepSound(soundGravelFootstep).setBlockName("farmland");
public static final Block stoneOvenIdle = (new BlockFurnace(61, false)).setHardness(3.5F).setStepSound(soundStoneFootstep).setBlockName("furnace").setRequiresSelfNotify();
public static final Block stoneOvenActive = (new BlockFurnace(62, true)).setHardness(3.5F).setStepSound(soundStoneFootstep).setLightValue(14.0F / 16.0F).setBlockName("furnace").setRequiresSelfNotify();
public static final Block signPost = (new BlockSign(63, TileEntitySign.class, true)).setHardness(1.0F).setStepSound(soundWoodFootstep).setBlockName("sign").disableStats().setRequiresSelfNotify();
public static final Block doorWood = (new BlockDoor(64, Material.wood)).setHardness(3.0F).setStepSound(soundWoodFootstep).setBlockName("doorWood").disableStats().setRequiresSelfNotify();
public static final Block ladder = (new BlockLadder(65, 83)).setHardness(0.4F).setStepSound(soundWoodFootstep).setBlockName("ladder").setRequiresSelfNotify();
public static final Block minecartTrack = (new BlockRail(66, 128, false)).setHardness(0.7F).setStepSound(soundMetalFootstep).setBlockName("rail").setRequiresSelfNotify();
public static final Block stairCompactCobblestone = (new BlockStairs(67, cobblestone)).setBlockName("stairsStone").setRequiresSelfNotify();
public static final Block signWall = (new BlockSign(68, TileEntitySign.class, false)).setHardness(1.0F).setStepSound(soundWoodFootstep).setBlockName("sign").disableStats().setRequiresSelfNotify();
public static final Block lever = (new BlockLever(69, 96)).setHardness(0.5F).setStepSound(soundWoodFootstep).setBlockName("lever").setRequiresSelfNotify();
public static final Block pressurePlateStone = (new BlockPressurePlate(70, stone.blockIndexInTexture, EnumMobType.mobs, Material.rock)).setHardness(0.5F).setStepSound(soundStoneFootstep).setBlockName("pressurePlate").setRequiresSelfNotify();
public static final Block doorSteel = (new BlockDoor(71, Material.iron)).setHardness(5.0F).setStepSound(soundMetalFootstep).setBlockName("doorIron").disableStats().setRequiresSelfNotify();
public static final Block pressurePlatePlanks = (new BlockPressurePlate(72, planks.blockIndexInTexture, EnumMobType.everything, Material.wood)).setHardness(0.5F).setStepSound(soundWoodFootstep).setBlockName("pressurePlate").setRequiresSelfNotify();
public static final Block oreRedstone = (new BlockRedstoneOre(73, 51, false)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreRedstone").setRequiresSelfNotify();
public static final Block oreRedstoneGlowing = (new BlockRedstoneOre(74, 51, true)).setLightValue(10.0F / 16.0F).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setBlockName("oreRedstone").setRequiresSelfNotify();
public static final Block torchRedstoneIdle = (new BlockRedstoneTorch(75, 115, false)).setHardness(0.0F).setStepSound(soundWoodFootstep).setBlockName("notGate").setRequiresSelfNotify();
public static final Block torchRedstoneActive = (new BlockRedstoneTorch(76, 99, true)).setHardness(0.0F).setLightValue(0.5F).setStepSound(soundWoodFootstep).setBlockName("notGate").setRequiresSelfNotify();
public static final Block button = (new BlockButton(77, stone.blockIndexInTexture)).setHardness(0.5F).setStepSound(soundStoneFootstep).setBlockName("button").setRequiresSelfNotify();
public static final Block snow = (new BlockSnow(78, 66)).setHardness(0.1F).setStepSound(soundClothFootstep).setBlockName("snow");
public static final Block ice = (new BlockIce(79, 67)).setHardness(0.5F).setLightOpacity(3).setStepSound(soundGlassFootstep).setBlockName("ice");
public static final Block blockSnow = (new BlockSnowBlock(80, 66)).setHardness(0.2F).setStepSound(soundClothFootstep).setBlockName("snow");
public static final Block cactus = (new BlockCactus(81, 70)).setHardness(0.4F).setStepSound(soundClothFootstep).setBlockName("cactus");
public static final Block blockClay = (new BlockClay(82, 72)).setHardness(0.6F).setStepSound(soundGravelFootstep).setBlockName("clay");
public static final Block reed = (new BlockReed(83, 73)).setHardness(0.0F).setStepSound(soundGrassFootstep).setBlockName("reeds").disableStats();
public static final Block jukebox = (new BlockJukeBox(84, 74)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setBlockName("jukebox").setRequiresSelfNotify();
public static final Block fence = (new BlockFence(85, 4)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep).setBlockName("fence").setRequiresSelfNotify();
public static final Block pumpkin = (new BlockPumpkin(86, 102, false)).setHardness(1.0F).setStepSound(soundWoodFootstep).setBlockName("pumpkin").setRequiresSelfNotify();
public static final Block bloodStone = (new BlockNetherrack(87, 103)).setHardness(0.4F).setStepSound(soundStoneFootstep).setBlockName("hellrock");
public static final Block slowSand = (new BlockSoulSand(88, 104)).setHardness(0.5F).setStepSound(soundSandFootstep).setBlockName("hellsand");
public static final Block glowStone = (new BlockGlowStone(89, 105, Material.rock)).setHardness(0.3F).setStepSound(soundGlassFootstep).setLightValue(1.0F).setBlockName("lightgem");
public static final BlockPortal portal = (BlockPortal)(new BlockPortal(90, 14)).setHardness(-1.0F).setStepSound(soundGlassFootstep).setLightValue(12.0F / 16.0F).setBlockName("portal");
public static final Block pumpkinLantern = (new BlockPumpkin(91, 102, true)).setHardness(1.0F).setStepSound(soundWoodFootstep).setLightValue(1.0F).setBlockName("litpumpkin").setRequiresSelfNotify();
public static final Block cake = (new BlockCake(92, 121)).setHardness(0.5F).setStepSound(soundClothFootstep).setBlockName("cake").disableStats().setRequiresSelfNotify();
public static final Block redstoneRepeaterIdle = (new BlockRedstoneRepeater(93, false)).setHardness(0.0F).setStepSound(soundWoodFootstep).setBlockName("diode").disableStats().setRequiresSelfNotify();
public static final Block redstoneRepeaterActive = (new BlockRedstoneRepeater(94, true)).setHardness(0.0F).setLightValue(10.0F / 16.0F).setStepSound(soundWoodFootstep).setBlockName("diode").disableStats().setRequiresSelfNotify();
public static final Block lockedChest = (new BlockLockedChest(95)).setHardness(0.0F).setLightValue(1.0F).setStepSound(soundWoodFootstep).setBlockName("lockedchest").setTickOnLoad(true).setRequiresSelfNotify();
public static final Block trapdoor = (new BlockTrapDoor(96, Material.wood)).setHardness(3.0F).setStepSound(soundWoodFootstep).setBlockName("trapdoor").disableStats().setRequiresSelfNotify();
public int blockIndexInTexture;
public final int blockID;
protected float blockHardness;
protected float blockResistance;
protected boolean blockConstructorCalled;
protected boolean enableStats;
public double minX;
public double minY;
public double minZ;
public double maxX;
public double maxY;
public double maxZ;
public StepSound stepSound;
public float blockParticleGravity;
public final Material blockMaterial;
public float slipperiness;
private String blockName;
protected Block(int var1, Material var2) {
this.blockConstructorCalled = true;
this.enableStats = true;
this.stepSound = soundPowderFootstep;
this.blockParticleGravity = 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);
opaqueCubeLookup[var1] = this.isOpaqueCube();
lightOpacity[var1] = this.isOpaqueCube() ? 255 : 0;
canBlockGrass[var1] = !var2.getCanBlockGrass();
isBlockContainer[var1] = false;
}
}
protected Block setRequiresSelfNotify() {
requiresSelfNotify[this.blockID] = true;
return this;
}
protected void setFireBurnRates() {
}
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;
}
public boolean isACube() {
return true;
}
protected Block setHardness(float var1) {
this.blockHardness = var1;
if(this.blockResistance < var1 * 5.0F) {
this.blockResistance = var1 * 5.0F;
}
return this;
}
protected Block setBlockUnbreakable() {
this.setHardness(-1.0F);
return this;
}
public float getHardness() {
return this.blockHardness;
}
protected Block setTickOnLoad(boolean var1) {
tickOnLoad[this.blockID] = var1;
return this;
}
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 shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) {
return var1.getBlockMaterial(var2, var3, var4).isSolid();
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return this.getBlockTextureFromSide(var1);
}
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 isOpaqueCube() {
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 blockStrength(EntityPlayer var1) {
return this.blockHardness < 0.0F ? 0.0F : (!var1.canHarvestBlock(this) ? 1.0F / this.blockHardness / 100.0F : var1.getCurrentPlayerStrVsBlock(this) / this.blockHardness / 30.0F);
}
public final 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.singleplayerWorld) {
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) {
this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(var9, 1, this.damageDropped(var5)));
}
}
}
}
}
protected void dropBlockAsItem_do(World var1, int var2, int var3, int var4, ItemStack var5) {
if(!var1.singleplayerWorld) {
float var6 = 0.7F;
double var7 = (double)(var1.rand.nextFloat() * var6) + (double)(1.0F - var6) * 0.5D;
double var9 = (double)(var1.rand.nextFloat() * var6) + (double)(1.0F - var6) * 0.5D;
double var11 = (double)(var1.rand.nextFloat() * var6) + (double)(1.0F - var6) * 0.5D;
EntityItem var13 = new EntityItem(var1, (double)var2 + var7, (double)var3 + var9, (double)var4 + var11, var5);
var13.delayBeforeCanPickup = 10;
var1.entityJoinedWorld(var13);
}
}
protected int damageDropped(int var1) {
return 0;
}
public float getExplosionResistance(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 canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) {
return this.canPlaceBlockAt(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 || blocksList[var5].blockMaterial.func_27090_g();
}
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 harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) {
var2.addStat(StatList.mineBlockStatArray[this.blockID], 1);
this.dropBlockAsItem(var1, var3, var4, var5, var6);
}
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) {
}
public Block setBlockName(String var1) {
this.blockName = "tile." + var1;
return this;
}
public String getNameLocalizedForStats() {
return StatCollector.translateToLocal(this.getBlockName() + ".name");
}
public String getBlockName() {
return this.blockName;
}
public void playBlock(World var1, int var2, int var3, int var4, int var5, int var6) {
}
public boolean getEnableStats() {
return this.enableStats;
}
protected Block disableStats() {
this.enableStats = false;
return this;
}
public int getMobilityFlag() {
return this.blockMaterial.getMaterialMobility();
}
static {
Item.itemsList[cloth.blockID] = (new ItemCloth(cloth.blockID - 256)).setItemName("cloth");
Item.itemsList[wood.blockID] = (new ItemLog(wood.blockID - 256)).setItemName("log");
Item.itemsList[stairSingle.blockID] = (new ItemSlab(stairSingle.blockID - 256)).setItemName("stoneSlab");
Item.itemsList[sapling.blockID] = (new ItemSapling(sapling.blockID - 256)).setItemName("sapling");
Item.itemsList[leaves.blockID] = (new ItemLeaves(leaves.blockID - 256)).setItemName("leaves");
Item.itemsList[pistonBase.blockID] = new ItemPiston(pistonBase.blockID - 256);
Item.itemsList[pistonStickyBase.blockID] = new ItemPiston(pistonStickyBase.blockID - 256);
for(int var0 = 0; var0 < 256; ++var0) {
if(blocksList[var0] != null && Item.itemsList[var0] == null) {
Item.itemsList[var0] = new ItemBlock(var0 - 256);
blocksList[var0].setFireBurnRates();
}
}
canBlockGrass[0] = true;
StatList.func_25088_a();
}
}

View File

@@ -0,0 +1,190 @@
package net.minecraft.src;
import java.util.Iterator;
import java.util.Random;
public class BlockBed extends Block {
public static final int[][] field_22023_a = new int[][]{{0, 1}, {-1, 0}, {0, -1}, {1, 0}};
public BlockBed(int var1) {
super(var1, 134, Material.cloth);
this.setBounds();
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
if(var1.singleplayerWorld) {
return true;
} else {
int var6 = var1.getBlockMetadata(var2, var3, var4);
if(!func_22020_d(var6)) {
int var7 = func_22019_c(var6);
var2 += field_22023_a[var7][0];
var4 += field_22023_a[var7][1];
if(var1.getBlockId(var2, var3, var4) != this.blockID) {
return true;
}
var6 = var1.getBlockMetadata(var2, var3, var4);
}
if(!var1.worldProvider.func_28108_d()) {
double var16 = (double)var2 + 0.5D;
double var17 = (double)var3 + 0.5D;
double var11 = (double)var4 + 0.5D;
var1.setBlockWithNotify(var2, var3, var4, 0);
int var13 = func_22019_c(var6);
var2 += field_22023_a[var13][0];
var4 += field_22023_a[var13][1];
if(var1.getBlockId(var2, var3, var4) == this.blockID) {
var1.setBlockWithNotify(var2, var3, var4, 0);
var16 = (var16 + (double)var2 + 0.5D) / 2.0D;
var17 = (var17 + (double)var3 + 0.5D) / 2.0D;
var11 = (var11 + (double)var4 + 0.5D) / 2.0D;
}
var1.newExplosion((Entity)null, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), 5.0F, true);
return true;
} else {
if(func_22018_f(var6)) {
EntityPlayer var14 = null;
Iterator var8 = var1.playerEntities.iterator();
while(var8.hasNext()) {
EntityPlayer var9 = (EntityPlayer)var8.next();
if(var9.func_22057_E()) {
ChunkCoordinates var10 = var9.playerLocation;
if(var10.posX == var2 && var10.posY == var3 && var10.posZ == var4) {
var14 = var9;
}
}
}
if(var14 != null) {
var5.func_22061_a("tile.bed.occupied");
return true;
}
func_22022_a(var1, var2, var3, var4, false);
}
EnumStatus var15 = var5.goToSleep(var2, var3, var4);
if(var15 == EnumStatus.OK) {
func_22022_a(var1, var2, var3, var4, true);
return true;
} else {
if(var15 == EnumStatus.NOT_POSSIBLE_NOW) {
var5.func_22061_a("tile.bed.noSleep");
}
return true;
}
}
}
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
if(var1 == 0) {
return Block.planks.blockIndexInTexture;
} else {
int var3 = func_22019_c(var2);
int var4 = ModelBed.field_22155_c[var3][var1];
return func_22020_d(var2) ? (var4 == 2 ? this.blockIndexInTexture + 2 + 16 : (var4 != 5 && var4 != 4 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture + 1 + 16)) : (var4 == 3 ? this.blockIndexInTexture - 1 + 16 : (var4 != 5 && var4 != 4 ? this.blockIndexInTexture : this.blockIndexInTexture + 16));
}
}
public boolean isACube() {
return false;
}
public boolean isOpaqueCube() {
return false;
}
public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
this.setBounds();
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
int var7 = func_22019_c(var6);
if(func_22020_d(var6)) {
if(var1.getBlockId(var2 - field_22023_a[var7][0], var3, var4 - field_22023_a[var7][1]) != this.blockID) {
var1.setBlockWithNotify(var2, var3, var4, 0);
}
} else if(var1.getBlockId(var2 + field_22023_a[var7][0], var3, var4 + field_22023_a[var7][1]) != this.blockID) {
var1.setBlockWithNotify(var2, var3, var4, 0);
if(!var1.singleplayerWorld) {
this.dropBlockAsItem(var1, var2, var3, var4, var6);
}
}
}
public int idDropped(int var1, Random var2) {
return func_22020_d(var1) ? 0 : Item.bed.shiftedIndex;
}
private void setBounds() {
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 9.0F / 16.0F, 1.0F);
}
public static int func_22019_c(int var0) {
return var0 & 3;
}
public static boolean func_22020_d(int var0) {
return (var0 & 8) != 0;
}
public static boolean func_22018_f(int var0) {
return (var0 & 4) != 0;
}
public static void func_22022_a(World var0, int var1, int var2, int var3, boolean var4) {
int var5 = var0.getBlockMetadata(var1, var2, var3);
if(var4) {
var5 |= 4;
} else {
var5 &= -5;
}
var0.setBlockMetadataWithNotify(var1, var2, var3, var5);
}
public static ChunkCoordinates func_22021_g(World var0, int var1, int var2, int var3, int var4) {
int var5 = var0.getBlockMetadata(var1, var2, var3);
int var6 = func_22019_c(var5);
for(int var7 = 0; var7 <= 1; ++var7) {
int var8 = var1 - field_22023_a[var6][0] * var7 - 1;
int var9 = var3 - field_22023_a[var6][1] * var7 - 1;
int var10 = var8 + 2;
int var11 = var9 + 2;
for(int var12 = var8; var12 <= var10; ++var12) {
for(int var13 = var9; var13 <= var11; ++var13) {
if(var0.isBlockNormalCube(var12, var2 - 1, var13) && var0.isAirBlock(var12, var2, var13) && var0.isAirBlock(var12, var2 + 1, var13)) {
if(var4 <= 0) {
return new ChunkCoordinates(var12, var2, var13);
}
--var4;
}
}
}
}
return null;
}
public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) {
if(!func_22020_d(var5)) {
super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6);
}
}
public int getMobilityFlag() {
return 1;
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,14 @@
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 isOpaqueCube() {
return false;
}
}

View File

@@ -0,0 +1,215 @@
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 isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) {
return var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : (var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)));
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : var1.isBlockNormalCube(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.isBlockNormalCube(var2, var3, var4 + 1)) {
var6 = 4;
} else if(var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) {
var6 = 3;
} else if(var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) {
var6 = 2;
} else if(var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) {
var6 = 1;
} else {
var6 = this.getOrientation(var1, var2, var3, var4);
}
var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + var7);
}
private int getOrientation(World var1, int var2, int var3, int var4) {
return var1.isBlockNormalCube(var2 - 1, var3, var4) ? 1 : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? 2 : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? 3 : (var1.isBlockNormalCube(var2, var3, var4 + 1) ? 4 : 1)));
}
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.isBlockNormalCube(var2 - 1, var3, var4) && var6 == 1) {
var7 = true;
}
if(!var1.isBlockNormalCube(var2 + 1, var3, var4) && var6 == 2) {
var7 = true;
}
if(!var1.isBlockNormalCube(var2, var3, var4 - 1) && var6 == 3) {
var7 = true;
}
if(!var1.isBlockNormalCube(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) {
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.markBlocksDirty(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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
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.singleplayerWorld) {
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.markBlocksDirty(var2, var3, var4, var2, var3, var4);
}
}
}
}

View File

@@ -0,0 +1,77 @@
package net.minecraft.src;
import java.util.Random;
public class BlockCactus extends Block {
protected BlockCactus(int var1, int var2) {
super(var1, var2, Material.cactus);
this.setTickOnLoad(true);
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
if(var1.isAirBlock(var2, var3 + 1, var4)) {
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 isACube() {
return false;
}
public boolean isOpaqueCube() {
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).isSolid()) {
return false;
} else if(var1.getBlockMaterial(var2 + 1, var3, var4).isSolid()) {
return false;
} else if(var1.getBlockMaterial(var2, var3, var4 - 1).isSolid()) {
return false;
} else if(var1.getBlockMaterial(var2, var3, var4 + 1).isSolid()) {
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.attackEntityFrom((Entity)null, 1);
}
}

View File

@@ -0,0 +1,89 @@
package net.minecraft.src;
import java.util.Random;
public class BlockCake extends Block {
protected BlockCake(int var1, int var2) {
super(var1, var2, Material.cakeMaterial);
this.setTickOnLoad(true);
}
public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
int var5 = var1.getBlockMetadata(var2, var3, var4);
float var6 = 1.0F / 16.0F;
float var7 = (float)(1 + var5 * 2) / 16.0F;
float var8 = 0.5F;
this.setBlockBounds(var7, 0.0F, var6, 1.0F - var6, var8, 1.0F - var6);
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
int var5 = var1.getBlockMetadata(var2, var3, var4);
float var6 = 1.0F / 16.0F;
float var7 = (float)(1 + var5 * 2) / 16.0F;
float var8 = 0.5F;
return AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var7), (double)var3, (double)((float)var4 + var6), (double)((float)(var2 + 1) - var6), (double)((float)var3 + var8 - var6), (double)((float)(var4 + 1) - var6));
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return var1 == 1 ? this.blockIndexInTexture : (var1 == 0 ? this.blockIndexInTexture + 3 : (var2 > 0 && var1 == 4 ? this.blockIndexInTexture + 2 : this.blockIndexInTexture + 1));
}
public int getBlockTextureFromSide(int var1) {
return var1 == 1 ? this.blockIndexInTexture : (var1 == 0 ? this.blockIndexInTexture + 3 : this.blockIndexInTexture + 1);
}
public boolean isACube() {
return false;
}
public boolean isOpaqueCube() {
return false;
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
this.eatCakeSlice(var1, var2, var3, var4, var5);
return true;
}
public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) {
this.eatCakeSlice(var1, var2, var3, var4, var5);
}
private void eatCakeSlice(World var1, int var2, int var3, int var4, EntityPlayer var5) {
if(var5.health < 20) {
var5.heal(3);
int var6 = var1.getBlockMetadata(var2, var3, var4) + 1;
if(var6 >= 6) {
var1.setBlockWithNotify(var2, var3, var4, 0);
} else {
var1.setBlockMetadataWithNotify(var2, var3, var4, var6);
var1.markBlockAsNeedsUpdate(var2, var3, var4);
}
}
}
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) {
return var1.getBlockMaterial(var2, var3 - 1, var4).isSolid();
}
public int quantityDropped(Random var1) {
return 0;
}
public int idDropped(int var1, Random var2) {
return 0;
}
}

View File

@@ -0,0 +1,113 @@
package net.minecraft.src;
import java.util.Random;
public class BlockChest extends BlockContainer {
private Random random = 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.getBlockTileEntity(var2, var3, var4);
for(int var6 = 0; var6 < var5.getSizeInventory(); ++var6) {
ItemStack var7 = var5.getStackInSlot(var6);
if(var7 != null) {
float var8 = this.random.nextFloat() * 0.8F + 0.1F;
float var9 = this.random.nextFloat() * 0.8F + 0.1F;
float var10 = this.random.nextFloat() * 0.8F + 0.1F;
while(var7.stackSize > 0) {
int var11 = this.random.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.getItemDamage()));
float var13 = 0.05F;
var12.motionX = (double)((float)this.random.nextGaussian() * var13);
var12.motionY = (double)((float)this.random.nextGaussian() * var13 + 0.2F);
var12.motionZ = (double)((float)this.random.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.getBlockTileEntity(var2, var3, var4);
if(var1.isBlockNormalCube(var2, var3 + 1, var4)) {
return true;
} else if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID && var1.isBlockNormalCube(var2 - 1, var3 + 1, var4)) {
return true;
} else if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID && var1.isBlockNormalCube(var2 + 1, var3 + 1, var4)) {
return true;
} else if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID && var1.isBlockNormalCube(var2, var3 + 1, var4 - 1)) {
return true;
} else if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID && var1.isBlockNormalCube(var2, var3 + 1, var4 + 1)) {
return true;
} else {
if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) {
var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlockTileEntity(var2 - 1, var3, var4), (IInventory)var6);
}
if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) {
var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlockTileEntity(var2 + 1, var3, var4));
}
if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) {
var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4 - 1), (IInventory)var6);
}
if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) {
var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4 + 1));
}
if(var1.singleplayerWorld) {
return true;
} else {
var5.displayGUIChest((IInventory)var6);
return true;
}
}
}
protected TileEntity getBlockEntity() {
return new TileEntityChest();
}
}

View File

@@ -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.shiftedIndex;
}
public int quantityDropped(Random var1) {
return 4;
}
}

View File

@@ -0,0 +1,28 @@
package net.minecraft.src;
public class BlockCloth extends Block {
public BlockCloth() {
super(35, 64, Material.cloth);
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
if(var2 == 0) {
return this.blockIndexInTexture;
} else {
var2 = ~(var2 & 15);
return 113 + ((var2 & 8) >> 3) + (var2 & 7) * 16;
}
}
protected int damageDropped(int var1) {
return var1;
}
public static int func_21033_c(int var0) {
return ~var0 & 15;
}
public static int func_21034_d(int var0) {
return ~var0 & 15;
}
}

View File

@@ -0,0 +1,25 @@
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);
isBlockContainer[var1] = true;
}
public void onBlockAdded(World var1, int var2, int var3, int var4) {
super.onBlockAdded(var1, var2, var3, var4);
var1.setBlockTileEntity(var2, var3, var4, this.getBlockEntity());
}
public void onBlockRemoval(World var1, int var2, int var3, int var4) {
super.onBlockRemoval(var1, var2, var3, var4);
var1.removeBlockTileEntity(var2, var3, var4);
}
protected abstract TileEntity getBlockEntity();
}

View File

@@ -0,0 +1,110 @@
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);
}
}
}
}
public void fertilize(World var1, int var2, int var3, int var4) {
var1.setBlockMetadataWithNotify(var2, var3, var4, 7);
}
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 int getBlockTextureFromSideAndMetadata(int var1, int var2) {
if(var2 < 0) {
var2 = 7;
}
return this.blockIndexInTexture + var2;
}
public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) {
super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6);
if(!var1.singleplayerWorld) {
for(int var7 = 0; var7 < 3; ++var7) {
if(var1.rand.nextInt(15) <= var5) {
float var8 = 0.7F;
float var9 = var1.rand.nextFloat() * var8 + (1.0F - var8) * 0.5F;
float var10 = var1.rand.nextFloat() * var8 + (1.0F - var8) * 0.5F;
float var11 = var1.rand.nextFloat() * var8 + (1.0F - var8) * 0.5F;
EntityItem var12 = new EntityItem(var1, (double)((float)var2 + var9), (double)((float)var3 + var10), (double)((float)var4 + var11), new ItemStack(Item.seeds));
var12.delayBeforeCanPickup = 10;
var1.entityJoinedWorld(var12);
}
}
}
}
public int idDropped(int var1, Random var2) {
return var1 == 7 ? Item.wheat.shiftedIndex : -1;
}
public int quantityDropped(Random var1) {
return 1;
}
}

View File

@@ -0,0 +1,23 @@
package net.minecraft.src;
import java.util.Random;
public class BlockDeadBush extends BlockFlower {
protected BlockDeadBush(int var1, int var2) {
super(var1, var2);
float var3 = 0.4F;
this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 0.8F, 0.5F + var3);
}
protected boolean canThisPlantGrowOnThisBlockID(int var1) {
return var1 == Block.sand.blockID;
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return this.blockIndexInTexture;
}
public int idDropped(int var1, Random var2) {
return -1;
}
}

View File

@@ -0,0 +1,74 @@
package net.minecraft.src;
import java.util.List;
import java.util.Random;
public class BlockDetectorRail extends BlockRail {
public BlockDetectorRail(int var1, int var2) {
super(var1, var2, true);
this.setTickOnLoad(true);
}
public int tickRate() {
return 20;
}
public boolean canProvidePower() {
return true;
}
public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) {
if(!var1.singleplayerWorld) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
if((var6 & 8) == 0) {
this.func_27035_f(var1, var2, var3, var4, var6);
}
}
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
if(!var1.singleplayerWorld) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
if((var6 & 8) != 0) {
this.func_27035_f(var1, var2, var3, var4, var6);
}
}
}
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) {
return (var1.getBlockMetadata(var2, var3, var4) & 8) == 0 ? false : var5 == 1;
}
private void func_27035_f(World var1, int var2, int var3, int var4, int var5) {
boolean var6 = (var5 & 8) != 0;
boolean var7 = false;
float var8 = 2.0F / 16.0F;
List var9 = var1.getEntitiesWithinAABB(EntityMinecart.class, AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var8), (double)var3, (double)((float)var4 + var8), (double)((float)(var2 + 1) - var8), (double)var3 + 0.25D, (double)((float)(var4 + 1) - var8)));
if(var9.size() > 0) {
var7 = true;
}
if(var7 && !var6) {
var1.setBlockMetadataWithNotify(var2, var3, var4, var5 | 8);
var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
var1.markBlocksDirty(var2, var3, var4, var2, var3, var4);
}
if(!var7 && var6) {
var1.setBlockMetadataWithNotify(var2, var3, var4, var5 & 7);
var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
var1.markBlocksDirty(var2, var3, var4, var2, var3, var4);
}
if(var7) {
var1.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
}
}
}

View File

@@ -0,0 +1,7 @@
package net.minecraft.src;
public class BlockDirt extends Block {
protected BlockDirt(int var1, int var2) {
super(var1, var2, Material.ground);
}
}

View File

@@ -0,0 +1,193 @@
package net.minecraft.src;
import java.util.Random;
public class BlockDispenser extends BlockContainer {
private Random field_28032_a = new Random();
protected BlockDispenser(int var1) {
super(var1, Material.rock);
this.blockIndexInTexture = 45;
}
public int tickRate() {
return 4;
}
public int idDropped(int var1, Random var2) {
return Block.dispenser.blockID;
}
public void onBlockAdded(World var1, int var2, int var3, int var4) {
super.onBlockAdded(var1, var2, var3, var4);
this.setDispenserDefaultDirection(var1, var2, var3, var4);
}
private void setDispenserDefaultDirection(World var1, int var2, int var3, int var4) {
if(!var1.singleplayerWorld) {
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.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6]) {
var9 = 3;
}
if(Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5]) {
var9 = 2;
}
if(Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8]) {
var9 = 5;
}
if(Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7]) {
var9 = 4;
}
var1.setBlockMetadataWithNotify(var2, var3, var4, var9);
}
}
public int getBlockTextureFromSide(int var1) {
return var1 == 1 ? this.blockIndexInTexture + 17 : (var1 == 0 ? this.blockIndexInTexture + 17 : (var1 == 3 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture));
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
if(var1.singleplayerWorld) {
return true;
} else {
TileEntityDispenser var6 = (TileEntityDispenser)var1.getBlockTileEntity(var2, var3, var4);
var5.displayGUIDispenser(var6);
return true;
}
}
private void dispenseItem(World var1, int var2, int var3, int var4, Random var5) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
byte var9 = 0;
byte var10 = 0;
if(var6 == 3) {
var10 = 1;
} else if(var6 == 2) {
var10 = -1;
} else if(var6 == 5) {
var9 = 1;
} else {
var9 = -1;
}
TileEntityDispenser var11 = (TileEntityDispenser)var1.getBlockTileEntity(var2, var3, var4);
ItemStack var12 = var11.getRandomStackFromInventory();
double var13 = (double)var2 + (double)var9 * 0.6D + 0.5D;
double var15 = (double)var3 + 0.5D;
double var17 = (double)var4 + (double)var10 * 0.6D + 0.5D;
if(var12 == null) {
var1.func_28097_e(1001, var2, var3, var4, 0);
} else {
if(var12.itemID == Item.arrow.shiftedIndex) {
EntityArrow var19 = new EntityArrow(var1, var13, var15, var17);
var19.setArrowHeading((double)var9, (double)0.1F, (double)var10, 1.1F, 6.0F);
var19.field_28012_a = true;
var1.entityJoinedWorld(var19);
var1.func_28097_e(1002, var2, var3, var4, 0);
} else if(var12.itemID == Item.egg.shiftedIndex) {
EntityEgg var22 = new EntityEgg(var1, var13, var15, var17);
var22.func_20078_a((double)var9, (double)0.1F, (double)var10, 1.1F, 6.0F);
var1.entityJoinedWorld(var22);
var1.func_28097_e(1002, var2, var3, var4, 0);
} else if(var12.itemID == Item.snowball.shiftedIndex) {
EntitySnowball var23 = new EntitySnowball(var1, var13, var15, var17);
var23.func_6141_a((double)var9, (double)0.1F, (double)var10, 1.1F, 6.0F);
var1.entityJoinedWorld(var23);
var1.func_28097_e(1002, var2, var3, var4, 0);
} else {
EntityItem var24 = new EntityItem(var1, var13, var15 - 0.3D, var17, var12);
double var20 = var5.nextDouble() * 0.1D + 0.2D;
var24.motionX = (double)var9 * var20;
var24.motionY = (double)0.2F;
var24.motionZ = (double)var10 * var20;
var24.motionX += var5.nextGaussian() * (double)0.0075F * 6.0D;
var24.motionY += var5.nextGaussian() * (double)0.0075F * 6.0D;
var24.motionZ += var5.nextGaussian() * (double)0.0075F * 6.0D;
var1.entityJoinedWorld(var24);
var1.func_28097_e(1000, var2, var3, var4, 0);
}
var1.func_28097_e(2000, var2, var3, var4, var9 + 1 + (var10 + 1) * 3);
}
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
if(var5 > 0 && Block.blocksList[var5].canProvidePower()) {
boolean var6 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4) || var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4);
if(var6) {
var1.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
}
}
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
if(var1.isBlockIndirectlyGettingPowered(var2, var3, var4) || var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4)) {
this.dispenseItem(var1, var2, var3, var4, var5);
}
}
protected TileEntity getBlockEntity() {
return new TileEntityDispenser();
}
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);
}
}
public void onBlockRemoval(World var1, int var2, int var3, int var4) {
TileEntityDispenser var5 = (TileEntityDispenser)var1.getBlockTileEntity(var2, var3, var4);
for(int var6 = 0; var6 < var5.getSizeInventory(); ++var6) {
ItemStack var7 = var5.getStackInSlot(var6);
if(var7 != null) {
float var8 = this.field_28032_a.nextFloat() * 0.8F + 0.1F;
float var9 = this.field_28032_a.nextFloat() * 0.8F + 0.1F;
float var10 = this.field_28032_a.nextFloat() * 0.8F + 0.1F;
while(var7.stackSize > 0) {
int var11 = this.field_28032_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.getItemDamage()));
float var13 = 0.05F;
var12.motionX = (double)((float)this.field_28032_a.nextGaussian() * var13);
var12.motionY = (double)((float)this.field_28032_a.nextGaussian() * var13 + 0.2F);
var12.motionZ = (double)((float)this.field_28032_a.nextGaussian() * var13);
var1.entityJoinedWorld(var12);
}
}
}
super.onBlockRemoval(var1, var2, var3, var4);
}
}

View File

@@ -0,0 +1,186 @@
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 int getBlockTextureFromSideAndMetadata(int var1, int var2) {
if(var1 != 0 && var1 != 1) {
int var3 = this.func_271_d(var2);
if((var3 == 0 || var3 == 2) ^ var1 <= 3) {
return this.blockIndexInTexture;
} else {
int var4 = var3 / 2 + (var1 & 1 ^ var3);
var4 += (var2 & 4) / 4;
int var5 = this.blockIndexInTexture - (var2 & 8) * 2;
if((var4 & 1) != 0) {
var5 = -var5;
}
return var5;
}
} else {
return this.blockIndexInTexture;
}
}
public boolean isOpaqueCube() {
return false;
}
public boolean isACube() {
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.markBlocksDirty(var2, var3 - 1, var4, var2, var3, var4);
var1.func_28101_a(var5, 1003, var2, var3, var4, 0);
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.markBlocksDirty(var2, var3 - 1, var4, var2, var3, var4);
var1.func_28101_a((EntityPlayer)null, 1003, var2, var3, var4, 0);
}
}
}
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.isBlockNormalCube(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) {
if(!var1.singleplayerWorld) {
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.shiftedIndex : Item.doorWood.shiftedIndex);
}
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.isBlockNormalCube(var2, var3 - 1, var4) && super.canPlaceBlockAt(var1, var2, var3, var4) && super.canPlaceBlockAt(var1, var2, var3 + 1, var4);
}
public static boolean func_27036_e(int var0) {
return (var0 & 4) != 0;
}
public int getMobilityFlag() {
return 1;
}
}

View File

@@ -0,0 +1,93 @@
package net.minecraft.src;
import java.util.Random;
public class BlockFarmland extends Block {
protected BlockFarmland(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 isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return var1 == 1 && var2 > 0 ? this.blockIndexInTexture - 1 : (var1 == 1 ? this.blockIndexInTexture : 2);
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
if(var5.nextInt(5) == 0) {
if(!this.isWaterNearby(var1, var2, var3, var4) && !var1.canLightningStrikeAt(var2, var3 + 1, var4)) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
if(var6 > 0) {
var1.setBlockMetadataWithNotify(var2, var3, var4, var6 - 1);
} else if(!this.isCropsNearby(var1, var2, var3, var4)) {
var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID);
}
} else {
var1.setBlockMetadataWithNotify(var2, var3, var4, 7);
}
}
}
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 isCropsNearby(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 isWaterNearby(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.isSolid()) {
var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID);
}
}
public int idDropped(int var1, Random var2) {
return Block.dirt.idDropped(0, var2);
}
}

View File

@@ -0,0 +1,23 @@
package net.minecraft.src;
public class BlockFence extends Block {
public BlockFence(int var1, int var2) {
super(var1, var2, Material.wood);
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return var1.getBlockId(var2, var3 - 1, var4) == this.blockID ? true : (!var1.getBlockMaterial(var2, var3 - 1, var4).isSolid() ? false : super.canPlaceBlockAt(var1, var2, var3, var4));
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
return AxisAlignedBB.getBoundingBoxFromPool((double)var2, (double)var3, (double)var4, (double)(var2 + 1), (double)((float)var3 + 1.5F), (double)(var4 + 1));
}
public boolean isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
}

View File

@@ -0,0 +1,184 @@
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.setTickOnLoad(true);
}
public void setFireBurnRates() {
this.setBurnRate(Block.planks.blockID, 5, 20);
this.setBurnRate(Block.fence.blockID, 5, 20);
this.setBurnRate(Block.stairCompactPlanks.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.tallGrass.blockID, 60, 100);
this.setBurnRate(Block.cloth.blockID, 30, 60);
}
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 isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
public int quantityDropped(Random var1) {
return 0;
}
public int tickRate() {
return 40;
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
boolean var6 = var1.getBlockId(var2, var3 - 1, var4) == Block.bloodStone.blockID;
if(!this.canPlaceBlockAt(var1, var2, var3, var4)) {
var1.setBlockWithNotify(var2, var3, var4, 0);
}
if(var6 || !var1.func_27068_v() || !var1.canLightningStrikeAt(var2, var3, var4) && !var1.canLightningStrikeAt(var2 - 1, var3, var4) && !var1.canLightningStrikeAt(var2 + 1, var3, var4) && !var1.canLightningStrikeAt(var2, var3, var4 - 1) && !var1.canLightningStrikeAt(var2, var3, var4 + 1)) {
int var7 = var1.getBlockMetadata(var2, var3, var4);
if(var7 < 15) {
var1.setBlockMetadata(var2, var3, var4, var7 + var5.nextInt(3) / 2);
}
var1.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
if(!var6 && !this.func_268_g(var1, var2, var3, var4)) {
if(!var1.isBlockNormalCube(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 {
this.tryToCatchBlockOnFire(var1, var2 + 1, var3, var4, 300, var5, var7);
this.tryToCatchBlockOnFire(var1, var2 - 1, var3, var4, 300, var5, var7);
this.tryToCatchBlockOnFire(var1, var2, var3 - 1, var4, 250, var5, var7);
this.tryToCatchBlockOnFire(var1, var2, var3 + 1, var4, 250, var5, var7);
this.tryToCatchBlockOnFire(var1, var2, var3, var4 - 1, 300, var5, var7);
this.tryToCatchBlockOnFire(var1, var2, var3, var4 + 1, 300, var5, var7);
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) {
int var13 = (var12 + 40) / (var7 + 30);
if(var13 > 0 && var5.nextInt(var11) <= var13 && (!var1.func_27068_v() || !var1.canLightningStrikeAt(var8, var10, var9)) && !var1.canLightningStrikeAt(var8 - 1, var10, var4) && !var1.canLightningStrikeAt(var8 + 1, var10, var9) && !var1.canLightningStrikeAt(var8, var10, var9 - 1) && !var1.canLightningStrikeAt(var8, var10, var9 + 1)) {
int var14 = var7 + var5.nextInt(5) / 4;
if(var14 > 15) {
var14 = 15;
}
var1.setBlockAndMetadataWithNotify(var8, var10, var9, this.blockID, var14);
}
}
}
}
}
}
}
} else {
var1.setBlockWithNotify(var2, var3, var4, 0);
}
}
private void tryToCatchBlockOnFire(World var1, int var2, int var3, int var4, int var5, Random var6, int var7) {
int var8 = this.abilityToCatchFire[var1.getBlockId(var2, var3, var4)];
if(var6.nextInt(var5) < var8) {
boolean var9 = var1.getBlockId(var2, var3, var4) == Block.tnt.blockID;
if(var6.nextInt(var7 + 10) < 5 && !var1.canLightningStrikeAt(var2, var3, var4)) {
int var10 = var7 + var6.nextInt(5) / 4;
if(var10 > 15) {
var10 = 15;
}
var1.setBlockAndMetadataWithNotify(var2, var3, var4, this.blockID, var10);
} else {
var1.setBlockWithNotify(var2, var3, var4, 0);
}
if(var9) {
Block.tnt.onBlockDestroyedByPlayer(var1, var2, var3, var4, 1);
}
}
}
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.isAirBlock(var2, var3, var4)) {
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.isBlockNormalCube(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.isBlockNormalCube(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.isBlockNormalCube(var2, var3 - 1, var4) && !this.func_268_g(var1, var2, var3, var4)) {
var1.setBlockWithNotify(var2, var3, var4, 0);
} else {
var1.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
}
}
}
}

View File

@@ -0,0 +1,54 @@
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 super.canPlaceBlockAt(var1, var2, var3, var4) && 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.getBlockLightValueNoChecks(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 isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
}

View File

@@ -0,0 +1,263 @@
package net.minecraft.src;
import java.util.Random;
public class BlockFlowing extends BlockFluid {
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_30004_i(World var1, int var2, int var3, int var4) {
int var5 = var1.getBlockMetadata(var2, var3, var4);
var1.setBlockAndMetadata(var2, var3, var4, this.blockID + 1, var5);
var1.markBlocksDirty(var2, var3, var4, var2, var3, var4);
var1.markBlockNeedsUpdate(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.worldProvider.isHellWorld) {
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.getBlockMaterial(var2, var3 - 1, var4).isSolid()) {
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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID);
}
} else if(var8) {
this.func_30004_i(var1, var2, var3, var4);
}
} else {
this.func_30004_i(var1, var2, var3, var4);
}
if(this.func_312_l(var1, var2, var3 - 1, var4)) {
if(var6 >= 8) {
var1.setBlockAndMetadataWithNotify(var2, var3 - 1, var4, this.blockID, var6);
} else {
var1.setBlockAndMetadataWithNotify(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.setBlockAndMetadataWithNotify(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.getIsSolid();
}
} 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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
}
}
}

View File

@@ -0,0 +1,225 @@
package net.minecraft.src;
import java.util.Random;
public abstract class BlockFluid extends Block {
protected BlockFluid(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 isACube() {
return false;
}
public boolean isOpaqueCube() {
return false;
}
public boolean canCollideCheck(int var1, boolean var2) {
return var2 && var1 == 0;
}
public boolean shouldSideBeRendered(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.shouldSideBeRendered(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).getIsSolid()) {
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.shouldSideBeRendered(var1, var2, var3, var4 - 1, 2)) {
var13 = true;
}
if(var13 || this.shouldSideBeRendered(var1, var2, var3, var4 + 1, 3)) {
var13 = true;
}
if(var13 || this.shouldSideBeRendered(var1, var2 - 1, var3, var4, 4)) {
var13 = true;
}
if(var13 || this.shouldSideBeRendered(var1, var2 + 1, var3, var4, 5)) {
var13 = true;
}
if(var13 || this.shouldSideBeRendered(var1, var2, var3 + 1, var4 - 1, 2)) {
var13 = true;
}
if(var13 || this.shouldSideBeRendered(var1, var2, var3 + 1, var4 + 1, 3)) {
var13 = true;
}
if(var13 || this.shouldSideBeRendered(var1, var2 - 1, var3 + 1, var4, 4)) {
var13 = true;
}
if(var13 || this.shouldSideBeRendered(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.checkForHarden(var1, var2, var3, var4);
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
this.checkForHarden(var1, var2, var3, var4);
}
private void checkForHarden(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);
}
}
}

View File

@@ -0,0 +1,137 @@
package net.minecraft.src;
import java.util.Random;
public class BlockFurnace extends BlockContainer {
private Random field_28033_a = new Random();
private final boolean isActive;
private static boolean field_28034_c = false;
protected BlockFurnace(int var1, boolean var2) {
super(var1, Material.rock);
this.isActive = 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.setDefaultDirection(var1, var2, var3, var4);
}
private void setDefaultDirection(World var1, int var2, int var3, int var4) {
if(!var1.singleplayerWorld) {
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.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6]) {
var9 = 3;
}
if(Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5]) {
var9 = 2;
}
if(Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8]) {
var9 = 5;
}
if(Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7]) {
var9 = 4;
}
var1.setBlockMetadataWithNotify(var2, var3, var4, var9);
}
}
public int getBlockTextureFromSide(int var1) {
return var1 == 1 ? this.blockIndexInTexture + 17 : (var1 == 0 ? this.blockIndexInTexture + 17 : (var1 == 3 ? this.blockIndexInTexture - 1 : this.blockIndexInTexture));
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
if(var1.singleplayerWorld) {
return true;
} else {
TileEntityFurnace var6 = (TileEntityFurnace)var1.getBlockTileEntity(var2, var3, var4);
var5.displayGUIFurnace(var6);
return true;
}
}
public static void updateFurnaceBlockState(boolean var0, World var1, int var2, int var3, int var4) {
int var5 = var1.getBlockMetadata(var2, var3, var4);
TileEntity var6 = var1.getBlockTileEntity(var2, var3, var4);
field_28034_c = true;
if(var0) {
var1.setBlockWithNotify(var2, var3, var4, Block.stoneOvenActive.blockID);
} else {
var1.setBlockWithNotify(var2, var3, var4, Block.stoneOvenIdle.blockID);
}
field_28034_c = false;
var1.setBlockMetadataWithNotify(var2, var3, var4, var5);
var6.validate();
var1.setBlockTileEntity(var2, var3, var4, var6);
}
protected TileEntity getBlockEntity() {
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);
}
}
public void onBlockRemoval(World var1, int var2, int var3, int var4) {
if(!field_28034_c) {
TileEntityFurnace var5 = (TileEntityFurnace)var1.getBlockTileEntity(var2, var3, var4);
for(int var6 = 0; var6 < var5.getSizeInventory(); ++var6) {
ItemStack var7 = var5.getStackInSlot(var6);
if(var7 != null) {
float var8 = this.field_28033_a.nextFloat() * 0.8F + 0.1F;
float var9 = this.field_28033_a.nextFloat() * 0.8F + 0.1F;
float var10 = this.field_28033_a.nextFloat() * 0.8F + 0.1F;
while(var7.stackSize > 0) {
int var11 = this.field_28033_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.getItemDamage()));
float var13 = 0.05F;
var12.motionX = (double)((float)this.field_28033_a.nextGaussian() * var13);
var12.motionY = (double)((float)this.field_28033_a.nextGaussian() * var13 + 0.2F);
var12.motionZ = (double)((float)this.field_28033_a.nextGaussian() * var13);
var1.entityJoinedWorld(var12);
}
}
}
}
super.onBlockRemoval(var1, var2, var3, var4);
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,17 @@
package net.minecraft.src;
import java.util.Random;
public class BlockGlowStone extends Block {
public BlockGlowStone(int var1, int var2, Material var3) {
super(var1, var2, var3);
}
public int quantityDropped(Random var1) {
return 2 + var1.nextInt(3);
}
public int idDropped(int var1, Random var2) {
return Item.lightStoneDust.shiftedIndex;
}
}

View File

@@ -0,0 +1,36 @@
package net.minecraft.src;
import java.util.Random;
public class BlockGrass extends Block {
protected BlockGrass(int var1) {
super(var1, Material.grass);
this.blockIndexInTexture = 3;
this.setTickOnLoad(true);
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
if(!var1.singleplayerWorld) {
if(var1.getBlockLightValue(var2, var3 + 1, var4) < 4 && Block.lightOpacity[var1.getBlockId(var2, var3 + 1, var4)] > 2) {
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;
int var9 = var1.getBlockId(var6, var7 + 1, var8);
if(var1.getBlockId(var6, var7, var8) == Block.dirt.blockID && var1.getBlockLightValue(var6, var7 + 1, var8) >= 4 && Block.lightOpacity[var9] <= 2) {
var1.setBlockWithNotify(var6, var7, var8, Block.grass.blockID);
}
}
}
}
public int idDropped(int var1, Random var2) {
return Block.dirt.idDropped(0, var2);
}
}

View File

@@ -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.shiftedIndex : this.blockID;
}
}

View File

@@ -0,0 +1,36 @@
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 void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) {
super.harvestBlock(var1, var2, var3, var4, var5, var6);
Material var7 = var1.getBlockMaterial(var3, var4 - 1, var5);
if(var7.getIsSolid() || var7.getIsLiquid()) {
var1.setBlockWithNotify(var3, var4, var5, Block.waterMoving.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.waterStill.blockID);
}
}
public int getMobilityFlag() {
return 0;
}
}

View File

@@ -0,0 +1,65 @@
package net.minecraft.src;
public class BlockJukeBox extends BlockContainer {
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) {
if(var1.getBlockMetadata(var2, var3, var4) == 0) {
return false;
} else {
this.func_28035_b_(var1, var2, var3, var4);
return true;
}
}
public void ejectRecord(World var1, int var2, int var3, int var4, int var5) {
if(!var1.singleplayerWorld) {
TileEntityRecordPlayer var6 = (TileEntityRecordPlayer)var1.getBlockTileEntity(var2, var3, var4);
var6.field_28009_a = var5;
var6.onInventoryChanged();
var1.setBlockMetadataWithNotify(var2, var3, var4, 1);
}
}
public void func_28035_b_(World var1, int var2, int var3, int var4) {
if(!var1.singleplayerWorld) {
TileEntityRecordPlayer var5 = (TileEntityRecordPlayer)var1.getBlockTileEntity(var2, var3, var4);
int var6 = var5.field_28009_a;
if(var6 != 0) {
var1.func_28097_e(1005, var2, var3, var4, 0);
var1.playRecord((String)null, var2, var3, var4);
var5.field_28009_a = 0;
var5.onInventoryChanged();
var1.setBlockMetadataWithNotify(var2, var3, var4, 0);
float var8 = 0.7F;
double var9 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.5D;
double var11 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.2D + 0.6D;
double var13 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.5D;
EntityItem var15 = new EntityItem(var1, (double)var2 + var9, (double)var3 + var11, (double)var4 + var13, new ItemStack(var6, 1, 0));
var15.delayBeforeCanPickup = 10;
var1.entityJoinedWorld(var15);
}
}
}
public void onBlockRemoval(World var1, int var2, int var3, int var4) {
this.func_28035_b_(var1, var2, var3, var4);
super.onBlockRemoval(var1, var2, var3, var4);
}
public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) {
if(!var1.singleplayerWorld) {
super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6);
}
}
protected TileEntity getBlockEntity() {
return new TileEntityRecordPlayer();
}
}

View File

@@ -0,0 +1,95 @@
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 isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : var1.isBlockNormalCube(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.isBlockNormalCube(var2, var3, var4 + 1)) {
var6 = 2;
}
if((var6 == 0 || var5 == 3) && var1.isBlockNormalCube(var2, var3, var4 - 1)) {
var6 = 3;
}
if((var6 == 0 || var5 == 4) && var1.isBlockNormalCube(var2 + 1, var3, var4)) {
var6 = 4;
}
if((var6 == 0 || var5 == 5) && var1.isBlockNormalCube(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.isBlockNormalCube(var2, var3, var4 + 1)) {
var7 = true;
}
if(var6 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) {
var7 = true;
}
if(var6 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) {
var7 = true;
}
if(var6 == 5 && var1.isBlockNormalCube(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;
}
}

View File

@@ -0,0 +1,166 @@
package net.minecraft.src;
import java.util.Random;
public class BlockLeaves extends BlockLeavesBase {
private int baseIndexInPNG;
int[] adjacentTreeBlocks;
protected BlockLeaves(int var1, int var2) {
super(var1, var2, Material.leaves, false);
this.baseIndexInPNG = var2;
this.setTickOnLoad(true);
}
public void onBlockRemoval(World var1, int var2, int var3, int var4) {
byte var5 = 1;
int var6 = var5 + 1;
if(var1.checkChunksExist(var2 - var6, var3 - var6, var4 - var6, var2 + var6, var3 + var6, var4 + var6)) {
for(int var7 = -var5; var7 <= var5; ++var7) {
for(int var8 = -var5; var8 <= var5; ++var8) {
for(int var9 = -var5; var9 <= var5; ++var9) {
int var10 = var1.getBlockId(var2 + var7, var3 + var8, var4 + var9);
if(var10 == Block.leaves.blockID) {
int var11 = var1.getBlockMetadata(var2 + var7, var3 + var8, var4 + var9);
var1.setBlockMetadata(var2 + var7, var3 + var8, var4 + var9, var11 | 8);
}
}
}
}
}
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
if(!var1.singleplayerWorld) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
if((var6 & 8) != 0) {
byte var7 = 4;
int var8 = var7 + 1;
byte var9 = 32;
int var10 = var9 * var9;
int var11 = var9 / 2;
if(this.adjacentTreeBlocks == null) {
this.adjacentTreeBlocks = new int[var9 * var9 * var9];
}
int var12;
if(var1.checkChunksExist(var2 - var8, var3 - var8, var4 - var8, var2 + var8, var3 + var8, var4 + var8)) {
var12 = -var7;
label111:
while(true) {
int var13;
int var14;
int var15;
if(var12 > var7) {
var12 = 1;
while(true) {
if(var12 > 4) {
break label111;
}
for(var13 = -var7; var13 <= var7; ++var13) {
for(var14 = -var7; var14 <= var7; ++var14) {
for(var15 = -var7; var15 <= var7; ++var15) {
if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11] == var12 - 1) {
if(this.adjacentTreeBlocks[(var13 + var11 - 1) * var10 + (var14 + var11) * var9 + var15 + var11] == -2) {
this.adjacentTreeBlocks[(var13 + var11 - 1) * var10 + (var14 + var11) * var9 + var15 + var11] = var12;
}
if(this.adjacentTreeBlocks[(var13 + var11 + 1) * var10 + (var14 + var11) * var9 + var15 + var11] == -2) {
this.adjacentTreeBlocks[(var13 + var11 + 1) * var10 + (var14 + var11) * var9 + var15 + var11] = var12;
}
if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 - 1) * var9 + var15 + var11] == -2) {
this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 - 1) * var9 + var15 + var11] = var12;
}
if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 + 1) * var9 + var15 + var11] == -2) {
this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 + 1) * var9 + var15 + var11] = var12;
}
if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + (var15 + var11 - 1)] == -2) {
this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + (var15 + var11 - 1)] = var12;
}
if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11 + 1] == -2) {
this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11 + 1] = var12;
}
}
}
}
}
++var12;
}
}
for(var13 = -var7; var13 <= var7; ++var13) {
for(var14 = -var7; var14 <= var7; ++var14) {
var15 = var1.getBlockId(var2 + var12, var3 + var13, var4 + var14);
if(var15 == Block.wood.blockID) {
this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = 0;
} else if(var15 == Block.leaves.blockID) {
this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -2;
} else {
this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -1;
}
}
}
++var12;
}
}
var12 = this.adjacentTreeBlocks[var11 * var10 + var11 * var9 + var11];
if(var12 >= 0) {
var1.setBlockMetadata(var2, var3, var4, var6 & -9);
} else {
this.removeLeaves(var1, var2, var3, var4);
}
}
}
}
private void removeLeaves(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 void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) {
if(!var1.singleplayerWorld && var2.getCurrentEquippedItem() != null && var2.getCurrentEquippedItem().itemID == Item.field_31022_bc.shiftedIndex) {
var2.addStat(StatList.mineBlockStatArray[this.blockID], 1);
this.dropBlockAsItem_do(var1, var3, var4, var5, new ItemStack(Block.leaves.blockID, 1, var6 & 3));
} else {
super.harvestBlock(var1, var2, var3, var4, var5, var6);
}
}
protected int damageDropped(int var1) {
return var1 & 3;
}
public boolean isOpaqueCube() {
return !this.graphicsLevel;
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return (var2 & 3) == 1 ? this.blockIndexInTexture + 80 : this.blockIndexInTexture;
}
public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) {
super.onEntityWalking(var1, var2, var3, var4, var5);
}
}

View File

@@ -0,0 +1,14 @@
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 isOpaqueCube() {
return false;
}
}

View File

@@ -0,0 +1,194 @@
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 isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) {
return var5 == 1 && var1.isBlockNormalCube(var2, var3 - 1, var4) ? true : (var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : (var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4))));
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : var1.isBlockNormalCube(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;
var6 = -1;
if(var5 == 1 && var1.isBlockNormalCube(var2, var3 - 1, var4)) {
var6 = 5 + var1.rand.nextInt(2);
}
if(var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1)) {
var6 = 4;
}
if(var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) {
var6 = 3;
}
if(var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) {
var6 = 2;
}
if(var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) {
var6 = 1;
}
if(var6 == -1) {
this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
var1.setBlockWithNotify(var2, var3, var4, 0);
} else {
var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + var7);
}
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
if(this.checkIfAttachedToBlock(var1, var2, var3, var4)) {
int var6 = var1.getBlockMetadata(var2, var3, var4) & 7;
boolean var7 = false;
if(!var1.isBlockNormalCube(var2 - 1, var3, var4) && var6 == 1) {
var7 = true;
}
if(!var1.isBlockNormalCube(var2 + 1, var3, var4) && var6 == 2) {
var7 = true;
}
if(!var1.isBlockNormalCube(var2, var3, var4 - 1) && var6 == 3) {
var7 = true;
}
if(!var1.isBlockNormalCube(var2, var3, var4 + 1) && var6 == 4) {
var7 = true;
}
if(!var1.isBlockNormalCube(var2, var3 - 1, var4) && var6 == 5) {
var7 = true;
}
if(!var1.isBlockNormalCube(var2, var3 - 1, var4) && var6 == 6) {
var7 = true;
}
if(var7) {
this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
var1.setBlockWithNotify(var2, var3, var4, 0);
}
}
}
private boolean checkIfAttachedToBlock(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.singleplayerWorld) {
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.markBlocksDirty(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 == 6 && var5 == 1 ? true : (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;
}
}

View File

@@ -0,0 +1,22 @@
package net.minecraft.src;
import java.util.Random;
public class BlockLockedChest extends Block {
protected BlockLockedChest(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) {
return true;
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
var1.setBlockWithNotify(var2, var3, var4, 0);
}
}

View File

@@ -0,0 +1,51 @@
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 void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) {
super.harvestBlock(var1, var2, var3, var4, var5, var6);
}
public void onBlockRemoval(World var1, int var2, int var3, int var4) {
byte var5 = 4;
int var6 = var5 + 1;
if(var1.checkChunksExist(var2 - var6, var3 - var6, var4 - var6, var2 + var6, var3 + var6, var4 + var6)) {
for(int var7 = -var5; var7 <= var5; ++var7) {
for(int var8 = -var5; var8 <= var5; ++var8) {
for(int var9 = -var5; var9 <= var5; ++var9) {
int var10 = var1.getBlockId(var2 + var7, var3 + var8, var4 + var9);
if(var10 == Block.leaves.blockID) {
int var11 = var1.getBlockMetadata(var2 + var7, var3 + var8, var4 + var9);
if((var11 & 8) == 0) {
var1.setBlockMetadata(var2 + var7, var3 + var8, var4 + var9, var11 | 8);
}
}
}
}
}
}
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return var1 == 1 ? 21 : (var1 == 0 ? 21 : (var2 == 1 ? 116 : (var2 == 2 ? 117 : 20)));
}
protected int damageDropped(int var1) {
return var1;
}
}

View File

@@ -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 getBlockEntity() {
return new TileEntityMobSpawner();
}
public int idDropped(int var1, Random var2) {
return 0;
}
public int quantityDropped(Random var1) {
return 0;
}
public boolean isOpaqueCube() {
return false;
}
}

View File

@@ -0,0 +1,36 @@
package net.minecraft.src;
import java.util.Random;
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);
this.setTickOnLoad(true);
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
if(var5.nextInt(100) == 0) {
int var6 = var2 + var5.nextInt(3) - 1;
int var7 = var3 + var5.nextInt(2) - var5.nextInt(2);
int var8 = var4 + var5.nextInt(3) - 1;
if(var1.isAirBlock(var6, var7, var8) && this.canBlockStay(var1, var6, var7, var8)) {
int var10000 = var2 + (var5.nextInt(3) - 1);
var10000 = var4 + (var5.nextInt(3) - 1);
if(var1.isAirBlock(var6, var7, var8) && this.canBlockStay(var1, var6, var7, var8)) {
var1.setBlockWithNotify(var6, var7, var8, this.blockID);
}
}
}
}
protected boolean canThisPlantGrowOnThisBlockID(int var1) {
return Block.opaqueCubeLookup[var1];
}
public boolean canBlockStay(World var1, int var2, int var3, int var4) {
return var3 >= 0 && var3 < 128 ? var1.getBlockLightValueNoChecks(var2, var3, var4) < 13 && this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4)) : false;
}
}

View File

@@ -0,0 +1,7 @@
package net.minecraft.src;
public class BlockNetherrack extends Block {
public BlockNetherrack(int var1, int var2) {
super(var1, var2, Material.rock);
}
}

View File

@@ -0,0 +1,71 @@
package net.minecraft.src;
public class BlockNote extends BlockContainer {
public BlockNote(int var1) {
super(var1, 74, Material.wood);
}
public int getBlockTextureFromSide(int var1) {
return this.blockIndexInTexture;
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
if(var5 > 0 && Block.blocksList[var5].canProvidePower()) {
boolean var6 = var1.isBlockGettingPowered(var2, var3, var4);
TileEntityNote var7 = (TileEntityNote)var1.getBlockTileEntity(var2, var3, var4);
if(var7.previousRedstoneState != var6) {
if(var6) {
var7.triggerNote(var1, var2, var3, var4);
}
var7.previousRedstoneState = var6;
}
}
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
if(var1.singleplayerWorld) {
return true;
} else {
TileEntityNote var6 = (TileEntityNote)var1.getBlockTileEntity(var2, var3, var4);
var6.changePitch();
var6.triggerNote(var1, var2, var3, var4);
return true;
}
}
public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) {
if(!var1.singleplayerWorld) {
TileEntityNote var6 = (TileEntityNote)var1.getBlockTileEntity(var2, var3, var4);
var6.triggerNote(var1, var2, var3, var4);
}
}
protected TileEntity getBlockEntity() {
return new TileEntityNote();
}
public void playBlock(World var1, int var2, int var3, int var4, int var5, int var6) {
float var7 = (float)Math.pow(2.0D, (double)(var6 - 12) / 12.0D);
String var8 = "harp";
if(var5 == 1) {
var8 = "bd";
}
if(var5 == 2) {
var8 = "snare";
}
if(var5 == 3) {
var8 = "hat";
}
if(var5 == 4) {
var8 = "bassattack";
}
var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "note." + var8, 3.0F, var7);
var1.spawnParticle("note", (double)var2 + 0.5D, (double)var3 + 1.2D, (double)var4 + 0.5D, (double)var6 / 24.0D, 0.0D, 0.0D);
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,21 @@
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.shiftedIndex : (this.blockID == Block.oreDiamond.blockID ? Item.diamond.shiftedIndex : (this.blockID == Block.oreLapis.blockID ? Item.dyePowder.shiftedIndex : this.blockID));
}
public int quantityDropped(Random var1) {
return this.blockID == Block.oreLapis.blockID ? 4 + var1.nextInt(5) : 1;
}
protected int damageDropped(int var1) {
return this.blockID == Block.oreLapis.blockID ? 4 : 0;
}
}

View File

@@ -0,0 +1,12 @@
package net.minecraft.src;
public class BlockOreStorage extends Block {
public BlockOreStorage(int var1, int var2) {
super(var1, Material.iron);
this.blockIndexInTexture = var2;
}
public int getBlockTextureFromSide(int var1) {
return this.blockIndexInTexture;
}
}

View File

@@ -0,0 +1,317 @@
package net.minecraft.src;
import java.util.ArrayList;
public class BlockPistonBase extends Block {
private boolean isSticky;
private boolean ignoreUpdates;
public BlockPistonBase(int var1, int var2, boolean var3) {
super(var1, var2, Material.piston);
this.isSticky = var3;
this.setStepSound(soundStoneFootstep);
this.setHardness(0.5F);
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
int var3 = getOrientation(var2);
return var3 > 5 ? this.blockIndexInTexture : (var1 == var3 ? (!isExtended(var2) && this.minX <= 0.0D && this.minY <= 0.0D && this.minZ <= 0.0D && this.maxX >= 1.0D && this.maxY >= 1.0D && this.maxZ >= 1.0D ? this.blockIndexInTexture : 110) : (var1 == PistonBlockTextures.field_31052_a[var3] ? 109 : 108));
}
public boolean isOpaqueCube() {
return false;
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
return false;
}
public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) {
int var6 = determineOrientation(var1, var2, var3, var4, (EntityPlayer)var5);
var1.setBlockMetadataWithNotify(var2, var3, var4, var6);
if(!var1.singleplayerWorld) {
this.updatePistonState(var1, var2, var3, var4);
}
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
if(!var1.singleplayerWorld && !this.ignoreUpdates) {
this.updatePistonState(var1, var2, var3, var4);
}
}
public void onBlockAdded(World var1, int var2, int var3, int var4) {
if(!var1.singleplayerWorld && var1.getBlockTileEntity(var2, var3, var4) == null) {
this.updatePistonState(var1, var2, var3, var4);
}
}
private void updatePistonState(World var1, int var2, int var3, int var4) {
int var5 = var1.getBlockMetadata(var2, var3, var4);
int var6 = getOrientation(var5);
boolean var7 = this.isPowered(var1, var2, var3, var4, var6);
if(var5 != 7) {
if(var7 && !isExtended(var5)) {
if(canExtend(var1, var2, var3, var4, var6)) {
var1.setBlockMetadata(var2, var3, var4, var6 | 8);
var1.playNoteAt(var2, var3, var4, 0, var6);
}
} else if(!var7 && isExtended(var5)) {
var1.setBlockMetadata(var2, var3, var4, var6);
var1.playNoteAt(var2, var3, var4, 1, var6);
}
}
}
private boolean isPowered(World var1, int var2, int var3, int var4, int var5) {
return var5 != 0 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3 - 1, var4, 0) ? true : (var5 != 1 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3 + 1, var4, 1) ? true : (var5 != 2 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 - 1, 2) ? true : (var5 != 3 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 + 1, 3) ? true : (var5 != 5 && var1.isBlockIndirectlyProvidingPowerTo(var2 + 1, var3, var4, 5) ? true : (var5 != 4 && var1.isBlockIndirectlyProvidingPowerTo(var2 - 1, var3, var4, 4) ? true : (var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4, 0) ? true : (var1.isBlockIndirectlyProvidingPowerTo(var2, var3 + 2, var4, 1) ? true : (var1.isBlockIndirectlyProvidingPowerTo(var2, var3 + 1, var4 - 1, 2) ? true : (var1.isBlockIndirectlyProvidingPowerTo(var2, var3 + 1, var4 + 1, 3) ? true : (var1.isBlockIndirectlyProvidingPowerTo(var2 - 1, var3 + 1, var4, 4) ? true : var1.isBlockIndirectlyProvidingPowerTo(var2 + 1, var3 + 1, var4, 5)))))))))));
}
public void playBlock(World var1, int var2, int var3, int var4, int var5, int var6) {
this.ignoreUpdates = true;
if(var5 == 0) {
if(this.tryExtend(var1, var2, var3, var4, var6)) {
var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 8);
var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "tile.piston.out", 0.5F, var1.rand.nextFloat() * 0.25F + 0.6F);
}
} else if(var5 == 1) {
TileEntity var8 = var1.getBlockTileEntity(var2 + PistonBlockTextures.field_31051_b[var6], var3 + PistonBlockTextures.field_31054_c[var6], var4 + PistonBlockTextures.field_31053_d[var6]);
if(var8 != null && var8 instanceof TileEntityPiston) {
((TileEntityPiston)var8).clearPistonTileEntity();
}
var1.setBlockAndMetadata(var2, var3, var4, Block.pistonMoving.blockID, var6);
var1.setBlockTileEntity(var2, var3, var4, BlockPistonMoving.getTileEntity(this.blockID, var6, var6, false, true));
if(this.isSticky) {
int var9 = var2 + PistonBlockTextures.field_31051_b[var6] * 2;
int var10 = var3 + PistonBlockTextures.field_31054_c[var6] * 2;
int var11 = var4 + PistonBlockTextures.field_31053_d[var6] * 2;
int var12 = var1.getBlockId(var9, var10, var11);
int var13 = var1.getBlockMetadata(var9, var10, var11);
boolean var14 = false;
if(var12 == Block.pistonMoving.blockID) {
TileEntity var15 = var1.getBlockTileEntity(var9, var10, var11);
if(var15 != null && var15 instanceof TileEntityPiston) {
TileEntityPiston var16 = (TileEntityPiston)var15;
if(var16.func_31008_d() == var6 && var16.func_31010_c()) {
var16.clearPistonTileEntity();
var12 = var16.getStoredBlockID();
var13 = var16.func_31005_e();
var14 = true;
}
}
}
if(var14 || var12 <= 0 || !canPushBlock(var12, var1, var9, var10, var11, false) || Block.blocksList[var12].getMobilityFlag() != 0 && var12 != Block.pistonBase.blockID && var12 != Block.pistonStickyBase.blockID) {
if(!var14) {
this.ignoreUpdates = false;
var1.setBlockWithNotify(var2 + PistonBlockTextures.field_31051_b[var6], var3 + PistonBlockTextures.field_31054_c[var6], var4 + PistonBlockTextures.field_31053_d[var6], 0);
this.ignoreUpdates = true;
}
} else {
this.ignoreUpdates = false;
var1.setBlockWithNotify(var9, var10, var11, 0);
this.ignoreUpdates = true;
var2 += PistonBlockTextures.field_31051_b[var6];
var3 += PistonBlockTextures.field_31054_c[var6];
var4 += PistonBlockTextures.field_31053_d[var6];
var1.setBlockAndMetadata(var2, var3, var4, Block.pistonMoving.blockID, var13);
var1.setBlockTileEntity(var2, var3, var4, BlockPistonMoving.getTileEntity(var12, var13, var6, false, false));
}
} else {
this.ignoreUpdates = false;
var1.setBlockWithNotify(var2 + PistonBlockTextures.field_31051_b[var6], var3 + PistonBlockTextures.field_31054_c[var6], var4 + PistonBlockTextures.field_31053_d[var6], 0);
this.ignoreUpdates = true;
}
var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "tile.piston.in", 0.5F, var1.rand.nextFloat() * 0.15F + 0.6F);
}
this.ignoreUpdates = false;
}
public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
int var5 = var1.getBlockMetadata(var2, var3, var4);
if(isExtended(var5)) {
switch(getOrientation(var5)) {
case 0:
this.setBlockBounds(0.0F, 0.25F, 0.0F, 1.0F, 1.0F, 1.0F);
break;
case 1:
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 12.0F / 16.0F, 1.0F);
break;
case 2:
this.setBlockBounds(0.0F, 0.0F, 0.25F, 1.0F, 1.0F, 1.0F);
break;
case 3:
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 12.0F / 16.0F);
break;
case 4:
this.setBlockBounds(0.25F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
break;
case 5:
this.setBlockBounds(0.0F, 0.0F, 0.0F, 12.0F / 16.0F, 1.0F, 1.0F);
}
} else {
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
}
}
public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) {
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
}
public boolean isACube() {
return false;
}
public static int getOrientation(int var0) {
return var0 & 7;
}
public static boolean isExtended(int var0) {
return (var0 & 8) != 0;
}
private static int determineOrientation(World var0, int var1, int var2, int var3, EntityPlayer var4) {
if(MathHelper.abs((float)var4.posX - (float)var1) < 2.0F && MathHelper.abs((float)var4.posZ - (float)var3) < 2.0F) {
double var5 = var4.posY + 1.82D - (double)var4.yOffset;
if(var5 - (double)var2 > 2.0D) {
return 1;
}
if((double)var2 - var5 > 0.0D) {
return 0;
}
}
int var7 = MathHelper.floor_double((double)(var4.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
return var7 == 0 ? 2 : (var7 == 1 ? 5 : (var7 == 2 ? 3 : (var7 == 3 ? 4 : 0)));
}
private static boolean canPushBlock(int var0, World var1, int var2, int var3, int var4, boolean var5) {
if(var0 == Block.obsidian.blockID) {
return false;
} else {
if(var0 != Block.pistonBase.blockID && var0 != Block.pistonStickyBase.blockID) {
if(Block.blocksList[var0].getHardness() == -1.0F) {
return false;
}
if(Block.blocksList[var0].getMobilityFlag() == 2) {
return false;
}
if(!var5 && Block.blocksList[var0].getMobilityFlag() == 1) {
return false;
}
} else if(isExtended(var1.getBlockMetadata(var2, var3, var4))) {
return false;
}
TileEntity var6 = var1.getBlockTileEntity(var2, var3, var4);
return var6 == null;
}
}
private static boolean canExtend(World var0, int var1, int var2, int var3, int var4) {
int var5 = var1 + PistonBlockTextures.field_31051_b[var4];
int var6 = var2 + PistonBlockTextures.field_31054_c[var4];
int var7 = var3 + PistonBlockTextures.field_31053_d[var4];
int var8 = 0;
while(true) {
if(var8 < 13) {
if(var6 <= 0 || var6 >= 127) {
return false;
}
int var9 = var0.getBlockId(var5, var6, var7);
if(var9 != 0) {
if(!canPushBlock(var9, var0, var5, var6, var7, true)) {
return false;
}
if(Block.blocksList[var9].getMobilityFlag() != 1) {
if(var8 == 12) {
return false;
}
var5 += PistonBlockTextures.field_31051_b[var4];
var6 += PistonBlockTextures.field_31054_c[var4];
var7 += PistonBlockTextures.field_31053_d[var4];
++var8;
continue;
}
}
}
return true;
}
}
private boolean tryExtend(World var1, int var2, int var3, int var4, int var5) {
int var6 = var2 + PistonBlockTextures.field_31051_b[var5];
int var7 = var3 + PistonBlockTextures.field_31054_c[var5];
int var8 = var4 + PistonBlockTextures.field_31053_d[var5];
int var9 = 0;
while(true) {
int var10;
if(var9 < 13) {
if(var7 <= 0 || var7 >= 127) {
return false;
}
var10 = var1.getBlockId(var6, var7, var8);
if(var10 != 0) {
if(!canPushBlock(var10, var1, var6, var7, var8, true)) {
return false;
}
if(Block.blocksList[var10].getMobilityFlag() != 1) {
if(var9 == 12) {
return false;
}
var6 += PistonBlockTextures.field_31051_b[var5];
var7 += PistonBlockTextures.field_31054_c[var5];
var8 += PistonBlockTextures.field_31053_d[var5];
++var9;
continue;
}
Block.blocksList[var10].dropBlockAsItem(var1, var6, var7, var8, var1.getBlockMetadata(var6, var7, var8));
var1.setBlockWithNotify(var6, var7, var8, 0);
}
}
while(var6 != var2 || var7 != var3 || var8 != var4) {
var9 = var6 - PistonBlockTextures.field_31051_b[var5];
var10 = var7 - PistonBlockTextures.field_31054_c[var5];
int var11 = var8 - PistonBlockTextures.field_31053_d[var5];
int var12 = var1.getBlockId(var9, var10, var11);
int var13 = var1.getBlockMetadata(var9, var10, var11);
if(var12 == this.blockID && var9 == var2 && var10 == var3 && var11 == var4) {
var1.setBlockAndMetadata(var6, var7, var8, Block.pistonMoving.blockID, var5 | (this.isSticky ? 8 : 0));
var1.setBlockTileEntity(var6, var7, var8, BlockPistonMoving.getTileEntity(Block.pistonExtension.blockID, var5 | (this.isSticky ? 8 : 0), var5, true, false));
} else {
var1.setBlockAndMetadata(var6, var7, var8, Block.pistonMoving.blockID, var13);
var1.setBlockTileEntity(var6, var7, var8, BlockPistonMoving.getTileEntity(var12, var13, var5, true, false));
}
var6 = var9;
var7 = var10;
var8 = var11;
}
return true;
}
}
}

View File

@@ -0,0 +1,139 @@
package net.minecraft.src;
import java.util.ArrayList;
import java.util.Random;
public class BlockPistonExtension extends Block {
private int field_31046_a = -1;
public BlockPistonExtension(int var1, int var2) {
super(var1, var2, Material.piston);
this.setStepSound(soundStoneFootstep);
this.setHardness(0.5F);
}
public void onBlockRemoval(World var1, int var2, int var3, int var4) {
super.onBlockRemoval(var1, var2, var3, var4);
int var5 = var1.getBlockMetadata(var2, var3, var4);
int var6 = PistonBlockTextures.field_31052_a[func_31045_b(var5)];
var2 += PistonBlockTextures.field_31051_b[var6];
var3 += PistonBlockTextures.field_31054_c[var6];
var4 += PistonBlockTextures.field_31053_d[var6];
int var7 = var1.getBlockId(var2, var3, var4);
if(var7 == Block.pistonBase.blockID || var7 == Block.pistonStickyBase.blockID) {
var5 = var1.getBlockMetadata(var2, var3, var4);
if(BlockPistonBase.isExtended(var5)) {
Block.blocksList[var7].dropBlockAsItem(var1, var2, var3, var4, var5);
var1.setBlockWithNotify(var2, var3, var4, 0);
}
}
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
int var3 = func_31045_b(var2);
return var1 == var3 ? (this.field_31046_a >= 0 ? this.field_31046_a : ((var2 & 8) != 0 ? this.blockIndexInTexture - 1 : this.blockIndexInTexture)) : (var1 == PistonBlockTextures.field_31052_a[var3] ? 107 : 108);
}
public boolean isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return false;
}
public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) {
return false;
}
public int quantityDropped(Random var1) {
return 0;
}
public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) {
int var7 = var1.getBlockMetadata(var2, var3, var4);
switch(func_31045_b(var7)) {
case 0:
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.25F, 1.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
this.setBlockBounds(6.0F / 16.0F, 0.25F, 6.0F / 16.0F, 10.0F / 16.0F, 1.0F, 10.0F / 16.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
break;
case 1:
this.setBlockBounds(0.0F, 12.0F / 16.0F, 0.0F, 1.0F, 1.0F, 1.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
this.setBlockBounds(6.0F / 16.0F, 0.0F, 6.0F / 16.0F, 10.0F / 16.0F, 12.0F / 16.0F, 10.0F / 16.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
break;
case 2:
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.25F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
this.setBlockBounds(0.25F, 6.0F / 16.0F, 0.25F, 12.0F / 16.0F, 10.0F / 16.0F, 1.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
break;
case 3:
this.setBlockBounds(0.0F, 0.0F, 12.0F / 16.0F, 1.0F, 1.0F, 1.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
this.setBlockBounds(0.25F, 6.0F / 16.0F, 0.0F, 12.0F / 16.0F, 10.0F / 16.0F, 12.0F / 16.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
break;
case 4:
this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.25F, 1.0F, 1.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
this.setBlockBounds(6.0F / 16.0F, 0.25F, 0.25F, 10.0F / 16.0F, 12.0F / 16.0F, 1.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
break;
case 5:
this.setBlockBounds(12.0F / 16.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6);
this.setBlockBounds(0.0F, 6.0F / 16.0F, 0.25F, 12.0F / 16.0F, 10.0F / 16.0F, 12.0F / 16.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 setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
int var5 = var1.getBlockMetadata(var2, var3, var4);
switch(func_31045_b(var5)) {
case 0:
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.25F, 1.0F);
break;
case 1:
this.setBlockBounds(0.0F, 12.0F / 16.0F, 0.0F, 1.0F, 1.0F, 1.0F);
break;
case 2:
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.25F);
break;
case 3:
this.setBlockBounds(0.0F, 0.0F, 12.0F / 16.0F, 1.0F, 1.0F, 1.0F);
break;
case 4:
this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.25F, 1.0F, 1.0F);
break;
case 5:
this.setBlockBounds(12.0F / 16.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
}
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
int var6 = func_31045_b(var1.getBlockMetadata(var2, var3, var4));
int var7 = var1.getBlockId(var2 - PistonBlockTextures.field_31051_b[var6], var3 - PistonBlockTextures.field_31054_c[var6], var4 - PistonBlockTextures.field_31053_d[var6]);
if(var7 != Block.pistonBase.blockID && var7 != Block.pistonStickyBase.blockID) {
var1.setBlockWithNotify(var2, var3, var4, 0);
} else {
Block.blocksList[var7].onNeighborBlockChange(var1, var2 - PistonBlockTextures.field_31051_b[var6], var3 - PistonBlockTextures.field_31054_c[var6], var4 - PistonBlockTextures.field_31053_d[var6], var5);
}
}
public static int func_31045_b(int var0) {
return var0 & 7;
}
}

View File

@@ -0,0 +1,138 @@
package net.minecraft.src;
import java.util.Random;
public class BlockPistonMoving extends BlockContainer {
public BlockPistonMoving(int var1) {
super(var1, Material.piston);
this.setHardness(-1.0F);
}
protected TileEntity getBlockEntity() {
return null;
}
public void onBlockAdded(World var1, int var2, int var3, int var4) {
}
public void onBlockRemoval(World var1, int var2, int var3, int var4) {
TileEntity var5 = var1.getBlockTileEntity(var2, var3, var4);
if(var5 != null && var5 instanceof TileEntityPiston) {
((TileEntityPiston)var5).clearPistonTileEntity();
} else {
super.onBlockRemoval(var1, var2, var3, var4);
}
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return false;
}
public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) {
return false;
}
public boolean isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
if(!var1.singleplayerWorld && var1.getBlockTileEntity(var2, var3, var4) == null) {
var1.setBlockWithNotify(var2, var3, var4, 0);
return true;
} else {
return false;
}
}
public int idDropped(int var1, Random var2) {
return 0;
}
public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) {
if(!var1.singleplayerWorld) {
TileEntityPiston var7 = this.getTileEntityAtLocation(var1, var2, var3, var4);
if(var7 != null) {
Block.blocksList[var7.getStoredBlockID()].dropBlockAsItem(var1, var2, var3, var4, var7.func_31005_e());
}
}
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
if(!var1.singleplayerWorld && var1.getBlockTileEntity(var2, var3, var4) == null) {
}
}
public static TileEntity getTileEntity(int var0, int var1, int var2, boolean var3, boolean var4) {
return new TileEntityPiston(var0, var1, var2, var3, var4);
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
TileEntityPiston var5 = this.getTileEntityAtLocation(var1, var2, var3, var4);
if(var5 == null) {
return null;
} else {
float var6 = var5.func_31007_a(0.0F);
if(var5.func_31010_c()) {
var6 = 1.0F - var6;
}
return this.func_31032_a(var1, var2, var3, var4, var5.getStoredBlockID(), var6, var5.func_31008_d());
}
}
public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
TileEntityPiston var5 = this.getTileEntityAtLocation(var1, var2, var3, var4);
if(var5 != null) {
Block var6 = Block.blocksList[var5.getStoredBlockID()];
if(var6 == null || var6 == this) {
return;
}
var6.setBlockBoundsBasedOnState(var1, var2, var3, var4);
float var7 = var5.func_31007_a(0.0F);
if(var5.func_31010_c()) {
var7 = 1.0F - var7;
}
int var8 = var5.func_31008_d();
this.minX = var6.minX - (double)((float)PistonBlockTextures.field_31051_b[var8] * var7);
this.minY = var6.minY - (double)((float)PistonBlockTextures.field_31054_c[var8] * var7);
this.minZ = var6.minZ - (double)((float)PistonBlockTextures.field_31053_d[var8] * var7);
this.maxX = var6.maxX - (double)((float)PistonBlockTextures.field_31051_b[var8] * var7);
this.maxY = var6.maxY - (double)((float)PistonBlockTextures.field_31054_c[var8] * var7);
this.maxZ = var6.maxZ - (double)((float)PistonBlockTextures.field_31053_d[var8] * var7);
}
}
public AxisAlignedBB func_31032_a(World var1, int var2, int var3, int var4, int var5, float var6, int var7) {
if(var5 != 0 && var5 != this.blockID) {
AxisAlignedBB var8 = Block.blocksList[var5].getCollisionBoundingBoxFromPool(var1, var2, var3, var4);
if(var8 == null) {
return null;
} else {
var8.minX -= (double)((float)PistonBlockTextures.field_31051_b[var7] * var6);
var8.maxX -= (double)((float)PistonBlockTextures.field_31051_b[var7] * var6);
var8.minY -= (double)((float)PistonBlockTextures.field_31054_c[var7] * var6);
var8.maxY -= (double)((float)PistonBlockTextures.field_31054_c[var7] * var6);
var8.minZ -= (double)((float)PistonBlockTextures.field_31053_d[var7] * var6);
var8.maxZ -= (double)((float)PistonBlockTextures.field_31053_d[var7] * var6);
return var8;
}
} else {
return null;
}
}
private TileEntityPiston getTileEntityAtLocation(IBlockAccess var1, int var2, int var3, int var4) {
TileEntity var5 = var1.getBlockTileEntity(var2, var3, var4);
return var5 != null && var5 instanceof TileEntityPiston ? (TileEntityPiston)var5 : null;
}
}

View File

@@ -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.portal, 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 isOpaqueCube() {
return false;
}
public boolean isACube() {
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;
}
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.editingBlocks = 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.editingBlocks = 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 int quantityDropped(Random var1) {
return 0;
}
public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) {
if(var5.ridingEntity == null && var5.riddenByEntity == null) {
var5.setInPortal();
}
}
}

View File

@@ -0,0 +1,148 @@
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, Material var4) {
super(var1, var2, var4);
this.triggerMobType = var3;
this.setTickOnLoad(true);
float var5 = 1.0F / 16.0F;
this.setBlockBounds(var5, 0.0F, var5, 1.0F - var5, 0.03125F, 1.0F - var5);
}
public int tickRate() {
return 20;
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
return null;
}
public boolean isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return var1.isBlockNormalCube(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.isBlockNormalCube(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.singleplayerWorld) {
if(var1.getBlockMetadata(var2, var3, var4) != 0) {
this.setStateIfMobInteractsWithPlate(var1, var2, var3, var4);
}
}
}
public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) {
if(!var1.singleplayerWorld) {
if(var1.getBlockMetadata(var2, var3, var4) != 1) {
this.setStateIfMobInteractsWithPlate(var1, var2, var3, var4);
}
}
}
private void setStateIfMobInteractsWithPlate(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.markBlocksDirty(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.markBlocksDirty(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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
}
}
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;
}
public int getMobilityFlag() {
return 1;
}
}

View File

@@ -0,0 +1,45 @@
package net.minecraft.src;
public class BlockPumpkin extends Block {
private boolean blockType;
protected BlockPumpkin(int var1, int var2, boolean var3) {
super(var1, Material.pumpkin);
this.blockIndexInTexture = var2;
this.setTickOnLoad(true);
this.blockType = var3;
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
if(var1 == 1) {
return this.blockIndexInTexture;
} else if(var1 == 0) {
return this.blockIndexInTexture;
} else {
int var3 = this.blockIndexInTexture + 1 + 16;
if(this.blockType) {
++var3;
}
return var2 == 2 && var1 == 2 ? var3 : (var2 == 3 && var1 == 5 ? var3 : (var2 == 0 && var1 == 3 ? var3 : (var2 == 1 && var1 == 4 ? var3 : this.blockIndexInTexture + 16)));
}
}
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.func_27090_g()) && var1.isBlockNormalCube(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) + 2.5D) & 3;
var1.setBlockMetadataWithNotify(var2, var3, var4, var6);
}
}

View File

@@ -0,0 +1,246 @@
package net.minecraft.src;
import java.util.Random;
public class BlockRail extends Block {
private final boolean field_27034_a;
public static final boolean func_27029_g(World var0, int var1, int var2, int var3) {
int var4 = var0.getBlockId(var1, var2, var3);
return var4 == Block.minecartTrack.blockID || var4 == Block.railPowered.blockID || var4 == Block.railDetector.blockID;
}
public static final boolean func_27030_c(int var0) {
return var0 == Block.minecartTrack.blockID || var0 == Block.railPowered.blockID || var0 == Block.railDetector.blockID;
}
protected BlockRail(int var1, int var2, boolean var3) {
super(var1, var2, Material.circuits);
this.field_27034_a = var3;
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F);
}
public boolean func_27028_d() {
return this.field_27034_a;
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
return null;
}
public boolean isOpaqueCube() {
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 getBlockTextureFromSideAndMetadata(int var1, int var2) {
if(this.field_27034_a) {
if(this.blockID == Block.railPowered.blockID && (var2 & 8) == 0) {
return this.blockIndexInTexture - 16;
}
} else if(var2 >= 6) {
return this.blockIndexInTexture - 16;
}
return this.blockIndexInTexture;
}
public boolean isACube() {
return false;
}
public int quantityDropped(Random var1) {
return 1;
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return var1.isBlockNormalCube(var2, var3 - 1, var4);
}
public void onBlockAdded(World var1, int var2, int var3, int var4) {
if(!var1.singleplayerWorld) {
this.func_4038_g(var1, var2, var3, var4, true);
}
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
if(!var1.singleplayerWorld) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
int var7 = var6;
if(this.field_27034_a) {
var7 = var6 & 7;
}
boolean var8 = false;
if(!var1.isBlockNormalCube(var2, var3 - 1, var4)) {
var8 = true;
}
if(var7 == 2 && !var1.isBlockNormalCube(var2 + 1, var3, var4)) {
var8 = true;
}
if(var7 == 3 && !var1.isBlockNormalCube(var2 - 1, var3, var4)) {
var8 = true;
}
if(var7 == 4 && !var1.isBlockNormalCube(var2, var3, var4 - 1)) {
var8 = true;
}
if(var7 == 5 && !var1.isBlockNormalCube(var2, var3, var4 + 1)) {
var8 = true;
}
if(var8) {
this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4));
var1.setBlockWithNotify(var2, var3, var4, 0);
} else if(this.blockID == Block.railPowered.blockID) {
boolean var9 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4) || var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4);
var9 = var9 || this.func_27032_a(var1, var2, var3, var4, var6, true, 0) || this.func_27032_a(var1, var2, var3, var4, var6, false, 0);
boolean var10 = false;
if(var9 && (var6 & 8) == 0) {
var1.setBlockMetadataWithNotify(var2, var3, var4, var7 | 8);
var10 = true;
} else if(!var9 && (var6 & 8) != 0) {
var1.setBlockMetadataWithNotify(var2, var3, var4, var7);
var10 = true;
}
if(var10) {
var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
if(var7 == 2 || var7 == 3 || var7 == 4 || var7 == 5) {
var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID);
}
}
} else if(var5 > 0 && Block.blocksList[var5].canProvidePower() && !this.field_27034_a && RailLogic.getNAdjacentTracks(new RailLogic(this, var1, var2, var3, var4)) == 3) {
this.func_4038_g(var1, var2, var3, var4, false);
}
}
}
private void func_4038_g(World var1, int var2, int var3, int var4, boolean var5) {
if(!var1.singleplayerWorld) {
(new RailLogic(this, var1, var2, var3, var4)).func_596_a(var1.isBlockIndirectlyGettingPowered(var2, var3, var4), var5);
}
}
private boolean func_27032_a(World var1, int var2, int var3, int var4, int var5, boolean var6, int var7) {
if(var7 >= 8) {
return false;
} else {
int var8 = var5 & 7;
boolean var9 = true;
switch(var8) {
case 0:
if(var6) {
++var4;
} else {
--var4;
}
break;
case 1:
if(var6) {
--var2;
} else {
++var2;
}
break;
case 2:
if(var6) {
--var2;
} else {
++var2;
++var3;
var9 = false;
}
var8 = 1;
break;
case 3:
if(var6) {
--var2;
++var3;
var9 = false;
} else {
++var2;
}
var8 = 1;
break;
case 4:
if(var6) {
++var4;
} else {
--var4;
++var3;
var9 = false;
}
var8 = 0;
break;
case 5:
if(var6) {
++var4;
++var3;
var9 = false;
} else {
--var4;
}
var8 = 0;
}
return this.func_27031_a(var1, var2, var3, var4, var6, var7, var8) ? true : var9 && this.func_27031_a(var1, var2, var3 - 1, var4, var6, var7, var8);
}
}
private boolean func_27031_a(World var1, int var2, int var3, int var4, boolean var5, int var6, int var7) {
int var8 = var1.getBlockId(var2, var3, var4);
if(var8 == Block.railPowered.blockID) {
int var9 = var1.getBlockMetadata(var2, var3, var4);
int var10 = var9 & 7;
if(var7 == 1 && (var10 == 0 || var10 == 4 || var10 == 5)) {
return false;
}
if(var7 == 0 && (var10 == 1 || var10 == 2 || var10 == 3)) {
return false;
}
if((var9 & 8) != 0) {
if(!var1.isBlockIndirectlyGettingPowered(var2, var3, var4) && !var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4)) {
return this.func_27032_a(var1, var2, var3, var4, var9, var5, var6 + 1);
}
return true;
}
}
return false;
}
public int getMobilityFlag() {
return 0;
}
static boolean func_27033_a(BlockRail var0) {
return var0.field_27034_a;
}
}

View File

@@ -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.shiftedIndex;
}
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.isBlockOpaqueCube(var2, var3 + 1, var4)) {
var11 = (double)(var3 + 1) + var6;
}
if(var8 == 1 && !var1.isBlockOpaqueCube(var2, var3 - 1, var4)) {
var11 = (double)(var3 + 0) - var6;
}
if(var8 == 2 && !var1.isBlockOpaqueCube(var2, var3, var4 + 1)) {
var13 = (double)(var4 + 1) + var6;
}
if(var8 == 3 && !var1.isBlockOpaqueCube(var2, var3, var4 - 1)) {
var13 = (double)(var4 + 0) - var6;
}
if(var8 == 4 && !var1.isBlockOpaqueCube(var2 + 1, var3, var4)) {
var9 = (double)(var2 + 1) + var6;
}
if(var8 == 5 && !var1.isBlockOpaqueCube(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);
}
}
}
}

View File

@@ -0,0 +1,135 @@
package net.minecraft.src;
import java.util.Random;
public class BlockRedstoneRepeater extends Block {
public static final double[] field_22014_a = new double[]{-0.0625D, 1.0D / 16.0D, 0.1875D, 0.3125D};
private static final int[] field_22013_b = new int[]{1, 2, 3, 4};
private final boolean field_22015_c;
protected BlockRedstoneRepeater(int var1, boolean var2) {
super(var1, 6, Material.circuits);
this.field_22015_c = var2;
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F);
}
public boolean isACube() {
return false;
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return !var1.isBlockNormalCube(var2, var3 - 1, var4) ? false : super.canPlaceBlockAt(var1, var2, var3, var4);
}
public boolean canBlockStay(World var1, int var2, int var3, int var4) {
return !var1.isBlockNormalCube(var2, var3 - 1, var4) ? false : super.canBlockStay(var1, var2, var3, var4);
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
boolean var7 = this.func_22012_g(var1, var2, var3, var4, var6);
if(this.field_22015_c && !var7) {
var1.setBlockAndMetadataWithNotify(var2, var3, var4, Block.redstoneRepeaterIdle.blockID, var6);
} else if(!this.field_22015_c) {
var1.setBlockAndMetadataWithNotify(var2, var3, var4, Block.redstoneRepeaterActive.blockID, var6);
if(!var7) {
int var8 = (var6 & 12) >> 2;
var1.scheduleUpdateTick(var2, var3, var4, Block.redstoneRepeaterActive.blockID, field_22013_b[var8] * 2);
}
}
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return var1 == 0 ? (this.field_22015_c ? 99 : 115) : (var1 == 1 ? (this.field_22015_c ? 147 : 131) : 5);
}
public int getBlockTextureFromSide(int var1) {
return this.getBlockTextureFromSideAndMetadata(var1, 0);
}
public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) {
return this.isPoweringTo(var1, var2, var3, var4, var5);
}
public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) {
if(!this.field_22015_c) {
return false;
} else {
int var6 = var1.getBlockMetadata(var2, var3, var4) & 3;
return var6 == 0 && var5 == 3 ? true : (var6 == 1 && var5 == 4 ? true : (var6 == 2 && var5 == 2 ? true : var6 == 3 && var5 == 5));
}
}
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);
} else {
int var6 = var1.getBlockMetadata(var2, var3, var4);
boolean var7 = this.func_22012_g(var1, var2, var3, var4, var6);
int var8 = (var6 & 12) >> 2;
if(this.field_22015_c && !var7) {
var1.scheduleUpdateTick(var2, var3, var4, this.blockID, field_22013_b[var8] * 2);
} else if(!this.field_22015_c && var7) {
var1.scheduleUpdateTick(var2, var3, var4, this.blockID, field_22013_b[var8] * 2);
}
}
}
private boolean func_22012_g(World var1, int var2, int var3, int var4, int var5) {
int var6 = var5 & 3;
switch(var6) {
case 0:
return var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 + 1, 3) || var1.getBlockId(var2, var3, var4 + 1) == Block.redstoneWire.blockID && var1.getBlockMetadata(var2, var3, var4 + 1) > 0;
case 1:
return var1.isBlockIndirectlyProvidingPowerTo(var2 - 1, var3, var4, 4) || var1.getBlockId(var2 - 1, var3, var4) == Block.redstoneWire.blockID && var1.getBlockMetadata(var2 - 1, var3, var4) > 0;
case 2:
return var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 - 1, 2) || var1.getBlockId(var2, var3, var4 - 1) == Block.redstoneWire.blockID && var1.getBlockMetadata(var2, var3, var4 - 1) > 0;
case 3:
return var1.isBlockIndirectlyProvidingPowerTo(var2 + 1, var3, var4, 5) || var1.getBlockId(var2 + 1, var3, var4) == Block.redstoneWire.blockID && var1.getBlockMetadata(var2 + 1, var3, var4) > 0;
default:
return false;
}
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
int var7 = (var6 & 12) >> 2;
var7 = var7 + 1 << 2 & 12;
var1.setBlockMetadataWithNotify(var2, var3, var4, var7 | var6 & 3);
return true;
}
public boolean canProvidePower() {
return false;
}
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) + 2) % 4;
var1.setBlockMetadataWithNotify(var2, var3, var4, var6);
boolean var7 = this.func_22012_g(var1, var2, var3, var4, var6);
if(var7) {
var1.scheduleUpdateTick(var2, var3, var4, this.blockID, 1);
}
}
public void onBlockAdded(World var1, int var2, int var3, int var4) {
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 boolean isOpaqueCube() {
return false;
}
public int idDropped(int var1, Random var2) {
return Item.redstoneRepeater.shiftedIndex;
}
}

View File

@@ -0,0 +1,130 @@
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();
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return var1 == 1 ? Block.redstoneWire.getBlockTextureFromSideAndMetadata(var1, var2) : super.getBlockTextureFromSideAndMetadata(var1, var2);
}
private boolean checkForBurnout(World var1, int var2, int var3, int var4, boolean var5) {
if(var5) {
torchUpdates.add(new RedstoneUpdateInfo(var2, var3, var4, var1.getWorldTime()));
}
int var6 = 0;
for(int var7 = 0; var7 < torchUpdates.size(); ++var7) {
RedstoneUpdateInfo var8 = (RedstoneUpdateInfo)torchUpdates.get(var7);
if(var8.x == var2 && var8.y == var3 && var8.z == 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_30003_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_30003_g(var1, var2, var3, var4);
while(torchUpdates.size() > 0 && var1.getWorldTime() - ((RedstoneUpdateInfo)torchUpdates.get(0)).updateTime > 100L) {
torchUpdates.remove(0);
}
if(this.torchActive) {
if(var6) {
var1.setBlockAndMetadataWithNotify(var2, var3, var4, Block.torchRedstoneIdle.blockID, var1.getBlockMetadata(var2, var3, var4));
if(this.checkForBurnout(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.checkForBurnout(var1, var2, var3, var4, false)) {
var1.setBlockAndMetadataWithNotify(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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
}
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;
}
}

View File

@@ -0,0 +1,336 @@
package net.minecraft.src;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class BlockRedstoneWire extends Block {
private boolean wiresProvidePower = true;
private Set field_21032_b = new HashSet();
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 int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return this.blockIndexInTexture;
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
return null;
}
public boolean isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return var1.isBlockNormalCube(var2, var3 - 1, var4);
}
private void updateAndPropagateCurrentStrength(World var1, int var2, int var3, int var4) {
this.func_21031_a(var1, var2, var3, var4, var2, var3, var4);
ArrayList var5 = new ArrayList(this.field_21032_b);
this.field_21032_b.clear();
for(int var6 = 0; var6 < var5.size(); ++var6) {
ChunkPosition var7 = (ChunkPosition)var5.get(var6);
var1.notifyBlocksOfNeighborChange(var7.x, var7.y, var7.z, this.blockID);
}
}
private void func_21031_a(World var1, int var2, int var3, int var4, int var5, int var6, int var7) {
int var8 = var1.getBlockMetadata(var2, var3, var4);
int var9 = 0;
this.wiresProvidePower = false;
boolean var10 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4);
this.wiresProvidePower = true;
int var11;
int var12;
int var13;
if(var10) {
var9 = 15;
} else {
for(var11 = 0; var11 < 4; ++var11) {
var12 = var2;
var13 = var4;
if(var11 == 0) {
var12 = var2 - 1;
}
if(var11 == 1) {
++var12;
}
if(var11 == 2) {
var13 = var4 - 1;
}
if(var11 == 3) {
++var13;
}
if(var12 != var5 || var3 != var6 || var13 != var7) {
var9 = this.getMaxCurrentStrength(var1, var12, var3, var13, var9);
}
if(var1.isBlockNormalCube(var12, var3, var13) && !var1.isBlockNormalCube(var2, var3 + 1, var4)) {
if(var12 != var5 || var3 + 1 != var6 || var13 != var7) {
var9 = this.getMaxCurrentStrength(var1, var12, var3 + 1, var13, var9);
}
} else if(!var1.isBlockNormalCube(var12, var3, var13) && (var12 != var5 || var3 - 1 != var6 || var13 != var7)) {
var9 = this.getMaxCurrentStrength(var1, var12, var3 - 1, var13, var9);
}
}
if(var9 > 0) {
--var9;
} else {
var9 = 0;
}
}
if(var8 != var9) {
var1.editingBlocks = true;
var1.setBlockMetadataWithNotify(var2, var3, var4, var9);
var1.markBlocksDirty(var2, var3, var4, var2, var3, var4);
var1.editingBlocks = false;
for(var11 = 0; var11 < 4; ++var11) {
var12 = var2;
var13 = var4;
int var14 = var3 - 1;
if(var11 == 0) {
var12 = var2 - 1;
}
if(var11 == 1) {
++var12;
}
if(var11 == 2) {
var13 = var4 - 1;
}
if(var11 == 3) {
++var13;
}
if(var1.isBlockNormalCube(var12, var3, var13)) {
var14 += 2;
}
boolean var15 = false;
int var16 = this.getMaxCurrentStrength(var1, var12, var3, var13, -1);
var9 = var1.getBlockMetadata(var2, var3, var4);
if(var9 > 0) {
--var9;
}
if(var16 >= 0 && var16 != var9) {
this.func_21031_a(var1, var12, var3, var13, var2, var3, var4);
}
var16 = this.getMaxCurrentStrength(var1, var12, var14, var13, -1);
var9 = var1.getBlockMetadata(var2, var3, var4);
if(var9 > 0) {
--var9;
}
if(var16 >= 0 && var16 != var9) {
this.func_21031_a(var1, var12, var14, var13, var2, var3, var4);
}
}
if(var8 == 0 || var9 == 0) {
this.field_21032_b.add(new ChunkPosition(var2, var3, var4));
this.field_21032_b.add(new ChunkPosition(var2 - 1, var3, var4));
this.field_21032_b.add(new ChunkPosition(var2 + 1, var3, var4));
this.field_21032_b.add(new ChunkPosition(var2, var3 - 1, var4));
this.field_21032_b.add(new ChunkPosition(var2, var3 + 1, var4));
this.field_21032_b.add(new ChunkPosition(var2, var3, var4 - 1));
this.field_21032_b.add(new ChunkPosition(var2, var3, var4 + 1));
}
}
}
private void notifyWireNeighborsOfNeighborChange(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.singleplayerWorld) {
this.updateAndPropagateCurrentStrength(var1, var2, var3, var4);
var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID);
var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3, var4);
this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3, var4);
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 - 1);
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 + 1);
if(var1.isBlockNormalCube(var2 - 1, var3, var4)) {
this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 + 1, var4);
} else {
this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 - 1, var4);
}
if(var1.isBlockNormalCube(var2 + 1, var3, var4)) {
this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 + 1, var4);
} else {
this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 - 1, var4);
}
if(var1.isBlockNormalCube(var2, var3, var4 - 1)) {
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 - 1);
} else {
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 - 1);
}
if(var1.isBlockNormalCube(var2, var3, var4 + 1)) {
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 + 1);
} else {
this.notifyWireNeighborsOfNeighborChange(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.singleplayerWorld) {
var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID);
var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID);
this.updateAndPropagateCurrentStrength(var1, var2, var3, var4);
this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3, var4);
this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3, var4);
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 - 1);
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 + 1);
if(var1.isBlockNormalCube(var2 - 1, var3, var4)) {
this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 + 1, var4);
} else {
this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 - 1, var4);
}
if(var1.isBlockNormalCube(var2 + 1, var3, var4)) {
this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 + 1, var4);
} else {
this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 - 1, var4);
}
if(var1.isBlockNormalCube(var2, var3, var4 - 1)) {
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 - 1);
} else {
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 - 1);
}
if(var1.isBlockNormalCube(var2, var3, var4 + 1)) {
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 + 1);
} else {
this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 + 1);
}
}
}
private int getMaxCurrentStrength(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.singleplayerWorld) {
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.updateAndPropagateCurrentStrength(var1, var2, var3, var4);
}
super.onNeighborBlockChange(var1, var2, var3, var4, var5);
}
}
public int idDropped(int var1, Random var2) {
return Item.redstone.shiftedIndex;
}
public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) {
return !this.wiresProvidePower ? false : this.isPoweringTo(var1, var2, var3, var4, var5);
}
public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) {
if(!this.wiresProvidePower) {
return false;
} else if(var1.getBlockMetadata(var2, var3, var4) == 0) {
return false;
} else if(var5 == 1) {
return true;
} else {
boolean var6 = isPowerProviderOrWire(var1, var2 - 1, var3, var4, 1) || !var1.isBlockNormalCube(var2 - 1, var3, var4) && isPowerProviderOrWire(var1, var2 - 1, var3 - 1, var4, -1);
boolean var7 = isPowerProviderOrWire(var1, var2 + 1, var3, var4, 3) || !var1.isBlockNormalCube(var2 + 1, var3, var4) && isPowerProviderOrWire(var1, var2 + 1, var3 - 1, var4, -1);
boolean var8 = isPowerProviderOrWire(var1, var2, var3, var4 - 1, 2) || !var1.isBlockNormalCube(var2, var3, var4 - 1) && isPowerProviderOrWire(var1, var2, var3 - 1, var4 - 1, -1);
boolean var9 = isPowerProviderOrWire(var1, var2, var3, var4 + 1, 0) || !var1.isBlockNormalCube(var2, var3, var4 + 1) && isPowerProviderOrWire(var1, var2, var3 - 1, var4 + 1, -1);
if(!var1.isBlockNormalCube(var2, var3 + 1, var4)) {
if(var1.isBlockNormalCube(var2 - 1, var3, var4) && isPowerProviderOrWire(var1, var2 - 1, var3 + 1, var4, -1)) {
var6 = true;
}
if(var1.isBlockNormalCube(var2 + 1, var3, var4) && isPowerProviderOrWire(var1, var2 + 1, var3 + 1, var4, -1)) {
var7 = true;
}
if(var1.isBlockNormalCube(var2, var3, var4 - 1) && isPowerProviderOrWire(var1, var2, var3 + 1, var4 - 1, -1)) {
var8 = true;
}
if(var1.isBlockNormalCube(var2, var3, var4 + 1) && isPowerProviderOrWire(var1, var2, var3 + 1, var4 + 1, -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.wiresProvidePower;
}
public static boolean isPowerProviderOrWire(IBlockAccess var0, int var1, int var2, int var3, int var4) {
int var5 = var0.getBlockId(var1, var2, var3);
if(var5 == Block.redstoneWire.blockID) {
return true;
} else if(var5 == 0) {
return false;
} else if(Block.blocksList[var5].canProvidePower()) {
return true;
} else if(var5 != Block.redstoneRepeaterIdle.blockID && var5 != Block.redstoneRepeaterActive.blockID) {
return false;
} else {
int var6 = var0.getBlockMetadata(var1, var2, var3);
return var4 == ModelBed.field_22153_b[var6 & 3];
}
}
}

View File

@@ -0,0 +1,69 @@
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.isAirBlock(var2, var3 + 1, var4)) {
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.checkBlockCoordValid(var1, var2, var3, var4);
}
protected final void checkBlockCoordValid(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.shiftedIndex;
}
public boolean isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
}

View File

@@ -0,0 +1,60 @@
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.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
var1.scheduleUpdateTick(var2, var3, var4, this.blockID, this.tickRate());
}
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) {
byte var8 = 32;
if(!fallInstantly && var1.checkChunksExist(var2 - var8, var3 - var8, var4 - var8, var2 + var8, var3 + var8, var4 + var8)) {
EntityFallingSand var9 = new EntityFallingSand(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), this.blockID);
var1.entityJoinedWorld(var9);
} else {
var1.setBlockWithNotify(var2, var3, var4, 0);
while(canFallBelow(var1, var2, var3 - 1, var4) && var3 > 0) {
--var3;
}
if(var3 > 0) {
var1.setBlockWithNotify(var2, var3, var4, this.blockID);
}
}
}
}
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;
}
}
}

View File

@@ -0,0 +1,11 @@
package net.minecraft.src;
public class BlockSandStone extends Block {
public BlockSandStone(int var1) {
super(var1, 192, Material.rock);
}
public int getBlockTextureFromSide(int var1) {
return var1 == 1 ? this.blockIndexInTexture - 16 : (var1 == 0 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture);
}
}

View File

@@ -0,0 +1,56 @@
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) {
if(!var1.singleplayerWorld) {
super.updateTick(var1, var2, var3, var4, var5);
if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9 && var5.nextInt(30) == 0) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
if((var6 & 8) == 0) {
var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 8);
} else {
this.growTree(var1, var2, var3, var4, var5);
}
}
}
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
var2 &= 3;
return var2 == 1 ? 63 : (var2 == 2 ? 79 : super.getBlockTextureFromSideAndMetadata(var1, var2));
}
public void growTree(World var1, int var2, int var3, int var4, Random var5) {
int var6 = var1.getBlockMetadata(var2, var3, var4) & 3;
var1.setBlock(var2, var3, var4, 0);
Object var7 = null;
if(var6 == 1) {
var7 = new WorldGenTaiga2();
} else if(var6 == 2) {
var7 = new WorldGenForest();
} else {
var7 = new WorldGenTrees();
if(var5.nextInt(10) == 0) {
var7 = new WorldGenBigTree();
}
}
if(!((WorldGenerator)var7).generate(var1, var5, var2, var3, var4)) {
var1.setBlockAndMetadata(var2, var3, var4, this.blockID, var6);
}
}
protected int damageDropped(int var1) {
return var1 & 3;
}
}

View File

@@ -0,0 +1,104 @@
package net.minecraft.src;
import java.util.Random;
public class BlockSign extends BlockContainer {
private Class signEntityClass;
private boolean isFreestanding;
protected BlockSign(int var1, Class var2, boolean var3) {
super(var1, Material.wood);
this.isFreestanding = var3;
this.blockIndexInTexture = 4;
this.signEntityClass = 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.isFreestanding) {
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 isACube() {
return false;
}
public boolean isOpaqueCube() {
return false;
}
protected TileEntity getBlockEntity() {
try {
return (TileEntity)this.signEntityClass.newInstance();
} catch (Exception var2) {
throw new RuntimeException(var2);
}
}
public int idDropped(int var1, Random var2) {
return Item.sign.shiftedIndex;
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
boolean var6 = false;
if(this.isFreestanding) {
if(!var1.getBlockMaterial(var2, var3 - 1, var4).isSolid()) {
var6 = true;
}
} else {
int var7 = var1.getBlockMetadata(var2, var3, var4);
var6 = true;
if(var7 == 2 && var1.getBlockMaterial(var2, var3, var4 + 1).isSolid()) {
var6 = false;
}
if(var7 == 3 && var1.getBlockMaterial(var2, var3, var4 - 1).isSolid()) {
var6 = false;
}
if(var7 == 4 && var1.getBlockMaterial(var2 + 1, var3, var4).isSolid()) {
var6 = false;
}
if(var7 == 5 && var1.getBlockMaterial(var2 - 1, var3, var4).isSolid()) {
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);
}
}

View File

@@ -0,0 +1,78 @@
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) {
int var5 = var1.getBlockMetadata(var2, var3, var4) & 7;
return var5 >= 3 ? AxisAlignedBB.getBoundingBoxFromPool((double)var2 + this.minX, (double)var3 + this.minY, (double)var4 + this.minZ, (double)var2 + this.maxX, (double)((float)var3 + 0.5F), (double)var4 + this.maxZ) : null;
}
public boolean isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
int var5 = var1.getBlockMetadata(var2, var3, var4) & 7;
float var6 = (float)(2 * (1 + var5)) / 16.0F;
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, var6, 1.0F);
}
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].isOpaqueCube() ? var1.getBlockMaterial(var2, var3 - 1, var4).getIsSolid() : 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 harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) {
int var7 = Item.snowball.shiftedIndex;
float var8 = 0.7F;
double var9 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.5D;
double var11 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.5D;
double var13 = (double)(var1.rand.nextFloat() * var8) + (double)(1.0F - var8) * 0.5D;
EntityItem var15 = new EntityItem(var1, (double)var3 + var9, (double)var4 + var11, (double)var5 + var13, new ItemStack(var7, 1, 0));
var15.delayBeforeCanPickup = 10;
var1.entityJoinedWorld(var15);
var1.setBlockWithNotify(var3, var4, var5, 0);
var2.addStat(StatList.mineBlockStatArray[this.blockID], 1);
}
public int idDropped(int var1, Random var2) {
return Item.snowball.shiftedIndex;
}
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);
}
}
}

View File

@@ -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.shiftedIndex;
}
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);
}
}
}

View File

@@ -0,0 +1,17 @@
package net.minecraft.src;
public class BlockSoulSand extends Block {
public BlockSoulSand(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;
}
}

View File

@@ -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));
}
}
}
}
}

View File

@@ -0,0 +1,157 @@
package net.minecraft.src;
import java.util.ArrayList;
import java.util.Random;
public class BlockStairs extends Block {
private Block modelBlock;
protected BlockStairs(int var1, Block var2) {
super(var1, var2.blockIndexInTexture, var2.blockMaterial);
this.modelBlock = var2;
this.setHardness(var2.blockHardness);
this.setResistance(var2.blockResistance / 3.0F);
this.setStepSound(var2.stepSound);
this.setLightOpacity(255);
}
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 isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
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.modelBlock.onBlockClicked(var1, var2, var3, var4, var5);
}
public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) {
this.modelBlock.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5);
}
public float getExplosionResistance(Entity var1) {
return this.modelBlock.getExplosionResistance(var1);
}
public int idDropped(int var1, Random var2) {
return this.modelBlock.idDropped(var1, var2);
}
public int quantityDropped(Random var1) {
return this.modelBlock.quantityDropped(var1);
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return this.modelBlock.getBlockTextureFromSideAndMetadata(var1, var2);
}
public int getBlockTextureFromSide(int var1) {
return this.modelBlock.getBlockTextureFromSide(var1);
}
public int tickRate() {
return this.modelBlock.tickRate();
}
public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3D var6) {
this.modelBlock.velocityToAddToEntity(var1, var2, var3, var4, var5, var6);
}
public boolean isCollidable() {
return this.modelBlock.isCollidable();
}
public boolean canCollideCheck(int var1, boolean var2) {
return this.modelBlock.canCollideCheck(var1, var2);
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return this.modelBlock.canPlaceBlockAt(var1, var2, var3, var4);
}
public void onBlockAdded(World var1, int var2, int var3, int var4) {
this.onNeighborBlockChange(var1, var2, var3, var4, 0);
this.modelBlock.onBlockAdded(var1, var2, var3, var4);
}
public void onBlockRemoval(World var1, int var2, int var3, int var4) {
this.modelBlock.onBlockRemoval(var1, var2, var3, var4);
}
public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) {
this.modelBlock.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6);
}
public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) {
this.modelBlock.onEntityWalking(var1, var2, var3, var4, var5);
}
public void updateTick(World var1, int var2, int var3, int var4, Random var5) {
this.modelBlock.updateTick(var1, var2, var3, var4, var5);
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
return this.modelBlock.blockActivated(var1, var2, var3, var4, var5);
}
public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) {
this.modelBlock.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);
}
}
}

View File

@@ -0,0 +1,57 @@
package net.minecraft.src;
import java.util.Random;
public class BlockStationary extends BlockFluid {
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_30005_i(var1, var2, var3, var4);
}
}
private void func_30005_i(World var1, int var2, int var3, int var4) {
int var5 = var1.getBlockMetadata(var2, var3, var4);
var1.editingBlocks = true;
var1.setBlockAndMetadata(var2, var3, var4, this.blockID - 1, var5);
var1.markBlocksDirty(var2, var3, var4, var2, var3, var4);
var1.scheduleUpdateTick(var2, var3, var4, this.blockID - 1, this.tickRate());
var1.editingBlocks = 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.getIsSolid()) {
return;
}
}
}
}
private boolean func_4033_j(World var1, int var2, int var3, int var4) {
return var1.getBlockMaterial(var2, var3, var4).getBurning();
}
}

View File

@@ -0,0 +1,63 @@
package net.minecraft.src;
import java.util.Random;
public class BlockStep extends Block {
public static final String[] field_22027_a = new String[]{"stone", "sand", "wood", "cobble"};
private boolean blockType;
public BlockStep(int var1, boolean var2) {
super(var1, 6, Material.rock);
this.blockType = var2;
if(!var2) {
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
}
this.setLightOpacity(255);
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return var2 == 0 ? (var1 <= 1 ? 6 : 5) : (var2 == 1 ? (var1 == 0 ? 208 : (var1 == 1 ? 176 : 192)) : (var2 == 2 ? 4 : (var2 == 3 ? 16 : 6)));
}
public int getBlockTextureFromSide(int var1) {
return this.getBlockTextureFromSideAndMetadata(var1, 0);
}
public boolean isOpaqueCube() {
return this.blockType;
}
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);
int var6 = var1.getBlockMetadata(var2, var3, var4);
int var7 = var1.getBlockMetadata(var2, var3 - 1, var4);
if(var6 == var7) {
if(var5 == stairSingle.blockID) {
var1.setBlockWithNotify(var2, var3, var4, 0);
var1.setBlockAndMetadataWithNotify(var2, var3 - 1, var4, Block.stairDouble.blockID, var6);
}
}
}
public int idDropped(int var1, Random var2) {
return Block.stairSingle.blockID;
}
public int quantityDropped(Random var1) {
return this.blockType ? 2 : 1;
}
protected int damageDropped(int var1) {
return var1;
}
public boolean isACube() {
return this.blockType;
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,65 @@
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 onBlockAdded(World var1, int var2, int var3, int var4) {
super.onBlockAdded(var1, var2, var3, var4);
if(var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) {
this.onBlockDestroyedByPlayer(var1, var2, var3, var4, 1);
var1.setBlockWithNotify(var2, var3, var4, 0);
}
}
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, 1);
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.singleplayerWorld) {
if((var5 & 1) == 0) {
this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(Block.tnt.blockID, 1, 0));
} else {
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);
}
}
}
public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) {
if(var5.getCurrentEquippedItem() != null && var5.getCurrentEquippedItem().itemID == Item.flintAndSteel.shiftedIndex) {
var1.setBlockMetadata(var2, var3, var4, 1);
}
super.onBlockClicked(var1, var2, var3, var4, var5);
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
return super.blockActivated(var1, var2, var3, var4, var5);
}
}

View File

@@ -0,0 +1,19 @@
package net.minecraft.src;
import java.util.Random;
public class BlockTallGrass extends BlockFlower {
protected BlockTallGrass(int var1, int var2) {
super(var1, var2);
float var3 = 0.4F;
this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 0.8F, 0.5F + var3);
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
return var2 == 1 ? this.blockIndexInTexture : (var2 == 2 ? this.blockIndexInTexture + 16 + 1 : (var2 == 0 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture));
}
public int idDropped(int var1, Random var2) {
return var2.nextInt(8) == 0 ? Item.seeds.shiftedIndex : -1;
}
}

View File

@@ -0,0 +1,140 @@
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 isOpaqueCube() {
return false;
}
public boolean isACube() {
return false;
}
private boolean func_31028_g(World var1, int var2, int var3, int var4) {
return var1.isBlockNormalCube(var2, var3, var4) || var1.getBlockId(var2, var3, var4) == Block.fence.blockID;
}
public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) {
return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : this.func_31028_g(var1, 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 && this.func_31028_g(var1, var2, var3 - 1, var4)) {
var6 = 5;
}
if(var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1)) {
var6 = 4;
}
if(var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) {
var6 = 3;
}
if(var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) {
var6 = 2;
}
if(var5 == 5 && var1.isBlockNormalCube(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.isBlockNormalCube(var2 - 1, var3, var4)) {
var1.setBlockMetadataWithNotify(var2, var3, var4, 1);
} else if(var1.isBlockNormalCube(var2 + 1, var3, var4)) {
var1.setBlockMetadataWithNotify(var2, var3, var4, 2);
} else if(var1.isBlockNormalCube(var2, var3, var4 - 1)) {
var1.setBlockMetadataWithNotify(var2, var3, var4, 3);
} else if(var1.isBlockNormalCube(var2, var3, var4 + 1)) {
var1.setBlockMetadataWithNotify(var2, var3, var4, 4);
} else if(this.func_31028_g(var1, var2, var3 - 1, var4)) {
var1.setBlockMetadataWithNotify(var2, var3, var4, 5);
}
this.dropTorchIfCantStay(var1, var2, var3, var4);
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
if(this.dropTorchIfCantStay(var1, var2, var3, var4)) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
boolean var7 = false;
if(!var1.isBlockNormalCube(var2 - 1, var3, var4) && var6 == 1) {
var7 = true;
}
if(!var1.isBlockNormalCube(var2 + 1, var3, var4) && var6 == 2) {
var7 = true;
}
if(!var1.isBlockNormalCube(var2, var3, var4 - 1) && var6 == 3) {
var7 = true;
}
if(!var1.isBlockNormalCube(var2, var3, var4 + 1) && var6 == 4) {
var7 = true;
}
if(!this.func_31028_g(var1, 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 dropTorchIfCantStay(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);
}
}

View File

@@ -0,0 +1,169 @@
package net.minecraft.src;
public class BlockTrapDoor extends Block {
protected BlockTrapDoor(int var1, Material var2) {
super(var1, var2);
this.blockIndexInTexture = 84;
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 isOpaqueCube() {
return false;
}
public boolean isACube() {
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_28039_c(var1.getBlockMetadata(var2, var3, var4));
}
public void func_28039_c(int var1) {
float var2 = 3.0F / 16.0F;
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, var2, 1.0F);
if(func_28038_d(var1)) {
if((var1 & 3) == 0) {
this.setBlockBounds(0.0F, 0.0F, 1.0F - var2, 1.0F, 1.0F, 1.0F);
}
if((var1 & 3) == 1) {
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var2);
}
if((var1 & 3) == 2) {
this.setBlockBounds(1.0F - var2, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
}
if((var1 & 3) == 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);
var1.setBlockMetadataWithNotify(var2, var3, var4, var6 ^ 4);
var1.func_28101_a(var5, 1003, var2, var3, var4, 0);
return true;
}
}
public void func_28040_a(World var1, int var2, int var3, int var4, boolean var5) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
boolean var7 = (var6 & 4) > 0;
if(var7 != var5) {
var1.setBlockMetadataWithNotify(var2, var3, var4, var6 ^ 4);
var1.func_28101_a((EntityPlayer)null, 1003, var2, var3, var4, 0);
}
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
if(!var1.singleplayerWorld) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
int var7 = var2;
int var8 = var4;
if((var6 & 3) == 0) {
var8 = var4 + 1;
}
if((var6 & 3) == 1) {
--var8;
}
if((var6 & 3) == 2) {
var7 = var2 + 1;
}
if((var6 & 3) == 3) {
--var7;
}
if(!var1.isBlockNormalCube(var7, var3, var8)) {
var1.setBlockWithNotify(var2, var3, var4, 0);
this.dropBlockAsItem(var1, var2, var3, var4, var6);
}
if(var5 > 0 && Block.blocksList[var5].canProvidePower()) {
boolean var9 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4);
this.func_28040_a(var1, var2, var3, var4, var9);
}
}
}
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 onBlockPlaced(World var1, int var2, int var3, int var4, int var5) {
byte var6 = 0;
if(var5 == 2) {
var6 = 0;
}
if(var5 == 3) {
var6 = 1;
}
if(var5 == 4) {
var6 = 2;
}
if(var5 == 5) {
var6 = 3;
}
var1.setBlockMetadataWithNotify(var2, var3, var4, var6);
}
public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) {
if(var5 == 0) {
return false;
} else if(var5 == 1) {
return false;
} else {
if(var5 == 2) {
++var4;
}
if(var5 == 3) {
--var4;
}
if(var5 == 4) {
++var2;
}
if(var5 == 5) {
--var2;
}
return var1.isBlockNormalCube(var2, var3, var4);
}
}
public static boolean func_28038_d(int var0) {
return (var0 & 4) != 0;
}
}

View File

@@ -0,0 +1,29 @@
package net.minecraft.src;
import java.util.Random;
public class BlockWeb extends Block {
public BlockWeb(int var1, int var2) {
super(var1, var2, Material.web);
}
public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) {
var5.field_27012_bb = true;
}
public boolean isOpaqueCube() {
return false;
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) {
return null;
}
public boolean isACube() {
return false;
}
public int idDropped(int var1, Random var2) {
return Item.silk.shiftedIndex;
}
}

View File

@@ -0,0 +1,21 @@
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) {
if(var1.singleplayerWorld) {
return true;
} else {
var5.displayWorkbenchGUI(var2, var3, var4);
return true;
}
}
}

View File

@@ -0,0 +1,33 @@
package net.minecraft.src;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ChatAllowedCharacters {
public static final String allowedCharacters = getAllowedCharacters();
public static final char[] field_22175_b = new char[]{'/', '\n', '\r', '\t', '\u0000', '\f', '`', '?', '*', '\\', '<', '>', '|', '\"', ':'};
private static String getAllowedCharacters() {
String var0 = "";
try {
BufferedReader var1 = new BufferedReader(new InputStreamReader(ChatAllowedCharacters.class.getResourceAsStream("/font.txt"), "UTF-8"));
String var2 = "";
while(true) {
var2 = var1.readLine();
if(var2 == null) {
var1.close();
break;
}
if(!var2.startsWith("#")) {
var0 = var0 + var2;
}
}
} catch (Exception var3) {
}
return var0;
}
}

View File

@@ -0,0 +1,597 @@
package net.minecraft.src;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
public class Chunk {
public static boolean isLit;
public byte[] blocks;
public boolean isChunkLoaded;
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 chunkTileEntityMap;
public List[] entities;
public boolean isTerrainPopulated;
public boolean isModified;
public boolean neverSave;
public boolean hasEntities;
public long lastSaveTime;
public Chunk(World var1, int var2, int var3) {
this.chunkTileEntityMap = new HashMap();
this.entities = new List[8];
this.isTerrainPopulated = false;
this.isModified = false;
this.hasEntities = false;
this.lastSaveTime = 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 isAtLocation(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) {
int var4 = 127;
int var5;
for(var5 = var2 << 11 | var3 << 7; var4 > 0 && Block.lightOpacity[this.blocks[var5 + var4 - 1] & 255] == 0; --var4) {
}
this.heightMap[var3 << 4 | var2] = (byte)var4;
if(var4 < var1) {
var1 = var4;
}
if(!this.worldObj.worldProvider.field_4306_c) {
int var6 = 15;
int var7 = 127;
do {
var6 -= Block.lightOpacity[this.blocks[var5 + var7] & 255];
if(var6 > 0) {
this.skylightMap.setNibble(var2, var7, var3, var6);
}
--var7;
} while(var7 > 0 && var6 > 0);
}
}
}
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() {
}
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.scheduleLightingUpdate(EnumSkyBlock.Sky, var1, var3, var2, var1, var4, var2);
this.isModified = true;
} else if(var4 < var3) {
this.worldObj.scheduleLightingUpdate(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] & 255] == 0; --var5) {
}
if(var5 != var4) {
this.worldObj.markBlocksDirtyVertical(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.scheduleLightingUpdate(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.scheduleLightingUpdate(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] & 255;
}
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] = (byte)(var6 & 255);
if(var8 != 0 && !this.worldObj.singleplayerWorld) {
Block.blocksList[var8].onBlockRemoval(this.worldObj, var9, var2, var10);
}
this.data.setNibble(var1, var2, var3, var5);
if(!this.worldObj.worldProvider.field_4306_c) {
if(Block.lightOpacity[var6 & 255] != 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.scheduleLightingUpdate(EnumSkyBlock.Sky, var9, var2, var10, var9, var2, var10);
}
this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Block, var9, var2, var10, var9, var2, var10);
this.func_333_c(var1, var3);
this.data.setNibble(var1, var2, var3, var5);
if(var4 != 0) {
Block.blocksList[var4].onBlockAdded(this.worldObj, var9, var2, var10);
}
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] = (byte)(var5 & 255);
if(var7 != 0) {
Block.blocksList[var7].onBlockRemoval(this.worldObj, var8, var2, var9);
}
this.data.setNibble(var1, var2, var3, 0);
if(Block.lightOpacity[var5 & 255] != 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.scheduleLightingUpdate(EnumSkyBlock.Sky, var8, var2, var9, var8, var2, var9);
this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Block, var8, var2, var9, var8, var2, var9);
this.func_333_c(var1, var3);
if(var4 != 0 && !this.worldObj.singleplayerWorld) {
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) {
isLit = true;
}
var5 -= var4;
int var6 = this.blocklightMap.getNibble(var1, var2, var3);
if(var6 > var5) {
var5 = var6;
}
return var5;
}
public void addEntity(Entity var1) {
this.hasEntities = 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.addedToChunk = true;
var1.chunkCoordX = this.xPosition;
var1.chunkCoordY = var4;
var1.chunkCoordZ = this.zPosition;
this.entities[var4].add(var1);
}
public void removeEntity(Entity var1) {
this.removeEntityAtIndex(var1, var1.chunkCoordY);
}
public void removeEntityAtIndex(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 getChunkBlockTileEntity(int var1, int var2, int var3) {
ChunkPosition var4 = new ChunkPosition(var1, var2, var3);
TileEntity var5 = (TileEntity)this.chunkTileEntityMap.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.chunkTileEntityMap.get(var4);
}
if(var5 != null && var5.isInvalid()) {
this.chunkTileEntityMap.remove(var4);
return null;
} else {
return var5;
}
}
public void addTileEntity(TileEntity var1) {
int var2 = var1.xCoord - this.xPosition * 16;
int var3 = var1.yCoord;
int var4 = var1.zCoord - this.zPosition * 16;
this.setChunkBlockTileEntity(var2, var3, var4, var1);
if(this.isChunkLoaded) {
this.worldObj.loadedTileEntityList.add(var1);
}
}
public void setChunkBlockTileEntity(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) {
var4.validate();
this.chunkTileEntityMap.put(var5, var4);
} else {
System.out.println("Attempted to place a tile entity where there was no entity tile!");
}
}
public void removeChunkBlockTileEntity(int var1, int var2, int var3) {
ChunkPosition var4 = new ChunkPosition(var1, var2, var3);
if(this.isChunkLoaded) {
TileEntity var5 = (TileEntity)this.chunkTileEntityMap.remove(var4);
if(var5 != null) {
var5.invalidate();
}
}
}
public void onChunkLoad() {
this.isChunkLoaded = true;
this.worldObj.func_31047_a(this.chunkTileEntityMap.values());
for(int var1 = 0; var1 < this.entities.length; ++var1) {
this.worldObj.addLoadedEntities(this.entities[var1]);
}
}
public void onChunkUnload() {
this.isChunkLoaded = false;
Iterator var1 = this.chunkTileEntityMap.values().iterator();
while(var1.hasNext()) {
TileEntity var2 = (TileEntity)var1.next();
var2.invalidate();
}
for(int var3 = 0; var3 < this.entities.length; ++var3) {
this.worldObj.addUnloadedEntities(this.entities[var3]);
}
}
public void setChunkModified() {
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 needsSaving(boolean var1) {
if(this.neverSave) {
return false;
} else {
if(var1) {
if(this.hasEntities && this.worldObj.getWorldTime() != this.lastSaveTime) {
return true;
}
} else if(this.hasEntities && this.worldObj.getWorldTime() >= this.lastSaveTime + 600L) {
return true;
}
return this.isModified;
}
}
public int getChunkData(byte[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) {
int var9 = var5 - var2;
int var10 = var6 - var3;
int var11 = var7 - var4;
if(var9 * var10 * var11 == this.blocks.length) {
System.arraycopy(this.blocks, 0, var1, var8, this.blocks.length);
var8 += this.blocks.length;
System.arraycopy(this.data.data, 0, var1, var8, this.data.data.length);
var8 += this.data.data.length;
System.arraycopy(this.blocklightMap.data, 0, var1, var8, this.blocklightMap.data.length);
var8 += this.blocklightMap.data.length;
System.arraycopy(this.skylightMap.data, 0, var1, var8, this.skylightMap.data.length);
var8 += this.skylightMap.data.length;
return var8;
} else {
int var12;
int var13;
int var14;
int var15;
for(var12 = var2; var12 < var5; ++var12) {
for(var13 = var4; var13 < var7; ++var13) {
var14 = var12 << 11 | var13 << 7 | var3;
var15 = var6 - var3;
System.arraycopy(this.blocks, var14, var1, var8, var15);
var8 += var15;
}
}
for(var12 = var2; var12 < var5; ++var12) {
for(var13 = var4; var13 < var7; ++var13) {
var14 = (var12 << 11 | var13 << 7 | var3) >> 1;
var15 = (var6 - var3) / 2;
System.arraycopy(this.data.data, var14, var1, var8, var15);
var8 += var15;
}
}
for(var12 = var2; var12 < var5; ++var12) {
for(var13 = var4; var13 < var7; ++var13) {
var14 = (var12 << 11 | var13 << 7 | var3) >> 1;
var15 = (var6 - var3) / 2;
System.arraycopy(this.blocklightMap.data, var14, var1, var8, var15);
var8 += var15;
}
}
for(var12 = var2; var12 < var5; ++var12) {
for(var13 = var4; var13 < var7; ++var13) {
var14 = (var12 << 11 | var13 << 7 | var3) >> 1;
var15 = (var6 - var3) / 2;
System.arraycopy(this.skylightMap.data, var14, var1, var8, var15);
var8 += var15;
}
}
return var8;
}
}
public Random func_334_a(long var1) {
return new Random(this.worldObj.getRandomSeed() + (long)(this.xPosition * this.xPosition * 4987142) + (long)(this.xPosition * 5947611) + (long)(this.zPosition * this.zPosition) * 4392871L + (long)(this.zPosition * 389711) ^ var1);
}
public boolean func_21101_g() {
return false;
}
public void func_25083_h() {
ChunkBlockMap.func_26001_a(this.blocks);
}
}

View File

@@ -0,0 +1,28 @@
package net.minecraft.src;
public class ChunkBlockMap {
private static byte[] field_26002_a = new byte[256];
public static void func_26001_a(byte[] var0) {
for(int var1 = 0; var1 < var0.length; ++var1) {
var0[var1] = field_26002_a[var0[var1] & 255];
}
}
static {
try {
for(int var0 = 0; var0 < 256; ++var0) {
byte var1 = (byte)var0;
if(var1 != 0 && Block.blocksList[var1 & 255] == null) {
var1 = 0;
}
field_26002_a[var0] = var1;
}
} catch (Exception var2) {
var2.printStackTrace();
}
}
}

View File

@@ -0,0 +1,69 @@
package net.minecraft.src;
public class ChunkCache implements IBlockAccess {
private int chunkX;
private int chunkZ;
private Chunk[][] chunkArray;
private World worldObj;
public ChunkCache(World var1, int var2, int var3, int var4, int var5, int var6, int var7) {
this.worldObj = var1;
this.chunkX = var2 >> 4;
this.chunkZ = var4 >> 4;
int var8 = var5 >> 4;
int var9 = var7 >> 4;
this.chunkArray = new Chunk[var8 - this.chunkX + 1][var9 - this.chunkZ + 1];
for(int var10 = this.chunkX; var10 <= var8; ++var10) {
for(int var11 = this.chunkZ; var11 <= var9; ++var11) {
this.chunkArray[var10 - this.chunkX][var11 - this.chunkZ] = 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.chunkX;
int var5 = (var3 >> 4) - this.chunkZ;
if(var4 >= 0 && var4 < this.chunkArray.length && var5 >= 0 && var5 < this.chunkArray[var4].length) {
Chunk var6 = this.chunkArray[var4][var5];
return var6 == null ? 0 : var6.getBlockID(var1 & 15, var2, var3 & 15);
} else {
return 0;
}
}
}
public TileEntity getBlockTileEntity(int var1, int var2, int var3) {
int var4 = (var1 >> 4) - this.chunkX;
int var5 = (var3 >> 4) - this.chunkZ;
return this.chunkArray[var4][var5].getChunkBlockTileEntity(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.chunkX;
int var5 = (var3 >> 4) - this.chunkZ;
return this.chunkArray[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 isBlockNormalCube(int var1, int var2, int var3) {
Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)];
return var4 == null ? false : var4.blockMaterial.getIsSolid() && var4.isACube();
}
}

View File

@@ -0,0 +1,24 @@
package net.minecraft.src;
public class ChunkCoordIntPair {
public final int chunkXPos;
public final int chunkZPos;
public ChunkCoordIntPair(int var1, int var2) {
this.chunkXPos = var1;
this.chunkZPos = var2;
}
public static int chunkXZ2Int(int var0, int var1) {
return (var0 < 0 ? Integer.MIN_VALUE : 0) | (var0 & Short.MAX_VALUE) << 16 | (var1 < 0 ? -Short.MIN_VALUE : 0) | var1 & Short.MAX_VALUE;
}
public int hashCode() {
return chunkXZ2Int(this.chunkXPos, this.chunkZPos);
}
public boolean equals(Object var1) {
ChunkCoordIntPair var2 = (ChunkCoordIntPair)var1;
return var2.chunkXPos == this.chunkXPos && var2.chunkZPos == this.chunkZPos;
}
}

View File

@@ -0,0 +1,50 @@
package net.minecraft.src;
public class ChunkCoordinates implements Comparable {
public int posX;
public int posY;
public int posZ;
public ChunkCoordinates() {
}
public ChunkCoordinates(int var1, int var2, int var3) {
this.posX = var1;
this.posY = var2;
this.posZ = var3;
}
public ChunkCoordinates(ChunkCoordinates var1) {
this.posX = var1.posX;
this.posY = var1.posY;
this.posZ = var1.posZ;
}
public boolean equals(Object var1) {
if(!(var1 instanceof ChunkCoordinates)) {
return false;
} else {
ChunkCoordinates var2 = (ChunkCoordinates)var1;
return this.posX == var2.posX && this.posY == var2.posY && this.posZ == var2.posZ;
}
}
public int hashCode() {
return this.posX + this.posZ << 8 + this.posY << 16;
}
public int compareChunkCoordinate(ChunkCoordinates var1) {
return this.posY == var1.posY ? (this.posZ == var1.posZ ? this.posX - var1.posX : this.posZ - var1.posZ) : this.posY - var1.posY;
}
public double getSqDistanceTo(int var1, int var2, int var3) {
int var4 = this.posX - var1;
int var5 = this.posY - var2;
int var6 = this.posZ - var3;
return Math.sqrt((double)(var4 * var4 + var5 * var5 + var6 * var6));
}
public int compareTo(Object var1) {
return this.compareChunkCoordinate((ChunkCoordinates)var1);
}
}

View File

@@ -0,0 +1,51 @@
package net.minecraft.src;
import java.io.File;
import java.util.regex.Matcher;
class ChunkFile implements Comparable {
private final File field_22209_a;
private final int field_22208_b;
private final int field_22210_c;
public ChunkFile(File var1) {
this.field_22209_a = var1;
Matcher var2 = ChunkFilePattern.field_22119_a.matcher(var1.getName());
if(var2.matches()) {
this.field_22208_b = Integer.parseInt(var2.group(1), 36);
this.field_22210_c = Integer.parseInt(var2.group(2), 36);
} else {
this.field_22208_b = 0;
this.field_22210_c = 0;
}
}
public int func_22206_a(ChunkFile var1) {
int var2 = this.field_22208_b >> 5;
int var3 = var1.field_22208_b >> 5;
if(var2 == var3) {
int var4 = this.field_22210_c >> 5;
int var5 = var1.field_22210_c >> 5;
return var4 - var5;
} else {
return var2 - var3;
}
}
public File func_22207_a() {
return this.field_22209_a;
}
public int func_22205_b() {
return this.field_22208_b;
}
public int func_22204_c() {
return this.field_22210_c;
}
public int compareTo(Object var1) {
return this.func_22206_a((ChunkFile)var1);
}
}

View File

@@ -0,0 +1,22 @@
package net.minecraft.src;
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class ChunkFilePattern implements FilenameFilter {
public static final Pattern field_22119_a = Pattern.compile("c\\.(-?[0-9a-z]+)\\.(-?[0-9a-z]+)\\.dat");
private ChunkFilePattern() {
}
public boolean accept(File var1, String var2) {
Matcher var3 = field_22119_a.matcher(var2);
return var3.matches();
}
ChunkFilePattern(Empty2 var1) {
this();
}
}

View File

@@ -0,0 +1,26 @@
package net.minecraft.src;
import java.io.File;
import java.io.FileFilter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class ChunkFolderPattern implements FileFilter {
public static final Pattern field_22214_a = Pattern.compile("[0-9a-z]|([0-9a-z][0-9a-z])");
private ChunkFolderPattern() {
}
public boolean accept(File var1) {
if(var1.isDirectory()) {
Matcher var2 = field_22214_a.matcher(var1.getName());
return var2.matches();
} else {
return false;
}
}
ChunkFolderPattern(Empty2 var1) {
this();
}
}

View File

@@ -0,0 +1,210 @@
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 saveDir;
private boolean createIfNecessary;
public ChunkLoader(File var1, boolean var2) {
this.saveDir = var1;
this.createIfNecessary = var2;
}
private File chunkFileForXZ(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.saveDir, var4);
if(!var6.exists()) {
if(!this.createIfNecessary) {
return null;
}
var6.mkdir();
}
var6 = new File(var6, var5);
if(!var6.exists()) {
if(!this.createIfNecessary) {
return null;
}
var6.mkdir();
}
var6 = new File(var6, var3);
return !var6.exists() && !this.createIfNecessary ? null : var6;
}
public Chunk loadChunk(World var1, int var2, int var3) throws IOException {
File var4 = this.chunkFileForXZ(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 = loadChunkIntoWorldFromCompound(var1, var6.getCompoundTag("Level"));
if(!var7.isAtLocation(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 = loadChunkIntoWorldFromCompound(var1, var6.getCompoundTag("Level"));
}
var7.func_25083_h();
return var7;
} catch (Exception var8) {
var8.printStackTrace();
}
}
return null;
}
public void saveChunk(World var1, Chunk var2) throws IOException {
var1.checkSessionLock();
File var3 = this.chunkFileForXZ(var2.xPosition, var2.zPosition);
if(var3.exists()) {
WorldInfo var4 = var1.getWorldInfo();
var4.setSizeOnDisk(var4.getSizeOnDisk() - var3.length());
}
try {
File var10 = new File(this.saveDir, "tmp_chunk.dat");
FileOutputStream var5 = new FileOutputStream(var10);
NBTTagCompound var6 = new NBTTagCompound();
NBTTagCompound var7 = new NBTTagCompound();
var6.setTag("Level", var7);
storeChunkInCompound(var2, var1, var7);
CompressedStreamTools.writeGzippedCompoundToOutputStream(var6, var5);
var5.close();
if(var3.exists()) {
var3.delete();
}
var10.renameTo(var3);
WorldInfo var8 = var1.getWorldInfo();
var8.setSizeOnDisk(var8.getSizeOnDisk() + var3.length());
} catch (Exception var9) {
var9.printStackTrace();
}
}
public static void storeChunkInCompound(Chunk var0, World var1, NBTTagCompound var2) {
var1.checkSessionLock();
var2.setInteger("xPos", var0.xPosition);
var2.setInteger("zPos", var0.zPosition);
var2.setLong("LastUpdate", var1.getWorldTime());
var2.setByteArray("Blocks", var0.blocks);
var2.setByteArray("Data", var0.data.data);
var2.setByteArray("SkyLight", var0.skylightMap.data);
var2.setByteArray("BlockLight", var0.blocklightMap.data);
var2.setByteArray("HeightMap", var0.heightMap);
var2.setBoolean("TerrainPopulated", var0.isTerrainPopulated);
var0.hasEntities = false;
NBTTagList var3 = new NBTTagList();
Iterator var5;
NBTTagCompound var7;
for(int var4 = 0; var4 < var0.entities.length; ++var4) {
var5 = var0.entities[var4].iterator();
while(var5.hasNext()) {
Entity var6 = (Entity)var5.next();
var0.hasEntities = true;
var7 = new NBTTagCompound();
if(var6.addEntityID(var7)) {
var3.setTag(var7);
}
}
}
var2.setTag("Entities", var3);
NBTTagList var8 = new NBTTagList();
var5 = var0.chunkTileEntityMap.values().iterator();
while(var5.hasNext()) {
TileEntity var9 = (TileEntity)var5.next();
var7 = new NBTTagCompound();
var9.writeToNBT(var7);
var8.setTag(var7);
}
var2.setTag("TileEntities", var8);
}
public static Chunk loadChunkIntoWorldFromCompound(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.createEntityFromNBT(var7, var0);
var4.hasEntities = 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.addTileEntity(var9);
}
}
}
return var4;
}
public void func_661_a() {
}
public void saveExtraData() {
}
public void saveExtraChunkData(World var1, Chunk var2) throws IOException {
}
}

View File

@@ -0,0 +1,26 @@
package net.minecraft.src;
public class ChunkPosition {
public final int x;
public final int y;
public final int z;
public ChunkPosition(int var1, int var2, int var3) {
this.x = var1;
this.y = var2;
this.z = var3;
}
public boolean equals(Object var1) {
if(!(var1 instanceof ChunkPosition)) {
return false;
} else {
ChunkPosition var2 = (ChunkPosition)var1;
return var2.x == this.x && var2.y == this.y && var2.z == this.z;
}
}
public int hashCode() {
return this.x * 8976890 + this.y * 981131 + this.z;
}
}

View File

@@ -0,0 +1,184 @@
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 ChunkProvider implements IChunkProvider {
private Set field_28062_a = new HashSet();
private Chunk field_28061_b;
private IChunkProvider chunkGenerator;
private IChunkLoader field_28066_d;
private Map field_28065_e = new HashMap();
private List field_28064_f = new ArrayList();
private World worldObj;
public ChunkProvider(World var1, IChunkLoader var2, IChunkProvider var3) {
this.field_28061_b = new EmptyChunk(var1, new byte[-Short.MIN_VALUE], 0, 0);
this.worldObj = var1;
this.field_28066_d = var2;
this.chunkGenerator = var3;
}
public boolean chunkExists(int var1, int var2) {
return this.field_28065_e.containsKey(Integer.valueOf(ChunkCoordIntPair.chunkXZ2Int(var1, var2)));
}
public Chunk loadChunk(int var1, int var2) {
int var3 = ChunkCoordIntPair.chunkXZ2Int(var1, var2);
this.field_28062_a.remove(Integer.valueOf(var3));
Chunk var4 = (Chunk)this.field_28065_e.get(Integer.valueOf(var3));
if(var4 == null) {
var4 = this.func_28058_d(var1, var2);
if(var4 == null) {
if(this.chunkGenerator == null) {
var4 = this.field_28061_b;
} else {
var4 = this.chunkGenerator.provideChunk(var1, var2);
}
}
this.field_28065_e.put(Integer.valueOf(var3), var4);
this.field_28064_f.add(var4);
if(var4 != null) {
var4.func_4053_c();
var4.onChunkLoad();
}
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.provideChunk(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.provideChunk(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.provideChunk(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 provideChunk(int var1, int var2) {
Chunk var3 = (Chunk)this.field_28065_e.get(Integer.valueOf(ChunkCoordIntPair.chunkXZ2Int(var1, var2)));
return var3 == null ? this.loadChunk(var1, var2) : var3;
}
private Chunk func_28058_d(int var1, int var2) {
if(this.field_28066_d == null) {
return null;
} else {
try {
Chunk var3 = this.field_28066_d.loadChunk(this.worldObj, var1, var2);
if(var3 != null) {
var3.lastSaveTime = this.worldObj.getWorldTime();
}
return var3;
} catch (Exception var4) {
var4.printStackTrace();
return null;
}
}
}
private void func_28060_a(Chunk var1) {
if(this.field_28066_d != null) {
try {
this.field_28066_d.saveExtraChunkData(this.worldObj, var1);
} catch (Exception var3) {
var3.printStackTrace();
}
}
}
private void func_28059_b(Chunk var1) {
if(this.field_28066_d != null) {
try {
var1.lastSaveTime = this.worldObj.getWorldTime();
this.field_28066_d.saveChunk(this.worldObj, var1);
} catch (IOException var3) {
var3.printStackTrace();
}
}
}
public void populate(IChunkProvider var1, int var2, int var3) {
Chunk var4 = this.provideChunk(var2, var3);
if(!var4.isTerrainPopulated) {
var4.isTerrainPopulated = true;
if(this.chunkGenerator != null) {
this.chunkGenerator.populate(var1, var2, var3);
var4.setChunkModified();
}
}
}
public boolean saveChunks(boolean var1, IProgressUpdate var2) {
int var3 = 0;
for(int var4 = 0; var4 < this.field_28064_f.size(); ++var4) {
Chunk var5 = (Chunk)this.field_28064_f.get(var4);
if(var1 && !var5.neverSave) {
this.func_28060_a(var5);
}
if(var5.needsSaving(var1)) {
this.func_28059_b(var5);
var5.isModified = false;
++var3;
if(var3 == 24 && !var1) {
return false;
}
}
}
if(var1) {
if(this.field_28066_d == null) {
return true;
}
this.field_28066_d.saveExtraData();
}
return true;
}
public boolean func_361_a() {
for(int var1 = 0; var1 < 100; ++var1) {
if(!this.field_28062_a.isEmpty()) {
Integer var2 = (Integer)this.field_28062_a.iterator().next();
Chunk var3 = (Chunk)this.field_28065_e.get(var2);
var3.onChunkUnload();
this.func_28059_b(var3);
this.func_28060_a(var3);
this.field_28062_a.remove(var2);
this.field_28065_e.remove(var2);
this.field_28064_f.remove(var3);
}
}
if(this.field_28066_d != null) {
this.field_28066_d.func_661_a();
}
return this.chunkGenerator.func_361_a();
}
public boolean func_364_b() {
return true;
}
}

View File

@@ -0,0 +1,616 @@
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 mobSpawnerNoise;
private World worldObj;
private double[] field_4224_q;
private double[] sandNoise = new double[256];
private double[] gravelNoise = new double[256];
private double[] stoneNoise = new double[256];
private MapGenBase field_695_u = new MapGenCaves();
private BiomeGenBase[] 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[] generatedTemperatures;
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.mobSpawnerNoise = new NoiseGeneratorOctaves(this.rand, 8);
}
public void generateTerrain(int var1, int var2, byte[] var3, BiomeGenBase[] 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.waterStill.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, BiomeGenBase[] var4) {
byte var5 = 64;
double var6 = 1.0D / 32.0D;
this.sandNoise = this.field_702_n.generateNoiseOctaves(this.sandNoise, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var6, var6, 1.0D);
this.gravelNoise = this.field_702_n.generateNoiseOctaves(this.gravelNoise, (double)(var1 * 16), 109.0134D, (double)(var2 * 16), 16, 1, 16, var6, 1.0D, var6);
this.stoneNoise = this.field_701_o.generateNoiseOctaves(this.stoneNoise, (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) {
BiomeGenBase var10 = var4[var8 + var9 * 16];
boolean var11 = this.sandNoise[var8 + var9 * 16] + this.rand.nextDouble() * 0.2D > 0.0D;
boolean var12 = this.gravelNoise[var8 + var9 * 16] + this.rand.nextDouble() * 0.2D > 3.0D;
int var13 = (int)(this.stoneNoise[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 = (var9 * 16 + var8) * 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.waterStill.blockID;
}
var14 = var13;
if(var17 >= var5 - 1) {
var3[var18] = var15;
} else {
var3[var18] = var16;
}
} else if(var14 > 0) {
--var14;
var3[var18] = var16;
if(var14 == 0 && var16 == Block.sand.blockID) {
var14 = this.rand.nextInt(4);
var16 = (byte)Block.sandStone.blockID;
}
}
}
}
}
}
}
}
public Chunk loadChunk(int var1, int var2) {
return this.provideChunk(var1, var2);
}
public Chunk provideChunk(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.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, var1 * 16, var2 * 16, 16, 16);
double[] var5 = this.worldObj.getWorldChunkManager().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.getWorldChunkManager().temperature;
double[] var13 = this.worldObj.getWorldChunkManager().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.generateNoiseOctaves(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.generateNoiseOctaves(this.field_4228_e, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8);
this.field_4227_f = this.field_704_l.generateNoiseOctaves(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;
BiomeGenBase var6 = this.worldObj.getWorldChunkManager().getBiomeGenAt(var4 + 16, var5 + 16);
this.rand.setSeed(this.worldObj.getRandomSeed());
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.getRandomSeed());
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.waterStill.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.lavaStill.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);
}
for(var13 = 0; var13 < 1; ++var13) {
var14 = var4 + this.rand.nextInt(16);
var15 = this.rand.nextInt(16) + this.rand.nextInt(16);
var16 = var5 + this.rand.nextInt(16);
(new WorldGenMinable(Block.oreLapis.blockID, 6)).generate(this.worldObj, this.rand, var14, var15, var16);
}
var11 = 0.5D;
var13 = (int)((this.mobSpawnerNoise.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 == BiomeGenBase.forest) {
var14 += var13 + 5;
}
if(var6 == BiomeGenBase.rainforest) {
var14 += var13 + 5;
}
if(var6 == BiomeGenBase.seasonalForest) {
var14 += var13 + 2;
}
if(var6 == BiomeGenBase.taiga) {
var14 += var13 + 5;
}
if(var6 == BiomeGenBase.desert) {
var14 -= 20;
}
if(var6 == BiomeGenBase.tundra) {
var14 -= 20;
}
if(var6 == BiomeGenBase.plains) {
var14 -= 20;
}
int var17;
for(var15 = 0; var15 < var14; ++var15) {
var16 = var4 + this.rand.nextInt(16) + 8;
var17 = var5 + this.rand.nextInt(16) + 8;
WorldGenerator var18 = var6.getRandomWorldGenForTrees(this.rand);
var18.func_420_a(1.0D, 1.0D, 1.0D);
var18.generate(this.worldObj, this.rand, var16, this.worldObj.getHeightValue(var16, var17), var17);
}
byte var27 = 0;
if(var6 == BiomeGenBase.forest) {
var27 = 2;
}
if(var6 == BiomeGenBase.seasonalForest) {
var27 = 4;
}
if(var6 == BiomeGenBase.taiga) {
var27 = 2;
}
if(var6 == BiomeGenBase.plains) {
var27 = 3;
}
int var19;
int var25;
for(var16 = 0; var16 < var27; ++var16) {
var17 = var4 + this.rand.nextInt(16) + 8;
var25 = this.rand.nextInt(128);
var19 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenFlowers(Block.plantYellow.blockID)).generate(this.worldObj, this.rand, var17, var25, var19);
}
byte var28 = 0;
if(var6 == BiomeGenBase.forest) {
var28 = 2;
}
if(var6 == BiomeGenBase.rainforest) {
var28 = 10;
}
if(var6 == BiomeGenBase.seasonalForest) {
var28 = 2;
}
if(var6 == BiomeGenBase.taiga) {
var28 = 1;
}
if(var6 == BiomeGenBase.plains) {
var28 = 10;
}
int var20;
int var21;
for(var17 = 0; var17 < var28; ++var17) {
byte var26 = 1;
if(var6 == BiomeGenBase.rainforest && this.rand.nextInt(3) != 0) {
var26 = 2;
}
var19 = var4 + this.rand.nextInt(16) + 8;
var20 = this.rand.nextInt(128);
var21 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenTallGrass(Block.tallGrass.blockID, var26)).generate(this.worldObj, this.rand, var19, var20, var21);
}
var28 = 0;
if(var6 == BiomeGenBase.desert) {
var28 = 2;
}
for(var17 = 0; var17 < var28; ++var17) {
var25 = var4 + this.rand.nextInt(16) + 8;
var19 = this.rand.nextInt(128);
var20 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenDeadBush(Block.deadBush.blockID)).generate(this.worldObj, this.rand, var25, var19, var20);
}
if(this.rand.nextInt(2) == 0) {
var17 = var4 + this.rand.nextInt(16) + 8;
var25 = this.rand.nextInt(128);
var19 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenFlowers(Block.plantRed.blockID)).generate(this.worldObj, this.rand, var17, var25, var19);
}
if(this.rand.nextInt(4) == 0) {
var17 = var4 + this.rand.nextInt(16) + 8;
var25 = this.rand.nextInt(128);
var19 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.worldObj, this.rand, var17, var25, var19);
}
if(this.rand.nextInt(8) == 0) {
var17 = var4 + this.rand.nextInt(16) + 8;
var25 = this.rand.nextInt(128);
var19 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.worldObj, this.rand, var17, var25, var19);
}
for(var17 = 0; var17 < 10; ++var17) {
var25 = var4 + this.rand.nextInt(16) + 8;
var19 = this.rand.nextInt(128);
var20 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenReed()).generate(this.worldObj, this.rand, var25, var19, var20);
}
if(this.rand.nextInt(32) == 0) {
var17 = var4 + this.rand.nextInt(16) + 8;
var25 = this.rand.nextInt(128);
var19 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenPumpkin()).generate(this.worldObj, this.rand, var17, var25, var19);
}
var17 = 0;
if(var6 == BiomeGenBase.desert) {
var17 += 10;
}
for(var25 = 0; var25 < var17; ++var25) {
var19 = var4 + this.rand.nextInt(16) + 8;
var20 = this.rand.nextInt(128);
var21 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenCactus()).generate(this.worldObj, this.rand, var19, var20, var21);
}
for(var25 = 0; var25 < 50; ++var25) {
var19 = var4 + this.rand.nextInt(16) + 8;
var20 = this.rand.nextInt(this.rand.nextInt(120) + 8);
var21 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenLiquids(Block.waterMoving.blockID)).generate(this.worldObj, this.rand, var19, var20, var21);
}
for(var25 = 0; var25 < 20; ++var25) {
var19 = var4 + this.rand.nextInt(16) + 8;
var20 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(112) + 8) + 8);
var21 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenLiquids(Block.lavaMoving.blockID)).generate(this.worldObj, this.rand, var19, var20, var21);
}
this.generatedTemperatures = this.worldObj.getWorldChunkManager().getTemperatures(this.generatedTemperatures, var4 + 8, var5 + 8, 16, 16);
for(var25 = var4 + 8; var25 < var4 + 8 + 16; ++var25) {
for(var19 = var5 + 8; var19 < var5 + 8 + 16; ++var19) {
var20 = var25 - (var4 + 8);
var21 = var19 - (var5 + 8);
int var22 = this.worldObj.getTopSolidOrLiquidBlock(var25, var19);
double var23 = this.generatedTemperatures[var20 * 16 + var21] - (double)(var22 - 64) / 64.0D * 0.3D;
if(var23 < 0.5D && var22 > 0 && var22 < 128 && this.worldObj.isAirBlock(var25, var22, var19) && this.worldObj.getBlockMaterial(var25, var22 - 1, var19).getIsSolid() && this.worldObj.getBlockMaterial(var25, var22 - 1, var19) != Material.ice) {
this.worldObj.setBlockWithNotify(var25, var22, var19, Block.snow.blockID);
}
}
}
BlockSand.fallInstantly = false;
}
public boolean saveChunks(boolean var1, IProgressUpdate var2) {
return true;
}
public boolean func_361_a() {
return false;
}
public boolean func_364_b() {
return true;
}
}

View File

@@ -0,0 +1,372 @@
package net.minecraft.src;
import java.util.Random;
public class ChunkProviderHell implements IChunkProvider {
private Random hellRNG;
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.hellRNG = new Random(var2);
this.field_4240_i = new NoiseGeneratorOctaves(this.hellRNG, 16);
this.field_4239_j = new NoiseGeneratorOctaves(this.hellRNG, 16);
this.field_4238_k = new NoiseGeneratorOctaves(this.hellRNG, 8);
this.field_4237_l = new NoiseGeneratorOctaves(this.hellRNG, 4);
this.field_4236_m = new NoiseGeneratorOctaves(this.hellRNG, 4);
this.field_4248_a = new NoiseGeneratorOctaves(this.hellRNG, 10);
this.field_4247_b = new NoiseGeneratorOctaves(this.hellRNG, 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.lavaStill.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.generateNoiseOctaves(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.generateNoiseOctaves(this.field_4232_q, (double)(var1 * 16), 109.0134D, (double)(var2 * 16), 16, 1, 16, var5, 1.0D, var5);
this.field_4231_r = this.field_4236_m.generateNoiseOctaves(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.hellRNG.nextDouble() * 0.2D > 0.0D;
boolean var10 = this.field_4232_q[var7 + var8 * 16] + this.hellRNG.nextDouble() * 0.2D > 0.0D;
int var11 = (int)(this.field_4231_r[var7 + var8 * 16] / 3.0D + 3.0D + this.hellRNG.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 = (var8 * 16 + var7) * 128 + var15;
if(var15 >= 127 - this.hellRNG.nextInt(5)) {
var3[var16] = (byte)Block.bedrock.blockID;
} else if(var15 <= 0 + this.hellRNG.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.lavaStill.blockID;
}
var12 = var11;
if(var15 >= var4 - 1) {
var3[var16] = var13;
} else {
var3[var16] = var14;
}
} else if(var12 > 0) {
--var12;
var3[var16] = var14;
}
}
}
}
}
}
}
public Chunk loadChunk(int var1, int var2) {
return this.provideChunk(var1, var2);
}
public Chunk provideChunk(int var1, int var2) {
this.hellRNG.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);
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.generateNoiseOctaves(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.generateNoiseOctaves(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.generateNoiseOctaves(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.generateNoiseOctaves(this.field_4245_d, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8);
this.field_4244_e = this.field_4239_j.generateNoiseOctaves(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.hellRNG.nextInt(16) + 8;
var8 = this.hellRNG.nextInt(120) + 4;
var9 = var5 + this.hellRNG.nextInt(16) + 8;
(new WorldGenHellLava(Block.lavaMoving.blockID)).generate(this.field_4235_n, this.hellRNG, var7, var8, var9);
}
var6 = this.hellRNG.nextInt(this.hellRNG.nextInt(10) + 1) + 1;
int var10;
for(var7 = 0; var7 < var6; ++var7) {
var8 = var4 + this.hellRNG.nextInt(16) + 8;
var9 = this.hellRNG.nextInt(120) + 4;
var10 = var5 + this.hellRNG.nextInt(16) + 8;
(new WorldGenFire()).generate(this.field_4235_n, this.hellRNG, var8, var9, var10);
}
var6 = this.hellRNG.nextInt(this.hellRNG.nextInt(10) + 1);
for(var7 = 0; var7 < var6; ++var7) {
var8 = var4 + this.hellRNG.nextInt(16) + 8;
var9 = this.hellRNG.nextInt(120) + 4;
var10 = var5 + this.hellRNG.nextInt(16) + 8;
(new WorldGenGlowStone1()).generate(this.field_4235_n, this.hellRNG, var8, var9, var10);
}
for(var7 = 0; var7 < 10; ++var7) {
var8 = var4 + this.hellRNG.nextInt(16) + 8;
var9 = this.hellRNG.nextInt(128);
var10 = var5 + this.hellRNG.nextInt(16) + 8;
(new WorldGenGlowStone2()).generate(this.field_4235_n, this.hellRNG, var8, var9, var10);
}
if(this.hellRNG.nextInt(1) == 0) {
var7 = var4 + this.hellRNG.nextInt(16) + 8;
var8 = this.hellRNG.nextInt(128);
var9 = var5 + this.hellRNG.nextInt(16) + 8;
(new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.field_4235_n, this.hellRNG, var7, var8, var9);
}
if(this.hellRNG.nextInt(1) == 0) {
var7 = var4 + this.hellRNG.nextInt(16) + 8;
var8 = this.hellRNG.nextInt(128);
var9 = var5 + this.hellRNG.nextInt(16) + 8;
(new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.field_4235_n, this.hellRNG, var7, var8, var9);
}
BlockSand.fallInstantly = false;
}
public boolean saveChunks(boolean var1, IProgressUpdate var2) {
return true;
}
public boolean func_361_a() {
return false;
}
public boolean func_364_b() {
return true;
}
}

Some files were not shown because too many files have changed in this diff Show More