Update for Minecraft 1.8

This commit is contained in:
Dinnerbone 2011-09-15 01:23:52 +01:00
parent 54bcd1c1f3
commit 5b2c774edc
107 changed files with 4415 additions and 3504 deletions

View file

@ -39,7 +39,7 @@
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>minecraft-server</artifactId>
<version>1.7.3</version>
<version>1.8</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

View file

@ -39,7 +39,7 @@ public class Block {
public static final Block IRON_ORE = (new BlockOre(15, 33)).c(3.0F).b(5.0F).a(h).a("oreIron");
public static final Block COAL_ORE = (new BlockOre(16, 34)).c(3.0F).b(5.0F).a(h).a("oreCoal");
public static final Block LOG = (new BlockLog(17)).c(2.0F).a(e).a("log").g();
public static final BlockLeaves LEAVES = (BlockLeaves) (new BlockLeaves(18, 52)).c(0.2F).f(1).a(g).a("leaves").n().g();
public static final BlockLeaves LEAVES = (BlockLeaves) (new BlockLeaves(18, 52)).c(0.2F).f(1).a(g).a("leaves").g();
public static final Block SPONGE = (new BlockSponge(19)).c(0.6F).a(g).a("sponge");
public static final Block GLASS = (new BlockGlass(20, 49, Material.SHATTERABLE, false)).c(0.3F).a(j).a("glass");
public static final Block LAPIS_ORE = (new BlockOre(21, 160)).c(3.0F).b(5.0F).a(h).a("oreLapis");
@ -72,7 +72,7 @@ public class Block {
public static final Block MOSSY_COBBLESTONE = (new Block(48, 36, Material.STONE)).c(2.0F).b(10.0F).a(h).a("stoneMoss");
public static final Block OBSIDIAN = (new BlockObsidian(49, 37)).c(10.0F).b(2000.0F).a(h).a("obsidian");
public static final Block TORCH = (new BlockTorch(50, 80)).c(0.0F).a(0.9375F).a(e).a("torch").g();
public static final BlockFire FIRE = (BlockFire) (new BlockFire(51, 31)).c(0.0F).a(1.0F).a(e).a("fire").n().g();
public static final BlockFire FIRE = (BlockFire) (new BlockFire(51, 31)).c(0.0F).a(1.0F).a(e).a("fire").n();
public static final Block MOB_SPAWNER = (new BlockMobSpawner(52, 65)).c(5.0F).a(i).a("mobSpawner").n();
public static final Block WOOD_STAIRS = (new BlockStairs(53, WOOD)).a("stairsWood").g();
public static final Block CHEST = (new BlockChest(54)).c(2.5F).a(e).a("chest").g();
@ -81,7 +81,7 @@ public class Block {
public static final Block DIAMOND_BLOCK = (new BlockOreBlock(57, 24)).c(5.0F).b(10.0F).a(i).a("blockDiamond");
public static final Block WORKBENCH = (new BlockWorkbench(58)).c(2.5F).a(e).a("workbench");
public static final Block CROPS = (new BlockCrops(59, 88)).c(0.0F).a(g).a("crops").n().g();
public static final Block SOIL = (new BlockSoil(60)).c(0.6F).a(f).a("farmland");
public static final Block SOIL = (new BlockSoil(60)).c(0.6F).a(f).a("farmland").g();
public static final Block FURNACE = (new BlockFurnace(61, false)).c(3.5F).a(h).a("furnace").g();
public static final Block BURNING_FURNACE = (new BlockFurnace(62, true)).c(3.5F).a(h).a(0.875F).a("furnace").g();
public static final Block SIGN_POST = (new BlockSign(63, TileEntitySign.class, true)).c(1.0F).a(e).a("sign").n().g();
@ -106,7 +106,7 @@ public class Block {
public static final Block CLAY = (new BlockClay(82, 72)).c(0.6F).a(f).a("clay");
public static final Block SUGAR_CANE_BLOCK = (new BlockReed(83, 73)).c(0.0F).a(g).a("reeds").n();
public static final Block JUKEBOX = (new BlockJukeBox(84, 74)).c(2.0F).b(10.0F).a(h).a("jukebox").g();
public static final Block FENCE = (new BlockFence(85, 4)).c(2.0F).b(5.0F).a(e).a("fence").g();
public static final Block FENCE = (new BlockFence(85, 4)).c(2.0F).b(5.0F).a(e).a("fence");
public static final Block PUMPKIN = (new BlockPumpkin(86, 102, false)).c(1.0F).a(e).a("pumpkin").g();
public static final Block NETHERRACK = (new BlockBloodStone(87, 103)).c(0.4F).a(h).a("hellrock");
public static final Block SOUL_SAND = (new BlockSlowSand(88, 104)).c(0.5F).a(l).a("hellsand");
@ -118,12 +118,25 @@ public class Block {
public static final Block DIODE_ON = (new BlockDiode(94, true)).c(0.0F).a(0.625F).a(e).a("diode").n().g();
public static final Block LOCKED_CHEST = (new BlockLockedChest(95)).c(0.0F).a(1.0F).a(e).a("lockedchest").a(true).g();
public static final Block TRAP_DOOR = (new BlockTrapdoor(96, Material.WOOD)).c(3.0F).a(e).a("trapdoor").n().g();
public static final Block MONSTER_EGGS = (new BlockMonsterEggs(97)).c(0.75F);
public static final Block SMOOTH_BRICK = (new BlockSmoothBrick(98)).c(1.5F).b(10.0F).a(h).a("stonebricksmooth");
public static final Block BIG_MUSHROOM_1 = (new BlockHugeMushroom(99, Material.WOOD, 142, 0)).c(0.2F).a(e).a("mushroom").g();
public static final Block BIG_MUSHROOM_2 = (new BlockHugeMushroom(100, Material.WOOD, 142, 1)).c(0.2F).a(e).a("mushroom").g();
public static final Block IRON_FENCE = (new BlockThin(101, 85, 85, Material.ORE)).c(5.0F).b(10.0F).a(i).a("fenceIron");
public static final Block THIN_GLASS = (new BlockThin(102, 49, 148, Material.SHATTERABLE)).c(0.3F).a(j).a("thinGlass");
public static final Block MELON = (new BlockMelon(103)).c(1.0F).a(e).a("melon");
public static final Block PUMPKIN_STEM = (new BlockStem(104, PUMPKIN)).c(0.0F).a(e).a("pumpkinStem").g();
public static final Block MELON_STEM = (new BlockStem(105, MELON)).c(0.0F).a(e).a("pumpkinStem").g();
public static final Block VINE = (new BlockVine(106)).c(0.2F).a(g).a("vine").g();
public static final Block FENCE_GATE = (new BlockFenceGate(107, 4)).c(2.0F).b(5.0F).a(e).a("fenceGate").g();
public static final Block BRICK_STAIRS = (new BlockStairs(108, BRICK)).a("stairsBrick").g();
public static final Block STONE_STAIRS = (new BlockStairs(109, SMOOTH_BRICK)).a("stairsStoneBrickSmooth").g();
public int textureId;
public final int id;
protected float strength;
protected float durability;
protected boolean bq;
protected boolean br;
protected boolean bD;
protected boolean bE;
public double minX;
public double minY;
public double minZ;
@ -131,16 +144,16 @@ public class Block {
public double maxY;
public double maxZ;
public StepSound stepSound;
public float bz;
public float bM;
public final Material material;
public float frictionFactor;
private String name;
protected Block(int i, Material material) {
this.bq = true;
this.br = true;
this.bD = true;
this.bE = true;
this.stepSound = d;
this.bz = 1.0F;
this.bM = 1.0F;
this.frictionFactor = 0.6F;
if (byId[i] != null) {
throw new IllegalArgumentException("Slot " + i + " is already occupied by " + byId[i] + " when adding " + this);
@ -253,10 +266,10 @@ public class Block {
}
public boolean a(int i, boolean flag) {
return this.k_();
return this.q_();
}
public boolean k_() {
public boolean q_() {
return true;
}
@ -270,7 +283,7 @@ public class Block {
return 10;
}
public void c(World world, int i, int j, int k) {}
public void a(World world, int i, int j, int k) {}
public void remove(World world, int i, int j, int k) {}
@ -329,7 +342,7 @@ public class Block {
}
public MovingObjectPosition a(World world, int i, int j, int k, Vec3D vec3d, Vec3D vec3d1) {
this.a(world, i, j, k);
this.a((IBlockAccess) world, i, j, k);
vec3d = vec3d.add((double) (-i), (double) (-j), (double) (-k));
vec3d1 = vec3d1.add((double) (-i), (double) (-j), (double) (-k));
Vec3D vec3d2 = vec3d.a(vec3d1, this.minX);
@ -365,27 +378,27 @@ public class Block {
Vec3D vec3d8 = null;
if (vec3d2 != null && (vec3d8 == null || vec3d.a(vec3d2) < vec3d.a(vec3d8))) {
if (vec3d2 != null && (vec3d8 == null || vec3d.b(vec3d2) < vec3d.b(vec3d8))) {
vec3d8 = vec3d2;
}
if (vec3d3 != null && (vec3d8 == null || vec3d.a(vec3d3) < vec3d.a(vec3d8))) {
if (vec3d3 != null && (vec3d8 == null || vec3d.b(vec3d3) < vec3d.b(vec3d8))) {
vec3d8 = vec3d3;
}
if (vec3d4 != null && (vec3d8 == null || vec3d.a(vec3d4) < vec3d.a(vec3d8))) {
if (vec3d4 != null && (vec3d8 == null || vec3d.b(vec3d4) < vec3d.b(vec3d8))) {
vec3d8 = vec3d4;
}
if (vec3d5 != null && (vec3d8 == null || vec3d.a(vec3d5) < vec3d.a(vec3d8))) {
if (vec3d5 != null && (vec3d8 == null || vec3d.b(vec3d5) < vec3d.b(vec3d8))) {
vec3d8 = vec3d5;
}
if (vec3d6 != null && (vec3d8 == null || vec3d.a(vec3d6) < vec3d.a(vec3d8))) {
if (vec3d6 != null && (vec3d8 == null || vec3d.b(vec3d6) < vec3d.b(vec3d8))) {
vec3d8 = vec3d6;
}
if (vec3d7 != null && (vec3d8 == null || vec3d.a(vec3d7) < vec3d.a(vec3d8))) {
if (vec3d7 != null && (vec3d8 == null || vec3d.b(vec3d7) < vec3d.b(vec3d8))) {
vec3d8 = vec3d7;
}
@ -434,7 +447,7 @@ public class Block {
return vec3d == null ? false : vec3d.a >= this.minX && vec3d.a <= this.maxX && vec3d.b >= this.minY && vec3d.b <= this.maxY;
}
public void d(World world, int i, int j, int k) {}
public void a_(World world, int i, int j, int k) {}
public boolean canPlace(World world, int i, int j, int k, int l) {
return this.canPlace(world, i, j, k);
@ -476,6 +489,7 @@ public class Block {
public void a(World world, EntityHuman entityhuman, int i, int j, int k, int l) {
entityhuman.a(StatisticList.C[this.id], 1);
entityhuman.b(0.025F);
this.g(world, i, j, k, l);
}
@ -501,24 +515,27 @@ public class Block {
public void a(World world, int i, int j, int k, int l, int i1) {}
public boolean m() {
return this.br;
return this.bE;
}
protected Block n() {
this.br = false;
this.bE = false;
return this;
}
public int e() {
return this.material.j();
return this.material.l();
}
static {
Item.byId[WOOL.id] = (new ItemCloth(WOOL.id - 256)).a("cloth");
Item.byId[LOG.id] = (new ItemLog(LOG.id - 256)).a("log");
Item.byId[LOG.id] = (new ItemLog(LOG.id - 256, LOG)).a("log");
Item.byId[SMOOTH_BRICK.id] = (new ItemLog(SMOOTH_BRICK.id - 256, SMOOTH_BRICK)).a("stonebricksmooth");
Item.byId[STEP.id] = (new ItemStep(STEP.id - 256)).a("stoneSlab");
Item.byId[SAPLING.id] = (new ItemSapling(SAPLING.id - 256)).a("sapling");
Item.byId[LEAVES.id] = (new ItemLeaves(LEAVES.id - 256)).a("leaves");
Item.byId[VINE.id] = new ItemColoredBlock(VINE.id - 256, false);
Item.byId[LONG_GRASS.id] = new ItemColoredBlock(LONG_GRASS.id - 256, true);
Item.byId[PISTON.id] = new ItemPiston(PISTON.id - 256);
Item.byId[PISTON_STICKY.id] = new ItemPiston(PISTON_STICKY.id - 256);

View file

@ -90,12 +90,12 @@ public class BlockCactus extends Block {
world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
entity.damageEntity((Entity) null, event.getDamage());
entity.damageEntity(DamageSource.g, event.getDamage());
}
return;
}
// CraftBukkit end
entity.damageEntity((Entity) null, 1);
entity.damageEntity(DamageSource.g, 1);
}
}

View file

@ -25,8 +25,8 @@ public class BlockDispenser extends BlockContainer {
return Block.DISPENSER.id;
}
public void c(World world, int i, int j, int k) {
super.c(world, i, j, k);
public void a(World world, int i, int j, int k) {
super.a(world, i, j, k);
this.g(world, i, j, k);
}
@ -68,12 +68,15 @@ public class BlockDispenser extends BlockContainer {
} else {
TileEntityDispenser tileentitydispenser = (TileEntityDispenser) world.getTileEntity(i, j, k);
entityhuman.a(tileentitydispenser);
if (tileentitydispenser != null) {
entityhuman.a(tileentitydispenser);
}
return true;
}
}
// CraftBukkit - private -> public
// CraftBukkit - priv to public
public void dispense(World world, int i, int j, int k, Random random) {
int l = world.getData(i, j, k);
byte b0 = 0;
@ -90,85 +93,88 @@ public class BlockDispenser extends BlockContainer {
}
TileEntityDispenser tileentitydispenser = (TileEntityDispenser) world.getTileEntity(i, j, k);
// CraftBukkit start
int dispenseSlot = tileentitydispenser.findDispenseSlot();
ItemStack itemstack = null;
if (dispenseSlot > -1) {
itemstack = tileentitydispenser.getContents()[dispenseSlot];
// Copy item stack, because we want it to have 1 item
itemstack = new ItemStack(itemstack.id, 1, itemstack.damage);
}
// CraftBukkit end
double d0 = (double) i + (double) b0 * 0.6D + 0.5D;
double d1 = (double) j + 0.5D;
double d2 = (double) k + (double) b1 * 0.6D + 0.5D;
if (itemstack == null) {
world.e(1001, i, j, k, 0);
} else {
if (tileentitydispenser != null) {
// CraftBukkit start
double d3 = random.nextDouble() * 0.1D + 0.2D;
double motX = (double) b0 * d3;
double motY = 0.20000000298023224D;
double motZ = (double) b1 * d3;
motX += random.nextGaussian() * 0.007499999832361937D * 6.0D;
motY += random.nextGaussian() * 0.007499999832361937D * 6.0D;
motZ += random.nextGaussian() * 0.007499999832361937D * 6.0D;
int dispenseSlot = tileentitydispenser.findDispenseSlot();
ItemStack itemstack = null;
if (dispenseSlot > -1) {
itemstack = tileentitydispenser.getContents()[dispenseSlot];
org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k);
org.bukkit.inventory.ItemStack bukkitItem = new CraftItemStack(itemstack).clone();
BlockDispenseEvent event = new BlockDispenseEvent(block, bukkitItem, new Vector(motX, motY, motZ));
world.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
// Copy item stack, because we want it to have 1 item
itemstack = new ItemStack(itemstack.id, 1, itemstack.damage);
}
// Actually remove the item
tileentitydispenser.splitStack(dispenseSlot, 1);
motX = event.getVelocity().getX();
motY = event.getVelocity().getY();
motZ = event.getVelocity().getZ();
itemstack = new ItemStack(event.getItem().getTypeId(), event.getItem().getAmount(), event.getItem().getDurability());
// CraftBukkit end
if (itemstack.id == Item.ARROW.id) {
EntityArrow entityarrow = new EntityArrow(world, d0, d1, d2);
double d0 = (double) i + (double) b0 * 0.6D + 0.5D;
double d1 = (double) j + 0.5D;
double d2 = (double) k + (double) b1 * 0.6D + 0.5D;
entityarrow.a((double) b0, 0.10000000149011612D, (double) b1, 1.1F, 6.0F);
entityarrow.fromPlayer = true;
world.addEntity(entityarrow);
world.e(1002, i, j, k, 0);
} else if (itemstack.id == Item.EGG.id) {
EntityEgg entityegg = new EntityEgg(world, d0, d1, d2);
entityegg.a((double) b0, 0.10000000149011612D, (double) b1, 1.1F, 6.0F);
world.addEntity(entityegg);
world.e(1002, i, j, k, 0);
} else if (itemstack.id == Item.SNOW_BALL.id) {
EntitySnowball entitysnowball = new EntitySnowball(world, d0, d1, d2);
entitysnowball.a((double) b0, 0.10000000149011612D, (double) b1, 1.1F, 6.0F);
world.addEntity(entitysnowball);
world.e(1002, i, j, k, 0);
if (itemstack == null) {
world.e(1001, i, j, k, 0);
} else {
EntityItem entityitem = new EntityItem(world, d0, d1 - 0.3D, d2, itemstack);
// CraftBukkit start
// double d3 = random.nextDouble() * 0.1D + 0.2D; // Moved up
entityitem.motX = motX;
entityitem.motY = motY;
entityitem.motZ = motZ;
// CraftBukkit end
world.addEntity(entityitem);
world.e(1000, i, j, k, 0);
}
double d3 = random.nextDouble() * 0.1D + 0.2D;
double motX = (double) b0 * d3;
double motY = 0.20000000298023224D;
double motZ = (double) b1 * d3;
motX += random.nextGaussian() * 0.007499999832361937D * 6.0D;
motY += random.nextGaussian() * 0.007499999832361937D * 6.0D;
motZ += random.nextGaussian() * 0.007499999832361937D * 6.0D;
world.e(2000, i, j, k, b0 + 1 + (b1 + 1) * 3);
org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k);
org.bukkit.inventory.ItemStack bukkitItem = new CraftItemStack(itemstack).clone();
BlockDispenseEvent event = new BlockDispenseEvent(block, bukkitItem, new Vector(motX, motY, motZ));
world.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
// Actually remove the item
tileentitydispenser.splitStack(dispenseSlot, 1);
motX = event.getVelocity().getX();
motY = event.getVelocity().getY();
motZ = event.getVelocity().getZ();
itemstack = new ItemStack(event.getItem().getTypeId(), event.getItem().getAmount(), event.getItem().getDurability());
// CraftBukkit end
if (itemstack.id == Item.ARROW.id) {
EntityArrow entityarrow = new EntityArrow(world, d0, d1, d2);
entityarrow.a((double) b0, 0.10000000149011612D, (double) b1, 1.1F, 6.0F);
entityarrow.fromPlayer = true;
world.addEntity(entityarrow);
world.e(1002, i, j, k, 0);
} else if (itemstack.id == Item.EGG.id) {
EntityEgg entityegg = new EntityEgg(world, d0, d1, d2);
entityegg.a((double) b0, 0.10000000149011612D, (double) b1, 1.1F, 6.0F);
world.addEntity(entityegg);
world.e(1002, i, j, k, 0);
} else if (itemstack.id == Item.SNOW_BALL.id) {
EntitySnowball entitysnowball = new EntitySnowball(world, d0, d1, d2);
entitysnowball.a((double) b0, 0.10000000149011612D, (double) b1, 1.1F, 6.0F);
world.addEntity(entitysnowball);
world.e(1002, i, j, k, 0);
} else {
EntityItem entityitem = new EntityItem(world, d0, d1 - 0.3D, d2, itemstack);
// CraftBukkit start
// double d3 = random.nextDouble() * 0.1D + 0.2D; // Moved up
entityitem.motX = motX;
entityitem.motY = motY;
entityitem.motZ = motZ;
// CraftBukkit end
world.addEntity(entityitem);
world.e(1000, i, j, k, 0);
}
world.e(2000, i, j, k, b0 + 1 + (b1 + 1) * 3);
}
}
}
@ -188,7 +194,7 @@ public class BlockDispenser extends BlockContainer {
}
}
protected TileEntity a_() {
public TileEntity a_() {
return new TileEntityDispenser();
}
@ -215,29 +221,31 @@ public class BlockDispenser extends BlockContainer {
public void remove(World world, int i, int j, int k) {
TileEntityDispenser tileentitydispenser = (TileEntityDispenser) world.getTileEntity(i, j, k);
for (int l = 0; l < tileentitydispenser.getSize(); ++l) {
ItemStack itemstack = tileentitydispenser.getItem(l);
if (tileentitydispenser != null) {
for (int l = 0; l < tileentitydispenser.getSize(); ++l) {
ItemStack itemstack = tileentitydispenser.getItem(l);
if (itemstack != null) {
float f = this.a.nextFloat() * 0.8F + 0.1F;
float f1 = this.a.nextFloat() * 0.8F + 0.1F;
float f2 = this.a.nextFloat() * 0.8F + 0.1F;
if (itemstack != null) {
float f = this.a.nextFloat() * 0.8F + 0.1F;
float f1 = this.a.nextFloat() * 0.8F + 0.1F;
float f2 = this.a.nextFloat() * 0.8F + 0.1F;
while (itemstack.count > 0) {
int i1 = this.a.nextInt(21) + 10;
while (itemstack.count > 0) {
int i1 = this.a.nextInt(21) + 10;
if (i1 > itemstack.count) {
i1 = itemstack.count;
if (i1 > itemstack.count) {
i1 = itemstack.count;
}
itemstack.count -= i1;
EntityItem entityitem = new EntityItem(world, (double) ((float) i + f), (double) ((float) j + f1), (double) ((float) k + f2), new ItemStack(itemstack.id, i1, itemstack.getData()));
float f3 = 0.05F;
entityitem.motX = (double) ((float) this.a.nextGaussian() * f3);
entityitem.motY = (double) ((float) this.a.nextGaussian() * f3 + 0.2F);
entityitem.motZ = (double) ((float) this.a.nextGaussian() * f3);
world.addEntity(entityitem);
}
itemstack.count -= i1;
EntityItem entityitem = new EntityItem(world, (double) ((float) i + f), (double) ((float) j + f1), (double) ((float) k + f2), new ItemStack(itemstack.id, i1, itemstack.getData()));
float f3 = 0.05F;
entityitem.motX = (double) ((float) this.a.nextGaussian() * f3);
entityitem.motY = (double) ((float) this.a.nextGaussian() * f3 + 0.2F);
entityitem.motZ = (double) ((float) this.a.nextGaussian() * f3);
world.addEntity(entityitem);
}
}
}

View file

@ -198,7 +198,8 @@ public class BlockDoor extends Block {
}
public boolean canPlace(World world, int i, int j, int k) {
return j >= 127 ? false : world.e(i, j - 1, k) && super.canPlace(world, i, j, k) && super.canPlace(world, i, j + 1, k);
world.getClass();
return j >= 128 - 1 ? false : world.e(i, j - 1, k) && super.canPlace(world, i, j, k) && super.canPlace(world, i, j + 1, k);
}
public static boolean e(int i) {

View file

@ -30,6 +30,7 @@ public class BlockFire extends Block {
this.a(Block.TNT.id, 15, 100);
this.a(Block.LONG_GRASS.id, 60, 100);
this.a(Block.WOOL.id, 30, 60);
this.a(Block.VINE.id, 15, 100);
}
private void a(int i, int j, int k) {
@ -64,7 +65,7 @@ public class BlockFire extends Block {
world.setTypeId(i, j, k, 0);
}
if (!flag && world.v() && (world.s(i, j, k) || world.s(i - 1, j, k) || world.s(i + 1, j, k) || world.s(i, j, k - 1) || world.s(i, j, k + 1))) {
if (!flag && world.u() && (world.s(i, j, k) || world.s(i - 1, j, k) || world.s(i + 1, j, k) || world.s(i, j, k - 1) || world.s(i, j, k + 1))) {
world.setTypeId(i, j, k, 0);
} else {
int l = world.getData(i, j, k);
@ -111,7 +112,7 @@ public class BlockFire extends Block {
if (i2 > 0) {
int j2 = (i2 + 40) / (l + 30);
if (j2 > 0 && random.nextInt(l1) <= j2 && (!world.v() || !world.s(i1, k1, j1)) && !world.s(i1 - 1, k1, k) && !world.s(i1 + 1, k1, j1) && !world.s(i1, k1, j1 - 1) && !world.s(i1, k1, j1 + 1)) {
if (j2 > 0 && random.nextInt(l1) <= j2 && (!world.u() || !world.s(i1, k1, j1)) && !world.s(i1 - 1, k1, k) && !world.s(i1 + 1, k1, j1) && !world.s(i1, k1, j1 - 1) && !world.s(i1, k1, j1 + 1)) {
int k2 = l + random.nextInt(5) / 4;
if (k2 > 15) {
@ -205,7 +206,7 @@ public class BlockFire extends Block {
}
}
public boolean k_() {
public boolean q_() {
return false;
}
@ -229,8 +230,8 @@ public class BlockFire extends Block {
}
}
public void c(World world, int i, int j, int k) {
if (world.getTypeId(i, j - 1, k) != Block.OBSIDIAN.id || !Block.PORTAL.a_(world, i, j, k)) {
public void a(World world, int i, int j, int k) {
if (world.getTypeId(i, j - 1, k) != Block.OBSIDIAN.id || !Block.PORTAL.b_(world, i, j, k)) {
if (!world.e(i, j - 1, k) && !this.g(world, i, j, k)) {
world.setTypeId(i, j, k, 0);
} else {

View file

@ -292,8 +292,8 @@ public class BlockFlowing extends BlockFluids {
return material == this.material ? false : (material == Material.LAVA ? false : !this.k(world, i, j, k));
}
public void c(World world, int i, int j, int k) {
super.c(world, i, j, k);
public void a(World world, int i, int j, int k) {
super.a(world, i, j, k);
if (world.getTypeId(i, j, k) == this.id) {
world.c(i, j, k, this.id, this.c());
}

View file

@ -1,146 +0,0 @@
package net.minecraft.server;
import java.util.Random;
public class BlockFurnace extends BlockContainer {
private Random a = new Random();
private final boolean b;
private static boolean c = false;
protected BlockFurnace(int i, boolean flag) {
super(i, Material.STONE);
this.b = flag;
this.textureId = 45;
}
public int a(int i, Random random) {
return Block.FURNACE.id;
}
public void c(World world, int i, int j, int k) {
super.c(world, i, j, k);
this.g(world, i, j, k);
}
private void g(World world, int i, int j, int k) {
if (!world.isStatic) {
int l = world.getTypeId(i, j, k - 1);
int i1 = world.getTypeId(i, j, k + 1);
int j1 = world.getTypeId(i - 1, j, k);
int k1 = world.getTypeId(i + 1, j, k);
byte b0 = 3;
if (Block.o[l] && !Block.o[i1]) {
b0 = 3;
}
if (Block.o[i1] && !Block.o[l]) {
b0 = 2;
}
if (Block.o[j1] && !Block.o[k1]) {
b0 = 5;
}
if (Block.o[k1] && !Block.o[j1]) {
b0 = 4;
}
world.setData(i, j, k, b0);
}
}
public int a(int i) {
return i == 1 ? this.textureId + 17 : (i == 0 ? this.textureId + 17 : (i == 3 ? this.textureId - 1 : this.textureId));
}
public boolean interact(World world, int i, int j, int k, EntityHuman entityhuman) {
if (world.isStatic) {
return true;
} else {
TileEntityFurnace tileentityfurnace = (TileEntityFurnace) world.getTileEntity(i, j, k);
entityhuman.a(tileentityfurnace);
return true;
}
}
public static void a(boolean flag, World world, int i, int j, int k) {
int l = world.getData(i, j, k);
TileEntity tileentity = world.getTileEntity(i, j, k);
if (tileentity == null) return; // CraftBukkit
c = true;
if (flag) {
world.setTypeId(i, j, k, Block.BURNING_FURNACE.id);
} else {
world.setTypeId(i, j, k, Block.FURNACE.id);
}
c = false;
world.setData(i, j, k, l);
tileentity.j();
world.setTileEntity(i, j, k, tileentity);
}
protected TileEntity a_() {
return new TileEntityFurnace();
}
public void postPlace(World world, int i, int j, int k, EntityLiving entityliving) {
int l = MathHelper.floor((double) (entityliving.yaw * 4.0F / 360.0F) + 0.5D) & 3;
if (l == 0) {
world.setData(i, j, k, 2);
}
if (l == 1) {
world.setData(i, j, k, 5);
}
if (l == 2) {
world.setData(i, j, k, 3);
}
if (l == 3) {
world.setData(i, j, k, 4);
}
}
public void remove(World world, int i, int j, int k) {
if (!c) {
TileEntityFurnace tileentityfurnace = (TileEntityFurnace) world.getTileEntity(i, j, k);
if (tileentityfurnace == null) return; // CraftBukkit
for (int l = 0; l < tileentityfurnace.getSize(); ++l) {
ItemStack itemstack = tileentityfurnace.getItem(l);
if (itemstack != null) {
float f = this.a.nextFloat() * 0.8F + 0.1F;
float f1 = this.a.nextFloat() * 0.8F + 0.1F;
float f2 = this.a.nextFloat() * 0.8F + 0.1F;
while (itemstack.count > 0) {
int i1 = this.a.nextInt(21) + 10;
if (i1 > itemstack.count) {
i1 = itemstack.count;
}
itemstack.count -= i1;
EntityItem entityitem = new EntityItem(world, (double) ((float) i + f), (double) ((float) j + f1), (double) ((float) k + f2), new ItemStack(itemstack.id, i1, itemstack.getData()));
float f3 = 0.05F;
entityitem.motX = (double) ((float) this.a.nextGaussian() * f3);
entityitem.motY = (double) ((float) this.a.nextGaussian() * f3 + 0.2F);
entityitem.motZ = (double) ((float) this.a.nextGaussian() * f3);
world.addEntity(entityitem);
}
}
}
}
super.remove(world, i, j, k);
}
}

View file

@ -1,70 +0,0 @@
package net.minecraft.server;
public class BlockJukeBox extends BlockContainer {
protected BlockJukeBox(int i, int j) {
super(i, j, Material.WOOD);
}
public int a(int i) {
return this.textureId + (i == 1 ? 1 : 0);
}
public boolean interact(World world, int i, int j, int k, EntityHuman entityhuman) {
if (world.getData(i, j, k) == 0) {
return false;
} else {
this.b_(world, i, j, k);
return true;
}
}
public void f(World world, int i, int j, int k, int l) {
if (!world.isStatic) {
TileEntityRecordPlayer tileentityrecordplayer = (TileEntityRecordPlayer) world.getTileEntity(i, j, k);
tileentityrecordplayer.a = l;
tileentityrecordplayer.update();
world.setData(i, j, k, 1);
}
}
public void b_(World world, int i, int j, int k) {
if (!world.isStatic) {
TileEntityRecordPlayer tileentityrecordplayer = (TileEntityRecordPlayer) world.getTileEntity(i, j, k);
if (tileentityrecordplayer == null) return; // CraftBukkit
int l = tileentityrecordplayer.a;
if (l != 0) {
world.e(1005, i, j, k, 0);
world.a((String) null, i, j, k);
tileentityrecordplayer.a = 0;
tileentityrecordplayer.update();
world.setData(i, j, k, 0);
float f = 0.7F;
double d0 = (double) (world.random.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
double d1 = (double) (world.random.nextFloat() * f) + (double) (1.0F - f) * 0.2D + 0.6D;
double d2 = (double) (world.random.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
EntityItem entityitem = new EntityItem(world, (double) i + d0, (double) j + d1, (double) k + d2, new ItemStack(l, 1, 0));
entityitem.pickupDelay = 10;
world.addEntity(entityitem);
}
}
}
public void remove(World world, int i, int j, int k) {
this.b_(world, i, j, k);
super.remove(world, i, j, k);
}
public void dropNaturally(World world, int i, int j, int k, int l, float f) {
if (!world.isStatic) {
super.dropNaturally(world, i, j, k, l, f);
}
}
protected TileEntity a_() {
return new TileEntityRecordPlayer();
}
}

View file

@ -40,7 +40,7 @@ public class BlockLeaves extends BlockLeavesBase {
if (!world.isStatic) {
int l = world.getData(i, j, k);
if ((l & 8) != 0) {
if ((l & 8) != 0 && (l & 4) == 0) {
byte b0 = 4;
int i1 = b0 + 1;
byte b1 = 32;
@ -139,7 +139,7 @@ public class BlockLeaves extends BlockLeavesBase {
}
public void a(World world, EntityHuman entityhuman, int i, int j, int k, int l) {
if (!world.isStatic && entityhuman.G() != null && entityhuman.G().id == Item.SHEARS.id) {
if (!world.isStatic && entityhuman.K() != null && entityhuman.K().id == Item.SHEARS.id) {
entityhuman.a(StatisticList.C[this.id], 1);
this.a(world, i, j, k, new ItemStack(Block.LEAVES.id, 1, l & 3));
} else {

View file

@ -1,8 +1,7 @@
package net.minecraft.server;
import java.util.Random;
import org.bukkit.event.block.BlockSpreadEvent; // CraftBukkit
import org.bukkit.event.block.BlockSpreadEvent;
public class BlockMushroom extends BlockFlower {
@ -16,29 +15,54 @@ public class BlockMushroom extends BlockFlower {
public void a(World world, int i, int j, int k, Random random) {
if (random.nextInt(100) == 0) {
int l = i + random.nextInt(3) - 1;
int i1 = j + random.nextInt(2) - random.nextInt(2);
int j1 = k + random.nextInt(3) - 1;
byte b0 = 4;
int l = 5;
if (world.isEmpty(l, i1, j1) && this.f(world, l, i1, j1)) {
int k1 = i + (random.nextInt(3) - 1);
int i1;
int j1;
int k1;
k1 = k + (random.nextInt(3) - 1);
if (world.isEmpty(l, i1, j1) && this.f(world, l, i1, j1)) {
// CraftBukkit start
org.bukkit.World bworld = world.getWorld();
org.bukkit.block.BlockState blockState = bworld.getBlockAt(l, i1, j1).getState();
blockState.setTypeId(this.id);
BlockSpreadEvent event = new BlockSpreadEvent(blockState.getBlock(), bworld.getBlockAt(i, j, k), blockState);
world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
blockState.update(true);
for (i1 = i - b0; i1 <= i + b0; ++i1) {
for (j1 = k - b0; j1 <= k + b0; ++j1) {
for (k1 = j - 1; k1 <= j + 1; ++k1) {
if (world.getTypeId(i1, k1, j1) == this.id) {
--l;
if (l <= 0) {
return;
}
}
}
// CraftBukkit end
}
}
i1 = i + random.nextInt(3) - 1;
j1 = j + random.nextInt(2) - random.nextInt(2);
k1 = k + random.nextInt(3) - 1;
for (int l1 = 0; l1 < 4; ++l1) {
if (world.isEmpty(i1, j1, k1) && this.f(world, i1, j1, k1)) {
i = i1;
j = j1;
k = k1;
}
i1 = i + random.nextInt(3) - 1;
j1 = j + random.nextInt(2) - random.nextInt(2);
k1 = k + random.nextInt(3) - 1;
}
// CraftBukkit start
org.bukkit.World bworld = world.getWorld();
org.bukkit.block.BlockState blockState = bworld.getBlockAt(i1, j1, k1).getState();
blockState.setTypeId(this.id);
BlockSpreadEvent event = new BlockSpreadEvent(blockState.getBlock(), bworld.getBlockAt(i, j, k), blockState);
world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
blockState.update(true);
}
// CraftBukkit end
}
}
@ -47,6 +71,39 @@ public class BlockMushroom extends BlockFlower {
}
public boolean f(World world, int i, int j, int k) {
return j >= 0 && j < 128 ? world.k(i, j, k) < 13 && this.c(world.getTypeId(i, j - 1, k)) : false;
if (j >= 0) {
world.getClass();
if (j < 128) {
return world.k(i, j, k) < 13 && this.c(world.getTypeId(i, j - 1, k));
}
}
return false;
}
public boolean b(World world, int i, int j, int k, Random random) {
int l = world.getTypeId(i, j - 1, k);
if (l != Block.DIRT.id && l != Block.GRASS.id) {
return false;
} else {
int i1 = world.getData(i, j, k);
world.setRawTypeId(i, j, k, 0);
WorldGenHugeMushroom worldgenhugemushroom = null;
if (this.id == Block.BROWN_MUSHROOM.id) {
worldgenhugemushroom = new WorldGenHugeMushroom(0);
} else if (this.id == Block.RED_MUSHROOM.id) {
worldgenhugemushroom = new WorldGenHugeMushroom(1);
}
if (worldgenhugemushroom != null && worldgenhugemushroom.a(world, random, i, j, k)) {
return true;
} else {
world.setRawTypeIdAndData(i, j, k, this.id, i1);
return false;
}
}
}
}

View file

@ -48,7 +48,7 @@ public class BlockPiston extends Block {
}
}
public void c(World world, int i, int j, int k) {
public void a(World world, int i, int j, int k) {
if (!world.isStatic && world.getTileEntity(i, j, k) == null) {
this.g(world, i, j, k);
}
@ -110,7 +110,7 @@ public class BlockPiston extends Block {
TileEntity tileentity = world.getTileEntity(i + PistonBlockTextures.b[i1], j + PistonBlockTextures.c[i1], k + PistonBlockTextures.d[i1]);
if (tileentity != null && tileentity instanceof TileEntityPiston) {
((TileEntityPiston) tileentity).k();
((TileEntityPiston) tileentity).e();
}
world.setRawTypeIdAndData(i, j, k, Block.PISTON_MOVING.id, i1);
@ -130,9 +130,9 @@ public class BlockPiston extends Block {
TileEntityPiston tileentitypiston = (TileEntityPiston) tileentity1;
if (tileentitypiston.d() == i1 && tileentitypiston.c()) {
tileentitypiston.k();
tileentitypiston.e();
i2 = tileentitypiston.a();
j2 = tileentitypiston.e();
j2 = tileentitypiston.j();
flag = true;
}
}
@ -296,6 +296,48 @@ public class BlockPiston extends Block {
}
}
private static int H(World world, int i, int j, int k, int l) {
int i1 = i + PistonBlockTextures.b[l];
int j1 = j + PistonBlockTextures.c[l];
int k1 = k + PistonBlockTextures.d[l];
int l1 = 0;
while (true) {
if (l1 < 13) {
if (j1 > 0) {
world.getClass();
if (j1 < 128 - 1) {
int i2 = world.getTypeId(i1, j1, k1);
if (i2 != 0) {
if (!a(i2, world, i1, j1, k1, true)) {
return -1; // CraftBukkit
}
if (Block.byId[i2].e() != 1) {
if (l1 == 12) {
return -1; // CraftBukkit
}
i1 += PistonBlockTextures.b[l];
j1 += PistonBlockTextures.c[l];
k1 += PistonBlockTextures.d[l];
++l1;
continue;
}
}
return l1; // CraftBukkit
}
}
return -1; // CraftBukkit
}
return l1; // CraftBukkit
}
}
private boolean i(World world, int i, int j, int k, int l) {
int i1 = i + PistonBlockTextures.b[l];
int j1 = j + PistonBlockTextures.c[l];

View file

@ -40,7 +40,7 @@ public class BlockPortal extends BlockBreakable {
return false;
}
public boolean a_(World world, int i, int j, int k) {
public boolean b_(World world, int i, int j, int k) {
byte b0 = 0;
byte b1 = 0;
@ -166,7 +166,7 @@ public class BlockPortal extends BlockBreakable {
world.getServer().getPluginManager().callEvent(event);
// CraftBukkit end
entity.P();
entity.T();
}
}
}

View file

@ -39,15 +39,15 @@ public class BlockPressurePlate extends Block {
}
public boolean canPlace(World world, int i, int j, int k) {
return world.e(i, j - 1, k);
return world.e(i, j - 1, k) || world.getTypeId(i, j - 1, k) == Block.FENCE.id;
}
public void c(World world, int i, int j, int k) {}
public void a(World world, int i, int j, int k) {}
public void doPhysics(World world, int i, int j, int k, int l) {
boolean flag = false;
if (!world.e(i, j - 1, k)) {
if (!world.e(i, j - 1, k) && world.getTypeId(i, j - 1, k) != Block.FENCE.id) {
flag = true;
}

View file

@ -33,8 +33,8 @@ public class BlockPumpkin extends Block {
return i == 1 ? this.textureId : (i == 0 ? this.textureId : (i == 3 ? this.textureId + 1 + 16 : this.textureId + 16));
}
public void c(World world, int i, int j, int k) {
super.c(world, i, j, k);
public void a(World world, int i, int j, int k) {
super.a(world, i, j, k);
}
public boolean canPlace(World world, int i, int j, int k) {

View file

@ -46,9 +46,9 @@ public class BlockRedstoneTorch extends BlockTorch {
return 2;
}
public void c(World world, int i, int j, int k) {
public void a(World world, int i, int j, int k) {
if (world.getData(i, j, k) == 0) {
super.c(world, i, j, k);
super.a(world, i, j, k);
}
if (this.isOn) {

View file

@ -191,8 +191,8 @@ public class BlockRedstoneWire extends Block {
}
}
public void c(World world, int i, int j, int k) {
super.c(world, i, j, k);
public void a(World world, int i, int j, int k) {
super.a(world, i, j, k);
if (!world.isStatic) {
this.g(world, i, j, k);
world.applyPhysics(i, j + 1, k, this.id);
@ -351,7 +351,7 @@ public class BlockRedstoneWire extends Block {
} else {
int j1 = iblockaccess.getData(i, j, k);
return l == BedBlockTextures.b[j1 & 3];
return l == Direction.e[j1 & 3];
}
}
}

View file

@ -60,7 +60,7 @@ public class BlockSign extends BlockContainer {
return false;
}
protected TileEntity a_() {
public TileEntity a_() {
try {
return (TileEntity) this.a.newInstance();
} catch (Exception exception) {

View file

@ -74,7 +74,9 @@ public class BlockSoil extends Block {
for (int l = i - b0; l <= i + b0; ++l) {
for (int i1 = k - b0; i1 <= k + b0; ++i1) {
if (world.getTypeId(l, j + 1, i1) == Block.CROPS.id) {
int j1 = world.getTypeId(l, j + 1, i1);
if (j1 == Block.CROPS.id || j1 == Block.MELON_STEM.id || j1 == Block.PUMPKIN_STEM.id) {
return true;
}
}

View file

@ -1,6 +1,7 @@
package net.minecraft.server;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@ -11,30 +12,37 @@ public class Chunk {
public static boolean a;
public byte[] b;
public boolean c;
public int[] c;
public boolean[] d;
public boolean e;
public World world;
public NibbleArray e;
public NibbleArray f;
public NibbleArray g;
public NibbleArray h;
public NibbleArray i;
public byte[] heightMap;
public int i;
public int k;
public final int x;
public final int z;
public Map tileEntities;
public List[] entitySlices;
public boolean done;
public boolean o;
public boolean p;
public boolean q;
public long r;
public boolean r;
public boolean s;
public long t;
boolean u;
public Chunk(World world, int i, int j) {
this.c = new int[256];
this.d = new boolean[256];
this.tileEntities = new HashMap();
this.entitySlices = new List[8];
this.done = false;
this.o = false;
this.q = false;
this.r = 0L;
this.s = false;
this.t = 0L;
this.u = false;
world.getClass();
this.entitySlices = new List[128 / 16];
this.world = world;
this.x = i;
this.z = j;
@ -44,6 +52,8 @@ public class Chunk {
this.entitySlices[k] = new ArrayList();
}
Arrays.fill(this.c, -999);
// CraftBukkit start
org.bukkit.craftbukkit.CraftWorld cworld = this.world.getWorld();
this.bukkitChunk = (cworld == null) ? null : cworld.popPreservedChunk(i, j);
@ -58,9 +68,14 @@ public class Chunk {
public Chunk(World world, byte[] abyte, int i, int j) {
this(world, i, j);
this.b = abyte;
this.e = new NibbleArray(abyte.length);
this.f = new NibbleArray(abyte.length);
this.g = new NibbleArray(abyte.length);
int k = abyte.length;
// Craftbukkit start - FIX THE DECOMPILER!
this.g = new NibbleArray(k, 7);
this.h = new NibbleArray(k, 7);
this.i = new NibbleArray(k, 7);
// Craftbukkit end
}
public boolean a(int i, int j) {
@ -74,18 +89,25 @@ public class Chunk {
public void a() {}
public void initLighting() {
int i = 127;
this.world.getClass();
int i = 128 - 1;
int j;
int k;
for (j = 0; j < 16; ++j) {
for (k = 0; k < 16; ++k) {
int l = 127;
this.world.getClass();
int l = 128 - 1;
int i1;
this.world.getClass();
int i1 = j << 11;
for (i1 = j << 11 | k << 7; l > 0 && Block.q[this.b[i1 + l - 1] & 255] == 0; --l) {
this.world.getClass();
int j1;
for (j1 = i1 | k << 7; l > 0 && Block.q[this.b[j1 + l - 1] & 255] == 0; --l) {
;
}
@ -95,54 +117,105 @@ public class Chunk {
}
if (!this.world.worldProvider.e) {
int j1 = 15;
int k1 = 127;
int k1 = 15;
this.world.getClass();
int l1 = 128 - 1;
do {
j1 -= Block.q[this.b[i1 + k1] & 255];
if (j1 > 0) {
this.f.a(j, k1, k, j1);
k1 -= Block.q[this.b[j1 + l1] & 255];
if (k1 > 0) {
this.h.a(j, l1, k, k1);
}
--k1;
} while (k1 > 0 && j1 > 0);
--l1;
} while (l1 > 0 && k1 > 0);
}
}
}
this.i = i;
this.k = i;
for (j = 0; j < 16; ++j) {
for (k = 0; k < 16; ++k) {
this.c(j, k);
this.d(j, k);
}
}
this.o = true;
this.q = true;
}
public void loadNOP() {}
private void c(int i, int j) {
int k = this.b(i, j);
int l = this.x * 16 + i;
int i1 = this.z * 16 + j;
private void d(int i, int j) {
this.d[i + j * 16] = true;
}
this.f(l - 1, i1, k);
this.f(l + 1, i1, k);
this.f(l, i1 - 1, k);
this.f(l, i1 + 1, k);
private void i() {
World j0000 = this.world;
int j0001 = this.x * 16 + 8;
this.world.getClass();
if (j0000.areChunksLoaded(j0001, 128 / 2, this.z * 16 + 8, 16)) {
for (int j = 0; j < 16; ++j) {
for (int k = 0; k < 16; ++k) {
if (this.d[j + k * 16]) {
this.d[j + k * 16] = false;
int l = this.b(j, k);
int i1 = this.x * 16 + j;
int j1 = this.z * 16 + k;
int k1 = this.world.getHighestBlockYAt(i1 - 1, j1);
int l1 = this.world.getHighestBlockYAt(i1 + 1, j1);
int i2 = this.world.getHighestBlockYAt(i1, j1 - 1);
int j2 = this.world.getHighestBlockYAt(i1, j1 + 1);
if (l1 < k1) {
k1 = l1;
}
if (i2 < k1) {
k1 = i2;
}
if (j2 < k1) {
k1 = j2;
}
this.u = true;
this.f(i1, j1, k1);
this.u = true;
this.f(i1 - 1, j1, l);
this.f(i1 + 1, j1, l);
this.f(i1, j1 - 1, l);
this.f(i1, j1 + 1, l);
}
}
}
}
}
private void f(int i, int j, int k) {
int l = this.world.getHighestBlockYAt(i, j);
if (l > k) {
this.world.a(EnumSkyBlock.SKY, i, k, j, i, l, j);
this.o = true;
this.d(i, j, k, l + 1);
} else if (l < k) {
this.world.a(EnumSkyBlock.SKY, i, l, j, i, k, j);
this.o = true;
this.d(i, j, l, k + 1);
}
}
private void d(int i, int j, int k, int l) {
if (l > k) {
World world = this.world;
this.world.getClass();
if (world.areChunksLoaded(i, 128 / 2, j, 16)) {
for (int i1 = k; i1 < l; ++i1) {
this.world.b(EnumSkyBlock.SKY, i, i1, j);
}
this.q = true;
}
}
}
@ -154,52 +227,52 @@ public class Chunk {
i1 = j;
}
for (int j1 = i << 11 | k << 7; i1 > 0 && Block.q[this.b[j1 + i1 - 1] & 255] == 0; --i1) {
this.world.getClass();
int j1 = i << 11;
this.world.getClass();
for (int k1 = j1 | k << 7; i1 > 0 && Block.q[this.b[k1 + i1 - 1] & 255] == 0; --i1) {
;
}
if (i1 != l) {
this.world.g(i, k, i1, l);
this.heightMap[k << 4 | i] = (byte) i1;
int k1;
int l1;
int i2;
int j2;
if (i1 < this.i) {
this.i = i1;
if (i1 < this.k) {
this.k = i1;
} else {
k1 = 127;
this.world.getClass();
l1 = 128 - 1;
for (l1 = 0; l1 < 16; ++l1) {
for (i2 = 0; i2 < 16; ++i2) {
if ((this.heightMap[i2 << 4 | l1] & 255) < k1) {
k1 = this.heightMap[i2 << 4 | l1] & 255;
for (i2 = 0; i2 < 16; ++i2) {
for (j2 = 0; j2 < 16; ++j2) {
if ((this.heightMap[j2 << 4 | i2] & 255) < l1) {
l1 = this.heightMap[j2 << 4 | i2] & 255;
}
}
}
this.i = k1;
this.k = l1;
}
k1 = this.x * 16 + i;
l1 = this.z * 16 + k;
l1 = this.x * 16 + i;
i2 = this.z * 16 + k;
if (i1 < l) {
for (i2 = i1; i2 < l; ++i2) {
this.f.a(i, i2, k, 15);
for (j2 = i1; j2 < l; ++j2) {
this.h.a(i, j2, k, 15);
}
} else {
this.world.a(EnumSkyBlock.SKY, k1, l, l1, k1, i1, l1);
for (i2 = l; i2 < i1; ++i2) {
this.f.a(i, i2, k, 0);
for (j2 = l; j2 < i1; ++j2) {
this.h.a(i, j2, k, 0);
}
}
i2 = 15;
int j2;
for (j2 = i1; i1 > 0 && i2 > 0; this.f.a(i, i1, k, i2)) {
for (j2 = 15; i1 > 0 && j2 > 0; this.h.a(i, i1, k, j2)) {
--i1;
int k2 = Block.q[this.getTypeId(i, i1, k)];
@ -207,141 +280,237 @@ public class Chunk {
k2 = 1;
}
i2 -= k2;
if (i2 < 0) {
i2 = 0;
j2 -= k2;
if (j2 < 0) {
j2 = 0;
}
}
while (i1 > 0 && Block.q[this.getTypeId(i, i1 - 1, k)] == 0) {
--i1;
byte b0 = this.heightMap[k << 4 | i];
int l2 = l;
int i3 = b0;
if (b0 < l) {
l2 = b0;
i3 = l;
}
if (i1 != j2) {
this.world.a(EnumSkyBlock.SKY, k1 - 1, i1, l1 - 1, k1 + 1, j2, l1 + 1);
}
this.o = true;
this.d(l1 - 1, i2, l2, i3);
this.d(l1 + 1, i2, l2, i3);
this.d(l1, i2 - 1, l2, i3);
this.d(l1, i2 + 1, l2, i3);
this.d(l1, i2, l2, i3);
this.q = true;
}
}
public int getTypeId(int i, int j, int k) {
return this.b[i << 11 | k << 7 | j] & 255;
byte[] abyte = this.b;
this.world.getClass();
int l = i << 11;
this.world.getClass();
return abyte[l | k << 7 | j] & 255;
}
public boolean a(int i, int j, int k, int l, int i1) {
byte b0 = (byte) l;
int j1 = this.heightMap[k << 4 | i] & 255;
int k1 = this.b[i << 11 | k << 7 | j] & 255;
int j1 = k << 4 | i;
if (k1 == l && this.e.a(i, j, k) == i1) {
if (j >= this.c[j1] - 1) {
this.c[j1] = -999;
}
int k1 = this.heightMap[k << 4 | i] & 255;
byte[] j2000 = this.b;
this.world.getClass();
int j2001 = i << 11;
this.world.getClass();
int i2 = j2000[j2001 | k << 7 | j] & 255;
if (i2 == l && this.g.a(i, j, k) == i1) {
return false;
} else {
int l1 = this.x * 16 + i;
int i2 = this.z * 16 + k;
int j2 = this.x * 16 + i;
int k2 = this.z * 16 + k;
this.b[i << 11 | k << 7 | j] = (byte) (b0 & 255);
if (k1 != 0 && !this.world.isStatic) {
Block.byId[k1].remove(this.world, l1, j, i2);
j2000 = this.b;
this.world.getClass();
j2001 = i << 11;
this.world.getClass();
j2000[j2001 | k << 7 | j] = (byte) (b0 & 255);
if (i2 != 0 && !this.world.isStatic) {
Block.byId[i2].remove(this.world, j2, j, k2);
}
this.e.a(i, j, k, i1);
this.g.a(i, j, k, i1);
if (!this.world.worldProvider.e) {
if (Block.q[b0 & 255] != 0) {
if (j >= j1) {
if (j >= k1) {
this.g(i, j + 1, k);
}
} else if (j == j1 - 1) {
} else if (j == k1 - 1) {
this.g(i, j, k);
}
this.world.a(EnumSkyBlock.SKY, l1, j, i2, l1, j, i2);
this.world.a(EnumSkyBlock.SKY, j2, j, k2, j2, j, k2);
}
this.world.a(EnumSkyBlock.BLOCK, l1, j, i2, l1, j, i2);
this.c(i, k);
this.e.a(i, j, k, i1);
this.world.a(EnumSkyBlock.BLOCK, j2, j, k2, j2, j, k2);
this.d(i, k);
this.g.a(i, j, k, i1);
TileEntity tileentity;
if (l != 0) {
Block.byId[l].c(this.world, l1, j, i2);
if (!this.world.isStatic) {
Block.byId[l].a(this.world, j2, j, k2);
}
if (Block.byId[l] instanceof BlockContainer) {
tileentity = this.d(i, j, k);
if (tileentity == null) {
tileentity = ((BlockContainer) Block.byId[l]).a_();
this.world.setTileEntity(i, j, k, tileentity);
}
if (tileentity != null) {
tileentity.g();
}
}
} else if (i2 > 0 && Block.byId[i2] instanceof BlockContainer) {
tileentity = this.d(i, j, k);
if (tileentity != null) {
tileentity.g();
}
}
this.o = true;
this.q = true;
return true;
}
}
public boolean a(int i, int j, int k, int l) {
byte b0 = (byte) l;
int i1 = this.heightMap[k << 4 | i] & 255;
int j1 = this.b[i << 11 | k << 7 | j] & 255;
int i1 = k << 4 | i;
if (j1 == l) {
if (j >= this.c[i1] - 1) {
this.c[i1] = -999;
}
int j1 = this.heightMap[i1] & 255;
byte[] j2000 = this.b;
this.world.getClass();
int j2001 = i << 11;
this.world.getClass();
int l1 = j2000[j2001 | k << 7 | j] & 255;
if (l1 == l) {
return false;
} else {
int k1 = this.x * 16 + i;
int l1 = this.z * 16 + k;
int i2 = this.x * 16 + i;
int j2 = this.z * 16 + k;
this.b[i << 11 | k << 7 | j] = (byte) (b0 & 255);
if (j1 != 0) {
Block.byId[j1].remove(this.world, k1, j, l1);
j2000 = this.b;
this.world.getClass();
j2001 = i << 11;
this.world.getClass();
j2000[j2001 | k << 7 | j] = (byte) (b0 & 255);
if (l1 != 0) {
Block.byId[l1].remove(this.world, i2, j, j2);
}
this.e.a(i, j, k, 0);
this.g.a(i, j, k, 0);
if (Block.q[b0 & 255] != 0) {
if (j >= i1) {
if (j >= j1) {
this.g(i, j + 1, k);
}
} else if (j == i1 - 1) {
} else if (j == j1 - 1) {
this.g(i, j, k);
}
this.world.a(EnumSkyBlock.SKY, k1, j, l1, k1, j, l1);
this.world.a(EnumSkyBlock.BLOCK, k1, j, l1, k1, j, l1);
this.c(i, k);
if (l != 0 && !this.world.isStatic) {
Block.byId[l].c(this.world, k1, j, l1);
this.world.a(EnumSkyBlock.SKY, i2, j, j2, i2, j, j2);
this.world.a(EnumSkyBlock.BLOCK, i2, j, j2, i2, j, j2);
this.d(i, k);
TileEntity tileentity;
if (l != 0) {
if (!this.world.isStatic) {
Block.byId[l].a(this.world, i2, j, j2);
}
if (l > 0 && Block.byId[l] instanceof BlockContainer) {
tileentity = this.d(i, j, k);
if (tileentity == null) {
tileentity = ((BlockContainer) Block.byId[l]).a_();
this.world.setTileEntity(i, j, k, tileentity);
}
if (tileentity != null) {
tileentity.g();
}
}
} else if (l1 > 0 && Block.byId[l1] instanceof BlockContainer) {
tileentity = this.d(i, j, k);
if (tileentity != null) {
tileentity.g();
}
}
this.o = true;
this.q = true;
return true;
}
}
public int getData(int i, int j, int k) {
return this.e.a(i, j, k);
return this.g.a(i, j, k);
}
public void b(int i, int j, int k, int l) {
this.o = true;
this.e.a(i, j, k, l);
this.q = true;
this.g.a(i, j, k, l);
int i1 = this.getTypeId(i, j, k);
if (i1 > 0 && Block.byId[i1] instanceof BlockContainer) {
TileEntity tileentity = this.d(i, j, k);
if (tileentity != null) {
tileentity.g();
tileentity.n = l;
}
}
}
public int a(EnumSkyBlock enumskyblock, int i, int j, int k) {
return enumskyblock == EnumSkyBlock.SKY ? this.f.a(i, j, k) : (enumskyblock == EnumSkyBlock.BLOCK ? this.g.a(i, j, k) : 0);
return enumskyblock == EnumSkyBlock.SKY ? this.h.a(i, j, k) : (enumskyblock == EnumSkyBlock.BLOCK ? this.i.a(i, j, k) : 0);
}
public void a(EnumSkyBlock enumskyblock, int i, int j, int k, int l) {
this.o = true;
this.q = true;
if (enumskyblock == EnumSkyBlock.SKY) {
this.f.a(i, j, k, l);
this.h.a(i, j, k, l);
} else {
if (enumskyblock != EnumSkyBlock.BLOCK) {
return;
}
this.g.a(i, j, k, l);
this.i.a(i, j, k, l);
}
}
public int c(int i, int j, int k, int l) {
int i1 = this.f.a(i, j, k);
int i1 = this.h.a(i, j, k);
if (i1 > 0) {
a = true;
}
i1 -= l;
int j1 = this.g.a(i, j, k);
int j1 = this.i.a(i, j, k);
if (j1 > i1) {
i1 = j1;
@ -351,7 +520,7 @@ public class Chunk {
}
public void a(Entity entity) {
this.q = true;
this.s = true;
int i = MathHelper.floor(entity.locX / 16.0D);
int j = MathHelper.floor(entity.locZ / 16.0D);
@ -372,15 +541,15 @@ public class Chunk {
k = this.entitySlices.length - 1;
}
entity.bG = true;
entity.bH = this.x;
entity.bI = k;
entity.bJ = this.z;
entity.bV = true;
entity.bW = this.x;
entity.bX = k;
entity.bY = this.z;
this.entitySlices[k].add(entity);
}
public void b(Entity entity) {
this.a(entity, entity.bI);
this.a(entity, entity.bX);
}
public void a(Entity entity, int i) {
@ -410,13 +579,15 @@ public class Chunk {
return null;
}
BlockContainer blockcontainer = (BlockContainer) Block.byId[l];
if (tileentity == null) {
tileentity = ((BlockContainer) Block.byId[l]).a_();
this.world.setTileEntity(this.x * 16 + i, j, this.z * 16 + k, tileentity);
}
blockcontainer.c(this.world, this.x * 16 + i, j, this.z * 16 + k);
tileentity = (TileEntity) this.tileEntities.get(chunkposition);
}
if (tileentity != null && tileentity.g()) {
if (tileentity != null && tileentity.m()) {
this.tileEntities.remove(chunkposition);
return null;
} else {
@ -430,8 +601,8 @@ public class Chunk {
int k = tileentity.z - this.z * 16;
this.a(i, j, k, tileentity);
if (this.c) {
this.world.c.add(tileentity);
if (this.e) {
this.world.h.add(tileentity);
}
}
@ -443,7 +614,7 @@ public class Chunk {
tileentity.y = j;
tileentity.z = this.z * 16 + k;
if (this.getTypeId(i, j, k) != 0 && Block.byId[this.getTypeId(i, j, k)] instanceof BlockContainer) {
tileentity.j();
tileentity.n();
this.tileEntities.put(chunkposition, tileentity);
} else {
System.out.println("Attempted to place a tile entity where there was no entity tile!");
@ -453,17 +624,17 @@ public class Chunk {
public void e(int i, int j, int k) {
ChunkPosition chunkposition = new ChunkPosition(i, j, k);
if (this.c) {
if (this.e) {
TileEntity tileentity = (TileEntity) this.tileEntities.remove(chunkposition);
if (tileentity != null) {
tileentity.h();
tileentity.i();
}
}
}
public void addEntities() {
this.c = true;
this.e = true;
this.world.a(this.tileEntities.values());
for (int i = 0; i < this.entitySlices.length; ++i) {
@ -472,13 +643,13 @@ public class Chunk {
}
public void removeEntities() {
this.c = false;
this.e = false;
Iterator iterator = this.tileEntities.values().iterator();
while (iterator.hasNext()) {
TileEntity tileentity = (TileEntity) iterator.next();
world.markForRemoval(tileentity); // Craftbukkit
this.world.a(tileentity);
}
for (int i = 0; i < this.entitySlices.length; ++i) {
@ -502,7 +673,7 @@ public class Chunk {
}
public void f() {
this.o = true;
this.q = true;
}
public void a(Entity entity, AxisAlignedBB axisalignedbb, List list) {
@ -556,18 +727,18 @@ public class Chunk {
}
public boolean a(boolean flag) {
if (this.p) {
if (this.r) {
return false;
} else {
if (flag) {
if (this.q && this.world.getTime() != this.r) {
if (this.s && this.world.getTime() != this.t) {
return true;
}
} else if (this.q && this.world.getTime() >= this.r + 600L) {
} else if (this.s && this.world.getTime() >= this.t + 600L) {
return true;
}
return this.o;
return this.q;
}
}
@ -579,52 +750,65 @@ public class Chunk {
if (l1 * i2 * j2 == this.b.length) {
System.arraycopy(this.b, 0, abyte, k1, this.b.length);
k1 += this.b.length;
System.arraycopy(this.e.a, 0, abyte, k1, this.e.a.length);
k1 += this.e.a.length;
System.arraycopy(this.g.a, 0, abyte, k1, this.g.a.length);
k1 += this.g.a.length;
System.arraycopy(this.f.a, 0, abyte, k1, this.f.a.length);
k1 += this.f.a.length;
System.arraycopy(this.i.a, 0, abyte, k1, this.i.a.length);
k1 += this.i.a.length;
System.arraycopy(this.h.a, 0, abyte, k1, this.h.a.length);
k1 += this.h.a.length;
return k1;
} else {
int k2;
int l2;
int i3;
int j3;
int k3;
for (k2 = i; k2 < l; ++k2) {
for (l2 = k; l2 < j1; ++l2) {
i3 = k2 << 11 | l2 << 7 | j;
j3 = i1 - j;
System.arraycopy(this.b, i3, abyte, k1, j3);
k1 += j3;
for (i3 = k; i3 < j1; ++i3) {
this.world.getClass();
l2 = k2 << 11;
this.world.getClass();
j3 = l2 | i3 << 7 | j;
k3 = i1 - j;
System.arraycopy(this.b, j3, abyte, k1, k3);
k1 += k3;
}
}
for (k2 = i; k2 < l; ++k2) {
for (l2 = k; l2 < j1; ++l2) {
i3 = (k2 << 11 | l2 << 7 | j) >> 1;
j3 = (i1 - j) / 2;
System.arraycopy(this.e.a, i3, abyte, k1, j3);
k1 += j3;
for (i3 = k; i3 < j1; ++i3) {
this.world.getClass();
l2 = k2 << 11;
this.world.getClass();
j3 = (l2 | i3 << 7 | j) >> 1;
k3 = (i1 - j) / 2;
System.arraycopy(this.g.a, j3, abyte, k1, k3);
k1 += k3;
}
}
for (k2 = i; k2 < l; ++k2) {
for (l2 = k; l2 < j1; ++l2) {
i3 = (k2 << 11 | l2 << 7 | j) >> 1;
j3 = (i1 - j) / 2;
System.arraycopy(this.g.a, i3, abyte, k1, j3);
k1 += j3;
for (i3 = k; i3 < j1; ++i3) {
this.world.getClass();
l2 = k2 << 11;
this.world.getClass();
j3 = (l2 | i3 << 7 | j) >> 1;
k3 = (i1 - j) / 2;
System.arraycopy(this.i.a, j3, abyte, k1, k3);
k1 += k3;
}
}
for (k2 = i; k2 < l; ++k2) {
for (l2 = k; l2 < j1; ++l2) {
i3 = (k2 << 11 | l2 << 7 | j) >> 1;
j3 = (i1 - j) / 2;
System.arraycopy(this.f.a, i3, abyte, k1, j3);
k1 += j3;
for (i3 = k; i3 < j1; ++i3) {
this.world.getClass();
l2 = k2 << 11;
this.world.getClass();
j3 = (l2 | i3 << 7 | j) >> 1;
k3 = (i1 - j) / 2;
System.arraycopy(this.h.a, j3, abyte, k1, k3);
k1 += k3;
}
}
@ -636,11 +820,56 @@ public class Chunk {
return new Random(this.world.getSeed() + (long) (this.x * this.x * 4987142) + (long) (this.x * 5947611) + (long) (this.z * this.z) * 4392871L + (long) (this.z * 389711) ^ i);
}
public boolean isEmpty() {
return false;
public void g() {
BlockRegister.a(this.b);
}
public void a(IChunkProvider ichunkprovider, IChunkProvider ichunkprovider1, int i, int j) {
if (!this.done && ichunkprovider.isChunkLoaded(i + 1, j + 1) && ichunkprovider.isChunkLoaded(i, j + 1) && ichunkprovider.isChunkLoaded(i + 1, j)) {
ichunkprovider.getChunkAt(ichunkprovider1, i, j);
}
if (ichunkprovider.isChunkLoaded(i - 1, j) && !ichunkprovider.getOrCreateChunk(i - 1, j).done && ichunkprovider.isChunkLoaded(i - 1, j + 1) && ichunkprovider.isChunkLoaded(i, j + 1) && ichunkprovider.isChunkLoaded(i - 1, j + 1)) {
ichunkprovider.getChunkAt(ichunkprovider1, i - 1, j);
}
if (ichunkprovider.isChunkLoaded(i, j - 1) && !ichunkprovider.getOrCreateChunk(i, j - 1).done && ichunkprovider.isChunkLoaded(i + 1, j - 1) && ichunkprovider.isChunkLoaded(i + 1, j - 1) && ichunkprovider.isChunkLoaded(i + 1, j)) {
ichunkprovider.getChunkAt(ichunkprovider1, i, j - 1);
}
if (ichunkprovider.isChunkLoaded(i - 1, j - 1) && !ichunkprovider.getOrCreateChunk(i - 1, j - 1).done && ichunkprovider.isChunkLoaded(i, j - 1) && ichunkprovider.isChunkLoaded(i - 1, j)) {
ichunkprovider.getChunkAt(ichunkprovider1, i - 1, j - 1);
}
}
public int c(int i, int j) {
int k = i | j << 4;
int l = this.c[k];
if (l == -999) {
this.world.getClass();
int i1 = 128 - 1;
l = -1;
while (i1 > 0 && l == -1) {
int j1 = this.getTypeId(i, i1, j);
Material material = j1 == 0 ? Material.AIR : Block.byId[j1].material;
if (!material.isSolid() && !material.isLiquid()) {
--i1;
} else {
l = i1 + 1;
}
}
this.c[k] = l;
}
return l;
}
public void h() {
BlockRegister.a(this.b);
this.i();
}
}

View file

@ -2,10 +2,8 @@ package net.minecraft.server;
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;
// CraftBukkit start
@ -91,21 +89,7 @@ public class ChunkProviderServer implements IChunkProvider {
}
// CraftBukkit end
if (!chunk.done && this.isChunkLoaded(i + 1, j + 1) && this.isChunkLoaded(i, j + 1) && this.isChunkLoaded(i + 1, j)) {
this.getChunkAt(this, i, j);
}
if (this.isChunkLoaded(i - 1, j) && !this.getOrCreateChunk(i - 1, j).done && this.isChunkLoaded(i - 1, j + 1) && this.isChunkLoaded(i, j + 1) && this.isChunkLoaded(i - 1, j)) {
this.getChunkAt(this, i - 1, j);
}
if (this.isChunkLoaded(i, j - 1) && !this.getOrCreateChunk(i, j - 1).done && this.isChunkLoaded(i + 1, j - 1) && this.isChunkLoaded(i, j - 1) && this.isChunkLoaded(i + 1, j)) {
this.getChunkAt(this, i, j - 1);
}
if (this.isChunkLoaded(i - 1, j - 1) && !this.getOrCreateChunk(i - 1, j - 1).done && this.isChunkLoaded(i - 1, j - 1) && this.isChunkLoaded(i, j - 1) && this.isChunkLoaded(i - 1, j)) {
this.getChunkAt(this, i - 1, j - 1);
}
chunk.a(this, this, i, j);
}
return chunk;
@ -136,7 +120,7 @@ public class ChunkProviderServer implements IChunkProvider {
Chunk chunk = this.e.a(this.world, i, j);
if (chunk != null) {
chunk.r = this.world.getTime();
chunk.t = this.world.getTime();
}
return chunk;
@ -160,7 +144,7 @@ public class ChunkProviderServer implements IChunkProvider {
public void saveChunk(Chunk chunk) { // CraftBukkit - private -> public
if (this.e != null) {
try {
chunk.r = this.world.getTime();
chunk.t = this.world.getTime();
this.e.a(this.world, chunk);
} catch (Exception ioexception) { // CraftBukkit - IOException -> Exception
ioexception.printStackTrace();
@ -205,13 +189,13 @@ public class ChunkProviderServer implements IChunkProvider {
for (int j = 0; j < this.chunkList.size(); ++j) {
Chunk chunk = (Chunk) this.chunkList.get(j);
if (flag && !chunk.p) {
if (flag && !chunk.r) {
this.saveChunkNOP(chunk);
}
if (chunk.a(flag)) {
this.saveChunk(chunk);
chunk.o = false;
chunk.q = false;
++i;
if (i == 24 && !flag) {
return false;

View file

@ -1,417 +0,0 @@
package net.minecraft.server;
import java.util.Iterator;
import java.util.Set;
import java.util.logging.Logger;
// CraftBukkit start
import org.bukkit.craftbukkit.command.ServerCommandListener;
import org.bukkit.craftbukkit.entity.CraftPlayer;
// CraftBukkit end
public class ConsoleCommandHandler {
private static Logger a = Logger.getLogger("Minecraft");
private MinecraftServer server;
private ICommandListener listener; // CraftBukkit
public ConsoleCommandHandler(MinecraftServer minecraftserver) {
this.server = minecraftserver;
}
// Craftbukkit start
private boolean hasPermission(ICommandListener listener, String perm) {
if (listener instanceof ServerCommandListener) {
ServerCommandListener serv = (ServerCommandListener)listener;
return serv.getSender().hasPermission(perm);
} else if (listener instanceof NetServerHandler) {
NetServerHandler net = (NetServerHandler)listener;
return net.getPlayer().hasPermission(perm);
} else if ((listener instanceof ServerGUI) || (listener instanceof MinecraftServer)) {
return server.console.hasPermission(perm);
}
return false;
}
private boolean checkPermission(ICommandListener listener, String command) {
if (hasPermission(listener, "bukkit.command." + command)) {
return true;
} else {
listener.sendMessage("I'm sorry, Dave, but I cannot let you do that.");
return false;
}
}
// Craftbukkit end
public boolean handle(ServerCommand servercommand) { // CraftBukkit - returns boolean
String s = servercommand.command;
ICommandListener icommandlistener = servercommand.b;
String s1 = icommandlistener.getName();
this.listener = icommandlistener; // CraftBukkit
ServerConfigurationManager serverconfigurationmanager = this.server.serverConfigurationManager;
if (!s.toLowerCase().startsWith("help") && !s.toLowerCase().startsWith("?")) {
if (s.toLowerCase().startsWith("list")) {
if (!checkPermission(listener, "list")) return true; // Craftbukkit
icommandlistener.sendMessage("Connected players: " + serverconfigurationmanager.c());
} else if (s.toLowerCase().startsWith("stop")) {
if (!checkPermission(listener, "stop")) return true; // Craftbukkit
this.print(s1, "Stopping the server..");
this.server.a();
} else {
int i;
WorldServer worldserver;
if (s.toLowerCase().startsWith("save-all")) {
if (!checkPermission(listener, "save.perform")) return true; // Craftbukkit
this.print(s1, "Forcing save..");
if (serverconfigurationmanager != null) {
serverconfigurationmanager.savePlayers();
}
// CraftBukkit start
for (i = 0; i < this.server.worlds.size(); ++i) {
worldserver = this.server.worlds.get(i);
boolean save = worldserver.canSave;
worldserver.canSave = false;
worldserver.save(true, (IProgressUpdate) null);
worldserver.canSave = save;
}
// CraftBukkit end
this.print(s1, "Save complete.");
} else if (s.toLowerCase().startsWith("save-off")) {
if (!checkPermission(listener, "save.disable")) return true; // Craftbukkit
this.print(s1, "Disabling level saving..");
for (i = 0; i < this.server.worlds.size(); ++i) { // CraftBukkit
worldserver = this.server.worlds.get(i); // CraftBukkit
worldserver.canSave = true;
}
} else if (s.toLowerCase().startsWith("save-on")) {
if (!checkPermission(listener, "save.enable")) return true; // Craftbukkit
this.print(s1, "Enabling level saving..");
for (i = 0; i < this.server.worlds.size(); ++i) { // CraftBukkit
worldserver = this.server.worlds.get(i); // CraftBukkit
worldserver.canSave = false;
}
} else {
String s2;
if (s.toLowerCase().startsWith("op ")) {
if (!checkPermission(listener, "op.give")) return true; // Craftbukkit
s2 = s.substring(s.indexOf(" ")).trim();
serverconfigurationmanager.e(s2);
this.print(s1, "Opping " + s2);
serverconfigurationmanager.a(s2, "\u00A7eYou are now op!");
} else if (s.toLowerCase().startsWith("deop ")) {
if (!checkPermission(listener, "op.take")) return true; // Craftbukkit
s2 = s.substring(s.indexOf(" ")).trim();
serverconfigurationmanager.f(s2);
serverconfigurationmanager.a(s2, "\u00A7eYou are no longer op!");
this.print(s1, "De-opping " + s2);
} else if (s.toLowerCase().startsWith("ban-ip ")) {
if (!checkPermission(listener, "ban.ip")) return true; // Craftbukkit
s2 = s.substring(s.indexOf(" ")).trim();
serverconfigurationmanager.c(s2);
this.print(s1, "Banning ip " + s2);
} else if (s.toLowerCase().startsWith("pardon-ip ")) {
if (!checkPermission(listener, "unban.ip")) return true; // Craftbukkit
s2 = s.substring(s.indexOf(" ")).trim();
serverconfigurationmanager.d(s2);
this.print(s1, "Pardoning ip " + s2);
} else {
EntityPlayer entityplayer;
if (s.toLowerCase().startsWith("ban ")) {
if (!checkPermission(listener, "ban.player")) return true; // Craftbukkit
s2 = s.substring(s.indexOf(" ")).trim();
serverconfigurationmanager.a(s2);
this.print(s1, "Banning " + s2);
entityplayer = serverconfigurationmanager.i(s2);
if (entityplayer != null) {
entityplayer.netServerHandler.disconnect("Banned by admin");
}
} else if (s.toLowerCase().startsWith("pardon ")) {
if (!checkPermission(listener, "unban.player")) return true; // Craftbukkit
s2 = s.substring(s.indexOf(" ")).trim();
serverconfigurationmanager.b(s2);
this.print(s1, "Pardoning " + s2);
} else {
int j;
if (s.toLowerCase().startsWith("kick ")) {
if (!checkPermission(listener, "kick")) return true; // Craftbukkit
// CraftBukkit start - Add kick message compatibility
String[] parts = s.split(" ");
s2 = parts.length >= 2 ? parts[1] : "";
// CraftBukkit end
entityplayer = null;
for (j = 0; j < serverconfigurationmanager.players.size(); ++j) {
EntityPlayer entityplayer1 = (EntityPlayer) serverconfigurationmanager.players.get(j);
if (entityplayer1.name.equalsIgnoreCase(s2)) {
entityplayer = entityplayer1;
}
}
if (entityplayer != null) {
entityplayer.netServerHandler.disconnect("Kicked by admin");
this.print(s1, "Kicking " + entityplayer.name);
} else {
icommandlistener.sendMessage("Can\'t find user " + s2 + ". No kick.");
}
} else {
EntityPlayer entityplayer2;
String[] astring;
if (s.toLowerCase().startsWith("tp ")) {
if (!checkPermission(listener, "teleport")) return true; // Craftbukkit
astring = s.split(" ");
if (astring.length == 3) {
entityplayer = serverconfigurationmanager.i(astring[1]);
entityplayer2 = serverconfigurationmanager.i(astring[2]);
if (entityplayer == null) {
icommandlistener.sendMessage("Can\'t find user " + astring[1] + ". No tp.");
} else if (entityplayer2 == null) {
icommandlistener.sendMessage("Can\'t find user " + astring[2] + ". No tp.");
} else if (entityplayer.dimension != entityplayer2.dimension) {
icommandlistener.sendMessage("User " + astring[1] + " and " + astring[2] + " are in different dimensions. No tp.");
} else {
entityplayer.netServerHandler.a(entityplayer2.locX, entityplayer2.locY, entityplayer2.locZ, entityplayer2.yaw, entityplayer2.pitch);
this.print(s1, "Teleporting " + astring[1] + " to " + astring[2] + ".");
}
} else {
icommandlistener.sendMessage("Syntax error, please provice a source and a target.");
}
} else {
String s3;
int k;
if (s.toLowerCase().startsWith("give ")) {
if (!checkPermission(listener, "give")) return true; // Craftbukkit
astring = s.split(" ");
if (astring.length != 3 && astring.length != 4) {
return true; // CraftBukkit
}
s3 = astring[1];
entityplayer2 = serverconfigurationmanager.i(s3);
if (entityplayer2 != null) {
try {
k = Integer.parseInt(astring[2]);
if (Item.byId[k] != null) {
this.print(s1, "Giving " + entityplayer2.name + " some " + k);
int l = 1;
if (astring.length > 3) {
l = this.a(astring[3], 1);
}
if (l < 1) {
l = 1;
}
if (l > 64) {
l = 64;
}
entityplayer2.b(new ItemStack(k, l, 0));
} else {
icommandlistener.sendMessage("There\'s no item with id " + k);
}
} catch (NumberFormatException numberformatexception) {
icommandlistener.sendMessage("There\'s no item with id " + astring[2]);
}
} else {
icommandlistener.sendMessage("Can\'t find user " + s3);
}
} else if (s.toLowerCase().startsWith("time ")) {
astring = s.split(" ");
if (astring.length != 3) {
return true; // CraftBukkit
}
s3 = astring[1];
try {
j = Integer.parseInt(astring[2]);
WorldServer worldserver1;
if ("add".equalsIgnoreCase(s3)) {
if (!checkPermission(listener, "time.add")) return true; // Craftbukkit
for (k = 0; k < this.server.worlds.size(); ++k) { // CraftBukkit
worldserver1 = this.server.worlds.get(k); // CraftBukkit
worldserver1.setTimeAndFixTicklists(worldserver1.getTime() + (long) j);
}
this.print(s1, "Added " + j + " to time");
} else if ("set".equalsIgnoreCase(s3)) {
if (!checkPermission(listener, "time.set")) return true; // Craftbukkit
for (k = 0; k < this.server.worlds.size(); ++k) { // CraftBukkit
worldserver1 = this.server.worlds.get(k); // CraftBukkit
worldserver1.setTimeAndFixTicklists((long) j);
}
this.print(s1, "Set time to " + j);
} else {
icommandlistener.sendMessage("Unknown method, use either \"add\" or \"set\"");
}
} catch (NumberFormatException numberformatexception1) {
icommandlistener.sendMessage("Unable to convert time value, " + astring[2]);
}
} else if (s.toLowerCase().startsWith("say ")) {
if (!checkPermission(listener, "say")) return true; // Craftbukkit
s = s.substring(s.indexOf(" ")).trim();
a.info("[" + s1 + "] " + s);
serverconfigurationmanager.sendAll(new Packet3Chat("\u00A7d[Server] " + s));
} else if (s.toLowerCase().startsWith("tell ")) {
if (!checkPermission(listener, "tell")) return true; // Craftbukkit
astring = s.split(" ");
if (astring.length >= 3) {
s = s.substring(s.indexOf(" ")).trim();
s = s.substring(s.indexOf(" ")).trim();
a.info("[" + s1 + "->" + astring[1] + "] " + s);
s = "\u00A77" + s1 + " whispers " + s;
a.info(s);
if (!serverconfigurationmanager.a(astring[1], (Packet) (new Packet3Chat(s)))) {
icommandlistener.sendMessage("There\'s no player by that name online.");
}
}
} else if (s.toLowerCase().startsWith("whitelist ")) {
this.a(s1, s, icommandlistener);
} else {
icommandlistener.sendMessage("Unknown console command. Type \"help\" for help."); // CraftBukkit
return false; // CraftBukkit
}
}
}
}
}
}
}
} else {
if (!checkPermission(listener, "help")) return true; // Craftbukkit
this.a(icommandlistener);
}
return true; // CraftBukkit
}
private void a(String s, String s1, ICommandListener icommandlistener) {
String[] astring = s1.split(" ");
this.listener = icommandlistener; // CraftBukkit
if (astring.length >= 2) {
String s2 = astring[1].toLowerCase();
if ("on".equals(s2)) {
if (!checkPermission(listener, "whitelist.enable")) return; // Craftbukkit
this.print(s, "Turned on white-listing");
this.server.propertyManager.b("white-list", true);
} else if ("off".equals(s2)) {
if (!checkPermission(listener, "whitelist.disable")) return; // Craftbukkit
this.print(s, "Turned off white-listing");
this.server.propertyManager.b("white-list", false);
} else if ("list".equals(s2)) {
if (!checkPermission(listener, "whitelist.list")) return; // Craftbukkit
Set set = this.server.serverConfigurationManager.e();
String s3 = "";
String s4;
for (Iterator iterator = set.iterator(); iterator.hasNext(); s3 = s3 + s4 + " ") {
s4 = (String) iterator.next();
}
icommandlistener.sendMessage("White-listed players: " + s3);
} else {
String s5;
if ("add".equals(s2) && astring.length == 3) {
if (!checkPermission(listener, "whitelist.add")) return; // Craftbukkit
s5 = astring[2].toLowerCase();
this.server.serverConfigurationManager.k(s5);
this.print(s, "Added " + s5 + " to white-list");
} else if ("remove".equals(s2) && astring.length == 3) {
if (!checkPermission(listener, "whitelist.remove")) return; // Craftbukkit
s5 = astring[2].toLowerCase();
this.server.serverConfigurationManager.l(s5);
this.print(s, "Removed " + s5 + " from white-list");
} else if ("reload".equals(s2)) {
if (!checkPermission(listener, "whitelist.reload")) return; // Craftbukkit
this.server.serverConfigurationManager.f();
this.print(s, "Reloaded white-list from file");
}
}
}
}
private void a(ICommandListener icommandlistener) {
icommandlistener.sendMessage("To run the server without a gui, start it like this:");
icommandlistener.sendMessage(" java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui");
icommandlistener.sendMessage("Console commands:");
icommandlistener.sendMessage(" help or ? shows this message");
icommandlistener.sendMessage(" kick <player> removes a player from the server");
icommandlistener.sendMessage(" ban <player> bans a player from the server");
icommandlistener.sendMessage(" pardon <player> pardons a banned player so that they can connect again");
icommandlistener.sendMessage(" ban-ip <ip> bans an IP address from the server");
icommandlistener.sendMessage(" pardon-ip <ip> pardons a banned IP address so that they can connect again");
icommandlistener.sendMessage(" op <player> turns a player into an op");
icommandlistener.sendMessage(" deop <player> removes op status from a player");
icommandlistener.sendMessage(" tp <player1> <player2> moves one player to the same location as another player");
icommandlistener.sendMessage(" give <player> <id> [num] gives a player a resource");
icommandlistener.sendMessage(" tell <player> <message> sends a private message to a player");
icommandlistener.sendMessage(" stop gracefully stops the server");
icommandlistener.sendMessage(" save-all forces a server-wide level save");
icommandlistener.sendMessage(" save-off disables terrain saving (useful for backup scripts)");
icommandlistener.sendMessage(" save-on re-enables terrain saving");
icommandlistener.sendMessage(" list lists all currently connected players");
icommandlistener.sendMessage(" say <message> broadcasts a message to all players");
icommandlistener.sendMessage(" time <add|set> <amount> adds to or sets the world time (0-24000)");
}
private void print(String s, String s1) {
String s2 = s + ": " + s1;
// CraftBukkit start
this.listener.sendMessage(s1);
this.informOps("\u00A77(" + s2 + ")");
if (this.listener instanceof MinecraftServer) {
return; // Already logged so don't call a.info()
}
// CraftBukkit end
a.info(s2);
}
// CraftBukkit start
private void informOps(String msg) {
Packet3Chat packet3chat = new Packet3Chat(msg);
EntityPlayer sender = null;
if (this.listener instanceof ServerCommandListener) {
org.bukkit.command.CommandSender commandSender = ((ServerCommandListener) this.listener).getSender();
if (commandSender instanceof CraftPlayer) {
sender = ((CraftPlayer) commandSender).getHandle();
}
}
java.util.List<EntityPlayer> players = this.server.serverConfigurationManager.players;
for (int i = 0; i < players.size(); ++i) {
EntityPlayer entityPlayer = (EntityPlayer) players.get(i);
if (sender != entityPlayer && this.server.serverConfigurationManager.isOp(entityPlayer.name)) {
entityPlayer.netServerHandler.sendPacket(packet3chat);
}
}
}
// CraftBukkit end
private int a(String s, int i) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException numberformatexception) {
return i;
}
}
}

View file

@ -25,6 +25,7 @@ public class CraftingManager {
this.registerShapedRecipe(new ItemStack(Item.PAPER, 3), new Object[] { "###", Character.valueOf('#'), Item.SUGAR_CANE});
this.registerShapedRecipe(new ItemStack(Item.BOOK, 1), new Object[] { "#", "#", "#", Character.valueOf('#'), Item.PAPER});
this.registerShapedRecipe(new ItemStack(Block.FENCE, 2), new Object[] { "###", "###", Character.valueOf('#'), Item.STICK});
this.registerShapedRecipe(new ItemStack(Block.FENCE_GATE, 1), new Object[] { "#W#", "#W#", Character.valueOf('#'), Item.STICK, Character.valueOf('W'), Block.WOOD});
this.registerShapedRecipe(new ItemStack(Block.JUKEBOX, 1), new Object[] { "###", "#X#", "###", Character.valueOf('#'), Block.WOOD, Character.valueOf('X'), Item.DIAMOND});
this.registerShapedRecipe(new ItemStack(Block.NOTE_BLOCK, 1), new Object[] { "###", "#X#", "###", Character.valueOf('#'), Block.WOOD, Character.valueOf('X'), Item.REDSTONE});
this.registerShapedRecipe(new ItemStack(Block.BOOKSHELF, 1), new Object[] { "###", "XXX", "###", Character.valueOf('#'), Block.WOOD, Character.valueOf('X'), Item.BOOK});
@ -38,6 +39,8 @@ public class CraftingManager {
this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 0), new Object[] { "###", Character.valueOf('#'), Block.STONE});
this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 1), new Object[] { "###", Character.valueOf('#'), Block.SANDSTONE});
this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 2), new Object[] { "###", Character.valueOf('#'), Block.WOOD});
this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 4), new Object[] { "###", Character.valueOf('#'), Block.BRICK});
this.registerShapedRecipe(new ItemStack(Block.STEP, 3, 5), new Object[] { "###", Character.valueOf('#'), Block.SMOOTH_BRICK});
this.registerShapedRecipe(new ItemStack(Block.LADDER, 2), new Object[] { "# #", "###", "# #", Character.valueOf('#'), Item.STICK});
this.registerShapedRecipe(new ItemStack(Item.WOOD_DOOR, 1), new Object[] { "##", "##", "##", Character.valueOf('#'), Block.WOOD});
this.registerShapedRecipe(new ItemStack(Block.TRAP_DOOR, 2), new Object[] { "###", "###", Character.valueOf('#'), Block.WOOD});
@ -64,6 +67,8 @@ public class CraftingManager {
this.registerShapedRecipe(new ItemStack(Block.WOOD_STAIRS, 4), new Object[] { "# ", "## ", "###", Character.valueOf('#'), Block.WOOD});
this.registerShapedRecipe(new ItemStack(Item.FISHING_ROD, 1), new Object[] { " #", " #X", "# X", Character.valueOf('#'), Item.STICK, Character.valueOf('X'), Item.STRING});
this.registerShapedRecipe(new ItemStack(Block.COBBLESTONE_STAIRS, 4), new Object[] { "# ", "## ", "###", Character.valueOf('#'), Block.COBBLESTONE});
this.registerShapedRecipe(new ItemStack(Block.BRICK_STAIRS, 4), new Object[] { "# ", "## ", "###", Character.valueOf('#'), Block.BRICK});
this.registerShapedRecipe(new ItemStack(Block.STONE_STAIRS, 4), new Object[] { "# ", "## ", "###", Character.valueOf('#'), Block.SMOOTH_BRICK});
this.registerShapedRecipe(new ItemStack(Item.PAINTING, 1), new Object[] { "###", "#X#", "###", Character.valueOf('#'), Item.STICK, Character.valueOf('X'), Block.WOOL});
this.registerShapedRecipe(new ItemStack(Item.GOLDEN_APPLE, 1), new Object[] { "###", "#X#", "###", Character.valueOf('#'), Block.GOLD_BLOCK, Character.valueOf('X'), Item.APPLE});
this.registerShapedRecipe(new ItemStack(Block.LEVER, 1), new Object[] { "X", "#", Character.valueOf('#'), Block.COBBLESTONE, Character.valueOf('X'), Item.STICK});

View file

@ -8,7 +8,6 @@ import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Vehicle;
import org.bukkit.event.vehicle.VehicleBlockCollisionEvent;
import org.bukkit.event.vehicle.VehicleExitEvent;
@ -17,15 +16,14 @@ import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
// CraftBukkit end
public abstract class Entity {
private static int entityCount = 0;
public int id;
public double aH;
public boolean aI;
public double aX;
public boolean aY;
public Entity passenger;
public Entity vehicle;
public World world;
@ -45,81 +43,80 @@ public abstract class Entity {
public final AxisAlignedBB boundingBox;
public boolean onGround;
public boolean positionChanged;
public boolean bc;
public boolean bd;
public boolean bs;
public boolean bt;
public boolean velocityChanged;
public boolean bf;
public boolean bg;
protected boolean bv;
public boolean bw;
public boolean dead;
public float height;
public float length;
public float width;
public float bl;
public float bm;
public float bB;
public float bC;
public float fallDistance; // CraftBukkit - private -> public
private int b;
public double bo;
public double bp;
public double bq;
public float br;
public float bs;
public boolean bt;
public float bu;
public double bE;
public double bF;
public double bG;
public float bH;
public float bI;
public boolean bJ;
public float bK;
protected Random random;
public int ticksLived;
public int maxFireTicks;
public int fireTicks;
public int maxAirTicks; // CraftBukkit - protected - >public
protected boolean bA;
protected boolean bQ;
public int noDamageTicks;
public int airTicks;
private boolean justCreated;
protected boolean fireProof;
protected DataWatcher datawatcher;
public float bF;
private double d;
private double e;
public boolean bG;
public int bH;
public int bI;
public int bJ;
public boolean bK;
public boolean bV;
public int bW;
public int bX;
public int bY;
public boolean bZ;
public boolean ca;
public UUID uniqueId = UUID.randomUUID(); // CraftBukkit
public Entity(World world) {
this.id = entityCount++;
this.aH = 1.0D;
this.aI = false;
this.aX = 1.0D;
this.aY = false;
this.boundingBox = AxisAlignedBB.a(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
this.onGround = false;
this.bd = false;
this.bt = false;
this.velocityChanged = false;
this.bg = true;
this.bw = true;
this.dead = false;
this.height = 0.0F;
this.length = 0.6F;
this.width = 1.8F;
this.bl = 0.0F;
this.bm = 0.0F;
this.bB = 0.0F;
this.bC = 0.0F;
this.fallDistance = 0.0F;
this.b = 1;
this.br = 0.0F;
this.bs = 0.0F;
this.bt = false;
this.bu = 0.0F;
this.bH = 0.0F;
this.bI = 0.0F;
this.bJ = false;
this.bK = 0.0F;
this.random = new Random();
this.ticksLived = 0;
this.maxFireTicks = 1;
this.fireTicks = 0;
this.maxAirTicks = 300;
this.bA = false;
this.bQ = false;
this.noDamageTicks = 0;
this.airTicks = 300;
this.justCreated = true;
this.fireProof = false;
this.datawatcher = new DataWatcher();
this.bF = 0.0F;
this.bG = false;
this.bV = false;
this.world = world;
this.setPosition(0.0D, 0.0D, 0.0D);
this.datawatcher.a(0, Byte.valueOf((byte) 0));
@ -128,7 +125,7 @@ public abstract class Entity {
protected abstract void b();
public DataWatcher aa() {
public DataWatcher al() {
return this.datawatcher;
}
@ -188,27 +185,41 @@ public abstract class Entity {
float f = this.length / 2.0F;
float f1 = this.width;
this.boundingBox.c(d0 - (double) f, d1 - (double) this.height + (double) this.br, d2 - (double) f, d0 + (double) f, d1 - (double) this.height + (double) this.br + (double) f1, d2 + (double) f);
this.boundingBox.c(d0 - (double) f, d1 - (double) this.height + (double) this.bH, d2 - (double) f, d0 + (double) f, d1 - (double) this.height + (double) this.bH + (double) f1, d2 + (double) f);
}
public void m_() {
this.R();
public void s_() {
this.aa();
}
public void R() {
public void aa() {
if (this.vehicle != null && this.vehicle.dead) {
this.vehicle = null;
}
++this.ticksLived;
this.bl = this.bm;
this.bB = this.bC;
this.lastX = this.locX;
this.lastY = this.locY;
this.lastZ = this.locZ;
this.lastPitch = this.pitch;
this.lastYaw = this.yaw;
int i;
if (this.at()) {
int j = MathHelper.floor(this.locX);
int k = MathHelper.floor(this.locY - 0.20000000298023224D - (double) this.height);
i = MathHelper.floor(this.locZ);
int l = this.world.getTypeId(j, k, i);
if (l > 0) {
this.world.a("tilecrack_" + l, this.locX + ((double) this.random.nextFloat() - 0.5D) * (double) this.length, this.boundingBox.b + 0.1D, this.locZ + ((double) this.random.nextFloat() - 0.5D) * (double) this.length, -this.motX * 4.0D, 1.5D, -this.motZ * 4.0D);
}
}
if (this.f_()) {
if (!this.bA && !this.justCreated) {
if (!this.bQ && !this.justCreated) {
float f = MathHelper.a(this.motX * this.motX * 0.20000000298023224D + this.motY * this.motY + this.motZ * this.motZ * 0.20000000298023224D) * 0.2F;
if (f > 1.0F) {
@ -218,28 +229,27 @@ public abstract class Entity {
this.world.makeSound(this, "random.splash", f, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.4F);
float f1 = (float) MathHelper.floor(this.boundingBox.b);
int i;
float f2;
float f3;
for (i = 0; (float) i < 1.0F + this.length * 20.0F; ++i) {
f2 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length;
f3 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length;
this.world.a("bubble", this.locX + (double) f2, (double) (f1 + 1.0F), this.locZ + (double) f3, this.motX, this.motY - (double) (this.random.nextFloat() * 0.2F), this.motZ);
f2 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length;
this.world.a("bubble", this.locX + (double) f3, (double) (f1 + 1.0F), this.locZ + (double) f2, this.motX, this.motY - (double) (this.random.nextFloat() * 0.2F), this.motZ);
}
for (i = 0; (float) i < 1.0F + this.length * 20.0F; ++i) {
f2 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length;
f3 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length;
this.world.a("splash", this.locX + (double) f2, (double) (f1 + 1.0F), this.locZ + (double) f3, this.motX, this.motY, this.motZ);
f2 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length;
this.world.a("splash", this.locX + (double) f3, (double) (f1 + 1.0F), this.locZ + (double) f2, this.motX, this.motY, this.motZ);
}
}
this.fallDistance = 0.0F;
this.bA = true;
this.bQ = true;
this.fireTicks = 0;
} else {
this.bA = false;
this.bQ = false;
}
if (this.world.isStatic) {
@ -258,10 +268,10 @@ public abstract class Entity {
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
this.damageEntity((Entity) null, event.getDamage());
this.damageEntity(DamageSource.b, event.getDamage());
}
} else {
this.damageEntity((Entity) null, 1);
this.damageEntity(DamageSource.b, 1);
}
// CraftBukkit end
}
@ -270,12 +280,12 @@ public abstract class Entity {
}
}
if (this.ae()) {
this.ab();
if (this.ap()) {
this.am();
}
if (this.locY < -64.0D) {
this.Y();
this.ah();
}
if (!this.world.isStatic) {
@ -286,7 +296,7 @@ public abstract class Entity {
this.justCreated = false;
}
protected void ab() {
protected void am() {
if (!this.fireProof) {
// CraftBukkit start - TODO: this event spams!
if (this instanceof EntityLiving) {
@ -300,7 +310,7 @@ public abstract class Entity {
server.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
this.damageEntity((Entity) null, event.getDamage());
this.damageEntity(DamageSource.c, event.getDamage());
}
if (this.fireTicks <= 0) {
@ -319,12 +329,12 @@ public abstract class Entity {
}
// CraftBukkit end
this.damageEntity((Entity) null, 4);
this.damageEntity(DamageSource.c, 4);
this.fireTicks = 600;
}
}
protected void Y() {
protected void ah() {
this.die();
}
@ -336,18 +346,18 @@ public abstract class Entity {
}
public void move(double d0, double d1, double d2) {
if (this.bt) {
if (this.bJ) {
this.boundingBox.d(d0, d1, d2);
this.locX = (this.boundingBox.a + this.boundingBox.d) / 2.0D;
this.locY = this.boundingBox.b + (double) this.height - (double) this.br;
this.locY = this.boundingBox.b + (double) this.height - (double) this.bH;
this.locZ = (this.boundingBox.c + this.boundingBox.f) / 2.0D;
} else {
this.br *= 0.4F;
this.bH *= 0.4F;
double d3 = this.locX;
double d4 = this.locZ;
if (this.bf) {
this.bf = false;
if (this.bv) {
this.bv = false;
d0 *= 0.25D;
d1 *= 0.05000000074505806D;
d2 *= 0.25D;
@ -393,7 +403,7 @@ public abstract class Entity {
}
this.boundingBox.d(0.0D, d1, 0.0D);
if (!this.bg && d6 != d1) {
if (!this.bw && d6 != d1) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
@ -408,7 +418,7 @@ public abstract class Entity {
}
this.boundingBox.d(d0, 0.0D, 0.0D);
if (!this.bg && d5 != d0) {
if (!this.bw && d5 != d0) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
@ -419,7 +429,7 @@ public abstract class Entity {
}
this.boundingBox.d(0.0D, 0.0D, d2);
if (!this.bg && d7 != d2) {
if (!this.bw && d7 != d2) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
@ -429,13 +439,13 @@ public abstract class Entity {
double d10;
int k;
if (this.bs > 0.0F && flag1 && (flag || this.br < 0.05F) && (d5 != d0 || d7 != d2)) {
if (this.bI > 0.0F && flag1 && (flag || this.bH < 0.05F) && (d5 != d0 || d7 != d2)) {
d9 = d0;
d10 = d1;
double d11 = d2;
d0 = d5;
d1 = (double) this.bs;
d1 = (double) this.bI;
d2 = d7;
AxisAlignedBB axisalignedbb1 = this.boundingBox.clone();
@ -447,7 +457,7 @@ public abstract class Entity {
}
this.boundingBox.d(0.0D, d1, 0.0D);
if (!this.bg && d6 != d1) {
if (!this.bw && d6 != d1) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
@ -458,7 +468,7 @@ public abstract class Entity {
}
this.boundingBox.d(d0, 0.0D, 0.0D);
if (!this.bg && d5 != d0) {
if (!this.bw && d5 != d0) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
@ -469,18 +479,18 @@ public abstract class Entity {
}
this.boundingBox.d(0.0D, 0.0D, d2);
if (!this.bg && d7 != d2) {
if (!this.bw && d7 != d2) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
}
if (!this.bg && d6 != d1) {
if (!this.bw && d6 != d1) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
} else {
d1 = (double) (-this.bs);
d1 = (double) (-this.bI);
for (k = 0; k < list.size(); ++k) {
d1 = ((AxisAlignedBB) list.get(k)).b(this.boundingBox, d1);
@ -498,18 +508,18 @@ public abstract class Entity {
double d12 = this.boundingBox.b - (double) ((int) this.boundingBox.b);
if (d12 > 0.0D) {
this.br = (float) ((double) this.br + d12 + 0.01D);
this.bH = (float) ((double) this.bH + d12 + 0.01D);
}
}
}
this.locX = (this.boundingBox.a + this.boundingBox.d) / 2.0D;
this.locY = this.boundingBox.b + (double) this.height - (double) this.br;
this.locY = this.boundingBox.b + (double) this.height - (double) this.bH;
this.locZ = (this.boundingBox.c + this.boundingBox.f) / 2.0D;
this.positionChanged = d5 != d0 || d7 != d2;
this.bc = d6 != d1;
this.bs = d6 != d1;
this.onGround = d6 != d1 && d6 < 0.0D;
this.bd = this.positionChanged || this.bc;
this.bt = this.positionChanged || this.bs;
this.a(d1, this.onGround);
if (d5 != d0) {
this.motX = 0.0D;
@ -549,8 +559,8 @@ public abstract class Entity {
}
// CraftBukkit end
if (this.n() && !flag && this.vehicle == null) {
this.bm = (float) ((double) this.bm + (double) MathHelper.a(d9 * d9 + d10 * d10) * 0.6D);
if (this.e_() && !flag && this.vehicle == null) {
this.bC = (float) ((double) this.bC + (double) MathHelper.a(d9 * d9 + d10 * d10) * 0.6D);
l = MathHelper.floor(this.locX);
i1 = MathHelper.floor(this.locY - 0.20000000298023224D - (double) this.height);
j1 = MathHelper.floor(this.locZ);
@ -559,8 +569,8 @@ public abstract class Entity {
k = this.world.getTypeId(l, i1 - 1, j1);
}
if (this.bm > (float) this.b && k > 0) {
++this.b;
if (this.bC > (float) this.b && k > 0) {
this.b = (int) this.bC + 1;
StepSound stepsound = Block.byId[k].stepSound;
if (this.world.getTypeId(l, i1 + 1, j1) == Block.SNOW.id) {
@ -595,7 +605,7 @@ public abstract class Entity {
}
}
boolean flag2 = this.ac();
boolean flag2 = this.an();
if (this.world.d(this.boundingBox.shrink(0.0010D, 0.0010D, 0.0010D))) {
this.burn(1);
@ -625,7 +635,7 @@ public abstract class Entity {
}
}
protected boolean n() {
protected boolean e_() {
return true;
}
@ -640,7 +650,7 @@ public abstract class Entity {
}
}
public AxisAlignedBB e_() {
public AxisAlignedBB f() {
return null;
}
@ -658,7 +668,7 @@ public abstract class Entity {
i = event.getDamage();
}
// CraftBukkit end
this.damageEntity((Entity) null, i);
this.damageEntity(DamageSource.a, i);
}
}
@ -668,12 +678,12 @@ public abstract class Entity {
}
}
public boolean ac() {
return this.bA || this.world.s(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ));
public boolean an() {
return this.bQ || this.world.s(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ));
}
public boolean ad() {
return this.bA;
public boolean ao() {
return this.bQ;
}
public boolean f_() {
@ -701,7 +711,7 @@ public abstract class Entity {
return 0.0F;
}
public boolean ae() {
public boolean ap() {
return this.world.a(this.boundingBox.b(-0.10000000149011612D, -0.4000000059604645D, -0.10000000149011612D), Material.LAVA);
}
@ -724,22 +734,19 @@ public abstract class Entity {
}
}
public float c(float f) {
public float a_(float f) {
int i = MathHelper.floor(this.locX);
double d0 = (this.boundingBox.e - this.boundingBox.b) * 0.66D;
int j = MathHelper.floor(this.locY - (double) this.height + d0);
int k = MathHelper.floor(this.locZ);
int j = MathHelper.floor(this.locZ);
World world = this.world;
if (this.world.a(MathHelper.floor(this.boundingBox.a), MathHelper.floor(this.boundingBox.b), MathHelper.floor(this.boundingBox.c), MathHelper.floor(this.boundingBox.d), MathHelper.floor(this.boundingBox.e), MathHelper.floor(this.boundingBox.f))) {
float f1 = this.world.n(i, j, k);
this.world.getClass();
if (world.isLoaded(i, 128 / 2, j)) {
double d0 = (this.boundingBox.e - this.boundingBox.b) * 0.66D;
int k = MathHelper.floor(this.locY - (double) this.height + d0);
if (f1 < this.bF) {
f1 = this.bF;
}
return f1;
return this.world.m(i, k, j);
} else {
return this.bF;
return 0.0F;
}
}
@ -760,7 +767,7 @@ public abstract class Entity {
this.lastZ = this.locZ = d2;
this.lastYaw = this.yaw = f;
this.lastPitch = this.pitch = f1;
this.br = 0.0F;
this.bH = 0.0F;
double d3 = (double) (this.lastYaw - f);
if (d3 < -180.0D) {
@ -776,15 +783,15 @@ public abstract class Entity {
}
public void setPositionRotation(double d0, double d1, double d2, float f, float f1) {
this.bo = this.lastX = this.locX = d0;
this.bp = this.lastY = this.locY = d1 + (double) this.height;
this.bq = this.lastZ = this.locZ = d2;
this.bE = this.lastX = this.locX = d0;
this.bF = this.lastY = this.locY = d1 + (double) this.height;
this.bG = this.lastZ = this.locZ = d2;
this.yaw = f;
this.pitch = f1;
this.setPosition(this.locX, this.locY, this.locZ);
}
public float f(Entity entity) {
public float g(Entity entity) {
float f = (float) (this.locX - entity.locX);
float f1 = (float) (this.locY - entity.locY);
float f2 = (float) (this.locZ - entity.locZ);
@ -808,7 +815,7 @@ public abstract class Entity {
return (double) MathHelper.a(d3 * d3 + d4 * d4 + d5 * d5);
}
public double g(Entity entity) {
public double h(Entity entity) {
double d0 = this.locX - entity.locX;
double d1 = this.locY - entity.locY;
double d2 = this.locZ - entity.locZ;
@ -816,7 +823,7 @@ public abstract class Entity {
return d0 * d0 + d1 * d1 + d2 * d2;
}
public void b(EntityHuman entityhuman) {}
public void a_(EntityHuman entityhuman) {}
public void collide(Entity entity) {
if (entity.passenger != this && entity.vehicle != this) {
@ -838,8 +845,8 @@ public abstract class Entity {
d1 *= d3;
d0 *= 0.05000000074505806D;
d1 *= 0.05000000074505806D;
d0 *= (double) (1.0F - this.bu);
d1 *= (double) (1.0F - this.bu);
d0 *= (double) (1.0F - this.bK);
d1 *= (double) (1.0F - this.bK);
this.b(-d0, 0.0D, -d1);
entity.b(d0, 0.0D, d1);
}
@ -850,29 +857,30 @@ public abstract class Entity {
this.motX += d0;
this.motY += d1;
this.motZ += d2;
this.ca = true;
}
protected void af() {
protected void aq() {
this.velocityChanged = true;
}
public boolean damageEntity(Entity entity, int i) {
this.af();
public boolean damageEntity(DamageSource damagesource, int i) {
this.aq();
return false;
}
public boolean l_() {
public boolean r_() {
return false;
}
public boolean d_() {
public boolean g() {
return false;
}
public void c(Entity entity, int i) {}
public void b(Entity entity, int i) {}
public boolean c(NBTTagCompound nbttagcompound) {
String s = this.ag();
String s = this.ar();
if (!this.dead && s != null) {
nbttagcompound.setString("id", s);
@ -884,7 +892,7 @@ public abstract class Entity {
}
public void d(NBTTagCompound nbttagcompound) {
nbttagcompound.a("Pos", (NBTBase) this.a(new double[] { this.locX, this.locY + (double) this.br, this.locZ}));
nbttagcompound.a("Pos", (NBTBase) this.a(new double[] { this.locX, this.locY + (double) this.bH, this.locZ}));
nbttagcompound.a("Motion", (NBTBase) this.a(new double[] { this.motX, this.motY, this.motZ}));
// CraftBukkit start - checking for NaN pitch/yaw and resetting to zero
@ -934,9 +942,9 @@ public abstract class Entity {
}
// CraftBukkit end */
this.lastX = this.bo = this.locX = ((NBTTagDouble) nbttaglist.a(0)).a;
this.lastY = this.bp = this.locY = ((NBTTagDouble) nbttaglist.a(1)).a;
this.lastZ = this.bq = this.locZ = ((NBTTagDouble) nbttaglist.a(2)).a;
this.lastX = this.bE = this.locX = ((NBTTagDouble) nbttaglist.a(0)).a;
this.lastY = this.bF = this.locY = ((NBTTagDouble) nbttaglist.a(1)).a;
this.lastZ = this.bG = this.locZ = ((NBTTagDouble) nbttaglist.a(2)).a;
this.lastYaw = this.yaw = ((NBTTagFloat) nbttaglist2.a(0)).a;
this.lastPitch = this.pitch = ((NBTTagFloat) nbttaglist2.a(1)).a;
this.fallDistance = nbttagcompound.g("FallDistance");
@ -997,7 +1005,7 @@ public abstract class Entity {
// CraftBukkit end
}
protected final String ag() {
protected final String ar() {
return EntityTypes.b(this);
}
@ -1049,11 +1057,11 @@ public abstract class Entity {
return entityitem;
}
public boolean T() {
public boolean ac() {
return !this.dead;
}
public boolean K() {
public boolean O() {
for (int i = 0; i < 8; ++i) {
float f = ((float) ((i >> 0) % 2) - 0.5F) * this.length * 0.9F;
float f1 = ((float) ((i >> 1) % 2) - 0.5F) * 0.1F;
@ -1070,24 +1078,24 @@ public abstract class Entity {
return false;
}
public boolean a(EntityHuman entityhuman) {
public boolean b(EntityHuman entityhuman) {
return false;
}
public AxisAlignedBB a_(Entity entity) {
public AxisAlignedBB b(Entity entity) {
return null;
}
public void E() {
public void I() {
if (this.vehicle.dead) {
this.vehicle = null;
} else {
this.motX = 0.0D;
this.motY = 0.0D;
this.motZ = 0.0D;
this.m_();
this.s_();
if (this.vehicle != null) {
this.vehicle.f();
this.vehicle.g_();
this.e += (double) (this.vehicle.yaw - this.vehicle.lastYaw);
for (this.d += (double) (this.vehicle.pitch - this.vehicle.lastPitch); this.e >= 180.0D; this.e -= 360.0D) {
@ -1134,15 +1142,15 @@ public abstract class Entity {
}
}
public void f() {
this.passenger.setPosition(this.locX, this.locY + this.m() + this.passenger.I(), this.locZ);
public void g_() {
this.passenger.setPosition(this.locX, this.locY + this.n() + this.passenger.M(), this.locZ);
}
public double I() {
public double M() {
return (double) this.height;
}
public double m() {
public double n() {
return (double) this.width * 0.75D;
}
@ -1206,25 +1214,37 @@ public abstract class Entity {
}
}
public Vec3D Z() {
public Vec3D ai() {
return null;
}
public void P() {}
public void T() {}
public ItemStack[] getEquipment() {
return null;
}
public boolean isSneaking() {
return this.d(1);
return this.e(1);
}
public void setSneak(boolean flag) {
this.a(1, flag);
}
protected boolean d(int i) {
public boolean at() {
return this.e(3);
}
public void g(boolean flag) {
this.a(3, flag);
}
public void h(boolean flag) {
this.a(4, flag);
}
protected boolean e(int i) {
return (this.datawatcher.a(0) & 1 << i) != 0;
}
@ -1335,4 +1355,18 @@ public abstract class Entity {
return false;
}
public void q() {
this.bv = true;
}
public String Y() {
String s = EntityTypes.b(this);
if (s == null) {
s = "generic";
}
return StatisticCollector.a("entity." + s + ".name");
}
}

View file

@ -13,17 +13,18 @@ import org.bukkit.event.player.PlayerPickupItemEvent;
public class EntityArrow extends Entity {
private int d = -1;
private int e = -1;
private int f = -1;
private int g = 0;
private int g = -1;
private int h = 0;
private int i = 0;
private boolean inGround = false;
public boolean fromPlayer = false;
public int shake = 0;
public EntityLiving shooter;
private int j;
private int k = 0;
public Entity shooter;
private int k;
private int l = 0;
public boolean d = false;
public EntityArrow(World world) {
super(world);
@ -37,7 +38,7 @@ public class EntityArrow extends Entity {
this.height = 0.0F;
}
public EntityArrow(World world, EntityLiving entityliving) {
public EntityArrow(World world, EntityLiving entityliving, float f) {
super(world);
this.shooter = entityliving;
this.fromPlayer = entityliving instanceof EntityHuman;
@ -51,7 +52,7 @@ public class EntityArrow extends Entity {
this.motX = (double) (-MathHelper.sin(this.yaw / 180.0F * 3.1415927F) * MathHelper.cos(this.pitch / 180.0F * 3.1415927F));
this.motZ = (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * MathHelper.cos(this.pitch / 180.0F * 3.1415927F));
this.motY = (double) (-MathHelper.sin(this.pitch / 180.0F * 3.1415927F));
this.a(this.motX, this.motY, this.motZ, 1.5F, 1.0F);
this.a(this.motX, this.motY, this.motZ, f * 1.5F, 1.0F);
}
protected void b() {}
@ -75,11 +76,11 @@ public class EntityArrow extends Entity {
this.lastYaw = this.yaw = (float) (Math.atan2(d0, d2) * 180.0D / 3.1415927410125732D);
this.lastPitch = this.pitch = (float) (Math.atan2(d1, (double) f3) * 180.0D / 3.1415927410125732D);
this.j = 0;
this.k = 0;
}
public void m_() {
super.m_();
public void s_() {
super.s_();
if (this.lastPitch == 0.0F && this.lastYaw == 0.0F) {
float f = MathHelper.a(this.motX * this.motX + this.motZ * this.motZ);
@ -87,11 +88,11 @@ public class EntityArrow extends Entity {
this.lastPitch = this.pitch = (float) (Math.atan2(this.motY, (double) f) * 180.0D / 3.1415927410125732D);
}
int i = this.world.getTypeId(this.d, this.e, this.f);
int i = this.world.getTypeId(this.e, this.f, this.g);
if (i > 0) {
Block.byId[i].a(this.world, this.d, this.e, this.f);
AxisAlignedBB axisalignedbb = Block.byId[i].e(this.world, this.d, this.e, this.f);
Block.byId[i].a((IBlockAccess) this.world, this.e, this.f, this.g);
AxisAlignedBB axisalignedbb = Block.byId[i].e(this.world, this.e, this.f, this.g);
if (axisalignedbb != null && axisalignedbb.a(Vec3D.create(this.locX, this.locY, this.locZ))) {
this.inGround = true;
@ -103,12 +104,12 @@ public class EntityArrow extends Entity {
}
if (this.inGround) {
i = this.world.getTypeId(this.d, this.e, this.f);
int j = this.world.getData(this.d, this.e, this.f);
i = this.world.getTypeId(this.e, this.f, this.g);
int j = this.world.getData(this.e, this.f, this.g);
if (i == this.g && j == this.h) {
++this.j;
if (this.j == 1200) {
if (i == this.h && j == this.i) {
++this.k;
if (this.k == 1200) {
this.die();
}
} else {
@ -116,11 +117,11 @@ public class EntityArrow extends Entity {
this.motX *= (double) (this.random.nextFloat() * 0.2F);
this.motY *= (double) (this.random.nextFloat() * 0.2F);
this.motZ *= (double) (this.random.nextFloat() * 0.2F);
this.j = 0;
this.k = 0;
this.l = 0;
}
} else {
++this.k;
++this.l;
Vec3D vec3d = Vec3D.create(this.locX, this.locY, this.locZ);
Vec3D vec3d1 = Vec3D.create(this.locX + this.motX, this.locY + this.motY, this.locZ + this.motZ);
MovingObjectPosition movingobjectposition = this.world.rayTrace(vec3d, vec3d1, false, true);
@ -135,18 +136,19 @@ public class EntityArrow extends Entity {
List list = this.world.b((Entity) this, this.boundingBox.a(this.motX, this.motY, this.motZ).b(1.0D, 1.0D, 1.0D));
double d0 = 0.0D;
int k;
float f1;
for (int k = 0; k < list.size(); ++k) {
for (k = 0; k < list.size(); ++k) {
Entity entity1 = (Entity) list.get(k);
if (entity1.l_() && (entity1 != this.shooter || this.k >= 5)) {
if (entity1.r_() && (entity1 != this.shooter || this.l >= 5)) {
f1 = 0.3F;
AxisAlignedBB axisalignedbb1 = entity1.boundingBox.b((double) f1, (double) f1, (double) f1);
MovingObjectPosition movingobjectposition1 = axisalignedbb1.a(vec3d, vec3d1);
if (movingobjectposition1 != null) {
double d1 = vec3d.a(movingobjectposition1.f);
double d1 = vec3d.b(movingobjectposition1.f);
if (d1 < d0 || d0 == 0.0D) {
entity = entity1;
@ -168,6 +170,13 @@ public class EntityArrow extends Entity {
this.world.getServer().getPluginManager().callEvent(phe);
// CraftBukkit end
if (movingobjectposition.entity != null) {
f2 = MathHelper.a(this.motX * this.motX + this.motY * this.motY + this.motZ * this.motZ);
int l = (int) Math.ceil((double) f2 * 2.0D);
if (this.d) {
l = l * 3 / 2 + 1;
}
// CraftBukkit start
boolean stick;
if (entity instanceof EntityLiving) {
@ -187,10 +196,10 @@ public class EntityArrow extends Entity {
stick = !projectile.doesBounce();
} else {
// this function returns if the arrow should stick in or not, i.e. !bounce
stick = movingobjectposition.entity.damageEntity(this, event.getDamage());
stick = movingobjectposition.entity.damageEntity(DamageSource.a(this, this), event.getDamage());
}
} else {
stick = movingobjectposition.entity.damageEntity(this.shooter, 4);
stick = movingobjectposition.entity.damageEntity(DamageSource.a(this, this.shooter), 4);
}
if (stick) {
// CraftBukkit end
@ -202,14 +211,14 @@ public class EntityArrow extends Entity {
this.motZ *= -0.10000000149011612D;
this.yaw += 180.0F;
this.lastYaw += 180.0F;
this.k = 0;
this.l = 0;
}
} else {
this.d = movingobjectposition.b;
this.e = movingobjectposition.c;
this.f = movingobjectposition.d;
this.g = this.world.getTypeId(this.d, this.e, this.f);
this.h = this.world.getData(this.d, this.e, this.f);
this.e = movingobjectposition.b;
this.f = movingobjectposition.c;
this.g = movingobjectposition.d;
this.h = this.world.getTypeId(this.e, this.f, this.g);
this.i = this.world.getData(this.e, this.f, this.g);
this.motX = (double) ((float) (movingobjectposition.f.a - this.locX));
this.motY = (double) ((float) (movingobjectposition.f.b - this.locY));
this.motZ = (double) ((float) (movingobjectposition.f.c - this.locZ));
@ -220,6 +229,13 @@ public class EntityArrow extends Entity {
this.world.makeSound(this, "random.drr", 1.0F, 1.2F / (this.random.nextFloat() * 0.2F + 0.9F));
this.inGround = true;
this.shake = 7;
this.d = false;
}
}
if (this.d) {
for (k = 0; k < 4; ++k) {
this.world.a("crit", this.locX + this.motX * (double) k / 4.0D, this.locY + this.motY * (double) k / 4.0D, this.locZ + this.motZ * (double) k / 4.0D, -this.motX, -this.motY + 0.2D, -this.motZ);
}
}
@ -249,9 +265,9 @@ public class EntityArrow extends Entity {
this.yaw = this.lastYaw + (this.yaw - this.lastYaw) * 0.2F;
float f3 = 0.99F;
f1 = 0.03F;
if (this.ad()) {
for (int l = 0; l < 4; ++l) {
f1 = 0.05F;
if (this.ao()) {
for (int i1 = 0; i1 < 4; ++i1) {
float f4 = 0.25F;
this.world.a("bubble", this.locX - this.motX * (double) f4, this.locY - this.motY * (double) f4, this.locZ - this.motZ * (double) f4, this.motX, this.motY, this.motZ);
@ -269,28 +285,28 @@ public class EntityArrow extends Entity {
}
public void b(NBTTagCompound nbttagcompound) {
nbttagcompound.a("xTile", (short) this.d);
nbttagcompound.a("yTile", (short) this.e);
nbttagcompound.a("zTile", (short) this.f);
nbttagcompound.a("inTile", (byte) this.g);
nbttagcompound.a("inData", (byte) this.h);
nbttagcompound.a("xTile", (short) this.e);
nbttagcompound.a("yTile", (short) this.f);
nbttagcompound.a("zTile", (short) this.g);
nbttagcompound.a("inTile", (byte) this.h);
nbttagcompound.a("inData", (byte) this.i);
nbttagcompound.a("shake", (byte) this.shake);
nbttagcompound.a("inGround", (byte) (this.inGround ? 1 : 0));
nbttagcompound.a("player", this.fromPlayer);
}
public void a(NBTTagCompound nbttagcompound) {
this.d = nbttagcompound.d("xTile");
this.e = nbttagcompound.d("yTile");
this.f = nbttagcompound.d("zTile");
this.g = nbttagcompound.c("inTile") & 255;
this.h = nbttagcompound.c("inData") & 255;
this.e = nbttagcompound.d("xTile");
this.f = nbttagcompound.d("yTile");
this.g = nbttagcompound.d("zTile");
this.h = nbttagcompound.c("inTile") & 255;
this.i = nbttagcompound.c("inData") & 255;
this.shake = nbttagcompound.c("shake") & 255;
this.inGround = nbttagcompound.c("inGround") == 1;
this.fromPlayer = nbttagcompound.m("player");
}
public void b(EntityHuman entityhuman) {
public void a_(EntityHuman entityhuman) {
if (!this.world.isStatic) {
// CraftBukkit start
ItemStack itemstack = new ItemStack(Item.ARROW, 1);

View file

@ -49,26 +49,26 @@ public class EntityBoat extends Entity {
this.damage = 0;
this.b = 0;
this.c = 1;
this.aI = true;
this.aY = true;
this.b(1.5F, 0.6F);
this.height = this.width / 2.0F;
}
protected boolean n() {
protected boolean e_() {
return false;
}
protected void b() {}
public AxisAlignedBB a_(Entity entity) {
public AxisAlignedBB b(Entity entity) {
return entity.boundingBox;
}
public AxisAlignedBB e_() {
public AxisAlignedBB f() {
return this.boundingBox;
}
public boolean d_() {
public boolean g() {
return true;
}
@ -85,15 +85,15 @@ public class EntityBoat extends Entity {
this.world.getServer().getPluginManager().callEvent(new VehicleCreateEvent((Vehicle) this.getBukkitEntity())); // CraftBukkit
}
public double m() {
public double n() {
return (double) this.width * 0.0D - 0.30000001192092896D;
}
public boolean damageEntity(Entity entity, int i) {
public boolean damageEntity(DamageSource damagesource, int i) {
if (!this.world.isStatic && !this.dead) {
// CraftBukkit start
Vehicle vehicle = (Vehicle) this.getBukkitEntity();
org.bukkit.entity.Entity attacker = (entity == null) ? null : entity.getBukkitEntity();
org.bukkit.entity.Entity attacker = (damagesource.a() == null) ? null : damagesource.a().getBukkitEntity();
VehicleDamageEvent event = new VehicleDamageEvent(vehicle, attacker, i);
this.world.getServer().getPluginManager().callEvent(event);
@ -107,7 +107,7 @@ public class EntityBoat extends Entity {
this.c = -this.c;
this.b = 10;
this.damage += i * 10;
this.af();
this.aq();
if (this.damage > 40) {
// CraftBukkit start
@ -143,11 +143,11 @@ public class EntityBoat extends Entity {
}
}
public boolean l_() {
public boolean r_() {
return !this.dead;
}
public void m_() {
public void s_() {
// CraftBukkit start
double prevX = this.locX;
double prevY = this.locY;
@ -156,7 +156,7 @@ public class EntityBoat extends Entity {
float prevPitch = this.pitch;
// CraftBukkit end
super.m_();
super.s_();
if (this.b > 0) {
--this.b;
}
@ -358,7 +358,7 @@ public class EntityBoat extends Entity {
for (l = 0; l < list.size(); ++l) {
Entity entity = (Entity) list.get(l);
if (entity != this.passenger && entity.d_() && entity instanceof EntityBoat) {
if (entity != this.passenger && entity.g() && entity instanceof EntityBoat) {
entity.collide(this);
}
}
@ -381,12 +381,12 @@ public class EntityBoat extends Entity {
}
}
public void f() {
public void g_() {
if (this.passenger != null) {
double d0 = Math.cos((double) this.yaw * 3.141592653589793D / 180.0D) * 0.4D;
double d1 = Math.sin((double) this.yaw * 3.141592653589793D / 180.0D) * 0.4D;
this.passenger.setPosition(this.locX + d0, this.locY + this.m() + this.passenger.I(), this.locZ + d1);
this.passenger.setPosition(this.locX + d0, this.locY + this.n() + this.passenger.M(), this.locZ + d1);
}
}
@ -394,7 +394,7 @@ public class EntityBoat extends Entity {
protected void a(NBTTagCompound nbttagcompound) {}
public boolean a(EntityHuman entityhuman) {
public boolean b(EntityHuman entityhuman) {
if (this.passenger != null && this.passenger instanceof EntityHuman && this.passenger != entityhuman) {
return true;
} else {

View file

@ -23,27 +23,47 @@ public class EntityCow extends EntityAnimal {
super.a(nbttagcompound);
}
protected String g() {
return "mob.cow";
}
protected String h() {
return "mob.cowhurt";
return "mob.cow";
}
protected String i() {
return "mob.cowhurt";
}
protected float k() {
protected String j() {
return "mob.cowhurt";
}
protected float l() {
return 0.4F;
}
protected int j() {
protected int k() {
return Item.LEATHER.id;
}
public boolean a(EntityHuman entityhuman) {
protected void a(boolean flag) {
int i = this.random.nextInt(3);
int j;
for (j = 0; j < i; ++j) {
this.b(Item.LEATHER.id, 1);
}
i = this.random.nextInt(3) + 1;
for (j = 0; j < i; ++j) {
if (this.fireTicks > 0) {
this.b(Item.COOKED_BEEF.id, 1);
} else {
this.b(Item.RAW_BEEF.id, 1);
}
}
}
public boolean b(EntityHuman entityhuman) {
ItemStack itemstack = entityhuman.inventory.getItemInHand();
if (itemstack != null && itemstack.id == Item.BUCKET.id) {

View file

@ -6,22 +6,27 @@ import org.bukkit.craftbukkit.TrigMath;
import org.bukkit.event.entity.EntityTargetEvent;
// CraftBukkit end
public class EntityCreature extends EntityLiving {
public abstract class EntityCreature extends EntityLiving {
public PathEntity pathEntity; // CraftBukkit - public
public Entity target; // CraftBukkit - public
protected boolean e = false;
protected int f = 0;
public EntityCreature(World world) {
super(world);
}
protected boolean w() {
protected boolean v() {
return false;
}
protected void c_() {
this.e = this.w();
if (this.f > 0) {
--this.f;
}
this.e = this.v();
float f = 16.0F;
if (this.target == null) {
@ -44,7 +49,7 @@ public class EntityCreature extends EntityLiving {
if (this.target != null) {
this.pathEntity = this.world.findPath(this, this.target, f);
}
} else if (!this.target.T()) {
} else if (!this.target.ac()) {
// CraftBukkit start
EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), null, EntityTargetEvent.TargetReason.TARGET_DIED);
this.world.getServer().getPluginManager().callEvent(event);
@ -58,9 +63,9 @@ public class EntityCreature extends EntityLiving {
}
// CraftBukkit end
} else {
float f1 = this.target.f(this);
float f1 = this.target.g(this);
if (this.e(this.target)) {
if (this.f(this.target)) {
this.a(this.target, f1);
} else {
this.b(this.target, f1);
@ -69,13 +74,13 @@ public class EntityCreature extends EntityLiving {
if (!this.e && this.target != null && (this.pathEntity == null || this.random.nextInt(20) == 0)) {
this.pathEntity = this.world.findPath(this, this.target, f);
} else if (!this.e && (this.pathEntity == null && this.random.nextInt(80) == 0 || this.random.nextInt(80) == 0)) {
this.B();
} else if (!this.e && (this.pathEntity == null && this.random.nextInt(80) == 0 || this.f > 0 || this.random.nextInt(80) == 0)) {
this.A();
}
int i = MathHelper.floor(this.boundingBox.b + 0.5D);
boolean flag = this.ad();
boolean flag1 = this.ae();
boolean flag = this.ao();
boolean flag1 = this.ap();
this.pitch = 0.0F;
if (this.pathEntity != null && this.random.nextInt(100) != 0) {
@ -92,7 +97,7 @@ public class EntityCreature extends EntityLiving {
}
}
this.aC = false;
this.aS = false;
if (vec3d != null) {
double d1 = vec3d.a - this.locX;
double d2 = vec3d.c - this.locZ;
@ -101,7 +106,7 @@ public class EntityCreature extends EntityLiving {
float f2 = (float) (TrigMath.atan2(d2, d1) * 180.0D / 3.1415927410125732D) - 90.0F;
float f3 = f2 - this.yaw;
for (this.aA = this.aE; f3 < -180.0F; f3 += 360.0F) {
for (this.aQ = this.aU; f3 < -180.0F; f3 += 360.0F) {
;
}
@ -125,12 +130,12 @@ public class EntityCreature extends EntityLiving {
this.yaw = (float) (Math.atan2(d5, d4) * 180.0D / 3.1415927410125732D) - 90.0F;
f3 = (f4 - this.yaw + 90.0F) * 3.1415927F / 180.0F;
this.az = -MathHelper.sin(f3) * this.aA * 1.0F;
this.aA = MathHelper.cos(f3) * this.aA * 1.0F;
this.aP = -MathHelper.sin(f3) * this.aQ * 1.0F;
this.aQ = MathHelper.cos(f3) * this.aQ * 1.0F;
}
if (d3 > 0.0D) {
this.aC = true;
this.aS = true;
}
}
@ -138,12 +143,12 @@ public class EntityCreature extends EntityLiving {
this.a(this.target, 30.0F, 30.0F);
}
if (this.positionChanged && !this.C()) {
this.aC = true;
if (this.positionChanged && !this.B()) {
this.aS = true;
}
if (this.random.nextFloat() < 0.8F && (flag || flag1)) {
this.aC = true;
this.aS = true;
}
} else {
super.c_();
@ -151,7 +156,7 @@ public class EntityCreature extends EntityLiving {
}
}
protected void B() {
protected void A() {
boolean flag = false;
int i = -1;
int j = -1;
@ -198,7 +203,7 @@ public class EntityCreature extends EntityLiving {
return super.d() && this.a(i, j, k) >= 0.0F;
}
public boolean C() {
public boolean B() {
return this.pathEntity != null;
}
@ -206,11 +211,21 @@ public class EntityCreature extends EntityLiving {
this.pathEntity = pathentity;
}
public Entity F() {
public Entity C() {
return this.target;
}
public void setTarget(Entity entity) {
this.target = entity;
}
protected float D() {
float f = super.D();
if (this.f > 0) {
f *= 2.0F;
}
return f;
}
}

View file

@ -37,7 +37,7 @@ public class EntityCreeper extends EntityMonster {
protected void b(Entity entity, float f) {
if (!this.world.isStatic) {
if (this.fuseTicks > 0) {
this.e(-1);
this.b(-1);
--this.fuseTicks;
if (this.fuseTicks < 0) {
this.fuseTicks = 0;
@ -46,10 +46,10 @@ public class EntityCreeper extends EntityMonster {
}
}
public void m_() {
public void s_() {
this.b = this.fuseTicks;
if (this.world.isStatic) {
int i = this.x();
int i = this.w();
if (i > 0 && this.fuseTicks == 0) {
this.world.makeSound(this, "random.fuse", 1.0F, 0.5F);
@ -65,9 +65,9 @@ public class EntityCreeper extends EntityMonster {
}
}
super.m_();
super.s_();
if (this.target == null && this.fuseTicks > 0) {
this.e(-1);
this.b(-1);
--this.fuseTicks;
if (this.fuseTicks < 0) {
this.fuseTicks = 0;
@ -75,27 +75,27 @@ public class EntityCreeper extends EntityMonster {
}
}
protected String h() {
protected String i() {
return "mob.creeper";
}
protected String i() {
protected String j() {
return "mob.creeperdeath";
}
public void die(Entity entity) {
super.die(entity);
if (entity instanceof EntitySkeleton) {
public void die(DamageSource damagesource) {
super.die(damagesource);
if (damagesource.a() instanceof EntitySkeleton) {
this.b(Item.GOLD_RECORD.id + this.random.nextInt(2), 1);
}
}
protected void a(Entity entity, float f) {
if (!this.world.isStatic) {
int i = this.x();
int i = this.w();
if ((i > 0 || f >= 3.0F) && (i <= 0 || f >= 7.0F)) {
this.e(-1);
this.b(-1);
--this.fuseTicks;
if (this.fuseTicks < 0) {
this.fuseTicks = 0;
@ -105,7 +105,7 @@ public class EntityCreeper extends EntityMonster {
this.world.makeSound(this, "random.fuse", 1.0F, 0.5F);
}
this.e(1);
this.b(1);
++this.fuseTicks;
if (this.fuseTicks >= 30) {
// CraftBukkit start
@ -132,15 +132,15 @@ public class EntityCreeper extends EntityMonster {
return this.datawatcher.a(17) == 1;
}
protected int j() {
protected int k() {
return Item.SULPHUR.id;
}
private int x() {
private int w() {
return this.datawatcher.a(16);
}
private void e(int i) {
private void b(int i) {
this.datawatcher.watch(16, Byte.valueOf((byte) i));
}

View file

@ -79,11 +79,11 @@ public class EntityEgg extends Entity {
this.h = 0;
}
public void m_() {
this.bo = this.locX;
this.bp = this.locY;
this.bq = this.locZ;
super.m_();
public void s_() {
this.bE = this.locX;
this.bF = this.locY;
this.bG = this.locZ;
super.s_();
if (this.a > 0) {
--this.a;
}
@ -128,13 +128,13 @@ public class EntityEgg extends Entity {
for (int j = 0; j < list.size(); ++j) {
Entity entity1 = (Entity) list.get(j);
if (entity1.l_() && (entity1 != this.thrower || this.i >= 5)) {
if (entity1.r_() && (entity1 != this.thrower || this.i >= 5)) {
float f = 0.3F;
AxisAlignedBB axisalignedbb = entity1.boundingBox.b((double) f, (double) f, (double) f);
MovingObjectPosition movingobjectposition1 = axisalignedbb.a(vec3d, vec3d1);
if (movingobjectposition1 != null) {
double d1 = vec3d.a(movingobjectposition1.f);
double d1 = vec3d.b(movingobjectposition1.f);
if (d1 < d0 || d0 == 0.0D) {
entity = entity1;
@ -168,10 +168,10 @@ public class EntityEgg extends Entity {
stick = !projectile.doesBounce();
} else {
// this function returns if the egg should stick in or not, i.e. !bounce
stick = movingobjectposition.entity.damageEntity(this, event.getDamage());
stick = movingobjectposition.entity.damageEntity(DamageSource.a(this, this), event.getDamage());
}
} else {
stick = movingobjectposition.entity.damageEntity(this.thrower, 0);
stick = movingobjectposition.entity.damageEntity(DamageSource.a(this, this.thrower), 0);
}
if (stick) {
@ -244,9 +244,6 @@ public class EntityEgg extends Entity {
case WOLF:
entity = new EntityWolf(this.world);
break;
case MONSTER:
entity = new EntityMonster(this.world);
break;
default:
entity = new EntityChicken(this.world);
break;
@ -297,7 +294,7 @@ public class EntityEgg extends Entity {
float f2 = 0.99F;
float f3 = 0.03F;
if (this.ad()) {
if (this.ao()) {
for (int i1 = 0; i1 < 4; ++i1) {
float f4 = 0.25F;
@ -332,7 +329,7 @@ public class EntityEgg extends Entity {
this.f = nbttagcompound.c("inGround") == 1;
}
public void b(EntityHuman entityhuman) {
public void a_(EntityHuman entityhuman) {
if (this.f && this.thrower == entityhuman && this.a <= 0 && entityhuman.inventory.pickup(new ItemStack(Item.ARROW, 1))) {
this.world.makeSound(this, "random.pop", 0.2F, ((this.random.nextFloat() - this.random.nextFloat()) * 0.7F + 1.0F) * 2.0F);
entityhuman.receive(this, 1);

View file

@ -61,8 +61,8 @@ public class EntityFireball extends Entity {
this.e = d2 / d3 * 0.1D;
}
public void m_() {
super.m_();
public void s_() {
super.s_();
this.fireTicks = 10;
if (this.a > 0) {
--this.a;
@ -107,13 +107,13 @@ public class EntityFireball extends Entity {
for (int j = 0; j < list.size(); ++j) {
Entity entity1 = (Entity) list.get(j);
if (entity1.l_() && (entity1 != this.shooter || this.l >= 25)) {
if (entity1.r_() && (entity1 != this.shooter || this.l >= 25)) {
float f = 0.3F;
AxisAlignedBB axisalignedbb = entity1.boundingBox.b((double) f, (double) f, (double) f);
MovingObjectPosition movingobjectposition1 = axisalignedbb.a(vec3d, vec3d1);
if (movingobjectposition1 != null) {
double d1 = vec3d.a(movingobjectposition1.f);
double d1 = vec3d.b(movingobjectposition1.f);
if (d1 < d0 || d0 == 0.0D) {
entity = entity1;
@ -150,10 +150,10 @@ public class EntityFireball extends Entity {
stick = !projectile.doesBounce();
} else {
// this function returns if the fireball should stick in or not, i.e. !bounce
stick = movingobjectposition.entity.damageEntity(this, event.getDamage());
stick = movingobjectposition.entity.damageEntity(DamageSource.a(this, this), event.getDamage());
}
} else {
stick = movingobjectposition.entity.damageEntity(this.shooter, 0);
stick = movingobjectposition.entity.damageEntity(DamageSource.a(this, this.shooter), 0);
}
if (stick) {
;
@ -200,7 +200,7 @@ public class EntityFireball extends Entity {
this.yaw = this.lastYaw + (this.yaw - this.lastYaw) * 0.2F;
float f2 = 0.95F;
if (this.ad()) {
if (this.ao()) {
for (int k = 0; k < 4; ++k) {
float f3 = 0.25F;
@ -238,14 +238,14 @@ public class EntityFireball extends Entity {
this.j = nbttagcompound.c("inGround") == 1;
}
public boolean l_() {
public boolean r_() {
return true;
}
public boolean damageEntity(Entity entity, int i) {
this.af();
if (entity != null) {
Vec3D vec3d = entity.Z();
public boolean damageEntity(DamageSource damagesource, int i) {
this.aq();
if (damagesource.a() != null) {
Vec3D vec3d = damagesource.a().ai();
if (vec3d != null) {
this.motX = vec3d.a;

View file

@ -32,12 +32,12 @@ public class EntityFish extends Entity {
public EntityFish(World world) {
super(world);
this.b(0.25F, 0.25F);
this.bK = true;
this.bZ = true;
}
public EntityFish(World world, EntityHuman entityhuman) {
super(world);
this.bK = true;
this.bZ = true;
this.owner = entityhuman;
this.owner.hookedFish = this;
this.b(0.25F, 0.25F);
@ -79,8 +79,8 @@ public class EntityFish extends Entity {
this.i = 0;
}
public void m_() {
super.m_();
public void s_() {
super.s_();
if (this.l > 0) {
double d0 = this.locX + (this.m - this.locX) / (double) this.l;
double d1 = this.locY + (this.n - this.locY) / (double) this.l;
@ -103,9 +103,9 @@ public class EntityFish extends Entity {
this.c(this.yaw, this.pitch);
} else {
if (!this.world.isStatic) {
ItemStack itemstack = this.owner.G();
ItemStack itemstack = this.owner.K();
if (this.owner.dead || !this.owner.T() || itemstack == null || itemstack.getItem() != Item.FISHING_ROD || this.g(this.owner) > 1024.0D) {
if (this.owner.dead || !this.owner.ac() || itemstack == null || itemstack.getItem() != Item.FISHING_ROD || this.h(this.owner) > 1024.0D) {
this.die();
this.owner.hookedFish = null;
return;
@ -168,13 +168,13 @@ public class EntityFish extends Entity {
for (int j = 0; j < list.size(); ++j) {
Entity entity1 = (Entity) list.get(j);
if (entity1.l_() && (entity1 != this.owner || this.j >= 5)) {
if (entity1.r_() && (entity1 != this.owner || this.j >= 5)) {
float f = 0.3F;
AxisAlignedBB axisalignedbb = entity1.boundingBox.b((double) f, (double) f, (double) f);
MovingObjectPosition movingobjectposition1 = axisalignedbb.a(vec3d, vec3d1);
if (movingobjectposition1 != null) {
d5 = vec3d.a(movingobjectposition1.f);
d5 = vec3d.b(movingobjectposition1.f);
if (d5 < d4 || d4 == 0.0D) {
entity = entity1;
d4 = d5;
@ -204,10 +204,10 @@ public class EntityFish extends Entity {
stick = !projectile.doesBounce();
} else {
// this function returns if the fish should stick in or not, i.e. !bounce
stick = movingobjectposition.entity.damageEntity(this, event.getDamage());
stick = movingobjectposition.entity.damageEntity(DamageSource.a((Entity) this, this), event.getDamage());
}
} else {
stick = movingobjectposition.entity.damageEntity(this.owner, 0);
stick = movingobjectposition.entity.damageEntity(DamageSource.a((Entity) this, this.owner), 0);
}
if (!stick) {
// CraftBukkit end
@ -333,7 +333,7 @@ public class EntityFish extends Entity {
this.h = nbttagcompound.c("inGround") == 1;
}
public int h() {
public int i() {
byte b0 = 0;
if (this.c != null) {

View file

@ -21,6 +21,7 @@ public class EntityGhast extends EntityFlying implements IMonster {
this.texture = "/mob/ghast.png";
this.b(4.0F, 4.0F);
this.fireProof = true;
this.ax = 5;
}
protected void b() {
@ -28,8 +29,8 @@ public class EntityGhast extends EntityFlying implements IMonster {
this.datawatcher.a(16, Byte.valueOf((byte) 0));
}
public void m_() {
super.m_();
public void s_() {
super.s_();
byte b0 = this.datawatcher.a(16);
this.texture = b0 == 1 ? "/mob/ghast_fire.png" : "/mob/ghast.png";
@ -40,7 +41,7 @@ public class EntityGhast extends EntityFlying implements IMonster {
this.die();
}
this.U();
this.ad();
this.e = this.f;
double d0 = this.b - this.locX;
double d1 = this.c - this.locY;
@ -104,23 +105,23 @@ public class EntityGhast extends EntityFlying implements IMonster {
double d4 = 64.0D;
if (this.target != null && this.target.g(this) < d4 * d4) {
if (this.target != null && this.target.h(this) < d4 * d4) {
double d5 = this.target.locX - this.locX;
double d6 = this.target.boundingBox.b + (double) (this.target.width / 2.0F) - (this.locY + (double) (this.width / 2.0F));
double d7 = this.target.locZ - this.locZ;
this.K = this.yaw = -((float) Math.atan2(d5, d7)) * 180.0F / 3.1415927F;
if (this.e(this.target)) {
this.U = this.yaw = -((float) Math.atan2(d5, d7)) * 180.0F / 3.1415927F;
if (this.f(this.target)) {
if (this.f == 10) {
this.world.makeSound(this, "mob.ghast.charge", this.k(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
this.world.makeSound(this, "mob.ghast.charge", this.l(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
}
++this.f;
if (this.f == 20) {
this.world.makeSound(this, "mob.ghast.fireball", this.k(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
this.world.makeSound(this, "mob.ghast.fireball", this.l(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
EntityFireball entityfireball = new EntityFireball(this.world, this, d5, d6, d7);
double d8 = 4.0D;
Vec3D vec3d = this.b(1.0F);
Vec3D vec3d = this.c(1.0F);
entityfireball.locX = this.locX + vec3d.a * d8;
entityfireball.locY = this.locY + (double) (this.width / 2.0F) + 0.5D;
@ -132,7 +133,7 @@ public class EntityGhast extends EntityFlying implements IMonster {
--this.f;
}
} else {
this.K = this.yaw = -((float) Math.atan2(this.motX, this.motZ)) * 180.0F / 3.1415927F;
this.U = this.yaw = -((float) Math.atan2(this.motX, this.motZ)) * 180.0F / 3.1415927F;
if (this.f > 0) {
--this.f;
}
@ -164,23 +165,23 @@ public class EntityGhast extends EntityFlying implements IMonster {
return true;
}
protected String g() {
protected String h() {
return "mob.ghast.moan";
}
protected String h() {
protected String i() {
return "mob.ghast.scream";
}
protected String i() {
protected String j() {
return "mob.ghast.death";
}
protected int j() {
protected int k() {
return Item.SULPHUR.id;
}
protected float k() {
protected float l() {
return 10.0F;
}
@ -188,7 +189,7 @@ public class EntityGhast extends EntityFlying implements IMonster {
return this.random.nextInt(20) == 0 && super.d() && this.world.spawnMonsters > 0;
}
public int l() {
public int m() {
return 1;
}
}

File diff suppressed because it is too large Load diff

View file

@ -29,7 +29,7 @@ public class EntityItem extends Entity {
this.motZ = (double) ((float) (Math.random() * 0.20000000298023224D - 0.10000000149011612D));
}
protected boolean n() {
protected boolean e_() {
return false;
}
@ -41,8 +41,8 @@ public class EntityItem extends Entity {
protected void b() {}
public void m_() {
super.m_();
public void s_() {
super.s_();
// CraftBukkit start
int currentTick = (int) (System.currentTimeMillis() / 50);
this.pickupDelay -= (currentTick - this.lastTick);
@ -92,11 +92,11 @@ public class EntityItem extends Entity {
}
protected void burn(int i) {
this.damageEntity((Entity) null, i);
this.damageEntity(DamageSource.a, i);
}
public boolean damageEntity(Entity entity, int i) {
this.af();
public boolean damageEntity(DamageSource damagesource, int i) {
this.aq();
this.f -= i;
if (this.f <= 0) {
this.die();
@ -108,7 +108,7 @@ public class EntityItem extends Entity {
public void b(NBTTagCompound nbttagcompound) {
nbttagcompound.a("Health", (short) ((byte) this.f));
nbttagcompound.a("Age", (short) this.b);
nbttagcompound.a("Item", this.itemStack.a(new NBTTagCompound()));
nbttagcompound.a("Item", this.itemStack.b(new NBTTagCompound()));
}
public void a(NBTTagCompound nbttagcompound) {
@ -116,10 +116,13 @@ public class EntityItem extends Entity {
this.b = nbttagcompound.d("Age");
NBTTagCompound nbttagcompound1 = nbttagcompound.k("Item");
this.itemStack = new ItemStack(nbttagcompound1);
this.itemStack = ItemStack.a(nbttagcompound1);
if (this.itemStack == null) {
this.die();
}
}
public void b(EntityHuman entityhuman) {
public void a_(EntityHuman entityhuman) {
if (!this.world.isStatic) {
int i = this.itemStack.count;
@ -158,4 +161,8 @@ public class EntityItem extends Entity {
}
}
}
public String Y() {
return StatisticCollector.a("item." + this.itemStack.k());
}
}

File diff suppressed because it is too large Load diff

View file

@ -55,26 +55,26 @@ public class EntityMinecart extends Entity implements IInventory {
this.b = 0;
this.c = 1;
this.i = false;
this.aI = true;
this.aY = true;
this.b(0.98F, 0.7F);
this.height = this.width / 2.0F;
}
protected boolean n() {
protected boolean e_() {
return false;
}
protected void b() {}
public AxisAlignedBB a_(Entity entity) {
public AxisAlignedBB b(Entity entity) {
return entity.boundingBox;
}
public AxisAlignedBB e_() {
public AxisAlignedBB f() {
return null;
}
public boolean d_() {
public boolean g() {
return true;
}
@ -92,15 +92,15 @@ public class EntityMinecart extends Entity implements IInventory {
this.world.getServer().getPluginManager().callEvent(new VehicleCreateEvent((Vehicle) this.getBukkitEntity())); // CraftBukkit
}
public double m() {
public double n() {
return (double) this.width * 0.0D - 0.30000001192092896D;
}
public boolean damageEntity(Entity entity, int i) {
public boolean damageEntity(DamageSource damagesource, int i) {
if (!this.world.isStatic && !this.dead) {
// CraftBukkit start
Vehicle vehicle = (Vehicle) this.getBukkitEntity();
org.bukkit.entity.Entity passenger = (entity == null) ? null : entity.getBukkitEntity();
org.bukkit.entity.Entity passenger = (damagesource.a() == null) ? null : damagesource.a().getBukkitEntity();
VehicleDamageEvent event = new VehicleDamageEvent(vehicle, passenger, i);
this.world.getServer().getPluginManager().callEvent(event);
@ -114,7 +114,7 @@ public class EntityMinecart extends Entity implements IInventory {
this.c = -this.c;
this.b = 10;
this.af();
this.aq();
this.damage += i * 10;
if (this.damage > 40) {
if (this.passenger != null) {
@ -175,7 +175,7 @@ public class EntityMinecart extends Entity implements IInventory {
}
}
public boolean l_() {
public boolean r_() {
return !this.dead;
}
@ -571,7 +571,7 @@ public class EntityMinecart extends Entity implements IInventory {
for (int l1 = 0; l1 < list.size(); ++l1) {
Entity entity = (Entity) list.get(l1);
if (entity != this.passenger && entity.d_() && entity instanceof EntityMinecart) {
if (entity != this.passenger && entity.g() && entity instanceof EntityMinecart) {
entity.collide(this);
}
}
@ -673,7 +673,7 @@ public class EntityMinecart extends Entity implements IInventory {
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound1.a("Slot", (byte) i);
this.items[i].a(nbttagcompound1);
this.items[i].b(nbttagcompound1);
nbttaglist.a((NBTBase) nbttagcompound1);
}
}
@ -698,7 +698,7 @@ public class EntityMinecart extends Entity implements IInventory {
int j = nbttagcompound1.c("Slot") & 255;
if (j >= 0 && j < this.items.length) {
this.items[j] = new ItemStack(nbttagcompound1);
this.items[j] = ItemStack.a(nbttagcompound1);
}
}
}
@ -749,8 +749,8 @@ public class EntityMinecart extends Entity implements IInventory {
d1 *= d3;
d0 *= 0.10000000149011612D;
d1 *= 0.10000000149011612D;
d0 *= (double) (1.0F - this.bu);
d1 *= (double) (1.0F - this.bu);
d0 *= (double) (1.0F - this.bK);
d1 *= (double) (1.0F - this.bK);
d0 *= 0.5D;
d1 *= 0.5D;
if (entity instanceof EntityMinecart) {
@ -843,7 +843,7 @@ public class EntityMinecart extends Entity implements IInventory {
public void update() {}
public boolean a(EntityHuman entityhuman) {
public boolean b(EntityHuman entityhuman) {
if (this.type == 0) {
if (this.passenger != null && this.passenger instanceof EntityHuman && this.passenger != entityhuman) {
return true;
@ -885,7 +885,11 @@ public class EntityMinecart extends Entity implements IInventory {
return true;
}
public boolean a_(EntityHuman entityhuman) {
return this.dead ? false : entityhuman.g(this) <= 64.0D;
public boolean a(EntityHuman entityhuman) {
return this.dead ? false : entityhuman.h(this) <= 64.0D;
}
public void e() {}
public void t_() {}
}

View file

@ -7,27 +7,28 @@ import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityTargetEvent;
// CraftBukkit end
public class EntityMonster extends EntityCreature implements IMonster {
public abstract class EntityMonster extends EntityCreature implements IMonster {
protected int damage = 2;
public EntityMonster(World world) {
super(world);
this.health = 20;
this.ax = 5;
}
public void v() {
float f = this.c(1.0F);
public void s() {
float f = this.a_(1.0F);
if (f > 0.5F) {
this.ay += 2;
this.aO += 2;
}
super.v();
super.s();
}
public void m_() {
super.m_();
public void s_() {
super.s_();
if (!this.world.isStatic && this.world.spawnMonsters == 0) {
this.die();
}
@ -36,11 +37,13 @@ public class EntityMonster extends EntityCreature implements IMonster {
protected Entity findTarget() {
EntityHuman entityhuman = this.world.findNearbyPlayer(this, 16.0D);
return entityhuman != null && this.e(entityhuman) ? entityhuman : null;
return entityhuman != null && this.f(entityhuman) ? entityhuman : null;
}
public boolean damageEntity(Entity entity, int i) {
if (super.damageEntity(entity, i)) {
public boolean damageEntity(DamageSource damagesource, int i) {
if (super.damageEntity(damagesource, i)) {
Entity entity = damagesource.a();
if (this.passenger != entity && this.vehicle != entity) {
if (entity != this) {
// CraftBukkit start
@ -68,31 +71,36 @@ public class EntityMonster extends EntityCreature implements IMonster {
}
}
protected boolean c(Entity entity) {
// CraftBukkit start - this is still duplicated here and EntityHuman because it's possible for lastDamage EntityMonster
// to damage another EntityMonster, and we want to catch those events.
// This does not fire events for slime attacks, av they're not lastDamage EntityMonster.
if (entity instanceof EntityLiving && !(entity instanceof EntityHuman)) {
org.bukkit.entity.Entity damagee = (entity == null) ? null : entity.getBukkitEntity();
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(this.getBukkitEntity(), damagee, EntityDamageEvent.DamageCause.ENTITY_ATTACK, this.damage);
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
return entity.damageEntity(DamageSource.a(this), event.getDamage());
}
return false;
}
// CraftBukkit end
return entity.damageEntity(DamageSource.a((EntityLiving) this), this.damage);
}
protected void a(Entity entity, float f) {
if (this.attackTicks <= 0 && f < 2.0F && entity.boundingBox.e > this.boundingBox.b && entity.boundingBox.b < this.boundingBox.e) {
this.attackTicks = 20;
// CraftBukkit start - this is still duplicated here and EntityHuman because it's possible for lastDamage EntityMonster
// to damage another EntityMonster, and we want to catch those events.
// This does not fire events for slime attacks, av they're not lastDamage EntityMonster.
if (entity instanceof EntityLiving && !(entity instanceof EntityHuman)) {
org.bukkit.entity.Entity damagee = (entity == null) ? null : entity.getBukkitEntity();
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(this.getBukkitEntity(), damagee, EntityDamageEvent.DamageCause.ENTITY_ATTACK, this.damage);
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
entity.damageEntity(this, event.getDamage());
}
return;
}
// CraftBukkit end
entity.damageEntity(this, this.damage);
this.c(entity);
}
}
protected float a(int i, int j, int k) {
return 0.5F - this.world.n(i, j, k);
return 0.5F - this.world.m(i, j, k);
}
public void b(NBTTagCompound nbttagcompound) {
@ -113,12 +121,12 @@ public class EntityMonster extends EntityCreature implements IMonster {
} else {
int l = this.world.getLightLevel(i, j, k);
if (this.world.u()) {
int i1 = this.world.f;
if (this.world.t()) {
int i1 = this.world.k;
this.world.f = 10;
this.world.k = 10;
l = this.world.getLightLevel(i, j, k);
this.world.f = i1;
this.world.k = i1;
}
return l <= this.random.nextInt(8) && super.d();

View file

@ -39,7 +39,7 @@ public class EntityPainting extends Entity {
this.e = enumart;
this.b(l);
if (this.h()) {
if (this.i()) {
arraylist.add(enumart);
}
}
@ -117,10 +117,10 @@ public class EntityPainting extends Entity {
return i == 32 ? 0.5F : (i == 64 ? 0.5F : 0.0F);
}
public void m_() {
public void s_() {
if (this.f++ == 100 && !this.world.isStatic) {
this.f = 0;
if (!this.h()) {
if (!this.i()) {
// CraftBukkit start
PaintingBreakByWorldEvent event = new PaintingBreakByWorldEvent((org.bukkit.entity.Painting) this.getBukkitEntity());
this.world.getServer().getPluginManager().callEvent(event);
@ -136,7 +136,7 @@ public class EntityPainting extends Entity {
}
}
public boolean h() {
public boolean i() {
if (this.world.getEntities(this, this.boundingBox).size() > 0) {
return false;
} else {
@ -194,14 +194,14 @@ public class EntityPainting extends Entity {
}
}
public boolean l_() {
public boolean r_() {
return true;
}
public boolean damageEntity(Entity entity, int i) {
public boolean damageEntity(DamageSource damagesource, int i) {
if (!this.dead && !this.world.isStatic) {
// CraftBukkit start
PaintingBreakByEntityEvent event = new PaintingBreakByEntityEvent((org.bukkit.entity.Painting) this.getBukkitEntity(), entity == null ? null : entity.getBukkitEntity());
PaintingBreakByEntityEvent event = new PaintingBreakByEntityEvent((org.bukkit.entity.Painting) this.getBukkitEntity(), damagesource.a() == null ? null : damagesource.a().getBukkitEntity());
this.world.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
@ -210,7 +210,7 @@ public class EntityPainting extends Entity {
// CraftBukkit end
this.die();
this.af();
this.aq();
this.world.addEntity(new EntityItem(this.world, this.locX, this.locY, this.locZ, new ItemStack(Item.PAINTING)));
}
@ -249,7 +249,7 @@ public class EntityPainting extends Entity {
this.b(this.a);
}
public void a(double d0, double d1, double d2) {
public void a_(double d0, double d1, double d2) {
if (!this.world.isStatic && d0 * d0 + d1 * d1 + d2 * d2 > 0.0D) {
this.die();
this.world.addEntity(new EntityItem(this.world, this.locX, this.locY, this.locZ, new ItemStack(Item.PAINTING)));

View file

@ -27,19 +27,19 @@ public class EntityPig extends EntityAnimal {
this.setSaddle(nbttagcompound.m("Saddle"));
}
protected String g() {
return "mob.pig";
}
protected String h() {
return "mob.pig";
}
protected String i() {
return "mob.pig";
}
protected String j() {
return "mob.pigdeath";
}
public boolean a(EntityHuman entityhuman) {
public boolean b(EntityHuman entityhuman) {
if (this.hasSaddle() && !this.world.isStatic && (this.passenger == null || this.passenger == entityhuman)) {
entityhuman.mount(this);
return true;
@ -48,7 +48,7 @@ public class EntityPig extends EntityAnimal {
}
}
protected int j() {
protected int k() {
return this.fireTicks > 0 ? Item.GRILLED_PORK.id : Item.PORK.id;
}

View file

@ -11,23 +11,23 @@ public class EntityPigZombie extends EntityZombie {
public int angerLevel = 0; // CraftBukkit - private -> public
private int soundDelay = 0;
private static final ItemStack f = new ItemStack(Item.GOLD_SWORD, 1);
private static final ItemStack g = new ItemStack(Item.GOLD_SWORD, 1);
public EntityPigZombie(World world) {
super(world);
this.texture = "/mob/pigzombie.png";
this.aE = 0.5F;
this.aU = 0.5F;
this.damage = 5;
this.fireProof = true;
}
public void m_() {
this.aE = this.target != null ? 0.95F : 0.5F;
public void s_() {
this.aU = this.target != null ? 0.95F : 0.5F;
if (this.soundDelay > 0 && --this.soundDelay == 0) {
this.world.makeSound(this, "mob.zombiepig.zpigangry", this.k() * 2.0F, ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) * 1.8F);
this.world.makeSound(this, "mob.zombiepig.zpigangry", this.l() * 2.0F, ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) * 1.8F);
}
super.m_();
super.s_();
}
public boolean d() {
@ -48,11 +48,13 @@ public class EntityPigZombie extends EntityZombie {
return this.angerLevel == 0 ? null : super.findTarget();
}
public void v() {
super.v();
public void s() {
super.s();
}
public boolean damageEntity(Entity entity, int i) {
public boolean damageEntity(DamageSource damagesource, int i) {
Entity entity = damagesource.a();
if (entity instanceof EntityHuman) {
List list = this.world.b((Entity) this, this.boundingBox.b(32.0D, 32.0D, 32.0D));
@ -62,17 +64,17 @@ public class EntityPigZombie extends EntityZombie {
if (entity1 instanceof EntityPigZombie) {
EntityPigZombie entitypigzombie = (EntityPigZombie) entity1;
entitypigzombie.d(entity);
entitypigzombie.e(entity);
}
}
this.d(entity);
this.e(entity);
}
return super.damageEntity(entity, i);
return super.damageEntity(damagesource, i);
}
private void d(Entity entity) {
private void e(Entity entity) {
// CraftBukkit start
org.bukkit.entity.Entity bukkitTarget = entity == null ? null : entity.getBukkitEntity();
@ -95,19 +97,19 @@ public class EntityPigZombie extends EntityZombie {
this.soundDelay = this.random.nextInt(40);
}
protected String g() {
protected String h() {
return "mob.zombiepig.zpig";
}
protected String h() {
protected String i() {
return "mob.zombiepig.zpighurt";
}
protected String i() {
protected String j() {
return "mob.zombiepig.zpigdeath";
}
protected int j() {
protected int k() {
return Item.GRILLED_PORK.id;
}
}

View file

@ -23,11 +23,15 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
public double e;
public List chunkCoordIntPairQueue = new LinkedList();
public Set playerChunkCoordIntPairs = new HashSet();
private int bL = -99999999;
private int bM = 60;
private ItemStack[] bN = new ItemStack[] { null, null, null, null, null};
private int bO = 0;
private int cb = -99999999;
private int cc = -99999999;
private boolean cd = true;
private int ce = -99999999;
private int cf = 60;
private ItemStack[] cg = new ItemStack[] { null, null, null, null, null};
private int ch = 0;
public boolean h;
public int i;
public EntityPlayer(MinecraftServer minecraftserver, World world, String s, ItemInWorldManager iteminworldmanager) {
super(world);
@ -46,7 +50,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
this.setPositionRotation((double) i + 0.5D, (double) k, (double) j + 0.5D, 0.0F, 0.0F);
this.b = minecraftserver;
this.bs = 0.0F;
this.bI = 0.0F;
this.name = s;
this.height = 0.0F;
@ -58,6 +62,18 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
public org.bukkit.Location compassTarget;
// CraftBukkit end
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
if (nbttagcompound.hasKey("playerGameType")) {
this.itemInWorldManager.a(nbttagcompound.e("playerGameType"));
}
}
public void b(NBTTagCompound nbttagcompound) {
super.b(nbttagcompound);
nbttagcompound.a("playerGameType", this.itemInWorldManager.a());
}
public void spawnIn(World world) {
super.spawnIn(world);
// CraftBukkit - world fallback code, either respawn location or global spawn
@ -89,10 +105,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
}
public ItemStack[] getEquipment() {
return this.bN;
return this.cg;
}
protected void s() {
protected void m_() {
this.height = 0.0F;
}
@ -100,26 +116,27 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
return 1.62F;
}
public void m_() {
this.itemInWorldManager.a();
--this.bM;
public void s_() {
this.itemInWorldManager.c();
--this.cf;
this.activeContainer.a();
for (int i = 0; i < 5; ++i) {
ItemStack itemstack = this.c_(i);
ItemStack itemstack = this.b(i);
if (itemstack != this.bN[i]) {
if (itemstack != this.cg[i]) {
this.b.getTracker(this.dimension).a(this, new Packet5EntityEquipment(this.id, i, itemstack));
this.bN[i] = itemstack;
this.cg[i] = itemstack;
}
}
}
public ItemStack c_(int i) {
public ItemStack b(int i) {
return i == 0 ? this.inventory.getItemInHand() : this.inventory.armor[i - 1];
}
public void die(Entity entity) {
public void die(DamageSource damagesource) {
this.b.serverConfigurationManager.sendAll(new Packet3Chat(damagesource.a((EntityHuman) this)));
// CraftBukkit start
java.util.List<org.bukkit.inventory.ItemStack> loot = new java.util.ArrayList<org.bukkit.inventory.ItemStack>();
@ -158,12 +175,14 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
// CraftBukkit end
}
public boolean damageEntity(Entity entity, int i) {
if (this.bM > 0) {
public boolean damageEntity(DamageSource damagesource, int i) {
if (this.cf > 0) {
return false;
} else {
// CraftBukkit - this.b.pvpMode -> this.world.pvpMode
if (!this.world.pvpMode) {
if (!this.world.pvpMode && damagesource instanceof EntityDamageSource) {
Entity entity = damagesource.a();
if (entity instanceof EntityHuman) {
return false;
}
@ -177,26 +196,26 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
}
}
return super.damageEntity(entity, i);
return super.damageEntity(damagesource, i);
}
}
protected boolean j_() {
protected boolean n_() {
return this.b.pvpMode;
}
public void b(int i) {
super.b(i, RegainReason.EATING);
public void c(int i) {
super.c(i, RegainReason.EATING);
}
public void a(boolean flag) {
super.m_();
public void b(boolean flag) {
super.s_();
for (int i = 0; i < this.inventory.getSize(); ++i) {
ItemStack itemstack = this.inventory.getItem(i);
if (itemstack != null && Item.byId[itemstack.id].b() && this.netServerHandler.b() <= 2) {
Packet packet = ((ItemWorldMapBase) Item.byId[itemstack.id]).b(itemstack, this.world, this);
if (itemstack != null && Item.byId[itemstack.id].i_() && this.netServerHandler.b() <= 2) {
Packet packet = ((ItemWorldMapBase) Item.byId[itemstack.id]).c(itemstack, this.world, this);
if (packet != null) {
this.netServerHandler.sendPacket(packet);
@ -218,58 +237,82 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
WorldServer worldserver = this.b.getWorldServer(this.dimension);
this.chunkCoordIntPairQueue.remove(chunkcoordintpair);
this.netServerHandler.sendPacket(new Packet51MapChunk(chunkcoordintpair.x * 16, 0, chunkcoordintpair.z * 16, 16, 128, 16, worldserver));
List list = worldserver.getTileEntities(chunkcoordintpair.x * 16, 0, chunkcoordintpair.z * 16, chunkcoordintpair.x * 16 + 16, 128, chunkcoordintpair.z * 16 + 16);
NetServerHandler netserverhandler = this.netServerHandler;
for (int j = 0; j < list.size(); ++j) {
this.a((TileEntity) list.get(j));
int j = chunkcoordintpair.x * 16;
int k = chunkcoordintpair.z * 16;
worldserver.getClass();
Packet51MapChunk packet51mapchunk = new Packet51MapChunk(j, 0, k, 16, 128, 16, worldserver);
netserverhandler.sendPacket(packet51mapchunk);
int l = chunkcoordintpair.x * 16;
j = chunkcoordintpair.z * 16;
int i1 = chunkcoordintpair.x * 16 + 16;
worldserver.getClass();
List list = worldserver.getTileEntities(l, 0, j, i1, 128, chunkcoordintpair.z * 16 + 16);
for (int j1 = 0; j1 < list.size(); ++j1) {
this.a((TileEntity) list.get(j1));
}
}
}
}
if (this.E) {
if (this.I) {
//if (this.b.propertyManager.getBoolean("allow-nether", true)) { // CraftBukkit
if (this.activeContainer != this.defaultContainer) {
this.y();
this.x();
}
if (this.vehicle != null) {
this.mount(this.vehicle);
} else {
this.F += 0.0125F;
if (this.F >= 1.0F) {
this.F = 1.0F;
this.D = 10;
this.J += 0.0125F;
if (this.J >= 1.0F) {
this.J = 1.0F;
this.H = 10;
this.b.serverConfigurationManager.f(this);
this.ce = -1;
this.cb = -1;
this.cc = -1;
}
}
this.E = false;
this.I = false;
//} // CraftBukkit
} else {
if (this.F > 0.0F) {
this.F -= 0.05F;
if (this.J > 0.0F) {
this.J -= 0.05F;
}
if (this.F < 0.0F) {
this.F = 0.0F;
if (this.J < 0.0F) {
this.J = 0.0F;
}
}
if (this.D > 0) {
--this.D;
if (this.H > 0) {
--this.H;
}
if (this.health != this.bL) {
this.netServerHandler.sendPacket(new Packet8UpdateHealth(this.health));
this.bL = this.health;
if (this.health != this.cb || this.cc != this.m.a() || this.m.c() == 0.0F != this.cd) {
this.netServerHandler.sendPacket(new Packet8UpdateHealth(this.health, this.m.a(), this.m.c()));
this.cb = this.health;
this.cc = this.m.a();
this.cd = this.m.c() == 0.0F;
}
if (this.expTotal != this.ce) {
this.ce = this.expTotal;
this.netServerHandler.sendPacket(new Packet43SetExperience(this.exp, this.expTotal, this.expLevel));
}
}
private void a(TileEntity tileentity) {
if (tileentity != null) {
Packet packet = tileentity.f();
Packet packet = tileentity.l();
if (packet != null) {
this.netServerHandler.sendPacket(packet);
@ -277,10 +320,6 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
}
}
public void v() {
super.v();
}
public void receive(Entity entity, int i) {
if (!entity.dead) {
EntityTracker entitytracker = this.b.getTracker(this.dimension);
@ -292,23 +331,27 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
if (entity instanceof EntityArrow) {
entitytracker.a(entity, new Packet22Collect(entity.id, this.id));
}
if (entity instanceof EntityExperienceOrb) {
entitytracker.a(entity, new Packet22Collect(entity.id, this.id));
}
}
super.receive(entity, i);
this.activeContainer.a();
}
public void w() {
if (!this.p) {
this.q = -1;
this.p = true;
public void v() {
if (!this.s) {
this.t = -1;
this.s = true;
EntityTracker entitytracker = this.b.getTracker(this.dimension);
entitytracker.a(this, new Packet18ArmAnimation(this, 1));
}
}
public void x() {}
public void w() {}
public EnumBedError a(int i, int j, int k) {
EnumBedError enumbederror = super.a(i, j, k);
@ -360,39 +403,39 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
super.a(d0, flag);
}
private void ai() {
this.bO = this.bO % 100 + 1;
private void au() {
this.ch = this.ch % 100 + 1;
}
public void b(int i, int j, int k) {
this.ai();
this.netServerHandler.sendPacket(new Packet100OpenWindow(this.bO, 1, "Crafting", 9));
this.au();
this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ch, 1, "Crafting", 9));
this.activeContainer = new ContainerWorkbench(this.inventory, this.world, i, j, k);
this.activeContainer.windowId = this.bO;
this.activeContainer.windowId = this.ch;
this.activeContainer.a((ICrafting) this);
}
public void a(IInventory iinventory) {
this.ai();
this.netServerHandler.sendPacket(new Packet100OpenWindow(this.bO, 0, iinventory.getName(), iinventory.getSize()));
this.au();
this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ch, 0, iinventory.getName(), iinventory.getSize()));
this.activeContainer = new ContainerChest(this.inventory, iinventory);
this.activeContainer.windowId = this.bO;
this.activeContainer.windowId = this.ch;
this.activeContainer.a((ICrafting) this);
}
public void a(TileEntityFurnace tileentityfurnace) {
this.ai();
this.netServerHandler.sendPacket(new Packet100OpenWindow(this.bO, 2, tileentityfurnace.getName(), tileentityfurnace.getSize()));
this.au();
this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ch, 2, tileentityfurnace.getName(), tileentityfurnace.getSize()));
this.activeContainer = new ContainerFurnace(this.inventory, tileentityfurnace);
this.activeContainer.windowId = this.bO;
this.activeContainer.windowId = this.ch;
this.activeContainer.a((ICrafting) this);
}
public void a(TileEntityDispenser tileentitydispenser) {
this.ai();
this.netServerHandler.sendPacket(new Packet100OpenWindow(this.bO, 3, tileentitydispenser.getName(), tileentitydispenser.getSize()));
this.au();
this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ch, 3, tileentitydispenser.getName(), tileentitydispenser.getSize()));
this.activeContainer = new ContainerDispenser(this.inventory, tileentitydispenser);
this.activeContainer.windowId = this.bO;
this.activeContainer.windowId = this.ch;
this.activeContainer.a((ICrafting) this);
}
@ -410,7 +453,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
public void a(Container container, List list) {
this.netServerHandler.sendPacket(new Packet104WindowItems(container.windowId, list));
this.netServerHandler.sendPacket(new Packet103SetSlot(-1, -1, this.inventory.j()));
this.netServerHandler.sendPacket(new Packet103SetSlot(-1, -1, this.inventory.l()));
}
public void a(Container container, int i, int j) {
@ -419,26 +462,26 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
public void a(ItemStack itemstack) {}
public void y() {
public void x() {
this.netServerHandler.sendPacket(new Packet101CloseWindow(this.activeContainer.windowId));
this.A();
this.z();
}
public void z() {
public void y() {
if (!this.h) {
this.netServerHandler.sendPacket(new Packet103SetSlot(-1, -1, this.inventory.j()));
this.netServerHandler.sendPacket(new Packet103SetSlot(-1, -1, this.inventory.l()));
}
}
public void A() {
public void z() {
this.activeContainer.a((EntityHuman) this);
this.activeContainer = this.defaultContainer;
}
public void a(float f, float f1, boolean flag, boolean flag1, float f2, float f3) {
this.az = f;
this.aA = f1;
this.aC = flag;
this.aP = f;
this.aQ = f1;
this.aS = flag;
this.setSneak(flag1);
this.pitch = f2;
this.yaw = f3;
@ -457,7 +500,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
}
}
public void B() {
public void A() {
if (this.vehicle != null) {
this.mount(this.vehicle);
}
@ -471,8 +514,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
}
}
public void C() {
this.bL = -99999999;
public void B() {
this.cb = -99999999;
}
public void a(String s) {
@ -482,6 +525,35 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
this.netServerHandler.sendPacket(new Packet3Chat(s1));
}
protected void C() {
this.netServerHandler.sendPacket(new Packet38EntityStatus(this.id, (byte) 9));
super.C();
}
public void a(ItemStack itemstack, int i) {
super.a(itemstack, i);
if (itemstack != null && itemstack.getItem() != null && itemstack.getItem().b(itemstack) == EnumAnimation.b) {
EntityTracker entitytracker = this.b.getTracker(this.dimension);
entitytracker.sendPacketToEntity(this, new Packet18ArmAnimation(this, 5));
}
}
protected void a(MobEffect mobeffect) {
super.a(mobeffect);
this.netServerHandler.sendPacket(new Packet41MobEffect(this.id, mobeffect));
}
protected void b(MobEffect mobeffect) {
super.b(mobeffect);
this.netServerHandler.sendPacket(new Packet41MobEffect(this.id, mobeffect));
}
protected void c(MobEffect mobeffect) {
super.c(mobeffect);
this.netServerHandler.sendPacket(new Packet42RemoveMobEffect(this.id, mobeffect));
}
// CraftBukkit start
public long timeOffset = 0;
public boolean relativeTime = true;

View file

@ -17,11 +17,7 @@ public class EntitySheep extends EntityAnimal {
this.datawatcher.a(16, new Byte((byte) 0));
}
public boolean damageEntity(Entity entity, int i) {
return super.damageEntity(entity, i);
}
protected void q() {
protected void a(boolean flag) {
// CraftBukkit start - whole method
java.util.List<org.bukkit.inventory.ItemStack> loot = new java.util.ArrayList<org.bukkit.inventory.ItemStack>();
@ -41,11 +37,11 @@ public class EntitySheep extends EntityAnimal {
// CraftBukkit end
}
protected int j() {
protected int k() {
return Block.WOOL.id;
}
public boolean a(EntityHuman entityhuman) {
public boolean b(EntityHuman entityhuman) {
ItemStack itemstack = entityhuman.inventory.getItemInHand();
if (itemstack != null && itemstack.id == Item.SHEARS.id && !this.isSheared()) {
@ -80,10 +76,6 @@ public class EntitySheep extends EntityAnimal {
this.setColor(nbttagcompound.c("Color"));
}
protected String g() {
return "mob.sheep";
}
protected String h() {
return "mob.sheep";
}
@ -92,6 +84,10 @@ public class EntitySheep extends EntityAnimal {
return "mob.sheep";
}
protected String j() {
return "mob.sheep";
}
public int getColor() {
return this.datawatcher.a(16) & 15;
}

View file

@ -14,21 +14,38 @@ public class EntitySkeleton extends EntityMonster {
this.texture = "/mob/skeleton.png";
}
protected String g() {
return "mob.skeleton";
}
protected String h() {
return "mob.skeletonhurt";
return "mob.skeleton";
}
protected String i() {
return "mob.skeletonhurt";
}
public void v() {
if (this.world.d()) {
float f = this.c(1.0F);
protected String j() {
return "mob.skeletonhurt";
}
public boolean a(DamageSource damagesource, int i) {
return super.damageEntity(damagesource, i);
}
public void a(DamageSource damagesource) {
super.die(damagesource);
if (damagesource.e() instanceof EntityArrow && damagesource.a() instanceof EntityHuman) {
EntityHuman entityhuman = (EntityHuman) damagesource.a();
double d0 = entityhuman.locX - this.locX;
double d1 = entityhuman.locZ - this.locZ;
if (d0 * d0 + d1 * d1 >= 2500.0D) {
entityhuman.a((Statistic) AchievementList.v);
}
}
}
public void s() {
if (this.world.d() && !this.world.isStatic) {
float f = this.a_(1.0F);
if (f > 0.5F && this.world.isChunkLoaded(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ)) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F) {
// CraftBukkit start
@ -42,7 +59,7 @@ public class EntitySkeleton extends EntityMonster {
}
}
super.v();
super.s();
}
protected void a(Entity entity, float f) {
@ -51,16 +68,14 @@ public class EntitySkeleton extends EntityMonster {
double d1 = entity.locZ - this.locZ;
if (this.attackTicks == 0) {
EntityArrow entityarrow = new EntityArrow(this.world, this);
++entityarrow.locY;
double d2 = entity.locY + (double) entity.t() - 0.20000000298023224D - entityarrow.locY;
EntityArrow entityarrow = new EntityArrow(this.world, this, 1.0F);
double d2 = entity.locY + (double) entity.t() - 0.699999988079071D - entityarrow.locY;
float f1 = MathHelper.a(d0 * d0 + d1 * d1) * 0.2F;
this.world.makeSound(this, "random.bow", 1.0F, 1.0F / (this.random.nextFloat() * 0.4F + 0.8F));
this.world.addEntity(entityarrow);
entityarrow.a(d0, d2 + (double) f1, d1, 0.6F, 12.0F);
this.attackTicks = 30;
entityarrow.a(d0, d2 + (double) f1, d1, 1.6F, 12.0F);
this.attackTicks = 60;
}
this.yaw = (float) (Math.atan2(d1, d0) * 180.0D / 3.1415927410125732D) - 90.0F;
@ -76,11 +91,11 @@ public class EntitySkeleton extends EntityMonster {
super.a(nbttagcompound);
}
protected int j() {
protected int k() {
return Item.ARROW.id;
}
protected void q() {
protected void a(boolean flag) {
// CraftBukkit start - whole method
java.util.List<org.bukkit.inventory.ItemStack> loot = new java.util.ArrayList<org.bukkit.inventory.ItemStack>();

View file

@ -77,11 +77,11 @@ public class EntitySnowball extends Entity {
this.h = 0;
}
public void m_() {
this.bo = this.locX;
this.bp = this.locY;
this.bq = this.locZ;
super.m_();
public void s_() {
this.bE = this.locX;
this.bF = this.locY;
this.bG = this.locZ;
super.s_();
if (this.a > 0) {
--this.a;
}
@ -126,13 +126,13 @@ public class EntitySnowball extends Entity {
for (int j = 0; j < list.size(); ++j) {
Entity entity1 = (Entity) list.get(j);
if (entity1.l_() && (entity1 != this.shooter || this.i >= 5)) {
if (entity1.r_() && (entity1 != this.shooter || this.i >= 5)) {
float f = 0.3F;
AxisAlignedBB axisalignedbb = entity1.boundingBox.b((double) f, (double) f, (double) f);
MovingObjectPosition movingobjectposition1 = axisalignedbb.a(vec3d, vec3d1);
if (movingobjectposition1 != null) {
double d1 = vec3d.a(movingobjectposition1.f);
double d1 = vec3d.b(movingobjectposition1.f);
if (d1 < d0 || d0 == 0.0D) {
entity = entity1;
@ -167,10 +167,10 @@ public class EntitySnowball extends Entity {
stick = !projectile.doesBounce();
} else {
// this function returns if the snowball should stick in or not, i.e. !bounce
stick = movingobjectposition.entity.damageEntity(this, event.getDamage());
stick = movingobjectposition.entity.damageEntity(DamageSource.a(this, this), event.getDamage());
}
} else {
stick = movingobjectposition.entity.damageEntity(this.shooter, 0);
stick = movingobjectposition.entity.damageEntity(DamageSource.a(this, this.shooter), 0);
}
if (stick) {
;
@ -213,7 +213,7 @@ public class EntitySnowball extends Entity {
float f2 = 0.99F;
float f3 = 0.03F;
if (this.ad()) {
if (this.ao()) {
for (int l = 0; l < 4; ++l) {
float f4 = 0.25F;
@ -248,7 +248,7 @@ public class EntitySnowball extends Entity {
this.f = nbttagcompound.c("inGround") == 1;
}
public void b(EntityHuman entityhuman) {
public void a_(EntityHuman entityhuman) {
if (this.f && this.shooter == entityhuman && this.a <= 0 && entityhuman.inventory.pickup(new ItemStack(Item.ARROW, 1))) {
this.world.makeSound(this, "random.pop", 0.2F, ((this.random.nextFloat() - this.random.nextFloat()) * 0.7F + 1.0F) * 2.0F);
entityhuman.receive(this, 1);

View file

@ -11,19 +11,19 @@ public class EntitySpider extends EntityMonster {
super(world);
this.texture = "/mob/spider.png";
this.b(1.4F, 0.9F);
this.aE = 0.8F;
this.aU = 0.8F;
}
public double m() {
public double n() {
return (double) this.width * 0.75D - 0.5D;
}
protected boolean n() {
protected boolean e_() {
return false;
}
protected Entity findTarget() {
float f = this.c(1.0F);
float f = this.a_(1.0F);
if (f < 0.5F) {
double d0 = 16.0D;
@ -34,20 +34,20 @@ public class EntitySpider extends EntityMonster {
}
}
protected String g() {
return "mob.spider";
}
protected String h() {
return "mob.spider";
}
protected String i() {
return "mob.spider";
}
protected String j() {
return "mob.spiderdeath";
}
protected void a(Entity entity, float f) {
float f1 = this.c(1.0F);
float f1 = this.a_(1.0F);
if (f1 > 0.5F && this.random.nextInt(100) == 0) {
// CraftBukkit start
@ -88,11 +88,13 @@ public class EntitySpider extends EntityMonster {
super.a(nbttagcompound);
}
protected int j() {
protected int k() {
return Item.STRING.id;
}
public boolean p() {
return this.positionChanged;
}
public void q() {}
}

View file

@ -7,23 +7,23 @@ public class EntitySquid extends EntityWaterAnimal {
public float a = 0.0F;
public float b = 0.0F;
public float c = 0.0F;
public float f = 0.0F;
public float g = 0.0F;
public float h = 0.0F;
public float i = 0.0F;
public float j = 0.0F;
private float k = 0.0F;
public float k = 0.0F;
private float l = 0.0F;
private float m = 0.0F;
private float n = 0.0F;
private float o = 0.0F;
private float p = 0.0F;
private float q = 0.0F;
public EntitySquid(World world) {
super(world);
this.texture = "/mob/squid.png";
this.b(0.95F, 0.95F);
this.l = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
this.m = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
}
public void b(NBTTagCompound nbttagcompound) {
@ -34,10 +34,6 @@ public class EntitySquid extends EntityWaterAnimal {
super.a(nbttagcompound);
}
protected String g() {
return null;
}
protected String h() {
return null;
}
@ -46,15 +42,19 @@ public class EntitySquid extends EntityWaterAnimal {
return null;
}
protected float k() {
protected String j() {
return null;
}
protected float l() {
return 0.4F;
}
protected int j() {
protected int k() {
return 0;
}
protected void q() {
protected void a(boolean flag) {
// CraftBukkit start - whole method
java.util.List<org.bukkit.inventory.ItemStack> loot = new java.util.ArrayList<org.bukkit.inventory.ItemStack>();
@ -75,60 +75,60 @@ public class EntitySquid extends EntityWaterAnimal {
// CraftBukkit end
}
public boolean a(EntityHuman entityhuman) {
public boolean b(EntityHuman entityhuman) {
return false;
}
public boolean ad() {
public boolean ao() {
return this.world.a(this.boundingBox.b(0.0D, -0.6000000238418579D, 0.0D), Material.WATER, this);
}
public void v() {
super.v();
public void s() {
super.s();
this.b = this.a;
this.f = this.c;
this.h = this.g;
this.j = this.i;
this.g += this.l;
if (this.g > 6.2831855F) {
this.g -= 6.2831855F;
this.g = this.c;
this.i = this.h;
this.k = this.j;
this.h += this.m;
if (this.h > 6.2831855F) {
this.h -= 6.2831855F;
if (this.random.nextInt(10) == 0) {
this.l = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
this.m = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
}
}
if (this.ad()) {
if (this.ao()) {
float f;
if (this.g < 3.1415927F) {
f = this.g / 3.1415927F;
this.i = MathHelper.sin(f * f * 3.1415927F) * 3.1415927F * 0.25F;
if (this.h < 3.1415927F) {
f = this.h / 3.1415927F;
this.j = MathHelper.sin(f * f * 3.1415927F) * 3.1415927F * 0.25F;
if ((double) f > 0.75D) {
this.k = 1.0F;
this.m = 1.0F;
this.l = 1.0F;
this.n = 1.0F;
} else {
this.m *= 0.8F;
this.n *= 0.8F;
}
} else {
this.i = 0.0F;
this.k *= 0.9F;
this.m *= 0.99F;
this.j = 0.0F;
this.l *= 0.9F;
this.n *= 0.99F;
}
if (!this.Y) {
this.motX = (double) (this.n * this.k);
this.motY = (double) (this.o * this.k);
this.motZ = (double) (this.p * this.k);
if (!this.ai) {
this.motX = (double) (this.o * this.l);
this.motY = (double) (this.p * this.l);
this.motZ = (double) (this.q * this.l);
}
f = MathHelper.a(this.motX * this.motX + this.motZ * this.motZ);
this.K += (-((float) Math.atan2(this.motX, this.motZ)) * 180.0F / 3.1415927F - this.K) * 0.1F;
this.yaw = this.K;
this.c += 3.1415927F * this.m * 1.5F;
this.U += (-((float) Math.atan2(this.motX, this.motZ)) * 180.0F / 3.1415927F - this.U) * 0.1F;
this.yaw = this.U;
this.c += 3.1415927F * this.n * 1.5F;
this.a += (-((float) Math.atan2((double) f, this.motY)) * 180.0F / 3.1415927F - this.a) * 0.1F;
} else {
this.i = MathHelper.abs(MathHelper.sin(this.g)) * 3.1415927F * 0.25F;
if (!this.Y) {
this.j = MathHelper.abs(MathHelper.sin(this.h)) * 3.1415927F * 0.25F;
if (!this.ai) {
this.motX = 0.0D;
this.motY -= 0.08D;
this.motY *= 0.9800000190734863D;
@ -144,14 +144,14 @@ public class EntitySquid extends EntityWaterAnimal {
}
protected void c_() {
if (this.random.nextInt(50) == 0 || !this.bA || this.n == 0.0F && this.o == 0.0F && this.p == 0.0F) {
if (this.random.nextInt(50) == 0 || !this.bQ || this.o == 0.0F && this.p == 0.0F && this.q == 0.0F) {
float f = this.random.nextFloat() * 3.1415927F * 2.0F;
this.n = MathHelper.cos(f) * 0.2F;
this.o = -0.1F + this.random.nextFloat() * 0.2F;
this.p = MathHelper.sin(f) * 0.2F;
this.o = MathHelper.cos(f) * 0.2F;
this.p = -0.1F + this.random.nextFloat() * 0.2F;
this.q = MathHelper.sin(f) * 0.2F;
}
this.U();
this.ad();
}
}
}

View file

@ -16,7 +16,7 @@ public class EntityTNTPrimed extends Entity {
public EntityTNTPrimed(World world) {
super(world);
this.fuseTicks = 0;
this.aI = true;
this.aY = true;
this.b(0.98F, 0.98F);
this.height = this.width / 2.0F;
}
@ -37,15 +37,15 @@ public class EntityTNTPrimed extends Entity {
protected void b() {}
protected boolean n() {
protected boolean e_() {
return false;
}
public boolean l_() {
public boolean r_() {
return !this.dead;
}
public void m_() {
public void s_() {
this.lastX = this.locX;
this.lastY = this.locY;
this.lastZ = this.locZ;

View file

@ -52,13 +52,15 @@ public class EntityTracker {
} else if (entity instanceof EntitySquid) {
this.a(entity, 160, 3, true);
} else if (entity instanceof IAnimal) {
this.a(entity, 160, 3);
this.a(entity, 160, 3, true);
} else if (entity instanceof EntityTNTPrimed) {
this.a(entity, 160, 10, true);
} else if (entity instanceof EntityFallingSand) {
this.a(entity, 160, 20, true);
} else if (entity instanceof EntityPainting) {
this.a(entity, 160, Integer.MAX_VALUE, false);
} else if (entity instanceof EntityExperienceOrb) {
this.a(entity, 160, 20, true);
}
}

View file

@ -60,7 +60,7 @@ public class EntityTrackerEntry {
}
++this.t;
if (++this.l % this.c == 0) {
if (++this.l % this.c == 0 || this.tracker.ca) {
int i = MathHelper.floor(this.tracker.locX * 32.0D);
int j = MathHelper.floor(this.tracker.locY * 32.0D);
int k = MathHelper.floor(this.tracker.locZ * 32.0D);
@ -108,7 +108,7 @@ public class EntityTrackerEntry {
this.a((Packet) object);
}
DataWatcher datawatcher = this.tracker.aa();
DataWatcher datawatcher = this.tracker.al();
if (datawatcher.a()) {
this.b((Packet) (new Packet40EntityMetadata(this.tracker.id, datawatcher)));
@ -126,6 +126,7 @@ public class EntityTrackerEntry {
}
}
this.tracker.ca = false;
if (this.tracker.velocityChanged) {
// CraftBukkit start - create PlayerVelocity event
boolean cancelled = false;
@ -208,6 +209,17 @@ public class EntityTrackerEntry {
entityplayer.netServerHandler.sendPacket(new Packet17(this.tracker, 0, MathHelper.floor(this.tracker.locX), MathHelper.floor(this.tracker.locY), MathHelper.floor(this.tracker.locZ)));
}
}
if (this.tracker instanceof EntityLiving) {
EntityLiving entityliving = (EntityLiving) this.tracker;
Iterator iterator = entityliving.ak().iterator();
while (iterator.hasNext()) {
MobEffect mobeffect = (MobEffect) iterator.next();
entityplayer.netServerHandler.sendPacket(new Packet41MobEffect(this.tracker.id, mobeffect));
}
}
}
} else if (this.trackedPlayers.contains(entityplayer)) {
this.trackedPlayers.remove(entityplayer);
@ -262,9 +274,9 @@ public class EntityTrackerEntry {
} else if (this.tracker instanceof EntityFish) {
return new Packet23VehicleSpawn(this.tracker, 90);
} else if (this.tracker instanceof EntityArrow) {
EntityLiving entityliving = ((EntityArrow) this.tracker).shooter;
Entity entity = ((EntityArrow) this.tracker).shooter;
return new Packet23VehicleSpawn(this.tracker, 60, entityliving != null ? entityliving.id : this.tracker.id);
return new Packet23VehicleSpawn(this.tracker, 60, entity != null ? entity.id : this.tracker.id);
} else if (this.tracker instanceof EntitySnowball) {
return new Packet23VehicleSpawn(this.tracker, 61);
} else if (this.tracker instanceof EntityFireball) {
@ -297,6 +309,8 @@ public class EntityTrackerEntry {
if (this.tracker instanceof EntityPainting) {
return new Packet25EntityPainting((EntityPainting) this.tracker);
} else if (this.tracker instanceof EntityExperienceOrb) {
return new Packet26AddExpOrb((EntityExperienceOrb) this.tracker);
} else {
throw new IllegalArgumentException("Don\'t know how to add " + this.tracker.getClass() + "!");
}

View file

@ -72,8 +72,8 @@ public class EntityWeatherStorm extends EntityWeather {
}
}
public void m_() {
super.m_();
public void s_() {
super.s_();
if (this.lifeTicks == 2) {
this.world.makeSound(this.locX, this.locY, this.locZ, "ambient.weather.thunder", 10000.0F, 0.8F + this.random.nextFloat() * 0.2F);
this.world.makeSound(this.locX, this.locY, this.locZ, "random.explode", 2.0F, 0.5F + this.random.nextFloat() * 0.2F);

View file

@ -17,16 +17,16 @@ public class EntityWolf extends EntityAnimal {
private boolean a = false;
private float b;
private float c;
private boolean f;
private boolean g;
private float h;
private boolean h;
private float i;
private float j;
public EntityWolf(World world) {
super(world);
this.texture = "/mob/wolf.png";
this.b(0.8F, 0.8F);
this.aE = 1.1F;
this.aU = 1.1F;
this.health = 8;
}
@ -37,7 +37,7 @@ public class EntityWolf extends EntityAnimal {
this.datawatcher.a(18, new Integer(this.health));
}
protected boolean n() {
protected boolean e_() {
return false;
}
@ -64,45 +64,45 @@ public class EntityWolf extends EntityAnimal {
}
}
protected boolean h_() {
protected boolean d_() {
return !this.isTamed();
}
protected String g() {
protected String h() {
return this.isAngry() ? "mob.wolf.growl" : (this.random.nextInt(3) == 0 ? (this.isTamed() && this.datawatcher.b(18) < 10 ? "mob.wolf.whine" : "mob.wolf.panting") : "mob.wolf.bark");
}
protected String h() {
protected String i() {
return "mob.wolf.hurt";
}
protected String i() {
protected String j() {
return "mob.wolf.death";
}
protected float k() {
protected float l() {
return 0.4F;
}
protected int j() {
protected int k() {
return -1;
}
protected void c_() {
super.c_();
if (!this.e && !this.C() && this.isTamed() && this.vehicle == null) {
if (!this.e && !this.B() && this.isTamed() && this.vehicle == null) {
EntityHuman entityhuman = this.world.a(this.getOwnerName());
if (entityhuman != null) {
float f = entityhuman.f(this);
float f = entityhuman.g(this);
if (f > 5.0F) {
this.c(entityhuman, f);
}
} else if (!this.ad()) {
} else if (!this.ao()) {
this.setSitting(true);
}
} else if (this.target == null && !this.C() && !this.isTamed() && this.world.random.nextInt(100) == 0) {
} else if (this.target == null && !this.B() && !this.isTamed() && this.world.random.nextInt(100) == 0) {
List list = this.world.a(EntitySheep.class, AxisAlignedBB.b(this.locX, this.locY, this.locZ, this.locX + 1.0D, this.locY + 1.0D, this.locZ + 1.0D).b(16.0D, 4.0D, 16.0D));
if (!list.isEmpty()) {
@ -120,7 +120,7 @@ public class EntityWolf extends EntityAnimal {
}
}
if (this.ad()) {
if (this.ao()) {
this.setSitting(false);
}
@ -129,11 +129,11 @@ public class EntityWolf extends EntityAnimal {
}
}
public void v() {
super.v();
public void s() {
super.s();
this.a = false;
if (this.V() && !this.C() && !this.isAngry()) {
Entity entity = this.W();
if (this.ae() && !this.B() && !this.isAngry()) {
Entity entity = this.af();
if (entity instanceof EntityHuman) {
EntityHuman entityhuman = (EntityHuman) entity;
@ -143,22 +143,22 @@ public class EntityWolf extends EntityAnimal {
if (!this.isTamed() && itemstack.id == Item.BONE.id) {
this.a = true;
} else if (this.isTamed() && Item.byId[itemstack.id] instanceof ItemFood) {
this.a = ((ItemFood) Item.byId[itemstack.id]).l();
this.a = ((ItemFood) Item.byId[itemstack.id]).m();
}
}
}
}
if (!this.Y && this.f && !this.g && !this.C() && this.onGround) {
this.g = true;
this.h = 0.0F;
if (!this.ai && this.g && !this.h && !this.B() && this.onGround) {
this.h = true;
this.i = 0.0F;
this.j = 0.0F;
this.world.a(this, (byte) 8);
}
}
public void m_() {
super.m_();
public void s_() {
super.s_();
this.c = this.b;
if (this.a) {
this.b += (1.0F - this.b) * 0.4F;
@ -167,31 +167,31 @@ public class EntityWolf extends EntityAnimal {
}
if (this.a) {
this.aF = 10;
this.aV = 10;
}
if (this.ac()) {
this.f = true;
this.g = false;
this.h = 0.0F;
if (this.an()) {
this.g = true;
this.h = false;
this.i = 0.0F;
} else if ((this.f || this.g) && this.g) {
if (this.h == 0.0F) {
this.world.makeSound(this, "mob.wolf.shake", this.k(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
this.j = 0.0F;
} else if ((this.g || this.h) && this.h) {
if (this.i == 0.0F) {
this.world.makeSound(this, "mob.wolf.shake", this.l(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
}
this.i = this.h;
this.h += 0.05F;
if (this.i >= 2.0F) {
this.f = false;
this.j = this.i;
this.i += 0.05F;
if (this.j >= 2.0F) {
this.g = false;
this.h = false;
this.j = 0.0F;
this.i = 0.0F;
this.h = 0.0F;
}
if (this.h > 0.4F) {
if (this.i > 0.4F) {
float f = (float) this.boundingBox.b;
int i = (int) (MathHelper.sin((this.h - 0.4F) * 3.1415927F) * 7.0F);
int i = (int) (MathHelper.sin((this.i - 0.4F) * 3.1415927F) * 7.0F);
for (int j = 0; j < i; ++j) {
float f1 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length * 0.5F;
@ -232,17 +232,19 @@ public class EntityWolf extends EntityAnimal {
}
}
protected boolean w() {
return this.isSitting() || this.g;
protected boolean v() {
return this.isSitting() || this.h;
}
public boolean damageEntity(Entity entity, int i) {
public boolean damageEntity(DamageSource damagesource, int i) {
Entity entity = damagesource.a();
this.setSitting(false);
if (entity != null && !(entity instanceof EntityHuman) && !(entity instanceof EntityArrow)) {
i = (i + 1) / 2;
}
if (!super.damageEntity((Entity) entity, i)) {
if (!super.damageEntity(damagesource, i)) {
return false;
} else {
if (!this.isTamed() && !this.isAngry()) {
@ -302,7 +304,7 @@ public class EntityWolf extends EntityAnimal {
return true;
}
this.target = (Entity) entity;
this.target = entity;
}
return true;
@ -343,11 +345,11 @@ public class EntityWolf extends EntityAnimal {
}
// CraftBukkit end
entity.damageEntity(this, b0);
entity.damageEntity(DamageSource.a((EntityLiving) this), b0);
}
}
public boolean a(EntityHuman entityhuman) {
public boolean b(EntityHuman entityhuman) {
ItemStack itemstack = entityhuman.inventory.getItemInHand();
if (!this.isTamed()) {
@ -366,10 +368,10 @@ public class EntityWolf extends EntityAnimal {
this.setSitting(true);
this.health = 20;
this.setOwnerName(entityhuman.name);
this.a(true);
this.b(true);
this.world.a(this, (byte) 7);
} else {
this.a(false);
this.b(false);
this.world.a(this, (byte) 6);
}
}
@ -380,13 +382,14 @@ public class EntityWolf extends EntityAnimal {
if (itemstack != null && Item.byId[itemstack.id] instanceof ItemFood) {
ItemFood itemfood = (ItemFood) Item.byId[itemstack.id];
if (itemfood.l() && this.datawatcher.b(18) < 20) {
if (itemfood.m() && this.datawatcher.b(18) < 20) {
--itemstack.count;
this.c(((ItemFood) Item.PORK).k(), RegainReason.EATING); // Craftbukkit
if (itemstack.count <= 0) {
entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, (ItemStack) null);
}
this.b(((ItemFood) Item.PORK).k(), RegainReason.EATING);
return true;
}
}
@ -394,7 +397,7 @@ public class EntityWolf extends EntityAnimal {
if (entityhuman.name.equalsIgnoreCase(this.getOwnerName())) {
if (!this.world.isStatic) {
this.setSitting(!this.isSitting());
this.aC = false;
this.aS = false;
this.setPathEntity((PathEntity) null);
}
@ -405,7 +408,7 @@ public class EntityWolf extends EntityAnimal {
return false;
}
void a(boolean flag) {
void b(boolean flag) {
String s = "heart";
if (!flag) {
@ -421,7 +424,7 @@ public class EntityWolf extends EntityAnimal {
}
}
public int l() {
public int m() {
return 8;
}

View file

@ -7,13 +7,13 @@ public class EntityZombie extends EntityMonster {
public EntityZombie(World world) {
super(world);
this.texture = "/mob/zombie.png";
this.aE = 0.5F;
this.aU = 0.5F;
this.damage = 5;
}
public void v() {
if (this.world.d()) {
float f = this.c(1.0F);
public void s() {
if (this.world.d() && !this.world.isStatic) {
float f = this.a_(1.0F);
if (f > 0.5F && this.world.isChunkLoaded(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ)) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F) {
// CraftBukkit start
@ -27,22 +27,22 @@ public class EntityZombie extends EntityMonster {
}
}
super.v();
}
protected String g() {
return "mob.zombie";
super.s();
}
protected String h() {
return "mob.zombiehurt";
return "mob.zombie";
}
protected String i() {
return "mob.zombiehurt";
}
protected String j() {
return "mob.zombiedeath";
}
protected int j() {
return Item.FEATHER.id;
protected int k() {
return Item.ROTTEN_FLESH.id;
}
}

View file

@ -130,7 +130,7 @@ public class Explosion {
server.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
entity.damageEntity(this.source, event.getDamage());
entity.damageEntity(DamageSource.k, event.getDamage());
entity.motX += d0 * d10;
entity.motY += d1 * d10;
entity.motZ += d2 * d10;
@ -140,7 +140,7 @@ public class Explosion {
server.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
entity.damageEntity(this.source, event.getDamage());
entity.damageEntity(DamageSource.k, event.getDamage());
entity.motX += d0 * d10;
entity.motY += d1 * d10;
@ -173,6 +173,7 @@ public class Explosion {
public void a(boolean flag) {
this.world.makeSound(this.posX, this.posY, this.posZ, "random.explode", 4.0F, (1.0F + (this.world.random.nextFloat() - this.world.random.nextFloat()) * 0.2F) * 0.7F);
this.world.a("hugeexplosion", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);
ArrayList arraylist = new ArrayList();
arraylist.addAll(this.blocks);
@ -234,7 +235,7 @@ public class Explosion {
// CraftBukkit
Block.byId[i1].dropNaturally(this.world, j, k, l, this.world.getData(j, k, l), event.getYield());
this.world.setTypeId(j, k, l, 0);
Block.byId[i1].d(this.world, j, k, l);
Block.byId[i1].a_(this.world, j, k, l);
}
}
}

View file

@ -16,7 +16,11 @@ public interface IInventory {
void update();
boolean a_(EntityHuman entityhuman);
boolean a(EntityHuman entityhuman);
void e();
void t_();
public abstract ItemStack[] getContents(); // CraftBukkit
}

View file

@ -45,7 +45,11 @@ public class InventoryCraftResult implements IInventory {
public void update() {}
public boolean a_(EntityHuman entityhuman) {
public boolean a(EntityHuman entityhuman) {
return true;
}
public void e() {}
public void t_() {}
}

View file

@ -76,7 +76,11 @@ public class InventoryCrafting implements IInventory {
public void update() {}
public boolean a_(EntityHuman entityhuman) {
public boolean a(EntityHuman entityhuman) {
return true;
}
public void e() {}
public void t_() {}
}

View file

@ -18,6 +18,14 @@ public class InventoryLargeChest implements IInventory {
public InventoryLargeChest(String s, IInventory iinventory, IInventory iinventory1) {
this.a = s;
if (iinventory == null) {
iinventory = iinventory1;
}
if (iinventory1 == null) {
iinventory1 = iinventory;
}
this.b = iinventory;
this.c = iinventory1;
}
@ -55,7 +63,17 @@ public class InventoryLargeChest implements IInventory {
this.c.update();
}
public boolean a_(EntityHuman entityhuman) {
return this.b.a_(entityhuman) && this.c.a_(entityhuman);
public boolean a(EntityHuman entityhuman) {
return this.b.a(entityhuman) && this.c.a(entityhuman);
}
public void e() {
this.b.e();
this.c.e();
}
public void t_() {
this.b.t_();
this.c.t_();
}
}

View file

@ -27,11 +27,11 @@ public class InventoryPlayer implements IInventory {
return this.itemInHandIndex < 9 && this.itemInHandIndex >= 0 ? this.items[this.itemInHandIndex] : null;
}
public static int e() {
public static int g() {
return 9;
}
private int d(int i) {
private int e(int i) {
for (int j = 0; j < this.items.length; ++j) {
if (this.items[j] != null && this.items[j].id == i) {
return j;
@ -67,7 +67,7 @@ public class InventoryPlayer implements IInventory {
}
// CraftBukkit end
private int k() {
private int m() {
for (int i = 0; i < this.items.length; ++i) {
if (this.items[i] == null) {
return i;
@ -83,7 +83,7 @@ public class InventoryPlayer implements IInventory {
int k = this.firstPartial(itemstack);
if (k < 0) {
k = this.k();
k = this.m();
}
if (k < 0) {
@ -114,7 +114,7 @@ public class InventoryPlayer implements IInventory {
}
}
public void f() {
public void h() {
for (int i = 0; i < this.items.length; ++i) {
if (this.items[i] != null) {
this.items[i].a(this.d.world, this.d, i, this.itemInHandIndex == i);
@ -123,7 +123,7 @@ public class InventoryPlayer implements IInventory {
}
public boolean b(int i) {
int j = this.d(i);
int j = this.e(i);
if (j < 0) {
return false;
@ -136,11 +136,17 @@ public class InventoryPlayer implements IInventory {
}
}
public boolean c(int i) {
int j = this.e(i);
return j >= 0;
}
public boolean pickup(ItemStack itemstack) {
int i;
if (itemstack.f()) {
i = this.k();
i = this.m();
if (i >= 0) {
this.items[i] = ItemStack.b(itemstack);
this.items[i].b = 5;
@ -216,7 +222,7 @@ public class InventoryPlayer implements IInventory {
if (this.items[i] != null) {
nbttagcompound = new NBTTagCompound();
nbttagcompound.a("Slot", (byte) i);
this.items[i].a(nbttagcompound);
this.items[i].b(nbttagcompound);
nbttaglist.a((NBTBase) nbttagcompound);
}
}
@ -225,7 +231,7 @@ public class InventoryPlayer implements IInventory {
if (this.armor[i] != null) {
nbttagcompound = new NBTTagCompound();
nbttagcompound.a("Slot", (byte) (i + 100));
this.armor[i].a(nbttagcompound);
this.armor[i].b(nbttagcompound);
nbttaglist.a((NBTBase) nbttagcompound);
}
}
@ -240,9 +246,9 @@ public class InventoryPlayer implements IInventory {
for (int i = 0; i < nbttaglist.c(); ++i) {
NBTTagCompound nbttagcompound = (NBTTagCompound) nbttaglist.a(i);
int j = nbttagcompound.c("Slot") & 255;
ItemStack itemstack = new ItemStack(nbttagcompound);
ItemStack itemstack = ItemStack.a(nbttagcompound);
if (itemstack.getItem() != null) {
if (itemstack != null) {
if (j >= 0 && j < this.items.length) {
this.items[j] = itemstack;
}
@ -284,7 +290,7 @@ public class InventoryPlayer implements IInventory {
}
public boolean b(Block block) {
if (block.material.i()) {
if (block.material.k()) {
return true;
} else {
ItemStack itemstack = this.getItem(this.itemInHandIndex);
@ -293,7 +299,7 @@ public class InventoryPlayer implements IInventory {
}
}
public int g() {
public int i() {
int i = 0;
int j = 0;
int k = 0;
@ -306,7 +312,7 @@ public class InventoryPlayer implements IInventory {
j += k1;
k += i1;
int l1 = ((ItemArmor) this.armor[l].getItem()).bl;
int l1 = ((ItemArmor) this.armor[l].getItem()).bu;
i += l1;
}
@ -319,7 +325,7 @@ public class InventoryPlayer implements IInventory {
}
}
public void c(int i) {
public void d(int i) {
for (int j = 0; j < this.armor.length; ++j) {
if (this.armor[j] != null && this.armor[j].getItem() instanceof ItemArmor) {
this.armor[j].damage(i, this.d);
@ -331,7 +337,7 @@ public class InventoryPlayer implements IInventory {
}
}
public void h() {
public void j() {
int i;
for (i = 0; i < this.items.length; ++i) {
@ -358,12 +364,12 @@ public class InventoryPlayer implements IInventory {
this.d.a(itemstack);
}
public ItemStack j() {
public ItemStack l() {
return this.f;
}
public boolean a_(EntityHuman entityhuman) {
return this.d.dead ? false : entityhuman.g(this.d) <= 64.0D;
public boolean a(EntityHuman entityhuman) {
return this.d.dead ? false : entityhuman.h(this.d) <= 64.0D;
}
public boolean c(ItemStack itemstack) {
@ -383,4 +389,8 @@ public class InventoryPlayer implements IInventory {
return false;
}
public void e() {}
public void t_() {}
}

View file

@ -40,23 +40,27 @@ public class ItemBed extends Item {
b0 = 1;
}
if (world.isEmpty(i, j, k) && world.isEmpty(i + b0, j, k + b1) && world.e(i, j - 1, k) && world.e(i + b0, j - 1, k + b1)) {
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
if (entityhuman.c(i, j, k) && entityhuman.c(i + b0, j, k + b1)) {
if (world.isEmpty(i, j, k) && world.isEmpty(i + b0, j, k + b1) && world.e(i, j - 1, k) && world.e(i + b0, j - 1, k + b1)) {
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
world.setTypeIdAndData(i, j, k, blockbed.id, i1);
world.setTypeIdAndData(i, j, k, blockbed.id, i1);
// CraftBukkit start - bed
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, blockbed);
// CraftBukkit start - bed
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, blockbed);
if (event.isCancelled() || !event.canBuild()) {
event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
if (event.isCancelled() || !event.canBuild()) {
event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
return false;
}
// CraftBukkit end
world.setTypeIdAndData(i + b0, j, k + b1, blockbed.id, i1 + 8);
--itemstack.count;
return true;
} else {
return false;
}
// CraftBukkit end
world.setTypeIdAndData(i + b0, j, k + b1, blockbed.id, i1 + 8);
--itemstack.count;
return true;
} else {
return false;
}

View file

@ -16,12 +16,17 @@ public class ItemBlock extends Item {
this.b(Block.byId[i + 256].a(2));
}
public int a() {
return this.id;
}
public boolean a(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l) {
int clickedX = i, clickedY = j, clickedZ = k; // CraftBukkit
int i1 = world.getTypeId(i, j, k);
if (world.getTypeId(i, j, k) == Block.SNOW.id) {
if (i1 == Block.SNOW.id) {
l = 0;
} else {
} else if (i1 != Block.VINE.id) {
if (l == 0) {
--j;
}
@ -49,75 +54,84 @@ public class ItemBlock extends Item {
if (itemstack.count == 0) {
return false;
} else if (j == 127 && Block.byId[this.id].material.isBuildable()) {
} else if (!entityhuman.c(i, j, k)) {
return false;
} else if (world.a(this.id, i, j, k, false, l)) {
Block block = Block.byId[this.id];
// CraftBukkit start - This executes the placement of the block
CraftBlockState replacedBlockState = CraftBlockState.getBlockState(world, i, j, k);
// There are like 30 combinations you can mix and match steps and double steps
// of different materials, so there are a lot of different cases of what
// would happen if you place x step onto another y step, so let's just keep
// track of the entire state
CraftBlockState blockStateBelow = null;
// Toggles whether the normal or the block below is used for the place event
boolean eventUseBlockBelow = false;
if ((world.getTypeId(i, j - 1, k) == Block.STEP.id || world.getTypeId(i, j - 1, k) == Block.DOUBLE_STEP.id)
&& (itemstack.id == Block.DOUBLE_STEP.id || itemstack.id == Block.STEP.id)) {
blockStateBelow = CraftBlockState.getBlockState(world, i, j - 1, k);
// Step is placed on step, forms a doublestep replacing the original step, so we need the lower block
eventUseBlockBelow = itemstack.id == Block.STEP.id && blockStateBelow.getTypeId() == Block.STEP.id;
}
/**
* @see net.minecraft.server.World#setTypeIdAndData(int i, int j, int k, int l, int i1)
*
* This replaces world.setTypeIdAndData(IIIII), we're doing this because we need to
* hook between the 'placement' and the informing to 'world' so we can
* sanely undo this.
*
* Whenever the call to 'world.setTypeIdAndData' changes we need to figure out again what to
* replace this with.
*/
if (world.setRawTypeIdAndData(i, j, k, this.id, this.filterData(itemstack.getData()))) { // <-- world.setTypeIdAndData does this to place the block
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, eventUseBlockBelow ? blockStateBelow : replacedBlockState, clickedX, clickedY, clickedZ, block);
if (event.isCancelled() || !event.canBuild()) {
if (blockStateBelow != null) { // Used for steps
world.setTypeIdAndData(i, j, k, replacedBlockState.getTypeId(), replacedBlockState.getRawData());
world.setTypeIdAndData(i, j - 1, k, blockStateBelow.getTypeId(), blockStateBelow.getRawData());
} else {
if (this.id == Block.ICE.id) {
// Ice will explode if we set straight to 0
world.setTypeId(i, j, k, 20);
}
world.setTypeIdAndData(i, j, k, replacedBlockState.getTypeId(), replacedBlockState.getRawData());
}
return true;
}
world.update(i, j, k, this.id); // <-- world.setTypeIdAndData does this on success (tell the world)
// CraftBukkit end
Block.byId[this.id].postPlace(world, i, j, k, l);
Block.byId[this.id].postPlace(world, i, j, k, entityhuman);
world.makeSound((double) ((float) i + 0.5F), (double) ((float) j + 0.5F), (double) ((float) k + 0.5F), block.stepSound.getName(), (block.stepSound.getVolume1() + 1.0F) / 2.0F, block.stepSound.getVolume2() * 0.8F);
--itemstack.count;
}
return true;
} else {
return false;
world.getClass();
if (j == 128 - 1 && Block.byId[this.id].material.isBuildable()) {
return false;
} else if (world.a(this.id, i, j, k, false, l)) {
Block block = Block.byId[this.id];
// CraftBukkit start - This executes the placement of the block
CraftBlockState replacedBlockState = CraftBlockState.getBlockState(world, i, j, k);
// There are like 30 combinations you can mix and match steps and double steps
// of different materials, so there are a lot of different cases of what
// would happen if you place x step onto another y step, so let's just keep
// track of the entire state
CraftBlockState blockStateBelow = null;
// Toggles whether the normal or the block below is used for the place event
boolean eventUseBlockBelow = false;
if ((world.getTypeId(i, j - 1, k) == Block.STEP.id || world.getTypeId(i, j - 1, k) == Block.DOUBLE_STEP.id)
&& (itemstack.id == Block.DOUBLE_STEP.id || itemstack.id == Block.STEP.id)) {
blockStateBelow = CraftBlockState.getBlockState(world, i, j - 1, k);
// Step is placed on step, forms a doublestep replacing the original step, so we need the lower block
eventUseBlockBelow = itemstack.id == Block.STEP.id && blockStateBelow.getTypeId() == Block.STEP.id;
}
/**
* @see net.minecraft.server.World#setTypeIdAndData(int i, int j, int k, int l, int i1)
*
* This replaces world.setTypeIdAndData(IIIII), we're doing this because we need to
* hook between the 'placement' and the informing to 'world' so we can
* sanely undo this.
*
* Whenever the call to 'world.setTypeIdAndData' changes we need to figure out again what to
* replace this with.
*/
if (world.setRawTypeIdAndData(i, j, k, this.id, this.filterData(itemstack.getData()))) { // <-- world.setTypeIdAndData does this to place the block
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, eventUseBlockBelow ? blockStateBelow : replacedBlockState, clickedX, clickedY, clickedZ, block);
if (event.isCancelled() || !event.canBuild()) {
if (blockStateBelow != null) { // Used for steps
world.setTypeIdAndData(i, j, k, replacedBlockState.getTypeId(), replacedBlockState.getRawData());
world.setTypeIdAndData(i, j - 1, k, blockStateBelow.getTypeId(), blockStateBelow.getRawData());
} else {
if (this.id == Block.ICE.id) {
// Ice will explode if we set straight to 0
world.setTypeId(i, j, k, 20);
}
world.setTypeIdAndData(i, j, k, replacedBlockState.getTypeId(), replacedBlockState.getRawData());
}
return true;
}
world.update(i, j, k, this.id); // <-- world.setTypeIdAndData does this on success (tell the world)
// CraftBukkit end
Block.byId[this.id].postPlace(world, i, j, k, l);
Block.byId[this.id].postPlace(world, i, j, k, entityhuman);
world.makeSound((double) ((float) i + 0.5F), (double) ((float) j + 0.5F), (double) ((float) k + 0.5F), block.stepSound.getName(), (block.stepSound.getVolume1() + 1.0F) / 2.0F, block.stepSound.getVolume2() * 0.8F);
--itemstack.count;
}
return true;
} else {
return false;
}
}
}
public String a() {
public String a(ItemStack itemstack) {
return Block.byId[this.id].l();
}
public String b() {
return Block.byId[this.id].l();
}
}

View file

@ -49,6 +49,10 @@ public class ItemBucket extends Item {
}
if (this.a == 0) {
if (!entityhuman.c(i, j, k)) {
return itemstack;
}
if (world.getMaterial(i, j, k) == Material.WATER && world.getData(i, j, k) == 0) {
// CraftBukkit start
PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent(entityhuman, i, j, k, -1, itemstack, Item.WATER_BUCKET);
@ -121,6 +125,10 @@ public class ItemBucket extends Item {
++i;
}
if (!entityhuman.c(i, j, k)) {
return itemstack;
}
if (world.isEmpty(i, j, k) || !world.getMaterial(i, j, k).isBuildable()) {
// CraftBukkit start
PlayerBucketEmptyEvent event = CraftEventFactory.callPlayerBucketEmptyEvent(entityhuman, clickedX, clickedY, clickedZ, movingobjectposition.face, itemstack);
@ -140,6 +148,10 @@ public class ItemBucket extends Item {
world.setTypeIdAndData(i, j, k, this.a, 0);
}
if (entityhuman.K.d) {
return itemstack;
}
// CraftBukkit start
CraftItemStack itemInHand = (CraftItemStack) event.getItemStack();
byte data = itemInHand.getData() == null ? (byte) 0 : itemInHand.getData().getData();

View file

@ -20,8 +20,6 @@ public class ItemDoor extends Item {
if (l != 1) {
return false;
} else {
int clickedX = i, clickedY = j, clickedZ = k; // CraftBukkit
++j;
Block block;
@ -31,70 +29,87 @@ public class ItemDoor extends Item {
block = Block.IRON_DOOR_BLOCK;
}
if (!block.canPlace(world, i, j, k)) {
return false;
} else {
int i1 = MathHelper.floor((double) ((entityhuman.yaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3;
byte b0 = 0;
byte b1 = 0;
if (i1 == 0) {
b1 = 1;
}
if (i1 == 1) {
b0 = -1;
}
if (i1 == 2) {
b1 = -1;
}
if (i1 == 3) {
b0 = 1;
}
int j1 = (world.e(i - b0, j, k - b1) ? 1 : 0) + (world.e(i - b0, j + 1, k - b1) ? 1 : 0);
int k1 = (world.e(i + b0, j, k + b1) ? 1 : 0) + (world.e(i + b0, j + 1, k + b1) ? 1 : 0);
boolean flag = world.getTypeId(i - b0, j, k - b1) == block.id || world.getTypeId(i - b0, j + 1, k - b1) == block.id;
boolean flag1 = world.getTypeId(i + b0, j, k + b1) == block.id || world.getTypeId(i + b0, j + 1, k + b1) == block.id;
boolean flag2 = false;
if (flag && !flag1) {
flag2 = true;
} else if (k1 > j1) {
flag2 = true;
}
if (flag2) {
i1 = i1 - 1 & 3;
i1 += 4;
}
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
world.suppressPhysics = true;
world.setTypeIdAndData(i, j, k, block.id, i1);
// CraftBukkit start - bed
world.suppressPhysics = false;
world.applyPhysics(i, j, k, Block.REDSTONE_WIRE.id);
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, block);
if (event.isCancelled() || !event.canBuild()) {
event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
if (entityhuman.c(i, j, k) && entityhuman.c(i, j + 1, k)) {
if (!block.canPlace(world, i, j, k)) {
return false;
}
} else {
int i1 = MathHelper.floor((double) ((entityhuman.yaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3;
world.suppressPhysics = true;
// CraftBukkit end
world.setTypeIdAndData(i, j + 1, k, block.id, i1 + 8);
world.suppressPhysics = false;
// world.applyPhysics(i, j, k, block.id); // CraftBukkit - moved up
world.applyPhysics(i, j + 1, k, Block.REDSTONE_WIRE.id);
--itemstack.count;
return true;
// CraftBukkit start
if (a(world, i, j, k, i1, block, entityhuman)) {
--itemstack.count;
return true;
} else {
return false;
}
// CraftBukkit end
}
} else {
return false;
}
}
}
// Craftbukkit - void -> boolean + entityhuman argument
public static boolean a(World world, int i, int j, int k, int l, Block block, EntityHuman entityhuman) {
int clickedX = i, clickedY = j, clickedZ = k; // CraftBukkit
byte b0 = 0;
byte b1 = 0;
if (l == 0) {
b1 = 1;
}
if (l == 1) {
b0 = -1;
}
if (l == 2) {
b1 = -1;
}
if (l == 3) {
b0 = 1;
}
int i1 = (world.e(i - b0, j, k - b1) ? 1 : 0) + (world.e(i - b0, j + 1, k - b1) ? 1 : 0);
int j1 = (world.e(i + b0, j, k + b1) ? 1 : 0) + (world.e(i + b0, j + 1, k + b1) ? 1 : 0);
boolean flag = world.getTypeId(i - b0, j, k - b1) == block.id || world.getTypeId(i - b0, j + 1, k - b1) == block.id;
boolean flag1 = world.getTypeId(i + b0, j, k + b1) == block.id || world.getTypeId(i + b0, j + 1, k + b1) == block.id;
boolean flag2 = false;
if (flag && !flag1) {
flag2 = true;
} else if (j1 > i1) {
flag2 = true;
}
if (flag2) {
l = l - 1 & 3;
l += 4;
}
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
world.suppressPhysics = true;
world.setTypeIdAndData(i, j, k, block.id, l);
// CraftBukkit start - bed
world.suppressPhysics = false;
world.applyPhysics(i, j, k, Block.REDSTONE_WIRE.id);
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, block);
if (event.isCancelled() || !event.canBuild()) {
event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
return false;
}
world.suppressPhysics = true;
// CraftBukkit end
world.setTypeIdAndData(i, j + 1, k, block.id, l + 8);
world.suppressPhysics = false;
// world.applyPhysics(i, j, k, block.id); // CraftBukkit - moved up
world.applyPhysics(i, j + 1, k, block.id);
return true; // CraftBukkit
}
}

View file

@ -12,10 +12,10 @@ public class ItemFishingRod extends Item {
public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) {
if (entityhuman.hookedFish != null) {
int i = entityhuman.hookedFish.h();
int i = entityhuman.hookedFish.i();
itemstack.damage(i, entityhuman);
entityhuman.w();
entityhuman.v();
} else {
// CraftBukkit start
PlayerFishEvent playerFishEvent = new PlayerFishEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), null,PlayerFishEvent.State.FISHING);
@ -30,7 +30,7 @@ public class ItemFishingRod extends Item {
world.addEntity(new EntityFish(world, entityhuman));
}
entityhuman.w();
entityhuman.v();
}
return itemstack;

View file

@ -43,38 +43,42 @@ public class ItemFlintAndSteel extends Item {
++i;
}
int i1 = world.getTypeId(i, j, k);
if (!entityhuman.c(i, j, k)) {
return false;
} else {
int i1 = world.getTypeId(i, j, k);
if (i1 == 0) {
// CraftBukkit start - store the clicked block
org.bukkit.block.Block blockClicked = world.getWorld().getBlockAt(i, j, k);
Player thePlayer = (Player) entityhuman.getBukkitEntity();
if (i1 == 0) {
// CraftBukkit start - store the clicked block
org.bukkit.block.Block blockClicked = world.getWorld().getBlockAt(i, j, k);
Player thePlayer = (Player) entityhuman.getBukkitEntity();
BlockIgniteEvent eventIgnite = new BlockIgniteEvent(blockClicked, BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL, thePlayer);
world.getServer().getPluginManager().callEvent(eventIgnite);
BlockIgniteEvent eventIgnite = new BlockIgniteEvent(blockClicked, BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL, thePlayer);
world.getServer().getPluginManager().callEvent(eventIgnite);
if (eventIgnite.isCancelled()) {
itemstack.damage(1, entityhuman);
return false;
if (eventIgnite.isCancelled()) {
itemstack.damage(1, entityhuman);
return false;
}
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k);
// CraftBukkit end
world.makeSound((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "fire.ignite", 1.0F, b.nextFloat() * 0.4F + 0.8F);
world.setTypeId(i, j, k, Block.FIRE.id);
// CraftBukkit start
BlockPlaceEvent placeEvent = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, Block.FIRE.id);
if (placeEvent.isCancelled() || !placeEvent.canBuild()) {
placeEvent.getBlockPlaced().setTypeIdAndData(0, (byte) 0, false);
return false;
}
// CraftBukkit end
}
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k);
// CraftBukkit end
world.makeSound((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "fire.ignite", 1.0F, b.nextFloat() * 0.4F + 0.8F);
world.setTypeId(i, j, k, Block.FIRE.id);
// CraftBukkit start
BlockPlaceEvent placeEvent = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, Block.FIRE.id);
if (placeEvent.isCancelled() || !placeEvent.canBuild()) {
placeEvent.getBlockPlaced().setTypeIdAndData(0, (byte) 0, false);
return false;
}
// CraftBukkit end
itemstack.damage(1, entityhuman);
return true;
}
itemstack.damage(1, entityhuman);
return true;
}
}

View file

@ -15,33 +15,37 @@ public class ItemHoe extends Item {
}
public boolean a(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l) {
int i1 = world.getTypeId(i, j, k);
int j1 = world.getTypeId(i, j + 1, k);
if ((l == 0 || j1 != 0 || i1 != Block.GRASS.id) && i1 != Block.DIRT.id) {
if (!entityhuman.c(i, j, k)) {
return false;
} else {
Block block = Block.SOIL;
int i1 = world.getTypeId(i, j, k);
int j1 = world.getTypeId(i, j + 1, k);
world.makeSound((double) ((float) i + 0.5F), (double) ((float) j + 0.5F), (double) ((float) k + 0.5F), block.stepSound.getName(), (block.stepSound.getVolume1() + 1.0F) / 2.0F, block.stepSound.getVolume2() * 0.8F);
if (world.isStatic) {
return true;
if ((l == 0 || j1 != 0 || i1 != Block.GRASS.id) && i1 != Block.DIRT.id) {
return false;
} else {
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
Block block = Block.SOIL;
world.setTypeId(i, j, k, block.id);
world.makeSound((double) ((float) i + 0.5F), (double) ((float) j + 0.5F), (double) ((float) k + 0.5F), block.stepSound.getName(), (block.stepSound.getVolume1() + 1.0F) / 2.0F, block.stepSound.getVolume2() * 0.8F);
if (world.isStatic) {
return true;
} else {
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
// CraftBukkit start - Hoes - blockface -1 for 'SELF'
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, i, j, k, block);
world.setTypeId(i, j, k, block.id);
if (event.isCancelled() || !event.canBuild()) {
event.getBlockPlaced().setTypeId(blockState.getTypeId());
return false;
// CraftBukkit start - Hoes - blockface -1 for 'SELF'
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, i, j, k, block);
if (event.isCancelled() || !event.canBuild()) {
event.getBlockPlaced().setTypeId(blockState.getTypeId());
return false;
}
// CraftBukkit end
itemstack.damage(1, entityhuman);
return true;
}
// CraftBukkit end
itemstack.damage(1, entityhuman);
return true;
}
}
}

View file

@ -11,104 +11,139 @@ import org.bukkit.event.player.PlayerInteractEvent;
public class ItemInWorldManager {
private WorldServer world;
public World world;
public EntityHuman player;
private float c = 0.0F;
private int c = -1;
private float d = 0.0F;
private int lastDigTick;
private int e;
private int f;
private int g;
private int h;
private int currentTick;
private boolean i;
private int j;
private boolean j;
private int k;
private int l;
private int m;
private int n;
public ItemInWorldManager(WorldServer worldserver) {
this.world = worldserver;
public ItemInWorldManager(World world) {
this.world = world;
}
public void a() {
public void a(int i) {
this.c = i;
if (i == 0) {
this.player.K.c = false;
this.player.K.b = false;
this.player.K.d = false;
this.player.K.a = false;
} else {
this.player.K.c = true;
this.player.K.d = true;
this.player.K.a = true;
}
}
public int a() {
return this.c;
}
public boolean b() {
return this.c == 1;
}
public void b(int i) {
if (this.c == -1) {
this.c = i;
}
this.a(this.c);
}
public void c() {
this.currentTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit
if (this.i) {
int i = this.currentTick - this.m;
int j = this.world.getTypeId(this.j, this.k, this.l);
if (this.j) {
int i = this.currentTick - this.n;
int j = this.world.getTypeId(this.k, this.l, this.m);
if (j != 0) {
Block block = Block.byId[j];
float f = block.getDamage(this.player) * (float) (i + 1);
if (f >= 1.0F) {
this.i = false;
this.c(this.j, this.k, this.l);
this.j = false;
this.c(this.k, this.l, this.m);
}
} else {
this.i = false;
this.j = false;
}
}
}
public void dig(int i, int j, int k, int l) {
// this.world.douseFire((EntityHuman) null, i, j, k, l); // CraftBukkit - moved down
this.lastDigTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit
int i1 = this.world.getTypeId(i, j, k);
// CraftBukkit start
// Swings at air do *NOT* exist.
if (i1 <= 0) {
return;
}
PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.LEFT_CLICK_BLOCK, i, j, k, l, this.player.inventory.getItemInHand());
if (event.useInteractedBlock() == Event.Result.DENY) {
// If we denied a door from opening, we need to send a correcting update to the client, as it already opened the door.
if (i1 == Block.WOODEN_DOOR.id) {
// For some reason *BOTH* the bottom/top part have to be marked updated.
boolean bottom = (this.world.getData(i, j, k) & 8) == 0;
((EntityPlayer) this.player).netServerHandler.sendPacket(new Packet53BlockChange(i, j, k, this.world));
((EntityPlayer) this.player).netServerHandler.sendPacket(new Packet53BlockChange(i, j + (bottom ? 1 : -1), k, this.world));
} else if (i1 == Block.TRAP_DOOR.id) {
((EntityPlayer) this.player).netServerHandler.sendPacket(new Packet53BlockChange(i, j, k, this.world));
}
} else {
Block.byId[i1].b(this.world, i, j, k, this.player);
// Allow fire punching to be blocked
this.world.douseFire((EntityHuman) null, i, j, k, l);
}
// Handle hitting a block
float toolDamage = Block.byId[i1].getDamage(this.player);
if (event.useItemInHand() == Event.Result.DENY) {
// If we 'insta destroyed' then the client needs to be informed.
if (toolDamage > 1.0f) {
((EntityPlayer) this.player).netServerHandler.sendPacket(new Packet53BlockChange(i, j, k, this.world));
}
return;
}
BlockDamageEvent blockEvent = CraftEventFactory.callBlockDamageEvent(this.player, i, j, k, this.player.inventory.getItemInHand(), toolDamage >= 1.0f);
if (blockEvent.isCancelled()) {
return;
}
if (blockEvent.getInstaBreak()) {
toolDamage = 2.0f;
}
if (toolDamage >= 1.0F) {
// CraftBukkit end
if (this.b()) {
this.c(i, j, k);
} else {
this.e = i;
this.f = j;
this.g = k;
this.lastDigTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit
int i1 = this.world.getTypeId(i, j, k);
// CraftBukkit start
// Swings at air do *NOT* exist.
if (i1 <= 0) {
return;
}
PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.LEFT_CLICK_BLOCK, i, j, k, l, this.player.inventory.getItemInHand());
if (event.useInteractedBlock() == Event.Result.DENY) {
// If we denied a door from opening, we need to send a correcting update to the client, as it already opened the door.
if (i1 == Block.WOODEN_DOOR.id) {
// For some reason *BOTH* the bottom/top part have to be marked updated.
boolean bottom = (this.world.getData(i, j, k) & 8) == 0;
((EntityPlayer) this.player).netServerHandler.sendPacket(new Packet53BlockChange(i, j, k, this.world));
((EntityPlayer) this.player).netServerHandler.sendPacket(new Packet53BlockChange(i, j + (bottom ? 1 : -1), k, this.world));
} else if (i1 == Block.TRAP_DOOR.id) {
((EntityPlayer) this.player).netServerHandler.sendPacket(new Packet53BlockChange(i, j, k, this.world));
}
} else {
Block.byId[i1].b(this.world, i, j, k, this.player);
// Allow fire punching to be blocked
this.world.douseFire((EntityHuman) null, i, j, k, l);
}
// Handle hitting a block
float toolDamage = Block.byId[i1].getDamage(this.player);
if (event.useItemInHand() == Event.Result.DENY) {
// If we 'insta destroyed' then the client needs to be informed.
if (toolDamage > 1.0f) {
((EntityPlayer) this.player).netServerHandler.sendPacket(new Packet53BlockChange(i, j, k, this.world));
}
return;
}
BlockDamageEvent blockEvent = CraftEventFactory.callBlockDamageEvent(this.player, i, j, k, this.player.inventory.getItemInHand(), toolDamage >= 1.0f);
if (blockEvent.isCancelled()) {
return;
}
if (blockEvent.getInstaBreak()) {
toolDamage = 2.0f;
}
if (toolDamage >= 1.0F) {
// CraftBukkit end
this.c(i, j, k);
} else {
this.f = i;
this.g = j;
this.h = k;
}
}
}
public void a(int i, int j, int k) {
if (i == this.e && j == this.f && k == this.g) {
if (i == this.f && j == this.g && k == this.h) {
this.currentTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit
int l = this.currentTick - this.lastDigTick;
int i1 = this.world.getTypeId(i, j, k);
@ -119,12 +154,12 @@ public class ItemInWorldManager {
if (f >= 0.7F) {
this.c(i, j, k);
} else if (!this.i) {
this.i = true;
this.j = i;
this.k = j;
this.l = k;
this.m = this.lastDigTick;
} else if (!this.j) {
this.j = true;
this.k = i;
this.l = j;
this.m = k;
this.n = this.lastDigTick;
}
}
// CraftBukkit start - force blockreset to client
@ -133,7 +168,7 @@ public class ItemInWorldManager {
// CraftBukkit end
}
this.c = 0.0F;
this.d = 0.0F;
}
public boolean b(int i, int j, int k) {
@ -167,19 +202,23 @@ public class ItemInWorldManager {
this.world.a(this.player, 2001, i, j, k, l + this.world.getData(i, j, k) * 256);
boolean flag = this.b(i, j, k);
ItemStack itemstack = this.player.G();
if (itemstack != null) {
itemstack.a(l, i, j, k, this.player);
if (itemstack.count == 0) {
itemstack.a(this.player);
this.player.H();
}
}
if (flag && this.player.b(Block.byId[l])) {
Block.byId[l].a(this.world, this.player, i, j, k, i1);
if (this.b()) {
((EntityPlayer) this.player).netServerHandler.sendPacket(new Packet53BlockChange(i, j, k, this.world));
} else {
ItemStack itemstack = this.player.K();
if (itemstack != null) {
itemstack.a(l, i, j, k, this.player);
if (itemstack.count == 0) {
itemstack.a(this.player);
this.player.L();
}
}
if (flag && this.player.b(Block.byId[l])) {
Block.byId[l].a(this.world, this.player, i, j, k, i1);
}
}
return flag;
@ -187,12 +226,18 @@ public class ItemInWorldManager {
public boolean useItem(EntityHuman entityhuman, World world, ItemStack itemstack) {
int i = itemstack.count;
int j = itemstack.getData();
ItemStack itemstack1 = itemstack.a(world, entityhuman);
if (itemstack1 == itemstack && (itemstack1 == null || itemstack1.count == i)) {
return false;
} else {
entityhuman.inventory.items[entityhuman.inventory.itemInHandIndex] = itemstack1;
if (this.b()) {
itemstack1.count = i;
itemstack1.b(j);
}
if (itemstack1.count == 0) {
entityhuman.inventory.items[entityhuman.inventory.itemInHandIndex] = null;
}
@ -201,6 +246,7 @@ public class ItemInWorldManager {
}
}
// TODO: Review this code, it changed in 1.8 but I'm not sure if we need to update or not
public boolean interact(EntityHuman entityhuman, World world, ItemStack itemstack, int i, int j, int k, int l) {
int i1 = world.getTypeId(i, j, k);
@ -231,4 +277,8 @@ public class ItemInWorldManager {
return result;
// CraftBukkit end
}
public void a(WorldServer worldserver) {
this.world = worldserver;
}
}

View file

@ -32,30 +32,34 @@ public class ItemPainting extends Item {
b0 = 3;
}
EntityPainting entitypainting = new EntityPainting(world, i, j, k, b0);
if (!entityhuman.c(i, j, k)) {
return false;
} else {
EntityPainting entitypainting = new EntityPainting(world, i, j, k, b0);
if (entitypainting.h()) {
if (!world.isStatic) {
// CraftBukkit start
Player who = (entityhuman == null) ? null : (Player) entityhuman.getBukkitEntity();
if (entitypainting.i()) {
if (!world.isStatic) {
// CraftBukkit start
Player who = (entityhuman == null) ? null : (Player) entityhuman.getBukkitEntity();
org.bukkit.block.Block blockClicked = world.getWorld().getBlockAt(i, j, k);
org.bukkit.block.BlockFace blockFace = CraftBlock.notchToBlockFace(l);
org.bukkit.block.Block blockClicked = world.getWorld().getBlockAt(i, j, k);
org.bukkit.block.BlockFace blockFace = CraftBlock.notchToBlockFace(l);
PaintingPlaceEvent event = new PaintingPlaceEvent((org.bukkit.entity.Painting) entitypainting.getBukkitEntity(), who, blockClicked, blockFace);
world.getServer().getPluginManager().callEvent(event);
PaintingPlaceEvent event = new PaintingPlaceEvent((org.bukkit.entity.Painting) entitypainting.getBukkitEntity(), who, blockClicked, blockFace);
world.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return false;
if (event.isCancelled()) {
return false;
}
// CraftBukkit end
world.addEntity(entitypainting);
}
// CraftBukkit end
world.addEntity(entitypainting);
--itemstack.count;
}
--itemstack.count;
return true;
}
return true;
}
}
}

View file

@ -45,25 +45,29 @@ public class ItemRedstone extends Item {
}
}
if (Block.REDSTONE_WIRE.canPlace(world, i, j, k)) {
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
if (!entityhuman.c(i, j, k)) {
return false;
} else {
if (Block.REDSTONE_WIRE.canPlace(world, i, j, k)) {
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
world.setRawTypeId(i, j, k, Block.REDSTONE_WIRE.id); // CraftBukkit - We update after the event
world.setRawTypeId(i, j, k, Block.REDSTONE_WIRE.id); // CraftBukkit - We update after the event
// CraftBukkit start - redstone
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, Block.REDSTONE_WIRE);
// CraftBukkit start - redstone
BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, Block.REDSTONE_WIRE);
if (event.isCancelled() || !event.canBuild()) {
event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
return false;
if (event.isCancelled() || !event.canBuild()) {
event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
return false;
}
world.update( i, j, k, Block.REDSTONE_WIRE.id); // Must take place after BlockPlaceEvent, we need to update all other blocks.
// CraftBukkit end
--itemstack.count; // CraftBukkit - ORDER MATTERS
}
world.update( i, j, k, Block.REDSTONE_WIRE.id); // Must take place after BlockPlaceEvent, we need to update all other blocks.
// CraftBukkit end
--itemstack.count; // CraftBukkit - ORDER MATTERS
return true;
}
return true;
}
}

View file

@ -17,10 +17,11 @@ public class ItemReed extends Item {
public boolean a(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l) {
int clickedX = i, clickedY = j, clickedZ = k; // CraftBukkit
int i1 = world.getTypeId(i, j, k);
if (world.getTypeId(i, j, k) == Block.SNOW.id) {
if (i1 == Block.SNOW.id) {
l = 0;
} else {
} else if (i1 != Block.VINE.id) {
if (l == 0) {
--j;
}
@ -46,7 +47,9 @@ public class ItemReed extends Item {
}
}
if (itemstack.count == 0) {
if (!entityhuman.c(i, j, k)) {
return false;
} else if (itemstack.count == 0) {
return false;
} else {
if (world.a(this.id, i, j, k, false, l)) {

View file

@ -18,7 +18,7 @@ public class ItemSeeds extends Item {
public boolean a(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l) {
if (l != 1) {
return false;
} else {
} else if (entityhuman.c(i, j, k) && entityhuman.c(i, j + 1, k)) {
int i1 = world.getTypeId(i, j, k);
if (i1 == Block.SOIL.id && world.isEmpty(i, j + 1, k)) {
@ -40,6 +40,8 @@ public class ItemSeeds extends Item {
} else {
return false;
}
} else {
return false;
}
}
}

View file

@ -41,13 +41,17 @@ public class ItemSign extends Item {
++i;
}
if (!Block.SIGN_POST.canPlace(world, i, j, k)) {
if (!entityhuman.c(i, j, k)) {
return false;
} else if (!Block.SIGN_POST.canPlace(world, i, j, k)) {
return false;
} else {
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
if (l == 1) {
world.setTypeIdAndData(i, j, k, Block.SIGN_POST.id, MathHelper.floor((double) ((entityhuman.yaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15);
int i1 = MathHelper.floor((double) ((entityhuman.yaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15;
world.setTypeIdAndData(i, j, k, Block.SIGN_POST.id, i1);
} else {
world.setTypeIdAndData(i, j, k, Block.WALL_SIGN.id, l);
}

View file

@ -38,9 +38,15 @@ public final class ItemStack {
this.damage = k;
}
public ItemStack(NBTTagCompound nbttagcompound) {
public static ItemStack a(NBTTagCompound nbttagcompound) {
ItemStack itemstack = new ItemStack();
itemstack.c(nbttagcompound);
return itemstack.getItem() != null ? itemstack : null;
}
private ItemStack() {
this.count = 0;
this.b(nbttagcompound);
}
public ItemStack a(int i) {
@ -70,14 +76,18 @@ public final class ItemStack {
return this.getItem().a(this, world, entityhuman);
}
public NBTTagCompound a(NBTTagCompound nbttagcompound) {
public ItemStack b(World world, EntityHuman entityhuman) {
return this.getItem().b(this, world, entityhuman);
}
public NBTTagCompound b(NBTTagCompound nbttagcompound) {
nbttagcompound.a("id", (short) this.id);
nbttagcompound.a("Count", (byte) this.count);
nbttagcompound.a("Damage", (short) this.damage);
return nbttagcompound;
}
public void b(NBTTagCompound nbttagcompound) {
public void c(NBTTagCompound nbttagcompound) {
this.id = nbttagcompound.d("id");
this.count = nbttagcompound.c("Count");
this.damage = nbttagcompound.d("Damage");
@ -183,12 +193,16 @@ public final class ItemStack {
return this.id == itemstack.id && this.damage == itemstack.damage;
}
public String k() {
return Item.byId[this.id].a(this);
}
public static ItemStack b(ItemStack itemstack) {
return itemstack == null ? null : itemstack.cloneItemStack();
}
public String toString() {
return this.count + "x" + Item.byId[this.id].a() + "@" + this.damage;
return this.count + "x" + Item.byId[this.id].b() + "@" + this.damage;
}
public void a(World world, Entity entity, int i, boolean flag) {
@ -199,12 +213,24 @@ public final class ItemStack {
Item.byId[this.id].a(this, world, entity, i, flag);
}
public void b(World world, EntityHuman entityhuman) {
public void c(World world, EntityHuman entityhuman) {
entityhuman.a(StatisticList.D[this.id], this.count);
Item.byId[this.id].c(this, world, entityhuman);
Item.byId[this.id].d(this, world, entityhuman);
}
public boolean c(ItemStack itemstack) {
return this.id == itemstack.id && this.count == itemstack.count && this.damage == itemstack.damage;
}
public int l() {
return this.getItem().c(this);
}
public EnumAnimation m() {
return this.getItem().b(this);
}
public void a(World world, EntityHuman entityhuman, int i) {
this.getItem().a(this, world, entityhuman, i);
}
}

View file

@ -21,13 +21,13 @@ public class ItemWorldMap extends ItemWorldMapBase {
String s = "map_" + itemstack.getData();
worldmap = new WorldMap(s);
worldmap.b = world.q().c();
worldmap.c = world.q().e();
worldmap.b = world.p().c();
worldmap.c = world.p().e();
worldmap.e = 3;
worldmap.map = (byte) world.worldProvider.dimension;
worldmap.a();
world.a(s, (WorldMapBase) worldmap);
// CraftBukkit start
MapInitializeEvent event = new MapInitializeEvent(worldmap.mapView);
Bukkit.getServer().getPluginManager().callEvent(event);
@ -72,7 +72,6 @@ public class ItemWorldMap extends ItemWorldMapBase {
byte b2 = 0;
int[] aint = new int[256];
Chunk chunk = world.getChunkAtWorldCoords(i3, j3);
if (chunk.isEmpty()) continue; // CraftBukkit
int k3 = i3 & 15;
int l3 = j3 & 15;
int i4 = 0;
@ -106,7 +105,7 @@ public class ItemWorldMap extends ItemWorldMapBase {
j5 = chunk.getTypeId(l4 + k3, k4 - 1, j4 + l3);
if (j5 == 0) {
flag1 = false;
} else if (k4 > 0 && j5 > 0 && Block.byId[j5].material.C == MaterialMapColor.b) {
} else if (k4 > 0 && j5 > 0 && Block.byId[j5].material.D == MaterialMapColor.b) {
flag1 = false;
}
@ -164,7 +163,7 @@ public class ItemWorldMap extends ItemWorldMapBase {
i5 = 0;
if (j4 > 0) {
MaterialMapColor materialmapcolor = Block.byId[j4].material.C;
MaterialMapColor materialmapcolor = Block.byId[j4].material.D;
if (materialmapcolor == MaterialMapColor.n) {
d2 = (double) i4 * 0.1D + (double) (k1 + j2 & 1) * 0.2D;
@ -225,7 +224,7 @@ public class ItemWorldMap extends ItemWorldMapBase {
}
}
public void c(ItemStack itemstack, World world, EntityHuman entityhuman) {
public void d(ItemStack itemstack, World world, EntityHuman entityhuman) {
itemstack.b(world.b("map"));
String s = "map_" + itemstack.getData();
WorldMap worldmap = new WorldMap(s);
@ -234,11 +233,11 @@ public class ItemWorldMap extends ItemWorldMapBase {
worldmap.b = MathHelper.floor(entityhuman.locX);
worldmap.c = MathHelper.floor(entityhuman.locZ);
worldmap.e = 3;
worldmap.map = (byte) ((WorldServer) world).dimension; // CraftBukkit
worldmap.map = (byte) world.worldProvider.dimension;
worldmap.a();
}
public Packet b(ItemStack itemstack, World world, EntityHuman entityhuman) {
public Packet c(ItemStack itemstack, World world, EntityHuman entityhuman) {
byte[] abyte = this.a(itemstack, world).a(itemstack, world, entityhuman);
return abyte == null ? null : new Packet131((short) Item.MAP.id, (short) itemstack.getData(), abyte);

View file

@ -46,13 +46,14 @@ public class MinecraftServer implements Runnable, ICommandListener {
int ticks = 0;
public String i;
public int j;
private List r = new ArrayList();
private List s = Collections.synchronizedList(new ArrayList());
private List s = new ArrayList();
private List t = Collections.synchronizedList(new ArrayList());
// public EntityTracker[] tracker = new EntityTracker[2]; // CraftBukkit - removed!
public boolean onlineMode;
public boolean spawnAnimals;
public boolean pvpMode;
public boolean allowFlight;
public String p;
// CraftBukkit start
public List<WorldServer> worlds = new ArrayList<WorldServer>();
@ -90,7 +91,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
System.setErr(new PrintStream(new LoggerOutputStream(log, Level.SEVERE), true));
// CraftBukkit end
log.info("Starting minecraft server version Beta 1.7.3");
log.info("Starting minecraft server version Beta 1.8");
if (Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) {
log.warning("**** NOT ENOUGH RAM!");
log.warning("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\"");
@ -104,6 +105,8 @@ public class MinecraftServer implements Runnable, ICommandListener {
this.spawnAnimals = this.propertyManager.getBoolean("spawn-animals", true);
this.pvpMode = this.propertyManager.getBoolean("pvp", true);
this.allowFlight = this.propertyManager.getBoolean("allow-flight", false);
this.p = this.propertyManager.getString("motd", "A Minecraft Server");
this.p.replace('\u00a7', '$');
InetAddress inetaddress = null;
if (s.length() > 0) {
@ -168,17 +171,24 @@ public class MinecraftServer implements Runnable, ICommandListener {
convertable.convert(s, new ConvertProgressUpdater(this));
}
// CraftBukkit start
for (int j = 0; j < (this.propertyManager.getBoolean("allow-nether", true) ? 2 : 1); ++j) {
// CraftBukkit - removed world array
int j = this.propertyManager.getInt("gamemode", 0);
j = WorldSettings.a(j);
log.info("Default game type: " + j);
// CraftBukkit start (+ removed worldsettings and servernbtmanager)
for (int k = 0; k < (this.propertyManager.getBoolean("allow-nether", true) ? 2 : 1); ++k) {
WorldServer world;
int dimension = j == 0 ? 0 : -1;
int dimension = k == 0 ? 0 : -1;
String worldType = Environment.getEnvironment(dimension).toString().toLowerCase();
String name = (dimension == 0) ? s : s + "_" + worldType;
ChunkGenerator gen = this.server.getGenerator(name);
WorldSettings settings = new WorldSettings(i, j, true);
if (j == 0) {
world = new WorldServer(this, new ServerNBTManager(new File("."), s, true), s, dimension, i, org.bukkit.World.Environment.getEnvironment(dimension), gen); // CraftBukkit
if (k == 0) {
world = new WorldServer(this, new ServerNBTManager(new File("."), s, true), s, dimension, settings, org.bukkit.World.Environment.getEnvironment(dimension), gen); // CraftBukkit
} else {
String dim = "DIM-1";
@ -208,7 +218,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
}
}
world = new SecondaryWorldServer(this, new ServerNBTManager(new File("."), name, true), name, dimension, i, this.worlds.get(0), org.bukkit.World.Environment.getEnvironment(dimension), gen); // CraftBukkit
world = new SecondaryWorldServer(this, new ServerNBTManager(new File("."), name, true), name, dimension, settings, this.worlds.get(0), org.bukkit.World.Environment.getEnvironment(dimension), gen); // CraftBukkit
}
if (gen != null) {
@ -219,8 +229,9 @@ public class MinecraftServer implements Runnable, ICommandListener {
world.tracker = new EntityTracker(this, dimension);
world.addIWorldAccess(new WorldManager(this, world));
world.spawnMonsters = this.propertyManager.getBoolean("spawn-monsters", true) ? 1 : 0;
world.spawnMonsters = this.propertyManager.getInt("difficulty", 1);
world.setSpawnFlags(this.propertyManager.getBoolean("spawn-monsters", true), this.spawnAnimals);
world.p().d(j);
this.worlds.add(world);
this.serverConfigurationManager.setPlayerFileData(this.worlds.toArray(new WorldServer[0]));
}
@ -256,7 +267,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
worldserver.chunkProviderServer.getChunkAt(chunkcoordinates.x + i1 >> 4, chunkcoordinates.z + j1 >> 4);
while (worldserver.doLighting() && this.isRunning) {
while (worldserver.v() && this.isRunning) {
;
}
}
@ -442,7 +453,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
worldserver.doTick();
while (worldserver.doLighting()) {
while (worldserver.v()) {
;
}
@ -459,8 +470,8 @@ public class MinecraftServer implements Runnable, ICommandListener {
}
// CraftBukkit end
for (j = 0; j < this.r.size(); ++j) {
((IUpdatePlayerListBox) this.r.get(j)).a();
for (j = 0; j < this.s.size(); ++j) {
((IUpdatePlayerListBox) this.s.get(j)).a();
}
try {
@ -471,12 +482,12 @@ public class MinecraftServer implements Runnable, ICommandListener {
}
public void issueCommand(String s, ICommandListener icommandlistener) {
this.s.add(new ServerCommand(s, icommandlistener));
this.t.add(new ServerCommand(s, icommandlistener));
}
public void b() {
while (this.s.size() > 0) {
ServerCommand servercommand = (ServerCommand) this.s.remove(0);
while (this.t.size() > 0) {
ServerCommand servercommand = (ServerCommand) this.t.remove(0);
// CraftBukkit start - ServerCommand for preprocessing
ServerCommandEvent event = new ServerCommandEvent(this.console, servercommand.command);
@ -490,7 +501,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
}
public void a(IUpdatePlayerListBox iupdateplayerlistbox) {
this.r.add(iupdateplayerlistbox);
this.s.add(iupdateplayerlistbox);
}
public static void main(final OptionSet options) { // CraftBukkit - replaces main(String args[])

View file

@ -1,6 +1,7 @@
package net.minecraft.server;
import java.net.Socket;
import java.util.Iterator;
import java.util.Random;
import java.util.logging.Logger;
@ -63,8 +64,8 @@ public class NetLoginHandler extends NetHandler {
public void a(Packet1Login packet1login) {
this.g = packet1login.name;
if (packet1login.a != 14) {
if (packet1login.a > 14) {
if (packet1login.a != 17) {
if (packet1login.a > 17) {
this.disconnect("Outdated server!");
} else {
this.disconnect("Outdated client!");
@ -85,12 +86,24 @@ public class NetLoginHandler extends NetHandler {
this.server.serverConfigurationManager.b(entityplayer);
// entityplayer.a((World) this.server.a(entityplayer.dimension)); // CraftBukkit - set by Entity
// CraftBukkit - add world and location to 'logged in' message.
entityplayer.itemInWorldManager.a((WorldServer) entityplayer.world);
a.info(this.b() + " logged in with entity id " + entityplayer.id + " at ([" + entityplayer.world.worldData.name + "] " + entityplayer.locX + ", " + entityplayer.locY + ", " + entityplayer.locZ + ")");
WorldServer worldserver = (WorldServer) entityplayer.world; // CraftBukkit
ChunkCoordinates chunkcoordinates = worldserver.getSpawn();
entityplayer.itemInWorldManager.b(worldserver.p().n());
NetServerHandler netserverhandler = new NetServerHandler(this.server, this.networkManager, entityplayer);
netserverhandler.sendPacket(new Packet1Login("", entityplayer.id, worldserver.getSeed(), (byte) worldserver.worldProvider.dimension));
int i = entityplayer.id;
long j = worldserver.getSeed();
int k = entityplayer.itemInWorldManager.a();
byte b0 = (byte) worldserver.worldProvider.dimension;
byte b1 = (byte) worldserver.spawnMonsters;
worldserver.getClass();
Packet1Login packet1login1 = new Packet1Login("", i, j, k, b0, b1, (byte) -128, (byte) this.server.serverConfigurationManager.h());
netserverhandler.sendPacket(packet1login1);
netserverhandler.sendPacket(new Packet6SpawnPosition(chunkcoordinates.x, chunkcoordinates.y, chunkcoordinates.z));
this.server.serverConfigurationManager.a(entityplayer, worldserver);
// this.server.serverConfigurationManager.sendAll(new Packet3Chat("\u00A7e" + entityplayer.name + " joined the game.")); // CraftBukkit - message moved to join event
@ -98,6 +111,14 @@ public class NetLoginHandler extends NetHandler {
netserverhandler.a(entityplayer.locX, entityplayer.locY, entityplayer.locZ, entityplayer.yaw, entityplayer.pitch);
this.server.networkListenThread.a(netserverhandler);
netserverhandler.sendPacket(new Packet4UpdateTime(entityplayer.getPlayerTime())); // CraftBukkit - add support for player specific time
Iterator iterator = entityplayer.ak().iterator();
while (iterator.hasNext()) {
MobEffect mobeffect = (MobEffect) iterator.next();
netserverhandler.sendPacket(new Packet41MobEffect(entityplayer.id, mobeffect));
}
entityplayer.syncInventory();
}
@ -109,6 +130,19 @@ public class NetLoginHandler extends NetHandler {
this.c = true;
}
public void a(Packet254GetInfo packet254getinfo) {
try {
String s = this.server.p + "\u00A7" + this.server.serverConfigurationManager.g() + "\u00A7" + this.server.serverConfigurationManager.h();
this.networkManager.queue(new Packet255KickDisconnect(s));
this.networkManager.d();
this.server.networkListenThread.a(this.networkManager.f());
this.c = true;
} catch (Exception exception) {
exception.printStackTrace();
}
}
public void a(Packet packet) {
this.disconnect("Protocol error");
}

View file

@ -1,8 +1,7 @@
package net.minecraft.server;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.logging.Logger;
// CraftBukkit start
@ -41,13 +40,16 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
public EntityPlayer player; // CraftBukkit - private -> public
private int f;
private int g;
private int h;
private boolean i;
private boolean h;
private int i;
private long j;
private static Random k = new Random();
private long l;
private double x;
private double y;
private double z;
private boolean checkMovement = true;
private Map n = new HashMap();
private EntityList q = new EntityList();
public NetServerHandler(MinecraftServer minecraftserver, NetworkManager networkmanager, EntityPlayer entityplayer) {
this.minecraftServer = minecraftserver;
@ -85,10 +87,14 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
// CraftBukkit end
public void a() {
this.i = false;
this.h = false;
++this.f;
this.networkManager.b();
if (this.f - this.g > 20) {
this.sendPacket(new Packet0KeepAlive());
if ((long) this.f - this.l > 20L) {
this.l = (long) this.f;
this.j = System.nanoTime() / 1000000L;
this.i = k.nextInt();
this.sendPacket(new Packet0KeepAlive(this.i));
}
}
@ -107,7 +113,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
s = event.getReason();
// CraftBukkit end
this.player.B();
this.player.A();
this.sendPacket(new Packet255KickDisconnect(s));
this.networkManager.d();
@ -129,7 +135,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
public void a(Packet10Flying packet10flying) {
WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension);
this.i = true;
this.h = true;
double d0;
if (!this.checkMovement) {
@ -214,7 +220,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
float f = this.player.yaw;
float f1 = this.player.pitch;
this.player.vehicle.f();
this.player.vehicle.g_();
d1 = this.player.locX;
d2 = this.player.locY;
d3 = this.player.locZ;
@ -232,7 +238,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
this.player.onGround = packet10flying.g;
this.player.a(true);
this.player.b(true);
this.player.move(d5, 0.0D, d4);
this.player.setLocation(d1, d2, d3, f, f1);
this.player.motX = d5;
@ -242,7 +248,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
if (this.player.vehicle != null) {
this.player.vehicle.f();
this.player.vehicle.g_();
}
this.minecraftServer.serverConfigurationManager.d(this.player);
@ -254,7 +260,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
if (this.player.isSleeping()) {
this.player.a(true);
this.player.b(true);
this.player.setLocation(this.x, this.y, this.z, this.player.yaw, this.player.pitch);
worldserver.playerJoinedWorld(this.player);
return;
@ -296,8 +302,8 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
f3 = packet10flying.pitch;
}
this.player.a(true);
this.player.br = 0.0F;
this.player.b(true);
this.player.bH = 0.0F;
this.player.setLocation(this.x, this.y, this.z, f2, f3);
if (!this.checkMovement) {
return;
@ -308,7 +314,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
double d7 = d3 - this.player.locZ;
double d8 = d4 * d4 + d6 * d6 + d7 * d7;
if (d8 > 200.0D && this.checkMovement) { // CraftBukkit - Added this.checkMovement condition to solve this check being triggered by teleports
if (d8 > 100.0D && this.checkMovement) { // CraftBukkit - Added this.checkMovement condition to solve this check being triggered by teleports
a.warning(this.player.name + " moved too quickly!");
this.disconnect("You moved too quickly :( (Hacking?)");
return;
@ -317,7 +323,13 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
float f4 = 0.0625F;
boolean flag = worldserver.getEntities(this.player, this.player.boundingBox.clone().shrink((double) f4, (double) f4, (double) f4)).size() == 0;
if (this.player.onGround && !packet10flying.g && d6 > 0.0D) {
this.player.b(0.2F);
}
this.player.move(d4, d6, d7);
this.player.onGround = packet10flying.g;
this.player.a(d4, d6, d7);
d4 = d1 - this.player.locX;
d6 = d2 - this.player.locY;
if (d6 > -0.5D || d6 < 0.5D) {
@ -328,7 +340,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
d8 = d4 * d4 + d6 * d6 + d7 * d7;
boolean flag1 = false;
if (d8 > 0.0625D && !this.player.isSleeping()) {
if (d8 > 0.0625D && !this.player.isSleeping() && !this.player.itemInWorldManager.b()) {
flag1 = true;
a.warning(this.player.name + " moved wrongly!");
System.out.println("Got position " + d1 + ", " + d2 + ", " + d3);
@ -345,17 +357,17 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
AxisAlignedBB axisalignedbb = this.player.boundingBox.clone().b((double) f4, (double) f4, (double) f4).a(0.0D, -0.55D, 0.0D);
if (!this.minecraftServer.allowFlight && !worldserver.b(axisalignedbb)) {
if (!this.minecraftServer.allowFlight && !this.player.itemInWorldManager.b() && !worldserver.b(axisalignedbb)) {
if (d6 >= -0.03125D) {
++this.h;
if (this.h > 80) {
++this.g;
if (this.g > 80) {
a.warning(this.player.name + " was kicked for floating too long!");
this.disconnect("Flying is not enabled on this server");
return;
}
}
} else {
this.h = 0;
this.g = 0;
}
this.player.onGround = packet10flying.g;
@ -419,6 +431,8 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension);
if (packet14blockdig.e == 4) {
this.player.J();
} else if (packet14blockdig.e == 5) {
// CraftBukkit start
// If the ticks aren't the same then the count starts from 0 and we update the lastDropTick.
if (this.lastDropTick != MinecraftServer.currentTick) {
@ -433,7 +447,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
}
// CraftBukkit end
this.player.F();
this.player.E();
} else {
boolean flag = worldserver.weirdIsOpCache = worldserver.dimension != 0 || this.minecraftServer.serverConfigurationManager.isOp(this.player.name); // CraftBukkit
boolean flag1 = false;
@ -446,6 +460,10 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
flag1 = true;
}
if (this.player.itemInWorldManager.b()) {
flag1 = false;
}
int i = packet14blockdig.a;
int j = packet14blockdig.b;
int k = packet14blockdig.c;
@ -462,8 +480,8 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
ChunkCoordinates chunkcoordinates = worldserver.getSpawn();
int l = (int) MathHelper.abs((float) (i - chunkcoordinates.x));
int i1 = (int) MathHelper.abs((float) (k - chunkcoordinates.z));
int l = MathHelper.a(i - chunkcoordinates.x);
int i1 = MathHelper.a(k - chunkcoordinates.z);
if (l > i1) {
i1 = l;
@ -474,7 +492,6 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
if (i1 < this.server.getSpawnRadius() && !flag) {
this.player.netServerHandler.sendPacket(new Packet53BlockChange(i, j, k, worldserver));
} else {
// CraftBukkit - add face argument
this.player.itemInWorldManager.dig(i, j, k, packet14blockdig.face);
}
} else if (packet14blockdig.e == 2) {
@ -554,8 +571,8 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
int k = packet15place.c;
int l = packet15place.face;
ChunkCoordinates chunkcoordinates = worldserver.getSpawn();
int i1 = (int) MathHelper.abs((float) (i - chunkcoordinates.x));
int j1 = (int) MathHelper.abs((float) (k - chunkcoordinates.z));
int i1 = MathHelper.a(i - chunkcoordinates.x);
int j1 = MathHelper.a(k - chunkcoordinates.z);
if (i1 > j1) {
j1 = i1;
@ -604,17 +621,20 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
itemstack = this.player.inventory.getItemInHand();
if (itemstack != null && itemstack.count == 0) {
this.player.inventory.items[this.player.inventory.itemInHandIndex] = null;
itemstack = null;
}
this.player.h = true;
this.player.inventory.items[this.player.inventory.itemInHandIndex] = ItemStack.b(this.player.inventory.items[this.player.inventory.itemInHandIndex]);
Slot slot = this.player.activeContainer.a(this.player.inventory, this.player.inventory.itemInHandIndex);
if (itemstack == null || itemstack.l() == 0) {
this.player.h = true;
this.player.inventory.items[this.player.inventory.itemInHandIndex] = ItemStack.b(this.player.inventory.items[this.player.inventory.itemInHandIndex]);
Slot slot = this.player.activeContainer.a(this.player.inventory, this.player.inventory.itemInHandIndex);
this.player.activeContainer.a();
this.player.h = false;
// CraftBukkit
if (!ItemStack.equals(this.player.inventory.getItemInHand(), packet15place.itemstack) || always) {
this.sendPacket(new Packet103SetSlot(this.player.activeContainer.windowId, slot.a, this.player.inventory.getItemInHand()));
this.player.activeContainer.a();
this.player.h = false;
// CraftBukkit | TODO CHECK IF NEEDED -- new if structure might not need 'always'. Kept it in for now, but may be able to remove in future
if (!ItemStack.equals(this.player.inventory.getItemInHand(), packet15place.itemstack) || always) {
this.sendPacket(new Packet103SetSlot(this.player.activeContainer.windowId, slot.b, this.player.inventory.getItemInHand()));
}
}
worldserver.weirdIsOpCache = false;
@ -663,7 +683,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
public void a(Packet16BlockItemSwitch packet16blockitemswitch) {
if (this.player.dead) return; // CraftBukkit
if (packet16blockitemswitch.itemInHandIndex >= 0 && packet16blockitemswitch.itemInHandIndex <= InventoryPlayer.e()) {
if (packet16blockitemswitch.itemInHandIndex >= 0 && packet16blockitemswitch.itemInHandIndex <= InventoryPlayer.g()) {
// CraftBukkit start
PlayerItemHeldEvent event = new PlayerItemHeldEvent(this.getPlayer(), this.player.inventory.itemInHandIndex, packet16blockitemswitch.itemInHandIndex);
this.server.getPluginManager().callEvent(event);
@ -749,7 +769,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
a.info(s);
this.minecraftServer.serverConfigurationManager.sendAll(new Packet3Chat(s));
} else if (s.toLowerCase().startsWith("/kill")) {
this.player.damageEntity(this.player, 1000); // CraftBukkit - replace null entity with player entity; TODO: decide if we want damage with a null source to fire an event.
this.player.damageEntity(DamageSource.j, 1000);
} else if (s.toLowerCase().startsWith("/tell ")) {
String[] astring = s.split(" ");
@ -811,7 +831,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
if (event.isCancelled()) return;
// CraftBukkit end
this.player.w();
this.player.v();
}
}
@ -833,6 +853,10 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
this.player.setSneak(true);
} else if (packet19entityaction.animation == 2) {
this.player.setSneak(false);
} else if (packet19entityaction.animation == 4) {
this.player.g(true);
} else if (packet19entityaction.animation == 5) {
this.player.g(false);
} else if (packet19entityaction.animation == 3) {
this.player.a(false, true, true);
this.checkMovement = false;
@ -860,9 +884,9 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension);
Entity entity = worldserver.getEntity(packet7useentity.target);
ItemStack itemInHand = this.player.inventory.getItemInHand();
if (entity != null && this.player.e(entity) && this.player.g(entity) < 36.0D) {
if (entity != null && this.player.f(entity) && this.player.h(entity) < 36.0D) {
ItemStack itemInHand = this.player.inventory.getItemInHand(); // CraftBukkit
if (packet7useentity.c == 0) {
// CraftBukkit start
PlayerInteractEntityEvent event = new PlayerInteractEntityEvent((Player) this.getPlayer(), entity.getBukkitEntity());
@ -900,7 +924,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
public void a(Packet101CloseWindow packet101closewindow) {
if (this.player.dead) return; // CraftBukkit
this.player.A();
this.player.z();
}
public void a(Packet102WindowClick packet102windowclick) {
@ -913,10 +937,10 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
this.player.netServerHandler.sendPacket(new Packet106Transaction(packet102windowclick.a, packet102windowclick.d, true));
this.player.h = true;
this.player.activeContainer.a();
this.player.z();
this.player.y();
this.player.h = false;
} else {
this.n.put(Integer.valueOf(this.player.activeContainer.windowId), Short.valueOf(packet102windowclick.d));
this.q.a(this.player.activeContainer.windowId, Short.valueOf(packet102windowclick.d));
this.player.netServerHandler.sendPacket(new Packet106Transaction(packet102windowclick.a, packet102windowclick.d, false));
this.player.activeContainer.a(this.player, false);
ArrayList arraylist = new ArrayList();
@ -930,10 +954,29 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
}
public void a(Packet107SetCreativeSlot packet107setcreativeslot) {
if (this.player.itemInWorldManager.b()) {
boolean flag = packet107setcreativeslot.a >= 36 && packet107setcreativeslot.a < 36 + InventoryPlayer.g();
boolean flag1 = packet107setcreativeslot.b >= -1 && packet107setcreativeslot.b < Item.byId.length && (packet107setcreativeslot.b < 0 || Item.byId[packet107setcreativeslot.b] != null);
boolean flag2 = packet107setcreativeslot.d >= 0 && packet107setcreativeslot.c >= 0 && packet107setcreativeslot.c <= 64;
if (flag && flag1 && flag2) {
if (packet107setcreativeslot.b <= 0) {
this.player.defaultContainer.a(packet107setcreativeslot.a, (ItemStack) null);
} else {
this.player.defaultContainer.a(packet107setcreativeslot.a, new ItemStack(packet107setcreativeslot.b, packet107setcreativeslot.c, packet107setcreativeslot.d));
}
this.player.defaultContainer.a(this.player, true);
} else if (!flag && flag1 && flag2 && packet107setcreativeslot.a == -1 && packet107setcreativeslot.b > 0) {
this.player.b(new ItemStack(packet107setcreativeslot.b, packet107setcreativeslot.c, packet107setcreativeslot.d));
}
}
}
public void a(Packet106Transaction packet106transaction) {
if (this.player.dead) return; // CraftBukkit
Short oshort = (Short) this.n.get(Integer.valueOf(this.player.activeContainer.windowId));
Short oshort = (Short) this.q.a(this.player.activeContainer.windowId);
if (oshort != null && packet106transaction.b == oshort.shortValue() && this.player.activeContainer.windowId == packet106transaction.a && !this.player.activeContainer.c(this.player)) {
this.player.activeContainer.a(this.player, true);
@ -996,7 +1039,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
for (int l = 0; l < 4; ++l) {
tileentitysign1.lines[l] = event.getLine(l);
}
tileentitysign1.a(false);
tileentitysign1.isEditable = true;
}
// CraftBukkit end
@ -1006,6 +1049,14 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
}
public void a(Packet0KeepAlive packet0keepalive) {
if (packet0keepalive.a == this.i) {
int i = (int) (System.nanoTime() / 1000000L - this.x);
this.player.i = (this.player.i * 3 + i) / 4;
}
}
public boolean c() {
return true;
}

View file

@ -88,7 +88,7 @@ public class NetworkManager {
}
}
private boolean f() {
private boolean g() {
boolean flag = false;
try {
@ -142,7 +142,7 @@ public class NetworkManager {
this.r.interrupt();
}
private boolean g() {
private boolean h() {
boolean flag = false;
try {
@ -218,7 +218,7 @@ public class NetworkManager {
this.w = 0;
}
int i = 100;
int i = 1000;
while (!this.m.isEmpty() && i-- >= 0) {
Packet packet = (Packet) this.m.remove(0);
@ -247,6 +247,10 @@ public class NetworkManager {
return this.lowPriorityQueue.size();
}
public Socket f() {
return this.socket;
}
static boolean a(NetworkManager networkmanager) {
return networkmanager.l;
}
@ -256,11 +260,11 @@ public class NetworkManager {
}
static boolean c(NetworkManager networkmanager) {
return networkmanager.g();
return networkmanager.h();
}
static boolean d(NetworkManager networkmanager) {
return networkmanager.f();
return networkmanager.g();
}
static DataOutputStream e(NetworkManager networkmanager) {

View file

@ -11,24 +11,24 @@ import java.util.Set;
public abstract class Packet {
private static Map a = new HashMap();
private static EntityList a = new EntityList();
private static Map b = new HashMap();
private static Set c = new HashSet();
private static Set d = new HashSet();
public final long timestamp = System.currentTimeMillis();
public boolean k = false;
private static HashMap e;
private static EntityList e;
private static int f;
public Packet() {}
static void a(int i, boolean flag, boolean flag1, Class oclass) {
if (a.containsKey(Integer.valueOf(i))) {
if (a.b(i)) {
throw new IllegalArgumentException("Duplicate packet id:" + i);
} else if (b.containsKey(oclass)) {
throw new IllegalArgumentException("Duplicate packet class:" + oclass);
} else {
a.put(Integer.valueOf(i), oclass);
a.a(i, oclass);
b.put(oclass, Integer.valueOf(i));
if (flag) {
c.add(Integer.valueOf(i));
@ -42,7 +42,7 @@ public abstract class Packet {
public static Packet a(int i) {
try {
Class oclass = (Class) a.get(Integer.valueOf(i));
Class oclass = (Class) a.a(i);
return oclass == null ? null : (Packet) oclass.newInstance();
} catch (Exception exception) {
@ -94,11 +94,11 @@ public abstract class Packet {
}
// CraftBukkit end
PacketCounter packetcounter = (PacketCounter) e.get(Integer.valueOf(i));
PacketCounter packetcounter = (PacketCounter) e.a(i);
if (packetcounter == null) {
packetcounter = new PacketCounter((EmptyClass1) null);
e.put(Integer.valueOf(i), packetcounter);
e.a(i, packetcounter);
}
packetcounter.a(packet.a());
@ -180,6 +180,7 @@ public abstract class Packet {
a(23, true, false, Packet23VehicleSpawn.class);
a(24, true, false, Packet24MobSpawn.class);
a(25, true, false, Packet25EntityPainting.class);
a(26, true, false, Packet26AddExpOrb.class);
a(27, false, false, Packet27.class); // CraftBukkit - true -> false; disabled unused packet. TODO -- check if needed
a(28, true, false, Packet28EntityVelocity.class);
a(29, true, false, Packet29DestroyEntity.class);
@ -191,6 +192,9 @@ public abstract class Packet {
a(38, true, false, Packet38EntityStatus.class);
a(39, true, false, Packet39AttachEntity.class);
a(40, true, false, Packet40EntityMetadata.class);
a(41, true, false, Packet41MobEffect.class);
a(42, true, false, Packet42RemoveMobEffect.class);
a(43, true, false, Packet43SetExperience.class);
a(50, true, false, Packet50PreChunk.class);
a(51, true, false, Packet51MapChunk.class);
a(52, true, false, Packet52MultiBlockChange.class);
@ -207,11 +211,14 @@ public abstract class Packet {
a(104, true, false, Packet104WindowItems.class);
a(105, true, false, Packet105CraftProgressBar.class);
a(106, true, true, Packet106Transaction.class);
a(107, true, true, Packet107SetCreativeSlot.class);
a(130, true, true, Packet130UpdateSign.class);
a(131, true, false, Packet131.class);
a(200, true, false, Packet200Statistic.class);
a(201, true, false, Packet201PlayerInfo.class);
a(254, false, true, Packet254GetInfo.class);
a(255, true, true, Packet255KickDisconnect.class);
e = new HashMap();
e = new EntityList();
f = 0;
}
}

View file

@ -52,7 +52,7 @@ class PlayerInstance {
if (this.b.size() == 0) {
long i = (long) this.chunkX + 2147483647L | (long) this.chunkZ + 2147483647L << 32;
PlayerManager.a(this.playerManager).b(i);
PlayerManager.a(this.playerManager).d(i);
if (this.dirtyCount > 0) {
PlayerManager.b(this.playerManager).remove(this);
}
@ -182,7 +182,7 @@ class PlayerInstance {
private void sendTileEntity(TileEntity tileentity) {
if (tileentity != null) {
Packet packet = tileentity.f();
Packet packet = tileentity.l();
if (packet != null) {
this.sendAll(packet);

View file

@ -37,7 +37,9 @@ public class PortalTravelAgent {
for (int k1 = i1 - short1; k1 <= i1 + short1; ++k1) {
double d3 = (double) k1 + 0.5D - entity.locZ;
for (int l1 = 127; l1 >= 0; --l1) {
world.getClass();
for (int l1 = 128 - 1; l1 >= 0; --l1) {
if (world.getTypeId(j1, l1, k1) == Block.PORTAL.id) {
while (world.getTypeId(j1, l1 - 1, k1) == Block.PORTAL.id) {
--l1;
@ -119,9 +121,10 @@ public class PortalTravelAgent {
for (j2 = k - b0; j2 <= k + b0; ++j2) {
d2 = (double) j2 + 0.5D - entity.locZ;
world.getClass();
label271:
for (l2 = 127; l2 >= 0; --l2) {
label274:
for (l2 = 128 - 1; l2 >= 0; --l2) {
if (world.isEmpty(i2, l2, j2)) {
while (l2 > 0 && world.isEmpty(i2, l2 - 1, j2)) {
--l2;
@ -143,7 +146,7 @@ public class PortalTravelAgent {
int l4 = j2 + (k3 - 1) * i3 - l3 * j3;
if (j4 < 0 && !world.getMaterial(i4, k4, l4).isBuildable() || j4 >= 0 && !world.isEmpty(i4, k4, l4)) {
continue label271;
continue label274;
}
}
}
@ -170,11 +173,12 @@ public class PortalTravelAgent {
for (j2 = k - b0; j2 <= k + b0; ++j2) {
d2 = (double) j2 + 0.5D - entity.locZ;
world.getClass();
label219:
for (l2 = 127; l2 >= 0; --l2) {
label222:
for (l2 = 128 - 1; l2 >= 0; --l2) {
if (world.isEmpty(i2, l2, j2)) {
while (world.isEmpty(i2, l2 - 1, j2)) {
while (l2 > 0 && world.isEmpty(i2, l2 - 1, j2)) {
--l2;
}
@ -188,7 +192,7 @@ public class PortalTravelAgent {
i4 = l2 + k3;
k4 = j2 + (l3 - 1) * i3;
if (k3 < 0 && !world.getMaterial(j4, i4, k4).isBuildable() || k3 >= 0 && !world.isEmpty(j4, i4, k4)) {
continue label219;
continue label222;
}
}
}
@ -275,8 +279,10 @@ public class PortalTravelAgent {
i1 = 70;
}
if (i1 > 118) {
i1 = 118;
world.getClass();
if (i1 > 128 - 10) {
world.getClass();
i1 = 128 - 10;
}
j5 = i1;

View file

@ -4,8 +4,8 @@ import org.bukkit.generator.ChunkGenerator; // CraftBukkit
public class SecondaryWorldServer extends WorldServer {
// CraftBukkit start
public SecondaryWorldServer(MinecraftServer minecraftserver, IDataManager idatamanager, String s, int i, long j, WorldServer worldserver, org.bukkit.World.Environment env, ChunkGenerator gen) {
super(minecraftserver, idatamanager, s, i, j, env, gen);
public SecondaryWorldServer(MinecraftServer minecraftserver, IDataManager idatamanager, String s, int i, WorldSettings worldsettings, WorldServer worldserver, org.bukkit.World.Environment env, ChunkGenerator gen) {
super(minecraftserver, idatamanager, s, i, worldsettings, env, gen);
// CraftBukkit end
this.worldMaps = worldserver.worldMaps;
}

View file

@ -43,6 +43,7 @@ public class ServerConfigurationManager {
private File m;
public PlayerFileData playerFileData; // CraftBukkit - private - >public
public boolean o; // Craftbukkit - private -> public
private int p = 0;
// CraftBukkit start
private CraftServer cserver;
@ -63,19 +64,19 @@ public class ServerConfigurationManager {
// CraftBukkit - removed playermanagers
this.maxPlayers = minecraftserver.propertyManager.getInt("max-players", 20);
this.o = minecraftserver.propertyManager.getBoolean("white-list", false);
this.g();
this.i();
this.k();
this.m();
this.h();
this.o();
this.j();
this.l();
this.n();
this.p();
}
public void setPlayerFileData(WorldServer[] aworldserver) {
if (this.playerFileData != null) return; // CraftBukkit
this.playerFileData = aworldserver[0].p().d();
this.playerFileData = aworldserver[0].o().d();
}
public void a(EntityPlayer entityplayer) {
@ -110,6 +111,7 @@ public class ServerConfigurationManager {
}
public void c(EntityPlayer entityplayer) {
this.sendAll(new Packet201PlayerInfo(entityplayer.name, true, 1000));
this.players.add(entityplayer);
WorldServer worldserver = this.server.getWorldServer(entityplayer.dimension);
@ -132,6 +134,12 @@ public class ServerConfigurationManager {
worldserver.addEntity(entityplayer);
this.getPlayerManager(entityplayer.dimension).addPlayer(entityplayer);
for (int i = 0; i < this.players.size(); ++i) {
EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i);
entityplayer.netServerHandler.sendPacket(new Packet201PlayerInfo(entityplayer1.name, true, entityplayer1.i));
}
}
public void d(EntityPlayer entityplayer) {
@ -150,6 +158,7 @@ public class ServerConfigurationManager {
this.server.getWorldServer(entityplayer.dimension).kill(entityplayer);
this.players.remove(entityplayer);
this.getPlayerManager(entityplayer.dimension).removePlayer(entityplayer);
this.sendAll(new Packet201PlayerInfo(entityplayer.name, false, 9999));
return playerQuitEvent.getQuitMessage(); // CraftBukkit
}
@ -224,7 +233,7 @@ public class ServerConfigurationManager {
isBedSpawn = true;
location = new Location(cworld, chunkcoordinates1.x + 0.5, chunkcoordinates1.y, chunkcoordinates1.z + 0.5);
} else {
entityplayer1.netServerHandler.sendPacket(new Packet70Bed(0));
entityplayer1.netServerHandler.sendPacket(new Packet70Bed(0, 0));
}
}
@ -257,8 +266,7 @@ public class ServerConfigurationManager {
// CraftBukkit start
byte actualDimension = (byte) (worldserver.getWorld().getEnvironment().getId());
entityplayer1.netServerHandler.sendPacket(new Packet9Respawn((byte) (actualDimension >= 0 ? -1 : 0)));
entityplayer1.netServerHandler.sendPacket(new Packet9Respawn(actualDimension));
entityplayer1.netServerHandler.sendPacket(new Packet9Respawn(actualDimension, (byte)entityplayer1.world.spawnMonsters, entityplayer1.world.getSeed(), 128, entityplayer1.itemInWorldManager.a()));
entityplayer1.spawnIn(worldserver);
entityplayer1.dead = false;
entityplayer1.netServerHandler.teleport(new Location(worldserver.getWorld(), entityplayer1.locX, entityplayer1.locY, entityplayer1.locZ, entityplayer1.yaw, entityplayer1.pitch));
@ -268,7 +276,7 @@ public class ServerConfigurationManager {
worldserver.addEntity(entityplayer1);
this.players.add(entityplayer1);
this.updateClient(entityplayer1); // CraftBukkit
entityplayer1.x();
entityplayer1.w();
return entityplayer1;
}
@ -307,8 +315,18 @@ public class ServerConfigurationManager {
}
public void b() {
int i;
if (this.p-- <= 0) {
for (i = 0; i < this.players.size(); ++i) {
EntityPlayer entityplayer = (EntityPlayer) this.players.get(i);
this.sendAll(new Packet201PlayerInfo(entityplayer.name, true, entityplayer.i));
}
}
// CraftBukkit start
for (int i = 0; i < this.server.worlds.size(); ++i) {
for (i = 0; i < this.server.worlds.size(); ++i) {
this.server.worlds.get(i).manager.flush();
}
// CraftBukkit end
@ -352,15 +370,15 @@ public class ServerConfigurationManager {
public void a(String s) {
this.banByName.add(s.toLowerCase());
this.h();
this.j();
}
public void b(String s) {
this.banByName.remove(s.toLowerCase());
this.h();
this.j();
}
private void g() {
private void i() {
try {
this.banByName.clear();
BufferedReader bufferedreader = new BufferedReader(new FileReader(this.j));
@ -376,7 +394,7 @@ public class ServerConfigurationManager {
}
}
private void h() {
private void j() {
try {
PrintWriter printwriter = new PrintWriter(new FileWriter(this.j, false));
Iterator iterator = this.banByName.iterator();
@ -395,15 +413,15 @@ public class ServerConfigurationManager {
public void c(String s) {
this.banByIP.add(s.toLowerCase());
this.j();
this.l();
}
public void d(String s) {
this.banByIP.remove(s.toLowerCase());
this.j();
this.l();
}
private void i() {
private void k() {
try {
this.banByIP.clear();
BufferedReader bufferedreader = new BufferedReader(new FileReader(this.k));
@ -419,7 +437,7 @@ public class ServerConfigurationManager {
}
}
private void j() {
private void l() {
try {
PrintWriter printwriter = new PrintWriter(new FileWriter(this.k, false));
Iterator iterator = this.banByIP.iterator();
@ -438,7 +456,7 @@ public class ServerConfigurationManager {
public void e(String s) {
this.h.add(s.toLowerCase());
this.l();
this.n();
// Craftbukkit start
Player player = server.server.getPlayer(s);
@ -450,7 +468,7 @@ public class ServerConfigurationManager {
public void f(String s) {
this.h.remove(s.toLowerCase());
this.l();
this.n();
// Craftbukkit start
Player player = server.server.getPlayer(s);
@ -460,7 +478,7 @@ public class ServerConfigurationManager {
// Craftbukkit end
}
private void k() {
private void m() {
try {
this.h.clear();
BufferedReader bufferedreader = new BufferedReader(new FileReader(this.l));
@ -477,7 +495,7 @@ public class ServerConfigurationManager {
}
}
private void l() {
private void n() {
try {
PrintWriter printwriter = new PrintWriter(new FileWriter(this.l, false));
Iterator iterator = this.h.iterator();
@ -495,7 +513,7 @@ public class ServerConfigurationManager {
}
}
private void m() {
private void o() {
try {
this.i.clear();
BufferedReader bufferedreader = new BufferedReader(new FileReader(this.m));
@ -511,7 +529,7 @@ public class ServerConfigurationManager {
}
}
private void n() {
private void p() {
try {
PrintWriter printwriter = new PrintWriter(new FileWriter(this.m, false));
Iterator iterator = this.i.iterator();
@ -610,12 +628,12 @@ public class ServerConfigurationManager {
public void k(String s) {
this.i.add(s);
this.n();
this.p();
}
public void l(String s) {
this.i.remove(s);
this.n();
this.p();
}
public Set e() {
@ -623,18 +641,26 @@ public class ServerConfigurationManager {
}
public void f() {
this.m();
this.o();
}
public void a(EntityPlayer entityplayer, WorldServer worldserver) {
entityplayer.netServerHandler.sendPacket(new Packet4UpdateTime(worldserver.getTime()));
if (worldserver.v()) {
entityplayer.netServerHandler.sendPacket(new Packet70Bed(1));
if (worldserver.u()) {
entityplayer.netServerHandler.sendPacket(new Packet70Bed(1, 0));
}
}
public void updateClient(EntityPlayer entityplayer) {
entityplayer.updateInventory(entityplayer.defaultContainer);
entityplayer.C();
entityplayer.B();
}
public int g() {
return this.players.size();
}
public int h() {
return this.maxPlayers;
}
}

View file

@ -3,16 +3,16 @@ package net.minecraft.server;
public class Slot {
public final int index; // CraftBukkit - private -> public
public final IInventory inventory; // CraftBukkit - private -> public
public int a;
public final IInventory inventory;
public int b;
public int c;
public int d;
public Slot(IInventory iinventory, int i, int j, int k) {
this.inventory = iinventory;
this.index = i;
this.b = j;
this.c = k;
this.c = j;
this.d = k;
}
public void a(ItemStack itemstack) {

View file

@ -1,8 +1,10 @@
package net.minecraft.server;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
// CraftBukkit
@ -17,7 +19,10 @@ public final class SpawnerCreature {
protected static ChunkPosition a(World world, int i, int j) {
int k = i + world.random.nextInt(16);
int l = world.random.nextInt(128);
Random random = world.random;
world.getClass();
int l = random.nextInt(128);
int i1 = j + world.random.nextInt(16);
return new ChunkPosition(k, l, i1);
@ -58,58 +63,36 @@ public final class SpawnerCreature {
if ((!enumcreaturetype.d() || flag1) && (enumcreaturetype.d() || flag) && world.a(enumcreaturetype.a()) <= enumcreaturetype.b() * b.size() / 256) {
Iterator iterator = b.iterator();
label113:
label91:
while (iterator.hasNext()) {
ChunkCoordIntPair chunkcoordintpair = (ChunkCoordIntPair) iterator.next();
BiomeBase biomebase = world.getWorldChunkManager().a(chunkcoordintpair);
List list = biomebase.a(enumcreaturetype);
if (list != null && !list.isEmpty()) {
int k1 = 0;
BiomeMeta biomemeta;
for (Iterator iterator1 = list.iterator(); iterator1.hasNext(); k1 += biomemeta.b) {
biomemeta = (BiomeMeta) iterator1.next();
}
int l1 = world.random.nextInt(k1);
biomemeta = (BiomeMeta) list.get(0);
Iterator iterator2 = list.iterator();
while (iterator2.hasNext()) {
BiomeMeta biomemeta1 = (BiomeMeta) iterator2.next();
l1 -= biomemeta1.b;
if (l1 < 0) {
biomemeta = biomemeta1;
break;
}
}
BiomeMeta biomemeta = (BiomeMeta) WeightedRandom.a(world.random, (Collection) list);
ChunkPosition chunkposition = a(world, chunkcoordintpair.x * 16, chunkcoordintpair.z * 16);
int i2 = chunkposition.x;
int j2 = chunkposition.y;
int k2 = chunkposition.z;
int k1 = chunkposition.x;
int l1 = chunkposition.y;
int i2 = chunkposition.z;
if (!world.e(i2, j2, k2) && world.getMaterial(i2, j2, k2) == enumcreaturetype.c()) {
int l2 = 0;
if (!world.e(k1, l1, i2) && world.getMaterial(k1, l1, i2) == enumcreaturetype.c()) {
int j2 = 0;
for (int i3 = 0; i3 < 3; ++i3) {
for (int k2 = 0; k2 < 3; ++k2) {
int l2 = k1;
int i3 = l1;
int j3 = i2;
int k3 = j2;
int l3 = k2;
byte b1 = 6;
for (int i4 = 0; i4 < 4; ++i4) {
for (int k3 = 0; k3 < 4; ++k3) {
l2 += world.random.nextInt(b1) - world.random.nextInt(b1);
i3 += world.random.nextInt(1) - world.random.nextInt(1);
j3 += world.random.nextInt(b1) - world.random.nextInt(b1);
k3 += world.random.nextInt(1) - world.random.nextInt(1);
l3 += world.random.nextInt(b1) - world.random.nextInt(b1);
if (a(enumcreaturetype, world, j3, k3, l3)) {
float f = (float) j3 + 0.5F;
float f1 = (float) k3;
float f2 = (float) l3 + 0.5F;
if (a(enumcreaturetype, world, l2, i3, j3)) {
float f = (float) l2 + 0.5F;
float f1 = (float) i3;
float f2 = (float) j3 + 0.5F;
if (world.a((double) f, (double) f1, (double) f2, 24.0D) == null) {
float f3 = f - (float) chunkcoordinates.x;
@ -129,16 +112,16 @@ public final class SpawnerCreature {
entityliving.setPositionRotation((double) f, (double) f1, (double) f2, world.random.nextFloat() * 360.0F, 0.0F);
if (entityliving.d()) {
++l2;
++j2;
// CraftBukkit - added a reason for spawning this creature
world.addEntity(entityliving, SpawnReason.NATURAL);
a(entityliving, world, f, f1, f2);
if (l2 >= entityliving.l()) {
continue label113;
if (j2 >= entityliving.m()) {
continue label91;
}
}
i += l2;
i += j2;
}
}
}
@ -190,8 +173,12 @@ public final class SpawnerCreature {
if (l < 1) {
l = 1;
} else if (l > 128) {
l = 128;
} else {
world.getClass();
if (l > 128) {
world.getClass();
l = 128;
}
}
int i1 = world.random.nextInt(aclass.length);
@ -202,46 +189,54 @@ public final class SpawnerCreature {
;
}
while (!a(EnumCreatureType.MONSTER, world, j, j1, k) && j1 < l + 16 && j1 < 128) {
while (!a(EnumCreatureType.MONSTER, world, j, j1, k) && j1 < l + 16) {
world.getClass();
if (j1 >= 128) {
break;
}
++j1;
}
if (j1 < l + 16 && j1 < 128) {
float f = (float) j + 0.5F;
float f1 = (float) j1;
float f2 = (float) k + 0.5F;
if (j1 < l + 16) {
world.getClass();
if (j1 < 128) {
float f = (float) j + 0.5F;
float f1 = (float) j1;
float f2 = (float) k + 0.5F;
EntityLiving entityliving;
EntityLiving entityliving;
try {
entityliving = (EntityLiving) aclass[i1].getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
} catch (Exception exception) {
exception.printStackTrace();
return flag;
}
try {
entityliving = (EntityLiving) aclass[i1].getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
} catch (Exception exception) {
exception.printStackTrace();
return flag;
}
entityliving.setPositionRotation((double) f, (double) f1, (double) f2, world.random.nextFloat() * 360.0F, 0.0F);
if (entityliving.d()) {
PathEntity pathentity = pathfinder.a(entityliving, entityhuman, 32.0F);
entityliving.setPositionRotation((double) f, (double) f1, (double) f2, world.random.nextFloat() * 360.0F, 0.0F);
if (entityliving.d()) {
PathEntity pathentity = pathfinder.a(entityliving, entityhuman, 32.0F);
if (pathentity != null && pathentity.a > 1) {
PathPoint pathpoint = pathentity.c();
if (pathentity != null && pathentity.a > 1) {
PathPoint pathpoint = pathentity.c();
if (Math.abs((double) pathpoint.a - entityhuman.locX) < 1.5D && Math.abs((double) pathpoint.c - entityhuman.locZ) < 1.5D && Math.abs((double) pathpoint.b - entityhuman.locY) < 1.5D) {
ChunkCoordinates chunkcoordinates = BlockBed.f(world, MathHelper.floor(entityhuman.locX), MathHelper.floor(entityhuman.locY), MathHelper.floor(entityhuman.locZ), 1);
if (Math.abs((double) pathpoint.a - entityhuman.locX) < 1.5D && Math.abs((double) pathpoint.c - entityhuman.locZ) < 1.5D && Math.abs((double) pathpoint.b - entityhuman.locY) < 1.5D) {
ChunkCoordinates chunkcoordinates = BlockBed.f(world, MathHelper.floor(entityhuman.locX), MathHelper.floor(entityhuman.locY), MathHelper.floor(entityhuman.locZ), 1);
if (chunkcoordinates == null) {
chunkcoordinates = new ChunkCoordinates(j, j1 + 1, k);
if (chunkcoordinates == null) {
chunkcoordinates = new ChunkCoordinates(j, j1 + 1, k);
}
entityliving.setPositionRotation((double) ((float) chunkcoordinates.x + 0.5F), (double) chunkcoordinates.y, (double) ((float) chunkcoordinates.z + 0.5F), 0.0F, 0.0F);
// CraftBukkit - added a reason for spawning this creature
world.addEntity(entityliving, SpawnReason.BED);
a(entityliving, world, (float) chunkcoordinates.x + 0.5F, (float) chunkcoordinates.y, (float) chunkcoordinates.z + 0.5F);
entityhuman.a(true, false, false);
entityliving.Z();
flag = true;
flag1 = true;
}
entityliving.setPositionRotation((double) ((float) chunkcoordinates.x + 0.5F), (double) chunkcoordinates.y, (double) ((float) chunkcoordinates.z + 0.5F), 0.0F, 0.0F);
// CraftBukkit - added a reason for spawning this creature
world.addEntity(entityliving, SpawnReason.BED);
a(entityliving, world, (float) chunkcoordinates.x + 0.5F, (float) chunkcoordinates.y, (float) chunkcoordinates.z + 0.5F);
entityhuman.a(true, false, false);
entityliving.Q();
flag = true;
flag1 = true;
}
}
}
@ -252,4 +247,55 @@ public final class SpawnerCreature {
return flag;
}
}
public static void a(World world, BiomeBase biomebase, int i, int j, int k, int l, Random random) {
List list = biomebase.a(EnumCreatureType.CREATURE);
if (!list.isEmpty()) {
while (random.nextFloat() < biomebase.d()) {
BiomeMeta biomemeta = (BiomeMeta) WeightedRandom.a(world.random, (Collection) list);
int i1 = biomemeta.b + random.nextInt(1 + biomemeta.c - biomemeta.b);
int j1 = i + random.nextInt(k);
int k1 = j + random.nextInt(l);
int l1 = j1;
int i2 = k1;
for (int j2 = 0; j2 < i1; ++j2) {
boolean flag = false;
for (int k2 = 0; !flag && k2 < 4; ++k2) {
int l2 = world.f(j1, k1);
if (a(EnumCreatureType.CREATURE, world, j1, l2, k1)) {
float f = (float) j1 + 0.5F;
float f1 = (float) l2;
float f2 = (float) k1 + 0.5F;
EntityLiving entityliving;
try {
entityliving = (EntityLiving) biomemeta.a.getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
} catch (Exception exception) {
exception.printStackTrace();
continue;
}
entityliving.setPositionRotation((double) f, (double) f1, (double) f2, random.nextFloat() * 360.0F, 0.0F);
// CraftBukkit - added a reason for spawning this creature
world.addEntity(entityliving, SpawnReason.NATURAL);
world.addEntity(entityliving);
a(entityliving, world, f, f1, f2);
flag = true;
}
j1 += random.nextInt(5) - random.nextInt(5);
for (k1 += random.nextInt(5) - random.nextInt(5); j1 < i || j1 >= i + k || k1 < j || k1 >= j + k; k1 = i2 + random.nextInt(5) - random.nextInt(5)) {
j1 = l1 + random.nextInt(5) - random.nextInt(5);
}
}
}
}
}
}
}

View file

@ -30,7 +30,7 @@ class ThreadLoginVerifier extends Thread {
public void run() {
try {
String s = NetLoginHandler.a(this.netLoginHandler);
URL url = new URL("http://www.minecraft.net/game/checkserver.jsp?user=" + URLEncoder.encode(this.loginPacket.name, "UTF-8") + "&serverId=" + URLEncoder.encode(s, "UTF-8"));
URL url = new URL("http://session.minecraft.net/game/checkserver.jsp?user=" + URLEncoder.encode(this.loginPacket.name, "UTF-8") + "&serverId=" + URLEncoder.encode(s, "UTF-8"));
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(url.openStream()));
String s1 = bufferedreader.readLine();

View file

@ -3,6 +3,15 @@ package net.minecraft.server;
public class TileEntityChest extends TileEntity implements IInventory {
private ItemStack[] items = new ItemStack[27]; // CraftBukkit
public boolean a = false;
public TileEntityChest b;
public TileEntityChest c;
public TileEntityChest d;
public TileEntityChest e;
public float f;
public float g;
public int h;
private int q;
// CraftBukkit start
public ItemStack[] getContents() {
@ -67,7 +76,7 @@ public class TileEntityChest extends TileEntity implements IInventory {
int j = nbttagcompound1.c("Slot") & 255;
if (j >= 0 && j < this.items.length) {
this.items[j] = new ItemStack(nbttagcompound1);
this.items[j] = ItemStack.a(nbttagcompound1);
}
}
}
@ -81,7 +90,7 @@ public class TileEntityChest extends TileEntity implements IInventory {
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound1.a("Slot", (byte) i);
this.items[i].a(nbttagcompound1);
this.items[i].b(nbttagcompound1);
nbttaglist.a((NBTBase) nbttagcompound1);
}
}
@ -93,7 +102,131 @@ public class TileEntityChest extends TileEntity implements IInventory {
return 64;
}
public boolean a_(EntityHuman entityhuman) {
public boolean a(EntityHuman entityhuman) {
return this.world.getTileEntity(this.x, this.y, this.z) != this ? false : entityhuman.e((double) this.x + 0.5D, (double) this.y + 0.5D, (double) this.z + 0.5D) <= 64.0D;
}
public void g() {
super.g();
this.a = false;
}
public void h() {
if (!this.a) {
this.a = true;
this.b = null;
this.c = null;
this.d = null;
this.e = null;
if (this.world.getTypeId(this.x - 1, this.y, this.z) == Block.CHEST.id) {
this.d = (TileEntityChest) this.world.getTileEntity(this.x - 1, this.y, this.z);
}
if (this.world.getTypeId(this.x + 1, this.y, this.z) == Block.CHEST.id) {
this.c = (TileEntityChest) this.world.getTileEntity(this.x + 1, this.y, this.z);
}
if (this.world.getTypeId(this.x, this.y, this.z - 1) == Block.CHEST.id) {
this.b = (TileEntityChest) this.world.getTileEntity(this.x, this.y, this.z - 1);
}
if (this.world.getTypeId(this.x, this.y, this.z + 1) == Block.CHEST.id) {
this.e = (TileEntityChest) this.world.getTileEntity(this.x, this.y, this.z + 1);
}
if (this.b != null) {
this.b.g();
}
if (this.e != null) {
this.e.g();
}
if (this.c != null) {
this.c.g();
}
if (this.d != null) {
this.d.g();
}
}
}
public void h_() {
super.h_();
this.h();
if (++this.q % 20 * 4 == 0) {
this.world.playNote(this.x, this.y, this.z, 1, this.h);
}
this.g = this.f;
float f = 0.1F;
double d0;
double d1;
if (this.h > 0 && this.f == 0.0F && this.b == null && this.d == null) {
d0 = (double) this.x + 0.5D;
d1 = (double) this.z + 0.5D;
if (this.e != null) {
d1 += 0.5D;
}
if (this.c != null) {
d0 += 0.5D;
}
this.world.makeSound(d0, (double) this.y + 0.5D, d1, "random.door_open", 1.0F, this.world.random.nextFloat() * 0.1F + 0.9F);
}
if (this.h == 0 && this.f > 0.0F || this.h > 0 && this.f < 1.0F) {
if (this.h > 0) {
this.f += f;
} else {
this.f -= f;
}
if (this.f > 1.0F) {
this.f = 1.0F;
}
if (this.f < 0.0F) {
this.f = 0.0F;
if (this.b == null && this.d == null) {
d0 = (double) this.x + 0.5D;
d1 = (double) this.z + 0.5D;
if (this.e != null) {
d1 += 0.5D;
}
if (this.c != null) {
d0 += 0.5D;
}
this.world.makeSound(d0, (double) this.y + 0.5D, d1, "random.door_close", 1.0F, this.world.random.nextFloat() * 0.1F + 0.9F);
}
}
}
}
public void b(int i, int j) {
if (i == 1) {
this.h = j;
}
}
public void e() {
++this.h;
this.world.playNote(this.x, this.y, this.z, 1, this.h);
}
public void t_() {
--this.h;
this.world.playNote(this.x, this.y, this.z, 1, this.h);
}
public void i() {
this.g();
this.h();
super.i();
}
}

View file

@ -97,7 +97,7 @@ public class TileEntityDispenser extends TileEntity implements IInventory {
int j = nbttagcompound1.c("Slot") & 255;
if (j >= 0 && j < this.items.length) {
this.items[j] = new ItemStack(nbttagcompound1);
this.items[j] = ItemStack.a(nbttagcompound1);
}
}
}
@ -111,7 +111,7 @@ public class TileEntityDispenser extends TileEntity implements IInventory {
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound1.a("Slot", (byte) i);
this.items[i].a(nbttagcompound1);
this.items[i].b(nbttagcompound1);
nbttaglist.a((NBTBase) nbttagcompound1);
}
}
@ -123,7 +123,11 @@ public class TileEntityDispenser extends TileEntity implements IInventory {
return 64;
}
public boolean a_(EntityHuman entityhuman) {
public boolean a(EntityHuman entityhuman) {
return this.world.getTileEntity(this.x, this.y, this.z) != this ? false : entityhuman.e((double) this.x + 0.5D, (double) this.y + 0.5D, (double) this.z + 0.5D) <= 64.0D;
}
public void e() {}
public void t_() {}
}

View file

@ -73,7 +73,7 @@ public class TileEntityFurnace extends TileEntity implements IInventory {
byte b0 = nbttagcompound1.c("Slot");
if (b0 >= 0 && b0 < this.items.length) {
this.items[b0] = new ItemStack(nbttagcompound1);
this.items[b0] = ItemStack.a(nbttagcompound1);
}
}
@ -93,7 +93,7 @@ public class TileEntityFurnace extends TileEntity implements IInventory {
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound1.a("Slot", (byte) i);
this.items[i].a(nbttagcompound1);
this.items[i].b(nbttagcompound1);
nbttaglist.a((NBTBase) nbttagcompound1);
}
}
@ -109,7 +109,7 @@ public class TileEntityFurnace extends TileEntity implements IInventory {
return this.burnTime > 0;
}
public void g_() {
public void h_() {
boolean flag = this.burnTime > 0;
boolean flag1 = false;
@ -242,7 +242,11 @@ public class TileEntityFurnace extends TileEntity implements IInventory {
}
}
public boolean a_(EntityHuman entityhuman) {
public boolean a(EntityHuman entityhuman) {
return this.world.getTileEntity(this.x, this.y, this.z) != this ? false : entityhuman.e((double) this.x + 0.5D, (double) this.y + 0.5D, (double) this.z + 0.5D) <= 64.0D;
}
public void e() {}
public void t_() {}
}

View file

@ -21,7 +21,7 @@ public class TileEntityMobSpawner extends TileEntity {
return this.world.a((double) this.x + 0.5D, (double) this.y + 0.5D, (double) this.z + 0.5D, 16.0D) != null;
}
public void g_() {
public void h_() {
this.c = this.b;
if (this.a()) {
double d0 = (double) ((float) this.x + this.world.random.nextFloat());
@ -86,14 +86,14 @@ public class TileEntityMobSpawner extends TileEntity {
this.world.a("flame", d0, d1, d2, 0.0D, 0.0D, 0.0D);
}
entityliving.S();
entityliving.ab();
this.c();
}
}
}
}
super.g_();
super.h_();
}
}

View file

@ -9,11 +9,11 @@ public class TileEntityPiston extends TileEntity {
private int a;
private int b;
private int c;
private boolean i;
private boolean j;
private float k;
private float l;
private static List m = new ArrayList();
private boolean d;
private boolean e;
private float f;
private float g;
private static List h = new ArrayList();
public TileEntityPiston() {}
@ -21,20 +21,20 @@ public class TileEntityPiston extends TileEntity {
this.a = i;
this.b = j;
this.c = k;
this.i = flag;
this.j = flag1;
this.d = flag;
this.e = flag1;
}
public int a() {
return this.a;
}
public int e() {
public int j() {
return this.b;
}
public boolean c() {
return this.i;
return this.d;
}
public int d() {
@ -46,11 +46,11 @@ public class TileEntityPiston extends TileEntity {
f = 1.0F;
}
return this.l + (this.k - this.l) * f;
return this.g + (this.f - this.g) * f;
}
private void a(float f, float f1) {
if (!this.i) {
if (!this.d) {
--f;
} else {
f = 1.0F - f;
@ -62,8 +62,8 @@ public class TileEntityPiston extends TileEntity {
List list = this.world.b((Entity) null, axisalignedbb);
if (!list.isEmpty()) {
m.addAll(list);
Iterator iterator = m.iterator();
h.addAll(list);
Iterator iterator = h.iterator();
while (iterator.hasNext()) {
Entity entity = (Entity) iterator.next();
@ -71,41 +71,41 @@ public class TileEntityPiston extends TileEntity {
entity.move((double) (f1 * (float) PistonBlockTextures.b[this.c]), (double) (f1 * (float) PistonBlockTextures.c[this.c]), (double) (f1 * (float) PistonBlockTextures.d[this.c]));
}
m.clear();
h.clear();
}
}
}
public void k() {
if (this.l < 1.0F) {
this.l = this.k = 1.0F;
this.world.o(this.x, this.y, this.z);
this.h();
public void e() {
if (this.g < 1.0F) {
this.g = this.f = 1.0F;
this.world.n(this.x, this.y, this.z);
this.i();
if (this.world.getTypeId(this.x, this.y, this.z) == Block.PISTON_MOVING.id) {
this.world.setTypeIdAndData(this.x, this.y, this.z, this.a, this.b);
}
}
}
public void g_() {
// CraftBukkit
if (this.world == null) return;
this.l = this.k;
if (this.l >= 1.0F) {
public void h_() {
if (this.world == null) return; // CraftBukkit
this.g = this.f;
if (this.g >= 1.0F) {
this.a(1.0F, 0.25F);
this.world.o(this.x, this.y, this.z);
this.h();
this.world.n(this.x, this.y, this.z);
this.i();
if (this.world.getTypeId(this.x, this.y, this.z) == Block.PISTON_MOVING.id) {
this.world.setTypeIdAndData(this.x, this.y, this.z, this.a, this.b);
}
} else {
this.k += 0.5F;
if (this.k >= 1.0F) {
this.k = 1.0F;
this.f += 0.5F;
if (this.f >= 1.0F) {
this.f = 1.0F;
}
if (this.i) {
this.a(this.k, this.k - this.l + 0.0625F);
if (this.d) {
this.a(this.f, this.f - this.g + 0.0625F);
}
}
}
@ -115,8 +115,8 @@ public class TileEntityPiston extends TileEntity {
this.a = nbttagcompound.e("blockId");
this.b = nbttagcompound.e("blockData");
this.c = nbttagcompound.e("facing");
this.l = this.k = nbttagcompound.g("progress");
this.i = nbttagcompound.m("extending");
this.g = this.f = nbttagcompound.g("progress");
this.d = nbttagcompound.m("extending");
}
public void b(NBTTagCompound nbttagcompound) {
@ -124,7 +124,7 @@ public class TileEntityPiston extends TileEntity {
nbttagcompound.a("blockId", this.a);
nbttagcompound.a("blockData", this.b);
nbttagcompound.a("facing", this.c);
nbttagcompound.a("progress", this.l);
nbttagcompound.a("extending", this.i);
nbttagcompound.a("progress", this.g);
nbttagcompound.a("extending", this.d);
}
}

View file

@ -4,7 +4,7 @@ public class TileEntitySign extends TileEntity {
public String[] lines = new String[] { "", "", "", ""};
public int b = -1;
private boolean isEditable = true;
public boolean isEditable = true; // CraftBukkit - priv to public
public TileEntitySign() {}
@ -28,7 +28,7 @@ public class TileEntitySign extends TileEntity {
}
}
public Packet f() {
public Packet l() {
String[] astring = new String[4];
for (int i = 0; i < 4; ++i) {
@ -47,8 +47,4 @@ public class TileEntitySign extends TileEntity {
public boolean a() {
return this.isEditable;
}
public void a(boolean flag) {
this.isEditable = flag;
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,121 +0,0 @@
package net.minecraft.server;
import java.util.Random;
public class WorldChunkManager {
private NoiseGeneratorOctaves2 e;
private NoiseGeneratorOctaves2 f;
private NoiseGeneratorOctaves2 g;
public double[] temperature;
public double[] rain;
public double[] c;
public BiomeBase[] d;
protected WorldChunkManager() {}
public WorldChunkManager(World world) {
this.e = new NoiseGeneratorOctaves2(new Random(world.getSeed() * 9871L), 4);
this.f = new NoiseGeneratorOctaves2(new Random(world.getSeed() * 39811L), 4);
this.g = new NoiseGeneratorOctaves2(new Random(world.getSeed() * 543321L), 2);
}
public BiomeBase a(ChunkCoordIntPair chunkcoordintpair) {
return this.getBiome(chunkcoordintpair.x << 4, chunkcoordintpair.z << 4);
}
public BiomeBase getBiome(int i, int j) {
return this.getBiomeData(i, j, 1, 1)[0];
}
public BiomeBase[] getBiomeData(int i, int j, int k, int l) {
this.d = this.a(this.d, i, j, k, l);
return this.d;
}
public double[] a(double[] adouble, int i, int j, int k, int l) {
if (adouble == null || adouble.length < k * l) {
adouble = new double[k * l];
}
adouble = this.e.a(adouble, (double) i, (double) j, k, l, 0.02500000037252903D, 0.02500000037252903D, 0.25D);
this.c = this.g.a(this.c, (double) i, (double) j, k, l, 0.25D, 0.25D, 0.5882352941176471D);
int i1 = 0;
for (int j1 = 0; j1 < k; ++j1) {
for (int k1 = 0; k1 < l; ++k1) {
double d0 = this.c[i1] * 1.1D + 0.5D;
double d1 = 0.01D;
double d2 = 1.0D - d1;
double d3 = (adouble[i1] * 0.15D + 0.7D) * d2 + d0 * d1;
d3 = 1.0D - (1.0D - d3) * (1.0D - d3);
if (d3 < 0.0D) {
d3 = 0.0D;
}
if (d3 > 1.0D) {
d3 = 1.0D;
}
adouble[i1] = d3;
++i1;
}
}
return adouble;
}
public BiomeBase[] a(BiomeBase[] abiomebase, int i, int j, int k, int l) {
if (abiomebase == null || abiomebase.length < k * l) {
abiomebase = new BiomeBase[k * l];
}
this.temperature = this.e.a(this.temperature, (double) i, (double) j, k, k, 0.02500000037252903D, 0.02500000037252903D, 0.25D);
this.rain = this.f.a(this.rain, (double) i, (double) j, k, k, 0.05000000074505806D, 0.05000000074505806D, 0.3333333333333333D);
this.c = this.g.a(this.c, (double) i, (double) j, k, k, 0.25D, 0.25D, 0.5882352941176471D);
int i1 = 0;
for (int j1 = 0; j1 < k; ++j1) {
for (int k1 = 0; k1 < l; ++k1) {
double d0 = this.c[i1] * 1.1D + 0.5D;
double d1 = 0.01D;
double d2 = 1.0D - d1;
double d3 = (this.temperature[i1] * 0.15D + 0.7D) * d2 + d0 * d1;
d1 = 0.0020D;
d2 = 1.0D - d1;
double d4 = (this.rain[i1] * 0.15D + 0.5D) * d2 + d0 * d1;
d3 = 1.0D - (1.0D - d3) * (1.0D - d3);
if (d3 < 0.0D) {
d3 = 0.0D;
}
if (d4 < 0.0D) {
d4 = 0.0D;
}
if (d3 > 1.0D) {
d3 = 1.0D;
}
if (d4 > 1.0D) {
d4 = 1.0D;
}
this.temperature[i1] = d3;
this.rain[i1] = d4;
abiomebase[i1++] = BiomeBase.a(d3, d4);
}
}
return abiomebase;
}
// CraftBukkit start
public double getHumidity(int x, int z) {
return this.f.a(this.rain, (double)x, (double)z, 1, 1, 0.05000000074505806D, 0.05000000074505806D, 0.3333333333333333D)[0];
}
// CraftBukkit end
}

View file

@ -19,9 +19,18 @@ public class WorldData {
private int m;
private boolean n;
private int o;
private int p;
private boolean q;
public WorldData(NBTTagCompound nbttagcompound) {
this.a = nbttagcompound.getLong("RandomSeed");
this.p = nbttagcompound.e("GameType");
if (nbttagcompound.hasKey("MapFeatures")) {
this.q = nbttagcompound.m("MapFeatures");
} else {
this.q = true;
}
this.b = nbttagcompound.e("SpawnX");
this.c = nbttagcompound.e("SpawnY");
this.d = nbttagcompound.e("SpawnZ");
@ -40,13 +49,17 @@ public class WorldData {
}
}
public WorldData(long i, String s) {
this.a = i;
public WorldData(WorldSettings worldsettings, String s) {
this.a = worldsettings.a();
this.p = worldsettings.b();
this.q = worldsettings.c();
this.name = s;
}
public WorldData(WorldData worlddata) {
this.a = worlddata.a;
this.p = worlddata.p;
this.q = worlddata.q;
this.b = worlddata.b;
this.c = worlddata.c;
this.d = worlddata.d;
@ -90,6 +103,8 @@ public class WorldData {
private void a(NBTTagCompound nbttagcompound, NBTTagCompound nbttagcompound1) {
nbttagcompound.setLong("RandomSeed", this.a);
nbttagcompound.a("GameType", this.p);
nbttagcompound.a("MapFeatures", this.q);
nbttagcompound.a("SpawnX", this.b);
nbttagcompound.a("SpawnY", this.c);
nbttagcompound.a("SpawnZ", this.d);
@ -192,4 +207,16 @@ public class WorldData {
public void setWeatherDuration(int i) {
this.m = i;
}
public int n() {
return this.p;
}
public boolean o() {
return this.q;
}
public void d(int i) {
this.p = i;
}
}

View file

@ -1,63 +0,0 @@
package net.minecraft.server;
import java.util.Random;
public class WorldGenClay extends WorldGenerator {
private int a;
private int b;
public WorldGenClay(int i) {
this.a = Block.CLAY.id;
this.b = i;
}
public boolean a(World world, Random random, int i, int j, int k) {
if (world.getMaterial(i, j, k) != Material.WATER) {
return false;
} else {
float f = random.nextFloat() * 3.1415927F;
double d0 = (double) ((float) (i + 8) + MathHelper.sin(f) * (float) this.b / 8.0F);
double d1 = (double) ((float) (i + 8) - MathHelper.sin(f) * (float) this.b / 8.0F);
double d2 = (double) ((float) (k + 8) + MathHelper.cos(f) * (float) this.b / 8.0F);
double d3 = (double) ((float) (k + 8) - MathHelper.cos(f) * (float) this.b / 8.0F);
double d4 = (double) (j + random.nextInt(3) + 2);
double d5 = (double) (j + random.nextInt(3) + 2);
for (int l = 0; l <= this.b; ++l) {
double d6 = d0 + (d1 - d0) * (double) l / (double) this.b;
double d7 = d4 + (d5 - d4) * (double) l / (double) this.b;
double d8 = d2 + (d3 - d2) * (double) l / (double) this.b;
double d9 = random.nextDouble() * (double) this.b / 16.0D;
double d10 = (double) (MathHelper.sin((float) l * 3.1415927F / (float) this.b) + 1.0F) * d9 + 1.0D;
double d11 = (double) (MathHelper.sin((float) l * 3.1415927F / (float) this.b) + 1.0F) * d9 + 1.0D;
int i1 = MathHelper.floor(d6 - d10 / 2.0D);
int j1 = MathHelper.floor(d6 + d10 / 2.0D);
int k1 = MathHelper.floor(d7 - d11 / 2.0D);
int l1 = MathHelper.floor(d7 + d11 / 2.0D);
int i2 = MathHelper.floor(d8 - d10 / 2.0D); // CraftBukkit - d6 -> d8
int j2 = MathHelper.floor(d8 + d10 / 2.0D); // CraftBukkit - d6 -> d8
for (int k2 = i1; k2 <= j1; ++k2) {
for (int l2 = k1; l2 <= l1; ++l2) {
for (int i3 = i2; i3 <= j2; ++i3) {
double d12 = ((double) k2 + 0.5D - d6) / (d10 / 2.0D);
double d13 = ((double) l2 + 0.5D - d7) / (d11 / 2.0D);
double d14 = ((double) i3 + 0.5D - d8) / (d10 / 2.0D);
if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D) {
int j3 = world.getTypeId(k2, l2, i3);
if (j3 == Block.SAND.id) {
world.setRawTypeId(k2, l2, i3, this.a);
}
}
}
}
}
}
return true;
}
}
}

View file

@ -22,77 +22,89 @@ public class WorldGenForest extends WorldGenerator {
int l = random.nextInt(3) + 5;
boolean flag = true;
if (j >= 1 && j + l + 1 <= 128) {
int i1;
int j1;
int k1;
int l1;
if (j >= 1) {
int k1000 = j + l + 1;
for (i1 = j; i1 <= j + 1 + l; ++i1) {
byte b0 = 1;
world.getClass();
if (k1000 <= 128) {
int j1;
int k1;
int l1;
int i2;
if (i1 == j) {
b0 = 0;
}
for (j1 = j; j1 <= j + 1 + l; ++j1) {
byte b0 = 1;
if (i1 >= j + 1 + l - 2) {
b0 = 2;
}
if (j1 == j) {
b0 = 0;
}
for (j1 = i - b0; j1 <= i + b0 && flag; ++j1) {
for (k1 = k - b0; k1 <= k + b0 && flag; ++k1) {
if (i1 >= 0 && i1 < 128) {
l1 = world.getTypeId(j1, i1, k1);
if (l1 != 0 && l1 != Block.LEAVES.id) {
flag = false;
if (j1 >= j + 1 + l - 2) {
b0 = 2;
}
for (k1 = i - b0; k1 <= i + b0 && flag; ++k1) {
for (l1 = k - b0; l1 <= k + b0 && flag; ++l1) {
if (j1 >= 0) {
world.getClass();
if (j1 < 128) {
i2 = world.getTypeId(k1, j1, l1);
if (i2 != 0 && i2 != Block.LEAVES.id) {
flag = false;
}
continue;
}
}
} else {
flag = false;
}
}
}
}
if (!flag) {
return false;
} else {
i1 = world.getTypeId(i, j - 1, k);
if ((i1 == Block.GRASS.id || i1 == Block.DIRT.id) && j < 128 - l - 1) {
world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
if (!flag) {
return false;
}
int i2;
j1 = world.getTypeId(i, j - 1, k);
if (j1 == Block.GRASS.id || j1 == Block.DIRT.id) {
world.getClass();
if (j < 128 - l - 1) {
world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
for (i2 = j - 3 + l; i2 <= j + l; ++i2) {
j1 = i2 - (j + l);
k1 = 1 - j1 / 2;
int j2;
for (l1 = i - k1; l1 <= i + k1; ++l1) {
int j2 = l1 - i;
for (j2 = j - 3 + l; j2 <= j + l; ++j2) {
k1 = j2 - (j + l);
l1 = 1 - k1 / 2;
for (int k2 = k - k1; k2 <= k + k1; ++k2) {
int l2 = k2 - k;
for (i2 = i - l1; i2 <= i + l1; ++i2) {
int k2 = i2 - i;
if ((Math.abs(j2) != k1 || Math.abs(l2) != k1 || random.nextInt(2) != 0 && j1 != 0) && !Block.o[world.getTypeId(l1, i2, k2)]) {
world.setRawTypeIdAndData(l1, i2, k2, Block.LEAVES.id, 2);
for (int l2 = k - l1; l2 <= k + l1; ++l2) {
int i3 = l2 - k;
if ((Math.abs(k2) != l1 || Math.abs(i3) != l1 || random.nextInt(2) != 0 && k1 != 0) && !Block.o[world.getTypeId(i2, j2, l2)]) {
world.setRawTypeIdAndData(i2, j2, l2, Block.LEAVES.id, 2);
}
}
}
}
}
for (i2 = 0; i2 < l; ++i2) {
j1 = world.getTypeId(i, j + i2, k);
if (j1 == 0 || j1 == Block.LEAVES.id) {
world.setRawTypeIdAndData(i, j + i2, k, Block.LOG.id, 2);
for (j2 = 0; j2 < l; ++j2) {
k1 = world.getTypeId(i, j + j2, k);
if (k1 == 0 || k1 == Block.LEAVES.id) {
world.setRawTypeIdAndData(i, j + j2, k, Block.LOG.id, 2);
}
}
}
return true;
} else {
return false;
return true;
}
}
return false;
}
} else {
return false;
}
return false;
}
}

View file

@ -25,78 +25,90 @@ public class WorldGenTaiga1 extends WorldGenerator {
int k1 = 1 + random.nextInt(j1 + 1);
boolean flag = true;
if (j >= 1 && j + l + 1 <= 128) {
int l1;
int i2;
int j2;
int k2;
int l2;
if (j >= 1) {
int l1 = j + l + 1;
for (l1 = j; l1 <= j + 1 + l && flag; ++l1) {
boolean flag1 = true;
world.getClass();
if (l1 <= 128) {
int i2;
int j2;
int k2;
int l2;
int i3;
if (l1 - j < i1) {
l2 = 0;
} else {
l2 = k1;
}
for (i2 = j; i2 <= j + 1 + l && flag; ++i2) {
boolean flag1 = true;
for (i2 = i - l2; i2 <= i + l2 && flag; ++i2) {
for (j2 = k - l2; j2 <= k + l2 && flag; ++j2) {
if (l1 >= 0 && l1 < 128) {
k2 = world.getTypeId(i2, l1, j2);
if (k2 != 0 && k2 != Block.LEAVES.id) {
flag = false;
if (i2 - j < i1) {
i3 = 0;
} else {
i3 = k1;
}
for (j2 = i - i3; j2 <= i + i3 && flag; ++j2) {
for (k2 = k - i3; k2 <= k + i3 && flag; ++k2) {
if (i2 >= 0) {
world.getClass();
if (i2 < 128) {
l2 = world.getTypeId(j2, i2, k2);
if (l2 != 0 && l2 != Block.LEAVES.id) {
flag = false;
}
continue;
}
}
} else {
flag = false;
}
}
}
}
if (!flag) {
return false;
} else {
l1 = world.getTypeId(i, j - 1, k);
if ((l1 == Block.GRASS.id || l1 == Block.DIRT.id) && j < 128 - l - 1) {
world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
l2 = 0;
if (!flag) {
return false;
}
for (i2 = j + l; i2 >= j + i1; --i2) {
for (j2 = i - l2; j2 <= i + l2; ++j2) {
k2 = j2 - i;
i2 = world.getTypeId(i, j - 1, k);
if (i2 == Block.GRASS.id || i2 == Block.DIRT.id) {
world.getClass();
if (j < 128 - l - 1) {
world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
i3 = 0;
for (int i3 = k - l2; i3 <= k + l2; ++i3) {
int j3 = i3 - k;
for (j2 = j + l; j2 >= j + i1; --j2) {
for (k2 = i - i3; k2 <= i + i3; ++k2) {
l2 = k2 - i;
if ((Math.abs(k2) != l2 || Math.abs(j3) != l2 || l2 <= 0) && !Block.o[world.getTypeId(j2, i2, i3)]) {
world.setRawTypeIdAndData(j2, i2, i3, Block.LEAVES.id, 1);
for (int j3 = k - i3; j3 <= k + i3; ++j3) {
int k3 = j3 - k;
if ((Math.abs(l2) != i3 || Math.abs(k3) != i3 || i3 <= 0) && !Block.o[world.getTypeId(k2, j2, j3)]) {
world.setRawTypeIdAndData(k2, j2, j3, Block.LEAVES.id, 1);
}
}
}
if (i3 >= 1 && j2 == j + i1 + 1) {
--i3;
} else if (i3 < k1) {
++i3;
}
}
if (l2 >= 1 && i2 == j + i1 + 1) {
--l2;
} else if (l2 < k1) {
++l2;
for (j2 = 0; j2 < l - 1; ++j2) {
k2 = world.getTypeId(i, j + j2, k);
if (k2 == 0 || k2 == Block.LEAVES.id) {
world.setRawTypeIdAndData(i, j + j2, k, Block.LOG.id, 1);
}
}
}
for (i2 = 0; i2 < l - 1; ++i2) {
j2 = world.getTypeId(i, j + i2, k);
if (j2 == 0 || j2 == Block.LEAVES.id) {
world.setRawTypeIdAndData(i, j + i2, k, Block.LOG.id, 1);
}
return true;
}
return true;
} else {
return false;
}
return false;
}
} else {
return false;
}
return false;
}
}

View file

@ -25,91 +25,103 @@ public class WorldGenTaiga2 extends WorldGenerator {
int k1 = 2 + random.nextInt(2);
boolean flag = true;
if (j >= 1 && j + l + 1 <= 128) {
int l1;
int i2;
int j2;
int k2;
if (j >= 1) {
int l1 = j + l + 1;
for (l1 = j; l1 <= j + 1 + l && flag; ++l1) {
boolean flag1 = true;
world.getClass();
if (l1 <= 128) {
int i2;
int j2;
int k2;
int l2;
if (l1 - j < i1) {
k2 = 0;
} else {
k2 = k1;
}
for (i2 = j; i2 <= j + 1 + l && flag; ++i2) {
boolean flag1 = true;
for (i2 = i - k2; i2 <= i + k2 && flag; ++i2) {
for (int l2 = k - k2; l2 <= k + k2 && flag; ++l2) {
if (l1 >= 0 && l1 < 128) {
j2 = world.getTypeId(i2, l1, l2);
if (j2 != 0 && j2 != Block.LEAVES.id) {
flag = false;
if (i2 - j < i1) {
l2 = 0;
} else {
l2 = k1;
}
for (j2 = i - l2; j2 <= i + l2 && flag; ++j2) {
for (int i3 = k - l2; i3 <= k + l2 && flag; ++i3) {
if (i2 >= 0) {
world.getClass();
if (i2 < 128) {
k2 = world.getTypeId(j2, i2, i3);
if (k2 != 0 && k2 != Block.LEAVES.id) {
flag = false;
}
continue;
}
}
} else {
flag = false;
}
}
}
}
if (!flag) {
return false;
} else {
l1 = world.getTypeId(i, j - 1, k);
if ((l1 == Block.GRASS.id || l1 == Block.DIRT.id) && j < 128 - l - 1) {
world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
k2 = random.nextInt(2);
i2 = 1;
byte b0 = 0;
int i3;
int j3;
for (j2 = 0; j2 <= j1; ++j2) {
j3 = j + l - j2;
for (i3 = i - k2; i3 <= i + k2; ++i3) {
int k3 = i3 - i;
for (int l3 = k - k2; l3 <= k + k2; ++l3) {
int i4 = l3 - k;
if ((Math.abs(k3) != k2 || Math.abs(i4) != k2 || k2 <= 0) && !Block.o[world.getTypeId(i3, j3, l3)]) {
world.setRawTypeIdAndData(i3, j3, l3, Block.LEAVES.id, 1);
}
}
}
if (k2 >= i2) {
k2 = b0;
b0 = 1;
++i2;
if (i2 > k1) {
i2 = k1;
}
} else {
++k2;
}
}
j2 = random.nextInt(3);
for (j3 = 0; j3 < l - j2; ++j3) {
i3 = world.getTypeId(i, j + j3, k);
if (i3 == 0 || i3 == Block.LEAVES.id) {
world.setRawTypeIdAndData(i, j + j3, k, Block.LOG.id, 1);
}
}
return true;
} else {
if (!flag) {
return false;
}
i2 = world.getTypeId(i, j - 1, k);
if (i2 == Block.GRASS.id || i2 == Block.DIRT.id) {
world.getClass();
if (j < 128 - l - 1) {
world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
l2 = random.nextInt(2);
j2 = 1;
byte b0 = 0;
int j3;
int k3;
for (k2 = 0; k2 <= j1; ++k2) {
k3 = j + l - k2;
for (j3 = i - l2; j3 <= i + l2; ++j3) {
int l3 = j3 - i;
for (int i4 = k - l2; i4 <= k + l2; ++i4) {
int j4 = i4 - k;
if ((Math.abs(l3) != l2 || Math.abs(j4) != l2 || l2 <= 0) && !Block.o[world.getTypeId(j3, k3, i4)]) {
world.setRawTypeIdAndData(j3, k3, i4, Block.LEAVES.id, 1);
}
}
}
if (l2 >= j2) {
l2 = b0;
b0 = 1;
++j2;
if (j2 > k1) {
j2 = k1;
}
} else {
++l2;
}
}
k2 = random.nextInt(3);
for (k3 = 0; k3 < l - k2; ++k3) {
j3 = world.getTypeId(i, j + k3, k);
if (j3 == 0 || j3 == Block.LEAVES.id) {
world.setRawTypeIdAndData(i, j + k3, k, Block.LOG.id, 1);
}
}
return true;
}
}
return false;
}
} else {
return false;
}
return false;
}
}

View file

@ -22,77 +22,89 @@ public class WorldGenTrees extends WorldGenerator {
int l = random.nextInt(3) + 4;
boolean flag = true;
if (j >= 1 && j + l + 1 <= 128) {
int i1;
int j1;
int k1;
int l1;
if (j >= 1) {
int k1000 = j + l + 1;
for (i1 = j; i1 <= j + 1 + l; ++i1) {
byte b0 = 1;
world.getClass();
if (k1000 <= 128) {
int j1;
int k1;
int l1;
int i2;
if (i1 == j) {
b0 = 0;
}
for (j1 = j; j1 <= j + 1 + l; ++j1) {
byte b0 = 1;
if (i1 >= j + 1 + l - 2) {
b0 = 2;
}
if (j1 == j) {
b0 = 0;
}
for (j1 = i - b0; j1 <= i + b0 && flag; ++j1) {
for (k1 = k - b0; k1 <= k + b0 && flag; ++k1) {
if (i1 >= 0 && i1 < 128) {
l1 = world.getTypeId(j1, i1, k1);
if (l1 != 0 && l1 != Block.LEAVES.id) {
flag = false;
if (j1 >= j + 1 + l - 2) {
b0 = 2;
}
for (k1 = i - b0; k1 <= i + b0 && flag; ++k1) {
for (l1 = k - b0; l1 <= k + b0 && flag; ++l1) {
if (j1 >= 0) {
world.getClass();
if (j1 < 128) {
i2 = world.getTypeId(k1, j1, l1);
if (i2 != 0 && i2 != Block.LEAVES.id) {
flag = false;
}
continue;
}
}
} else {
flag = false;
}
}
}
}
if (!flag) {
return false;
} else {
i1 = world.getTypeId(i, j - 1, k);
if ((i1 == Block.GRASS.id || i1 == Block.DIRT.id) && j < 128 - l - 1) {
world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
if (!flag) {
return false;
}
int i2;
j1 = world.getTypeId(i, j - 1, k);
if (j1 == Block.GRASS.id || j1 == Block.DIRT.id) {
world.getClass();
if (j < 128 - l - 1) {
world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
for (i2 = j - 3 + l; i2 <= j + l; ++i2) {
j1 = i2 - (j + l);
k1 = 1 - j1 / 2;
int j2;
for (l1 = i - k1; l1 <= i + k1; ++l1) {
int j2 = l1 - i;
for (j2 = j - 3 + l; j2 <= j + l; ++j2) {
k1 = j2 - (j + l);
l1 = 1 - k1 / 2;
for (int k2 = k - k1; k2 <= k + k1; ++k2) {
int l2 = k2 - k;
for (i2 = i - l1; i2 <= i + l1; ++i2) {
int k2 = i2 - i;
if ((Math.abs(j2) != k1 || Math.abs(l2) != k1 || random.nextInt(2) != 0 && j1 != 0) && !Block.o[world.getTypeId(l1, i2, k2)]) {
world.setRawTypeId(l1, i2, k2, Block.LEAVES.id);
for (int l2 = k - l1; l2 <= k + l1; ++l2) {
int i3 = l2 - k;
if ((Math.abs(k2) != l1 || Math.abs(i3) != l1 || random.nextInt(2) != 0 && k1 != 0) && !Block.o[world.getTypeId(i2, j2, l2)]) {
world.setRawTypeId(i2, j2, l2, Block.LEAVES.id);
}
}
}
}
}
for (i2 = 0; i2 < l; ++i2) {
j1 = world.getTypeId(i, j + i2, k);
if (j1 == 0 || j1 == Block.LEAVES.id) {
world.setRawTypeId(i, j + i2, k, Block.LOG.id);
for (j2 = 0; j2 < l; ++j2) {
k1 = world.getTypeId(i, j + j2, k);
if (k1 == 0 || k1 == Block.LEAVES.id) {
world.setRawTypeId(i, j + j2, k, Block.LOG.id);
}
}
}
return true;
} else {
return false;
return true;
}
}
return false;
}
} else {
return false;
}
return false;
}
}

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