diff --git a/pom.xml b/pom.xml
index afbc51600b..2c3ff56b7d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
org.bukkit
craftbukkit
jar
- 1.8.1-R5-SNAPSHOT
+ 1.0.0-SNAPSHOT
CraftBukkit
http://www.bukkit.org
@@ -18,14 +18,14 @@
- repobo-rel
- repo.bukkit.org Releases
- http://repo.bukkit.org/content/repositories/libs-release-local
+ repobo-rel
+ repo.bukkit.org Releases
+ http://repo.bukkit.org/content/repositories/libs-release-local
- repobo-snap
- repo.bukkit.org Snapshots
- http://repo.bukkit.org/content/repositories/libs-snapshot-local
+ repobo-snap
+ repo.bukkit.org Snapshots
+ http://repo.bukkit.org/content/repositories/libs-snapshot-local
@@ -44,14 +44,14 @@
org.bukkit
bukkit
- 1.8.1-R5-SNAPSHOT
+ 1.0.0-SNAPSHOT
jar
compile
org.bukkit
minecraft-server
- 1.8.1_01
+ 1.9.RC1
jar
compile
diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java
index 4eee4f7d87..9ff2ccd1d2 100644
--- a/src/main/java/net/minecraft/server/Block.java
+++ b/src/main/java/net/minecraft/server/Block.java
@@ -22,41 +22,42 @@ public class Block {
public static final boolean[] r = new boolean[256];
public static final int[] s = new int[256];
public static final boolean[] t = new boolean[256];
+ public static boolean[] u = new boolean[256];
public static final Block STONE = (new BlockStone(1, 1)).c(1.5F).b(10.0F).a(h).a("stone");
public static final BlockGrass GRASS = (BlockGrass) (new BlockGrass(2)).c(0.6F).a(g).a("grass");
public static final Block DIRT = (new BlockDirt(3, 2)).c(0.5F).a(f).a("dirt");
public static final Block COBBLESTONE = (new Block(4, 16, Material.STONE)).c(2.0F).b(10.0F).a(h).a("stonebrick");
- public static final Block WOOD = (new Block(5, 4, Material.WOOD)).c(2.0F).b(5.0F).a(e).a("wood").g();
- public static final Block SAPLING = (new BlockSapling(6, 15)).c(0.0F).a(g).a("sapling").g();
- public static final Block BEDROCK = (new Block(7, 17, Material.STONE)).i().b(6000000.0F).a(h).a("bedrock").n();
- public static final Block WATER = (new BlockFlowing(8, Material.WATER)).c(100.0F).f(3).a("water").n().g();
- public static final Block STATIONARY_WATER = (new BlockStationary(9, Material.WATER)).c(100.0F).f(3).a("water").n().g();
- public static final Block LAVA = (new BlockFlowing(10, Material.LAVA)).c(0.0F).a(1.0F).f(255).a("lava").n().g();
- public static final Block STATIONARY_LAVA = (new BlockStationary(11, Material.LAVA)).c(100.0F).a(1.0F).f(255).a("lava").n().g();
+ public static final Block WOOD = (new Block(5, 4, Material.WOOD)).c(2.0F).b(5.0F).a(e).a("wood").i();
+ public static final Block SAPLING = (new BlockSapling(6, 15)).c(0.0F).a(g).a("sapling").i();
+ public static final Block BEDROCK = (new Block(7, 17, Material.STONE)).k().b(6000000.0F).a(h).a("bedrock").p();
+ public static final Block WATER = (new BlockFlowing(8, Material.WATER)).c(100.0F).g(3).a("water").p().i();
+ public static final Block STATIONARY_WATER = (new BlockStationary(9, Material.WATER)).c(100.0F).g(3).a("water").p().i();
+ public static final Block LAVA = (new BlockFlowing(10, Material.LAVA)).c(0.0F).a(1.0F).g(255).a("lava").p().i();
+ public static final Block STATIONARY_LAVA = (new BlockStationary(11, Material.LAVA)).c(100.0F).a(1.0F).g(255).a("lava").p().i();
public static final Block SAND = (new BlockSand(12, 18)).c(0.5F).a(l).a("sand");
public static final Block GRAVEL = (new BlockGravel(13, 19)).c(0.6F).a(f).a("gravel");
public static final Block GOLD_ORE = (new BlockOre(14, 32)).c(3.0F).b(5.0F).a(h).a("oreGold");
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").g();
+ public static final Block LOG = (new BlockLog(17)).c(2.0F).a(e).a("log").i();
+ public static final BlockLeaves LEAVES = (BlockLeaves) (new BlockLeaves(18, 52)).c(0.2F).g(1).a(g).a("leaves").i();
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");
public static final Block LAPIS_BLOCK = (new Block(22, 144, Material.STONE)).c(3.0F).b(5.0F).a(h).a("blockLapis");
- public static final Block DISPENSER = (new BlockDispenser(23)).c(3.5F).a(h).a("dispenser").g();
+ public static final Block DISPENSER = (new BlockDispenser(23)).c(3.5F).a(h).a("dispenser").i();
public static final Block SANDSTONE = (new BlockSandStone(24)).a(h).c(0.8F).a("sandStone");
- public static final Block NOTE_BLOCK = (new BlockNote(25)).c(0.8F).a("musicBlock").g();
- public static final Block BED = (new BlockBed(26)).c(0.2F).a("bed").n().g();
- public static final Block GOLDEN_RAIL = (new BlockMinecartTrack(27, 179, true)).c(0.7F).a(i).a("goldenRail").g();
- public static final Block DETECTOR_RAIL = (new BlockMinecartDetector(28, 195)).c(0.7F).a(i).a("detectorRail").g();
- public static final Block PISTON_STICKY = (new BlockPiston(29, 106, true)).a("pistonStickyBase").g();
- public static final Block WEB = (new BlockWeb(30, 11)).f(1).c(4.0F).a("web");
+ public static final Block NOTE_BLOCK = (new BlockNote(25)).c(0.8F).a("musicBlock").i();
+ public static final Block BED = (new BlockBed(26)).c(0.2F).a("bed").p().i();
+ public static final Block GOLDEN_RAIL = (new BlockMinecartTrack(27, 179, true)).c(0.7F).a(i).a("goldenRail").i();
+ public static final Block DETECTOR_RAIL = (new BlockMinecartDetector(28, 195)).c(0.7F).a(i).a("detectorRail").i();
+ public static final Block PISTON_STICKY = (new BlockPiston(29, 106, true)).a("pistonStickyBase").i();
+ public static final Block WEB = (new BlockWeb(30, 11)).g(1).c(4.0F).a("web");
public static final BlockLongGrass LONG_GRASS = (BlockLongGrass) (new BlockLongGrass(31, 39)).c(0.0F).a(g).a("tallgrass");
public static final BlockDeadBush DEAD_BUSH = (BlockDeadBush) (new BlockDeadBush(32, 55)).c(0.0F).a(g).a("deadbush");
- public static final Block PISTON = (new BlockPiston(33, 107, false)).a("pistonBase").g();
- public static final BlockPistonExtension PISTON_EXTENSION = (BlockPistonExtension) (new BlockPistonExtension(34, 107)).g();
- public static final Block WOOL = (new BlockCloth()).c(0.8F).a(k).a("cloth").g();
+ public static final Block PISTON = (new BlockPiston(33, 107, false)).a("pistonBase").i();
+ public static final BlockPistonExtension PISTON_EXTENSION = (BlockPistonExtension) (new BlockPistonExtension(34, 107)).i();
+ public static final Block WOOL = (new BlockCloth()).c(0.8F).a(k).a("cloth").i();
public static final BlockPistonMoving PISTON_MOVING = new BlockPistonMoving(36);
public static final BlockFlower YELLOW_FLOWER = (BlockFlower) (new BlockFlower(37, 13)).c(0.0F).a(g).a("flower");
public static final BlockFlower RED_ROSE = (BlockFlower) (new BlockFlower(38, 12)).c(0.0F).a(g).a("rose");
@@ -70,73 +71,86 @@ public class Block {
public static final Block TNT = (new BlockTNT(46, 8)).c(0.0F).a(g).a("tnt");
public static final Block BOOKSHELF = (new BlockBookshelf(47, 35)).c(1.5F).a(e).a("bookshelf");
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();
- 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();
- public static final Block REDSTONE_WIRE = (new BlockRedstoneWire(55, 164)).c(0.0F).a(d).a("redstoneDust").n().g();
+ public static final Block OBSIDIAN = (new BlockObsidian(49, 37)).c(50.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").i();
+ public static final BlockFire FIRE = (BlockFire) (new BlockFire(51, 31)).c(0.0F).a(1.0F).a(e).a("fire").p();
+ public static final Block MOB_SPAWNER = (new BlockMobSpawner(52, 65)).c(5.0F).a(i).a("mobSpawner").p();
+ public static final Block WOOD_STAIRS = (new BlockStairs(53, WOOD)).a("stairsWood").i();
+ public static final Block CHEST = (new BlockChest(54)).c(2.5F).a(e).a("chest").i();
+ public static final Block REDSTONE_WIRE = (new BlockRedstoneWire(55, 164)).c(0.0F).a(d).a("redstoneDust").p().i();
public static final Block DIAMOND_ORE = (new BlockOre(56, 50)).c(3.0F).b(5.0F).a(h).a("oreDiamond");
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").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();
- public static final Block WOODEN_DOOR = (new BlockDoor(64, Material.WOOD)).c(3.0F).a(e).a("doorWood").n().g();
- public static final Block LADDER = (new BlockLadder(65, 83)).c(0.4F).a(e).a("ladder").g();
- public static final Block RAILS = (new BlockMinecartTrack(66, 128, false)).c(0.7F).a(i).a("rail").g();
- public static final Block COBBLESTONE_STAIRS = (new BlockStairs(67, COBBLESTONE)).a("stairsStone").g();
- public static final Block WALL_SIGN = (new BlockSign(68, TileEntitySign.class, false)).c(1.0F).a(e).a("sign").n().g();
- public static final Block LEVER = (new BlockLever(69, 96)).c(0.5F).a(e).a("lever").g();
- public static final Block STONE_PLATE = (new BlockPressurePlate(70, STONE.textureId, EnumMobType.MOBS, Material.STONE)).c(0.5F).a(h).a("pressurePlate").g();
- public static final Block IRON_DOOR_BLOCK = (new BlockDoor(71, Material.ORE)).c(5.0F).a(i).a("doorIron").n().g();
- public static final Block WOOD_PLATE = (new BlockPressurePlate(72, WOOD.textureId, EnumMobType.EVERYTHING, Material.WOOD)).c(0.5F).a(e).a("pressurePlate").g();
- public static final Block REDSTONE_ORE = (new BlockRedstoneOre(73, 51, false)).c(3.0F).b(5.0F).a(h).a("oreRedstone").g();
- public static final Block GLOWING_REDSTONE_ORE = (new BlockRedstoneOre(74, 51, true)).a(0.625F).c(3.0F).b(5.0F).a(h).a("oreRedstone").g();
- public static final Block REDSTONE_TORCH_OFF = (new BlockRedstoneTorch(75, 115, false)).c(0.0F).a(e).a("notGate").g();
- public static final Block REDSTONE_TORCH_ON = (new BlockRedstoneTorch(76, 99, true)).c(0.0F).a(0.5F).a(e).a("notGate").g();
- public static final Block STONE_BUTTON = (new BlockButton(77, STONE.textureId)).c(0.5F).a(h).a("button").g();
- public static final Block SNOW = (new BlockSnow(78, 66)).c(0.1F).a(k).a("snow");
- public static final Block ICE = (new BlockIce(79, 67)).c(0.5F).f(3).a(j).a("ice");
+ public static final Block CROPS = (new BlockCrops(59, 88)).c(0.0F).a(g).a("crops").p().i();
+ public static final Block SOIL = (new BlockSoil(60)).c(0.6F).a(f).a("farmland").i();
+ public static final Block FURNACE = (new BlockFurnace(61, false)).c(3.5F).a(h).a("furnace").i();
+ public static final Block BURNING_FURNACE = (new BlockFurnace(62, true)).c(3.5F).a(h).a(0.875F).a("furnace").i();
+ public static final Block SIGN_POST = (new BlockSign(63, TileEntitySign.class, true)).c(1.0F).a(e).a("sign").p().i();
+ public static final Block WOODEN_DOOR = (new BlockDoor(64, Material.WOOD)).c(3.0F).a(e).a("doorWood").p().i();
+ public static final Block LADDER = (new BlockLadder(65, 83)).c(0.4F).a(e).a("ladder").i();
+ public static final Block RAILS = (new BlockMinecartTrack(66, 128, false)).c(0.7F).a(i).a("rail").i();
+ public static final Block COBBLESTONE_STAIRS = (new BlockStairs(67, COBBLESTONE)).a("stairsStone").i();
+ public static final Block WALL_SIGN = (new BlockSign(68, TileEntitySign.class, false)).c(1.0F).a(e).a("sign").p().i();
+ public static final Block LEVER = (new BlockLever(69, 96)).c(0.5F).a(e).a("lever").i();
+ public static final Block STONE_PLATE = (new BlockPressurePlate(70, STONE.textureId, EnumMobType.MOBS, Material.STONE)).c(0.5F).a(h).a("pressurePlate").i();
+ public static final Block IRON_DOOR_BLOCK = (new BlockDoor(71, Material.ORE)).c(5.0F).a(i).a("doorIron").p().i();
+ public static final Block WOOD_PLATE = (new BlockPressurePlate(72, WOOD.textureId, EnumMobType.EVERYTHING, Material.WOOD)).c(0.5F).a(e).a("pressurePlate").i();
+ public static final Block REDSTONE_ORE = (new BlockRedstoneOre(73, 51, false)).c(3.0F).b(5.0F).a(h).a("oreRedstone").i();
+ public static final Block GLOWING_REDSTONE_ORE = (new BlockRedstoneOre(74, 51, true)).a(0.625F).c(3.0F).b(5.0F).a(h).a("oreRedstone").i();
+ public static final Block REDSTONE_TORCH_OFF = (new BlockRedstoneTorch(75, 115, false)).c(0.0F).a(e).a("notGate").i();
+ public static final Block REDSTONE_TORCH_ON = (new BlockRedstoneTorch(76, 99, true)).c(0.0F).a(0.5F).a(e).a("notGate").i();
+ public static final Block STONE_BUTTON = (new BlockButton(77, STONE.textureId)).c(0.5F).a(h).a("button").i();
+ public static final Block SNOW = (new BlockSnow(78, 66)).c(0.1F).a(k).a("snow").g(0);
+ public static final Block ICE = (new BlockIce(79, 67)).c(0.5F).g(3).a(j).a("ice");
public static final Block SNOW_BLOCK = (new BlockSnowBlock(80, 66)).c(0.2F).a(k).a("snow");
public static final Block CACTUS = (new BlockCactus(81, 70)).c(0.4F).a(k).a("cactus");
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 SUGAR_CANE_BLOCK = (new BlockReed(83, 73)).c(0.0F).a(g).a("reeds").p();
+ public static final Block JUKEBOX = (new BlockJukeBox(84, 74)).c(2.0F).b(10.0F).a(h).a("jukebox").i();
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 PUMPKIN = (new BlockPumpkin(86, 102, false)).c(1.0F).a(e).a("pumpkin").i();
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");
- public static final Block GLOWSTONE = (new BlockLightStone(89, 105, Material.STONE)).c(0.3F).a(j).a(1.0F).a("lightgem");
+ public static final Block GLOWSTONE = (new BlockLightStone(89, 105, Material.SHATTERABLE)).c(0.3F).a(j).a(1.0F).a("lightgem");
public static final BlockPortal PORTAL = (BlockPortal) (new BlockPortal(90, 14)).c(-1.0F).a(j).a(0.75F).a("portal");
- public static final Block JACK_O_LANTERN = (new BlockPumpkin(91, 102, true)).c(1.0F).a(e).a(1.0F).a("litpumpkin").g();
- public static final Block CAKE_BLOCK = (new BlockCake(92, 121)).c(0.5F).a(k).a("cake").n().g();
- public static final Block DIODE_OFF = (new BlockDiode(93, false)).c(0.0F).a(e).a("diode").n().g();
- 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 JACK_O_LANTERN = (new BlockPumpkin(91, 102, true)).c(1.0F).a(e).a(1.0F).a("litpumpkin").i();
+ public static final Block CAKE_BLOCK = (new BlockCake(92, 121)).c(0.5F).a(k).a("cake").p().i();
+ public static final Block DIODE_OFF = (new BlockDiode(93, false)).c(0.0F).a(e).a("diode").p().i();
+ public static final Block DIODE_ON = (new BlockDiode(94, true)).c(0.0F).a(0.625F).a(e).a("diode").p().i();
+ public static final Block LOCKED_CHEST = (new BlockLockedChest(95)).c(0.0F).a(1.0F).a(e).a("lockedchest").a(true).i();
+ public static final Block TRAP_DOOR = (new BlockTrapdoor(96, Material.WOOD)).c(3.0F).a(e).a("trapdoor").p().i();
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 BIG_MUSHROOM_1 = (new BlockHugeMushroom(99, Material.WOOD, 142, 0)).c(0.2F).a(e).a("mushroom").i();
+ public static final Block BIG_MUSHROOM_2 = (new BlockHugeMushroom(100, Material.WOOD, 142, 1)).c(0.2F).a(e).a("mushroom").i();
+ public static final Block IRON_FENCE = (new BlockThin(101, 85, 85, Material.ORE, true)).c(5.0F).b(10.0F).a(i).a("fenceIron");
+ public static final Block THIN_GLASS = (new BlockThin(102, 49, 148, Material.SHATTERABLE, false)).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 static final Block PUMPKIN_STEM = (new BlockStem(104, PUMPKIN)).c(0.0F).a(e).a("pumpkinStem").i();
+ public static final Block MELON_STEM = (new BlockStem(105, MELON)).c(0.0F).a(e).a("pumpkinStem").i();
+ public static final Block VINE = (new BlockVine(106)).c(0.2F).a(g).a("vine").i();
+ public static final Block FENCE_GATE = (new BlockFenceGate(107, 4)).c(2.0F).b(5.0F).a(e).a("fenceGate").i();
+ public static final Block BRICK_STAIRS = (new BlockStairs(108, BRICK)).a("stairsBrick").i();
+ public static final Block STONE_STAIRS = (new BlockStairs(109, SMOOTH_BRICK)).a("stairsStoneBrickSmooth").i();
+ public static final BlockMycel MYCEL = (BlockMycel) (new BlockMycel(110)).c(0.6F).a(g).a("mycel");
+ public static final Block WATER_LILY = (new BlockWaterLily(111, 76)).c(0.0F).a(g).a("waterlily");
+ public static final Block NETHER_BRICK = (new Block(112, 224, Material.STONE)).c(2.0F).b(10.0F).a(h).a("netherBrick");
+ public static final Block NETHER_FENCE = (new BlockFence(113, 224, Material.STONE)).c(2.0F).b(10.0F).a(h).a("netherFence");
+ public static final Block NETHER_BRICK_STAIRS = (new BlockStairs(114, NETHER_BRICK)).a("stairsNetherBrick").i();
+ public static final Block NETHER_WART = (new BlockNetherWart(115)).a("netherStalk").i();
+ public static final Block ENCHANTMENT_TABLE = (new BlockEnchantmentTable(116)).c(5.0F).b(2000.0F).a("enchantmentTable");
+ public static final Block BREWING_STAND = (new BlockBrewingStand(117)).c(0.5F).a(0.125F).a("brewingStand").i();
+ public static final Block CAULDRON = (new BlockCauldron(118)).c(2.0F).a("cauldron").i();
+ public static final Block ENDER_PORTAL = (new BlockEnderPortal(119, Material.PORTAL)).c(-1.0F).b(6000000.0F);
+ public static final Block ENDER_PORTAL_FRAME = (new BlockEnderPortalFrame(120)).a(j).a(0.125F).c(-1.0F).a("endPortalFrame").i().b(6000000.0F);
+ public static final Block WHITESTONE = (new Block(121, 175, Material.STONE)).c(3.0F).b(15.0F).a(h).a("whiteStone");
+ public static final Block DRAGON_EGG = (new BlockDragonEgg(122, 167)).c(3.0F).b(15.0F).a(h).a(0.125F).a("dragonEgg");
public int textureId;
public final int id;
protected float strength;
protected float durability;
- protected boolean bD;
- protected boolean bE;
+ protected boolean bR;
+ protected boolean bS;
public double minX;
public double minY;
public double minZ;
@@ -144,16 +158,16 @@ public class Block {
public double maxY;
public double maxZ;
public StepSound stepSound;
- public float bM;
+ public float ca;
public final Material material;
public float frictionFactor;
private String name;
protected Block(int i, Material material) {
- this.bD = true;
- this.bE = true;
+ this.bR = true;
+ this.bS = true;
this.stepSound = d;
- this.bM = 1.0F;
+ this.ca = 1.0F;
this.frictionFactor = 0.6F;
if (byId[i] != null) {
throw new IllegalArgumentException("Slot " + i + " is already occupied by " + byId[i] + " when adding " + this);
@@ -169,12 +183,12 @@ public class Block {
}
}
- protected Block g() {
+ protected Block i() {
t[this.id] = true;
return this;
}
- protected void h() {}
+ protected void j() {}
protected Block(int i, int j, Material material) {
this(i, material);
@@ -186,7 +200,7 @@ public class Block {
return this;
}
- protected Block f(int i) {
+ protected Block g(int i) {
q[this.id] = i;
return this;
}
@@ -205,6 +219,10 @@ public class Block {
return true;
}
+ public int c() {
+ return 0;
+ }
+
protected Block c(float f) {
this.strength = f;
if (this.durability < f * 5.0F) {
@@ -214,12 +232,12 @@ public class Block {
return this;
}
- protected Block i() {
+ protected Block k() {
this.c(-1.0F);
return this;
}
- public float j() {
+ public float l() {
return this.strength;
}
@@ -266,10 +284,10 @@ public class Block {
}
public boolean a(int i, boolean flag) {
- return this.q_();
+ return this.v_();
}
- public boolean q_() {
+ public boolean v_() {
return true;
}
@@ -279,7 +297,7 @@ public class Block {
public void doPhysics(World world, int i, int j, int k, int l) {}
- public int c() {
+ public int d() {
return 10;
}
@@ -291,7 +309,7 @@ public class Block {
return 1;
}
- public int a(int i, Random random) {
+ public int a(int i, Random random, int j) {
return this.id;
}
@@ -299,21 +317,21 @@ public class Block {
return this.strength < 0.0F ? 0.0F : (!entityhuman.b(this) ? 1.0F / this.strength / 100.0F : entityhuman.a(this) / this.strength / 30.0F);
}
- public final void g(World world, int i, int j, int k, int l) {
- this.dropNaturally(world, i, j, k, l, 1.0F);
+ public final void b(World world, int i, int j, int k, int l, int i1) {
+ this.dropNaturally(world, i, j, k, l, 1.0F, i1);
}
- public void dropNaturally(World world, int i, int j, int k, int l, float f) {
+ public void dropNaturally(World world, int i, int j, int k, int l, float f, int i1) {
if (!world.isStatic) {
- int i1 = this.a(world.random);
+ int j1 = this.a(i1, world.random);
- for (int j1 = 0; j1 < i1; ++j1) {
+ for (int k1 = 0; k1 < j1; ++k1) {
// CraftBukkit - <= to < to allow for plugins to completely disable block drops from explosions
if (world.random.nextFloat() < f) {
- int k1 = this.a(l, world.random);
+ int l1 = this.a(l, world.random, i1);
- if (k1 > 0) {
- this.a(world, i, j, k, new ItemStack(k1, 1, this.a_(l)));
+ if (l1 > 0) {
+ this.a(world, i, j, k, new ItemStack(l1, 1, this.c(l)));
}
}
}
@@ -333,7 +351,7 @@ public class Block {
}
}
- protected int a_(int i) {
+ protected int c(int i) {
return 0;
}
@@ -487,10 +505,36 @@ public class Block {
return false;
}
+ public void f() {}
+
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);
+ entityhuman.c(0.025F);
+ if (this.b() && !isTileEntity[this.id] && EnchantmentManager.d(entityhuman.inventory)) {
+ ItemStack itemstack = this.a_(l);
+
+ if (itemstack != null) {
+ this.a(world, i, j, k, itemstack);
+ }
+ } else {
+ int i1 = EnchantmentManager.e(entityhuman.inventory);
+
+ this.b(world, i, j, k, l, i1);
+ }
+ }
+
+ protected ItemStack a_(int i) {
+ int j = 0;
+
+ if (this.id >= 0 && this.id < Item.byId.length && Item.byId[this.id].e()) {
+ j = i;
+ }
+
+ return new ItemStack(this.id, 1, j);
+ }
+
+ public int a(int i, Random random) {
+ return this.a(random);
}
public boolean f(World world, int i, int j, int k) {
@@ -504,26 +548,26 @@ public class Block {
return this;
}
- public String k() {
- return StatisticCollector.a(this.l() + ".name");
+ public String m() {
+ return StatisticCollector.a(this.n() + ".name");
}
- public String l() {
+ public String n() {
return this.name;
}
public void a(World world, int i, int j, int k, int l, int i1) {}
- public boolean m() {
- return this.bE;
+ public boolean o() {
+ return this.bS;
}
- protected Block n() {
- this.bE = false;
+ protected Block p() {
+ this.bS = false;
return this;
}
- public int e() {
+ public int g() {
return this.material.l();
}
@@ -535,7 +579,8 @@ public class Block {
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[LONG_GRASS.id] = (new ItemColoredBlock(LONG_GRASS.id - 256, true)).a(new String[] { "shrub", "grass", "fern"});
+ Item.byId[WATER_LILY.id] = new ItemWaterLily(WATER_LILY.id - 256);
Item.byId[PISTON.id] = new ItemPiston(PISTON.id - 256);
Item.byId[PISTON_STICKY.id] = new ItemPiston(PISTON_STICKY.id - 256);
Item.byId[BIG_MUSHROOM_1.id] = new ItemLog(BIG_MUSHROOM_1.id - 256, BIG_MUSHROOM_1); // CraftBukkit
@@ -543,9 +588,27 @@ public class Block {
Item.byId[MOB_SPAWNER.id] = new ItemMobSpawner(MOB_SPAWNER.id - 256); // CraftBukkit
for (int i = 0; i < 256; ++i) {
- if (byId[i] != null && Item.byId[i] == null) {
- Item.byId[i] = new ItemBlock(i - 256);
- byId[i].h();
+ if (byId[i] != null) {
+ if (Item.byId[i] == null) {
+ Item.byId[i] = new ItemBlock(i - 256);
+ byId[i].j();
+ }
+
+ boolean flag = false;
+
+ if (i > 0 && byId[i].c() == 10) {
+ flag = true;
+ }
+
+ if (i > 0 && byId[i] instanceof BlockStep) {
+ flag = true;
+ }
+
+ if (i == SOIL.id) {
+ flag = true;
+ }
+
+ u[i] = flag;
}
}
diff --git a/src/main/java/net/minecraft/server/BlockButton.java b/src/main/java/net/minecraft/server/BlockButton.java
index a5b3c6a277..5998675a0c 100644
--- a/src/main/java/net/minecraft/server/BlockButton.java
+++ b/src/main/java/net/minecraft/server/BlockButton.java
@@ -15,7 +15,7 @@ public class BlockButton extends Block {
return null;
}
- public int c() {
+ public int d() {
return 20;
}
@@ -81,7 +81,7 @@ public class BlockButton extends Block {
}
if (flag) {
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
}
}
@@ -89,7 +89,7 @@ public class BlockButton extends Block {
private boolean h(World world, int i, int j, int k) {
if (!this.canPlace(world, i, j, k)) {
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
return false;
} else {
@@ -162,7 +162,7 @@ public class BlockButton extends Block {
world.applyPhysics(i, j - 1, k, this.id);
}
- world.c(i, j, k, this.id, this.c());
+ world.c(i, j, k, this.id, this.d());
return true;
}
}
@@ -245,4 +245,12 @@ public class BlockButton extends Block {
}
}
}
+
+ public void f() {
+ float f = 0.1875F;
+ float f1 = 0.125F;
+ float f2 = 0.125F;
+
+ this.a(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2);
+ }
}
diff --git a/src/main/java/net/minecraft/server/BlockCactus.java b/src/main/java/net/minecraft/server/BlockCactus.java
index 792c51b255..b9da7d2af4 100644
--- a/src/main/java/net/minecraft/server/BlockCactus.java
+++ b/src/main/java/net/minecraft/server/BlockCactus.java
@@ -53,13 +53,17 @@ public class BlockCactus extends Block {
return false;
}
+ public int c() {
+ return 13;
+ }
+
public boolean canPlace(World world, int i, int j, int k) {
return !super.canPlace(world, i, j, k) ? false : this.f(world, i, j, k);
}
public void doPhysics(World world, int i, int j, int k, int l) {
if (!this.f(world, i, j, k)) {
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
}
}
diff --git a/src/main/java/net/minecraft/server/BlockDispenser.java b/src/main/java/net/minecraft/server/BlockDispenser.java
index cb2bd4481a..b954f9aa37 100644
--- a/src/main/java/net/minecraft/server/BlockDispenser.java
+++ b/src/main/java/net/minecraft/server/BlockDispenser.java
@@ -17,11 +17,11 @@ public class BlockDispenser extends BlockContainer {
this.textureId = 45;
}
- public int c() {
+ public int d() {
return 4;
}
- public int a(int i, Random random) {
+ public int a(int i, Random random, int j) {
return Block.DISPENSER.id;
}
@@ -111,7 +111,7 @@ public class BlockDispenser extends BlockContainer {
double d2 = (double) k + (double) b1 * 0.6D + 0.5D;
if (itemstack == null) {
- world.e(1001, i, j, k, 0);
+ world.f(1001, i, j, k, 0);
} else {
// CraftBukkit start
double d3 = random.nextDouble() * 0.1D + 0.2D;
@@ -148,19 +148,25 @@ public class BlockDispenser extends BlockContainer {
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);
+ world.f(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);
+ world.f(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);
+ world.f(1002, i, j, k, 0);
+ } else if (itemstack.id == Item.POTION.id && ItemPotion.c(itemstack.getData())) {
+ EntityPotion entitypotion = new EntityPotion(world, d0, d1, d2, itemstack.getData());
+
+ entitypotion.a((double) b0, 0.10000000149011612D, (double) b1, 1.375F, 3.0F);
+ world.addEntity(entitypotion);
+ world.f(1002, i, j, k, 0);
} else {
EntityItem entityitem = new EntityItem(world, d0, d1 - 0.3D, d2, itemstack);
// CraftBukkit start
@@ -170,10 +176,10 @@ public class BlockDispenser extends BlockContainer {
entityitem.motZ = motZ;
// CraftBukkit end
world.addEntity(entityitem);
- world.e(1000, i, j, k, 0);
+ world.f(1000, i, j, k, 0);
}
- world.e(2000, i, j, k, b0 + 1 + (b1 + 1) * 3);
+ world.f(2000, i, j, k, b0 + 1 + (b1 + 1) * 3);
}
}
}
@@ -183,13 +189,13 @@ public class BlockDispenser extends BlockContainer {
boolean flag = world.isBlockIndirectlyPowered(i, j, k) || world.isBlockIndirectlyPowered(i, j + 1, k);
if (flag) {
- world.c(i, j, k, this.id, this.c());
+ world.c(i, j, k, this.id, this.d());
}
}
}
public void a(World world, int i, int j, int k, Random random) {
- if (world.isBlockIndirectlyPowered(i, j, k) || world.isBlockIndirectlyPowered(i, j + 1, k)) {
+ if (!world.isStatic && (world.isBlockIndirectlyPowered(i, j, k) || world.isBlockIndirectlyPowered(i, j + 1, k))) {
this.dispense(world, i, j, k, random);
}
}
diff --git a/src/main/java/net/minecraft/server/BlockDoor.java b/src/main/java/net/minecraft/server/BlockDoor.java
index 1c9b1b4c9c..c7ceab0e7e 100644
--- a/src/main/java/net/minecraft/server/BlockDoor.java
+++ b/src/main/java/net/minecraft/server/BlockDoor.java
@@ -21,7 +21,7 @@ public class BlockDoor extends Block {
public int a(int i, int j) {
if (i != 0 && i != 1) {
- int k = this.d(j);
+ int k = this.e(j);
if ((k == 0 || k == 2) ^ i <= 3) {
return this.textureId;
@@ -50,16 +50,20 @@ public class BlockDoor extends Block {
return false;
}
+ public int c() {
+ return 7;
+ }
+
public AxisAlignedBB e(World world, int i, int j, int k) {
this.a((IBlockAccess)world, i, j, k); // CraftBukkit - Make sure this points to the below method!
return super.e(world, i, j, k);
}
public void a(IBlockAccess iblockaccess, int i, int j, int k) {
- this.c(this.d(iblockaccess.getData(i, j, k)));
+ this.d(this.e(iblockaccess.getData(i, j, k)));
}
- public void c(int i) {
+ public void d(int i) {
float f = 0.1875F;
this.a(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F);
@@ -160,7 +164,7 @@ public class BlockDoor extends Block {
if (flag) {
if (!world.isStatic) {
- this.g(world, i, j, k, i1);
+ this.b(world, i, j, k, i1, 0);
}
} else if (l > 0 && Block.byId[l].isPowerSource()) {
// CraftBukkit start
@@ -184,7 +188,7 @@ public class BlockDoor extends Block {
}
}
- public int a(int i, Random random) {
+ public int a(int i, Random random, int j) {
return (i & 8) != 0 ? 0 : (this.material == Material.ORE ? Item.IRON_DOOR.id : Item.WOOD_DOOR.id);
}
@@ -193,20 +197,19 @@ public class BlockDoor extends Block {
return super.a(world, i, j, k, vec3d, vec3d1);
}
- public int d(int i) {
+ public int e(int i) {
return (i & 4) == 0 ? i - 1 & 3 : i & 3;
}
public boolean canPlace(World world, int i, int j, int 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);
+ return j >= world.height - 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) {
+ public static boolean f(int i) {
return (i & 4) != 0;
}
- public int e() {
+ public int g() {
return 1;
}
}
diff --git a/src/main/java/net/minecraft/server/BlockFire.java b/src/main/java/net/minecraft/server/BlockFire.java
index ad4bb04b34..b141828f63 100644
--- a/src/main/java/net/minecraft/server/BlockFire.java
+++ b/src/main/java/net/minecraft/server/BlockFire.java
@@ -20,7 +20,7 @@ public class BlockFire extends Block {
this.a(true);
}
- public void h() {
+ public void j() {
this.a(Block.WOOD.id, 5, 20);
this.a(Block.FENCE.id, 5, 20);
this.a(Block.WOOD_STAIRS.id, 5, 20);
@@ -50,22 +50,30 @@ public class BlockFire extends Block {
return false;
}
+ public int c() {
+ return 3;
+ }
+
public int a(Random random) {
return 0;
}
- public int c() {
+ public int d() {
return 40;
}
public void a(World world, int i, int j, int k, Random random) {
boolean flag = world.getTypeId(i, j - 1, k) == Block.NETHERRACK.id;
+ if (world.worldProvider instanceof WorldProviderSky && world.getTypeId(i, j - 1, k) == Block.BEDROCK.id) {
+ flag = true;
+ }
+
if (!this.canPlace(world, i, j, k)) {
world.setTypeId(i, j, k, 0);
}
- 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))) {
+ if (!flag && world.w() && (world.v(i, j, k) || world.v(i - 1, j, k) || world.v(i + 1, j, k) || world.v(i, j, k - 1) || world.v(i, j, k + 1))) {
world.setTypeId(i, j, k, 0);
} else {
int l = world.getData(i, j, k);
@@ -74,7 +82,7 @@ public class BlockFire extends Block {
world.setRawData(i, j, k, l + random.nextInt(3) / 2);
}
- world.c(i, j, k, this.id, this.c());
+ world.c(i, j, k, this.id, this.d());
if (!flag && !this.g(world, i, j, k)) {
if (!world.e(i, j - 1, k) || l > 3) {
world.setTypeId(i, j, k, 0);
@@ -112,7 +120,7 @@ public class BlockFire extends Block {
if (i2 > 0) {
int j2 = (i2 + 40) / (l + 30);
- 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)) {
+ if (j2 > 0 && random.nextInt(l1) <= j2 && (!world.w() || !world.v(i1, k1, j1)) && !world.v(i1 - 1, k1, k) && !world.v(i1 + 1, k1, j1) && !world.v(i1, k1, j1 - 1) && !world.v(i1, k1, j1 + 1)) {
int k2 = l + random.nextInt(5) / 4;
if (k2 > 15) {
@@ -167,7 +175,7 @@ public class BlockFire extends Block {
}
// CraftBukkit end
- if (random.nextInt(i1 + 10) < 5 && !world.s(i, j, k)) {
+ if (random.nextInt(i1 + 10) < 5 && !world.v(i, j, k)) {
int k1 = i1 + random.nextInt(5) / 4;
if (k1 > 15) {
@@ -206,7 +214,7 @@ public class BlockFire extends Block {
}
}
- public boolean q_() {
+ public boolean v_() {
return false;
}
@@ -231,11 +239,11 @@ public class BlockFire extends Block {
}
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.worldProvider.dimension > 0 || 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 {
- world.c(i, j, k, this.id, this.c());
+ world.c(i, j, k, this.id, this.d());
}
}
}
diff --git a/src/main/java/net/minecraft/server/BlockFlowing.java b/src/main/java/net/minecraft/server/BlockFlowing.java
index aaae7bc162..12469a09e0 100644
--- a/src/main/java/net/minecraft/server/BlockFlowing.java
+++ b/src/main/java/net/minecraft/server/BlockFlowing.java
@@ -85,7 +85,7 @@ public class BlockFlowing extends BlockFluids {
world.setTypeId(i, j, k, 0);
} else {
world.setData(i, j, k, i1);
- world.c(i, j, k, this.id, this.c());
+ world.c(i, j, k, this.id, this.d());
world.applyPhysics(i, j, k, this.id);
}
} else if (flag) {
@@ -103,6 +103,12 @@ public class BlockFlowing extends BlockFluids {
}
if (!event.isCancelled()) {
+ if (this.material == Material.LAVA && world.getMaterial(i, j - 1, k) == Material.WATER) {
+ world.setTypeId(i, j - 1, k, Block.STONE.id);
+ this.h(world, i, j - 1, k);
+ return;
+ }
+
if (l >= 8) {
world.setTypeIdAndData(i, j - 1, k, this.id, l);
} else {
@@ -152,7 +158,7 @@ public class BlockFlowing extends BlockFluids {
if (this.material == Material.LAVA) {
this.h(world, i, j, k);
} else {
- Block.byId[i1].g(world, i, j, k, world.getData(i, j, k));
+ Block.byId[i1].b(world, i, j, k, world.getData(i, j, k), 0);
}
}
@@ -160,7 +166,7 @@ public class BlockFlowing extends BlockFluids {
}
}
- private int b(World world, int i, int j, int k, int l, int i1) {
+ private int c(World world, int i, int j, int k, int l, int i1) {
int j1 = 1000;
for (int k1 = 0; k1 < 4; ++k1) {
@@ -190,7 +196,7 @@ public class BlockFlowing extends BlockFluids {
}
if (l < 4) {
- int j2 = this.b(world, l1, j, i2, l + 1, k1);
+ int j2 = this.c(world, l1, j, i2, l + 1, k1);
if (j2 < j1) {
j1 = j2;
@@ -232,7 +238,7 @@ public class BlockFlowing extends BlockFluids {
if (!this.k(world, i1, j - 1, j1)) {
this.c[l] = 0;
} else {
- this.c[l] = this.b(world, i1, j, j1, 1, l);
+ this.c[l] = this.c(world, i1, j, j1, 1, l);
}
}
}
@@ -261,7 +267,7 @@ public class BlockFlowing extends BlockFluids {
} else {
Material material = Block.byId[l].material;
- return material.isSolid();
+ return material == Material.PORTAL ? true : material.isSolid();
}
} else {
return true;
@@ -295,7 +301,7 @@ public class BlockFlowing extends BlockFluids {
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());
+ world.c(i, j, k, this.id, this.d());
}
}
}
diff --git a/src/main/java/net/minecraft/server/BlockGrass.java b/src/main/java/net/minecraft/server/BlockGrass.java
index 5868eadb91..7c8b2ca7a9 100644
--- a/src/main/java/net/minecraft/server/BlockGrass.java
+++ b/src/main/java/net/minecraft/server/BlockGrass.java
@@ -22,9 +22,6 @@ public class BlockGrass extends Block {
public void a(World world, int i, int j, int k, Random random) {
if (!world.isStatic) {
if (world.getLightLevel(i, j + 1, k) < 4 && Block.q[world.getTypeId(i, j + 1, k)] > 2) {
- if (random.nextInt(4) != 0) {
- return;
- }
// CraftBukkit start
org.bukkit.World bworld = world.getWorld();
org.bukkit.block.BlockState blockState = bworld.getBlockAt(i, j, k).getState();
@@ -38,30 +35,32 @@ public class BlockGrass extends Block {
}
// CraftBukkit end
} else if (world.getLightLevel(i, j + 1, k) >= 9) {
- int l = i + random.nextInt(3) - 1;
- int i1 = j + random.nextInt(5) - 3;
- int j1 = k + random.nextInt(3) - 1;
- int k1 = world.getTypeId(l, i1 + 1, j1);
+ for (int l = 0; l < 4; ++l) {
+ int i1 = i + random.nextInt(3) - 1;
+ int j1 = j + random.nextInt(5) - 3;
+ int k1 = k + random.nextInt(3) - 1;
+ int l1 = world.getTypeId(i1, j1 + 1, k1);
- if (world.getTypeId(l, i1, j1) == Block.DIRT.id && world.getLightLevel(l, i1 + 1, j1) >= 4 && Block.q[k1] <= 2) {
- // CraftBukkit start
- org.bukkit.World bworld = world.getWorld();
- org.bukkit.block.BlockState blockState = bworld.getBlockAt(l, i1, j1).getState();
- blockState.setTypeId(this.id);
+ if (world.getTypeId(i1, j1, k1) == Block.DIRT.id && world.getLightLevel(i1, j1 + 1, k1) >= 4 && Block.q[l1] <= 2) {
+ // 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);
+ BlockSpreadEvent event = new BlockSpreadEvent(blockState.getBlock(), bworld.getBlockAt(i, j, k), blockState);
+ world.getServer().getPluginManager().callEvent(event);
- if (!event.isCancelled()) {
- blockState.update(true);
+ if (!event.isCancelled()) {
+ blockState.update(true);
+ }
+ // CraftBukkit end
}
- // CraftBukkit end
}
}
}
}
- public int a(int i, Random random) {
- return Block.DIRT.a(0, random);
+ public int a(int i, Random random, int j) {
+ return Block.DIRT.a(0, random, j);
}
}
diff --git a/src/main/java/net/minecraft/server/BlockIce.java b/src/main/java/net/minecraft/server/BlockIce.java
index 44f3573b0f..7c22130b7d 100644
--- a/src/main/java/net/minecraft/server/BlockIce.java
+++ b/src/main/java/net/minecraft/server/BlockIce.java
@@ -32,12 +32,16 @@ public class BlockIce extends BlockBreakable {
}
// CraftBukkit end
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, Block.STATIONARY_WATER.id);
}
}
- public int e() {
+ public int g() {
return 0;
}
+
+ protected ItemStack a_(int i) {
+ return null;
+ }
}
diff --git a/src/main/java/net/minecraft/server/BlockLeaves.java b/src/main/java/net/minecraft/server/BlockLeaves.java
index 2c035124c3..4141ed19aa 100644
--- a/src/main/java/net/minecraft/server/BlockLeaves.java
+++ b/src/main/java/net/minecraft/server/BlockLeaves.java
@@ -126,7 +126,7 @@ public class BlockLeaves extends BlockLeavesBase {
if (event.isCancelled()) return;
// CraftBukkit end
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
}
@@ -134,12 +134,12 @@ public class BlockLeaves extends BlockLeavesBase {
return random.nextInt(20) == 0 ? 1 : 0;
}
- public int a(int i, Random random) {
+ public int a(int i, Random random, int j) {
return Block.SAPLING.id;
}
public void a(World world, EntityHuman entityhuman, int i, int j, int k, int l) {
- if (!world.isStatic && entityhuman.K() != null && entityhuman.K().id == Item.SHEARS.id) {
+ if (!world.isStatic && entityhuman.P() != null && entityhuman.P().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 {
@@ -147,7 +147,7 @@ public class BlockLeaves extends BlockLeavesBase {
}
}
- protected int a_(int i) {
+ protected int c(int i) {
return i & 3;
}
diff --git a/src/main/java/net/minecraft/server/BlockLever.java b/src/main/java/net/minecraft/server/BlockLever.java
index c7e205aeda..ad607ceb8e 100644
--- a/src/main/java/net/minecraft/server/BlockLever.java
+++ b/src/main/java/net/minecraft/server/BlockLever.java
@@ -20,6 +20,10 @@ public class BlockLever extends Block {
return false;
}
+ public int c() {
+ return 12;
+ }
+
public boolean canPlace(World world, int i, int j, int k, int l) {
return l == 1 && world.e(i, j - 1, k) ? true : (l == 2 && world.e(i, j, k + 1) ? true : (l == 3 && world.e(i, j, k - 1) ? true : (l == 4 && world.e(i + 1, j, k) ? true : l == 5 && world.e(i - 1, j, k))));
}
@@ -55,7 +59,7 @@ public class BlockLever extends Block {
}
if (i1 == -1) {
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
} else {
world.setData(i, j, k, i1 + j1);
@@ -92,7 +96,7 @@ public class BlockLever extends Block {
}
if (flag) {
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
}
}
@@ -100,7 +104,7 @@ public class BlockLever extends Block {
private boolean g(World world, int i, int j, int k) {
if (!this.canPlace(world, i, j, k)) {
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
return false;
} else {
diff --git a/src/main/java/net/minecraft/server/BlockMinecartDetector.java b/src/main/java/net/minecraft/server/BlockMinecartDetector.java
index f05415f748..12969fd02a 100644
--- a/src/main/java/net/minecraft/server/BlockMinecartDetector.java
+++ b/src/main/java/net/minecraft/server/BlockMinecartDetector.java
@@ -12,7 +12,7 @@ public class BlockMinecartDetector extends BlockMinecartTrack {
this.a(true);
}
- public int c() {
+ public int d() {
return 20;
}
@@ -84,7 +84,7 @@ public class BlockMinecartDetector extends BlockMinecartTrack {
}
if (flag1) {
- world.c(i, j, k, this.id, this.c());
+ world.c(i, j, k, this.id, this.d());
}
}
}
diff --git a/src/main/java/net/minecraft/server/BlockMobSpawner.java b/src/main/java/net/minecraft/server/BlockMobSpawner.java
index 7be3e86580..d3a29ca860 100644
--- a/src/main/java/net/minecraft/server/BlockMobSpawner.java
+++ b/src/main/java/net/minecraft/server/BlockMobSpawner.java
@@ -12,28 +12,30 @@ public class BlockMobSpawner extends BlockContainer {
return new TileEntityMobSpawner();
}
- public int a(int i, Random random) {
+ public int a(int i, Random random, int j) {
return Block.MOB_SPAWNER.id; // CraftBukkit
}
public int a(Random random) {
- return 0; // CraftBukkit
+ return 0;
}
// CraftBukkit start
- public void dropNaturally(World world, int i, int j, int k, int l, float f) {
+ @Override
+ public void dropNaturally(World world, int i, int j, int k, int l, float f, int i1) {
TileEntity entity = world.getTileEntity(i, j, k);
if (entity instanceof TileEntityMobSpawner) {
- super.dropNaturally(world, i, j, k, ((TileEntityMobSpawner) entity).getId(), f);
+ super.dropNaturally(world, i, j, k, ((TileEntityMobSpawner) entity).getId(), f, i1);
}
}
+ @Override
public void remove(World world, int i, int j, int k) {
- dropNaturally(world, i, j, k, 0, 1.0f);
+ dropNaturally(world, i, j, k, 0, 1.0f, 0);
super.remove(world, i, j, k);
}
- protected int a_(int i) {
+ protected int c(int i) {
return i;
}
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/server/BlockMushroom.java b/src/main/java/net/minecraft/server/BlockMushroom.java
index 775d7e1866..37bfe15840 100644
--- a/src/main/java/net/minecraft/server/BlockMushroom.java
+++ b/src/main/java/net/minecraft/server/BlockMushroom.java
@@ -14,7 +14,7 @@ public class BlockMushroom extends BlockFlower {
}
public void a(World world, int i, int j, int k, Random random) {
- if (random.nextInt(100) == 0) {
+ if (random.nextInt(25) == 0) {
byte b0 = 4;
int l = 5;
@@ -68,44 +68,37 @@ public class BlockMushroom extends BlockFlower {
}
}
- protected boolean c(int i) {
+ protected boolean d(int i) {
return Block.o[i];
}
public boolean f(World world, int i, int j, int k) {
- if (j >= 0) {
- world.getClass();
- if (j < 128) {
- return world.k(i, j, k) < 13 && this.c(world.getTypeId(i, j - 1, k));
- }
- }
+ if (j >= 0 && j < world.height) {
+ int l = world.getTypeId(i, j - 1, k);
- return false;
+ return l == Block.MYCEL.id || world.k(i, j, k) < 13 && this.d(l);
+ } else {
+ return false;
+ }
}
public boolean b(World world, int i, int j, int k, Random random) {
- int l = world.getTypeId(i, j - 1, k);
+ int l = world.getData(i, j, k);
- if (l != Block.DIRT.id && l != Block.GRASS.id) {
- return false;
+ 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 {
- 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;
- }
+ world.setRawTypeIdAndData(i, j, k, this.id, l);
+ return false;
}
}
}
diff --git a/src/main/java/net/minecraft/server/BlockPiston.java b/src/main/java/net/minecraft/server/BlockPiston.java
index dd3dd4dec0..ed4771e84e 100644
--- a/src/main/java/net/minecraft/server/BlockPiston.java
+++ b/src/main/java/net/minecraft/server/BlockPiston.java
@@ -3,7 +3,6 @@ package net.minecraft.server;
import java.util.ArrayList;
// CraftBukkit start
-import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.block.BlockPistonExtendEvent;
@@ -12,7 +11,7 @@ import org.bukkit.event.block.BlockPistonExtendEvent;
public class BlockPiston extends Block {
private boolean a;
- private boolean b;
+ private static boolean b;
public BlockPiston(int i, int j, boolean flag) {
super(i, j, Material.PISTON);
@@ -22,9 +21,13 @@ public class BlockPiston extends Block {
}
public int a(int i, int j) {
- int k = c(j);
+ int k = d(j);
- return k > 5 ? this.textureId : (i == k ? (!d(j) && this.minX <= 0.0D && this.minY <= 0.0D && this.minZ <= 0.0D && this.maxX >= 1.0D && this.maxY >= 1.0D && this.maxZ >= 1.0D ? this.textureId : 110) : (i == PistonBlockTextures.a[k] ? 109 : 108));
+ return k > 5 ? this.textureId : (i == k ? (!e(j) && this.minX <= 0.0D && this.minY <= 0.0D && this.minZ <= 0.0D && this.maxX >= 1.0D && this.maxY >= 1.0D && this.maxZ >= 1.0D ? this.textureId : 110) : (i == PistonBlockTextures.a[k] ? 109 : 108));
+ }
+
+ public int c() {
+ return 16;
}
public boolean a() {
@@ -39,32 +42,32 @@ public class BlockPiston extends Block {
int l = c(world, i, j, k, (EntityHuman) entityliving);
world.setData(i, j, k, l);
- if (!world.isStatic) {
+ if (!world.isStatic && !b) {
this.g(world, i, j, k);
}
}
public void doPhysics(World world, int i, int j, int k, int l) {
- if (!world.isStatic && !this.b) {
+ if (!world.isStatic && !b) {
this.g(world, i, j, k);
}
}
public void a(World world, int i, int j, int k) {
- if (!world.isStatic && world.getTileEntity(i, j, k) == null) {
+ if (!world.isStatic && world.getTileEntity(i, j, k) == null && !b) {
this.g(world, i, j, k);
}
}
private void g(World world, int i, int j, int k) {
int l = world.getData(i, j, k);
- int i1 = c(l);
+ int i1 = d(l);
boolean flag = this.f(world, i, j, k, i1);
if (l != 7) {
- if (flag && !d(l)) {
+ if (flag && !e(l)) {
// CraftBukkit start
- int length = h(world, i, j, k, i1);
+ int length = g(world, i, j, k, i1);
if (length >= 0) {
org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k);
@@ -79,7 +82,7 @@ public class BlockPiston extends Block {
world.setRawData(i, j, k, i1 | 8);
world.playNote(i, j, k, 0, i1);
}
- } else if (!flag && d(l)) {
+ } else if (!flag && e(l)) {
// CraftBukkit start
org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k);
@@ -102,17 +105,19 @@ public class BlockPiston extends Block {
}
public void a(World world, int i, int j, int k, int l, int i1) {
- this.b = true;
+ b = true;
if (l == 0) {
- if (this.i(world, i, j, k, i1)) {
+ if (this.h(world, i, j, k, i1)) {
world.setData(i, j, k, i1 | 8);
world.makeSound((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "tile.piston.out", 0.5F, world.random.nextFloat() * 0.25F + 0.6F);
+ } else {
+ world.setRawData(i, j, k, i1);
}
} else if (l == 1) {
TileEntity tileentity = world.getTileEntity(i + PistonBlockTextures.b[i1], j + PistonBlockTextures.c[i1], k + PistonBlockTextures.d[i1]);
if (tileentity != null && tileentity instanceof TileEntityPiston) {
- ((TileEntityPiston) tileentity).e();
+ ((TileEntityPiston) tileentity).g();
}
world.setRawTypeIdAndData(i, j, k, Block.PISTON_MOVING.id, i1);
@@ -131,46 +136,46 @@ public class BlockPiston extends Block {
if (tileentity1 != null && tileentity1 instanceof TileEntityPiston) {
TileEntityPiston tileentitypiston = (TileEntityPiston) tileentity1;
- if (tileentitypiston.d() == i1 && tileentitypiston.c()) {
- tileentitypiston.e();
- i2 = tileentitypiston.a();
+ if (tileentitypiston.f() == i1 && tileentitypiston.e()) {
+ tileentitypiston.g();
+ i2 = tileentitypiston.c();
j2 = tileentitypiston.j();
flag = true;
}
}
}
- if (!flag && i2 > 0 && a(i2, world, j1, k1, l1, false) && (Block.byId[i2].e() == 0 || i2 == Block.PISTON.id || i2 == Block.PISTON_STICKY.id)) {
- this.b = false;
- world.setTypeId(j1, k1, l1, 0);
- this.b = true;
+ if (!flag && i2 > 0 && a(i2, world, j1, k1, l1, false) && (Block.byId[i2].g() == 0 || i2 == Block.PISTON.id || i2 == Block.PISTON_STICKY.id)) {
i += PistonBlockTextures.b[i1];
j += PistonBlockTextures.c[i1];
k += PistonBlockTextures.d[i1];
world.setRawTypeIdAndData(i, j, k, Block.PISTON_MOVING.id, j2);
world.setTileEntity(i, j, k, BlockPistonMoving.a(i2, j2, i1, false, false));
+ b = false;
+ world.setTypeId(j1, k1, l1, 0);
+ b = true;
} else if (!flag) {
- this.b = false;
+ b = false;
world.setTypeId(i + PistonBlockTextures.b[i1], j + PistonBlockTextures.c[i1], k + PistonBlockTextures.d[i1], 0);
- this.b = true;
+ b = true;
}
} else {
- this.b = false;
+ b = false;
world.setTypeId(i + PistonBlockTextures.b[i1], j + PistonBlockTextures.c[i1], k + PistonBlockTextures.d[i1], 0);
- this.b = true;
+ b = true;
}
world.makeSound((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "tile.piston.in", 0.5F, world.random.nextFloat() * 0.15F + 0.6F);
}
- this.b = false;
+ b = false;
}
public void a(IBlockAccess iblockaccess, int i, int j, int k) {
int l = iblockaccess.getData(i, j, k);
- if (d(l)) {
- switch (c(l)) {
+ if (e(l)) {
+ switch (d(l)) {
case 0:
this.a(0.0F, 0.25F, 0.0F, 1.0F, 1.0F, 1.0F);
break;
@@ -199,6 +204,10 @@ public class BlockPiston extends Block {
}
}
+ public void f() {
+ this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+ }
+
public void a(World world, int i, int j, int k, AxisAlignedBB axisalignedbb, ArrayList arraylist) {
this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
super.a(world, i, j, k, axisalignedbb, arraylist);
@@ -208,11 +217,11 @@ public class BlockPiston extends Block {
return false;
}
- public static int c(int i) {
+ public static int d(int i) {
return i & 7;
}
- public static boolean d(int i) {
+ public static boolean e(int i) {
return (i & 8) != 0;
}
@@ -239,29 +248,27 @@ public class BlockPiston extends Block {
return false;
} else {
if (i != Block.PISTON.id && i != Block.PISTON_STICKY.id) {
- if (Block.byId[i].j() == -1.0F) {
+ if (Block.byId[i].l() == -1.0F) {
return false;
}
- if (Block.byId[i].e() == 2) {
+ if (Block.byId[i].g() == 2) {
return false;
}
- if (!flag && Block.byId[i].e() == 1) {
+ if (!flag && Block.byId[i].g() == 1) {
return false;
}
- } else if (d(world.getData(j, k, l))) {
+ } else if (e(world.getData(j, k, l))) {
return false;
}
- TileEntity tileentity = world.getTileEntity(j, k, l);
-
- return tileentity == null;
+ return !(Block.byId[i] instanceof BlockContainer);
}
}
// CraftBukkkit boolean -> int
- private static int h(World world, int i, int j, int k, int l) {
+ private static int g(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];
@@ -269,41 +276,36 @@ public class BlockPiston extends Block {
while (true) {
if (l1 < 13) {
- if (j1 > 0) {
- world.getClass();
- if (j1 < 128 - 1) {
- int i2 = world.getTypeId(i1, j1, k1);
+ if (j1 <= 0 || j1 >= world.height - 1) {
+ return -1; // CraftBukkit
+ }
- if (i2 != 0) {
- if (!a(i2, world, i1, j1, k1, true)) {
- return -1; // CraftBukkit
- }
+ int i2 = world.getTypeId(i1, j1, k1);
- if (Block.byId[i2].e() != 1) {
- if (l1 == 12) {
- return -1; // CraftBukkit
- }
+ if (i2 != 0) {
+ if (!a(i2, world, i1, j1, k1, true)) {
+ return -1; // CraftBukkit
+ }
- i1 += PistonBlockTextures.b[l];
- j1 += PistonBlockTextures.c[l];
- k1 += PistonBlockTextures.d[l];
- ++l1;
- continue;
- }
+ if (Block.byId[i2].g() != 1) {
+ if (l1 == 12) {
+ return -1; // CraftBukkit
}
- return l1; // CraftBukkit
+ i1 += PistonBlockTextures.b[l];
+ j1 += PistonBlockTextures.c[l];
+ k1 += PistonBlockTextures.d[l];
+ ++l1;
+ continue;
}
}
-
- return -1; // CraftBukkit
}
return l1; // CraftBukkit
}
}
- private boolean i(World world, int i, int j, int k, int l) {
+ private boolean 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];
@@ -313,36 +315,30 @@ public class BlockPiston extends Block {
int i2;
if (l1 < 13) {
- label63: {
- if (j1 > 0) {
- world.getClass();
- if (j1 < 128 - 1) {
- i2 = world.getTypeId(i1, j1, k1);
- if (i2 != 0) {
- if (!a(i2, world, i1, j1, k1, true)) {
- return false;
- }
+ if (j1 <= 0 || j1 >= world.height - 1) {
+ return false;
+ }
- if (Block.byId[i2].e() != 1) {
- if (l1 == 12) {
- return false;
- }
-
- i1 += PistonBlockTextures.b[l];
- j1 += PistonBlockTextures.c[l];
- k1 += PistonBlockTextures.d[l];
- ++l1;
- continue;
- }
-
- Block.byId[i2].g(world, i1, j1, k1, world.getData(i1, j1, k1));
- world.setTypeId(i1, j1, k1, 0);
- }
- break label63;
- }
+ i2 = world.getTypeId(i1, j1, k1);
+ if (i2 != 0) {
+ if (!a(i2, world, i1, j1, k1, true)) {
+ return false;
}
- return false;
+ if (Block.byId[i2].g() != 1) {
+ if (l1 == 12) {
+ return false;
+ }
+
+ i1 += PistonBlockTextures.b[l];
+ j1 += PistonBlockTextures.c[l];
+ k1 += PistonBlockTextures.d[l];
+ ++l1;
+ continue;
+ }
+
+ Block.byId[i2].b(world, i1, j1, k1, world.getData(i1, j1, k1), 0);
+ world.setTypeId(i1, j1, k1, 0);
}
}
diff --git a/src/main/java/net/minecraft/server/BlockPistonExtension.java b/src/main/java/net/minecraft/server/BlockPistonExtension.java
index 8a1ae40163..501c61cee9 100644
--- a/src/main/java/net/minecraft/server/BlockPistonExtension.java
+++ b/src/main/java/net/minecraft/server/BlockPistonExtension.java
@@ -26,8 +26,8 @@ public class BlockPistonExtension extends Block {
if (j1 == Block.PISTON.id || j1 == Block.PISTON_STICKY.id) {
l = world.getData(i, j, k);
- if (BlockPiston.d(l)) {
- Block.byId[j1].g(world, i, j, k, l);
+ if (BlockPiston.e(l)) {
+ Block.byId[j1].b(world, i, j, k, l, 0);
world.setTypeId(i, j, k, 0);
}
}
@@ -39,6 +39,10 @@ public class BlockPistonExtension extends Block {
return i == k ? (this.a >= 0 ? this.a : ((j & 8) != 0 ? this.textureId - 1 : this.textureId)) : (i == PistonBlockTextures.a[k] ? 107 : 108);
}
+ public int c() {
+ return 17;
+ }
+
public boolean a() {
return false;
}
diff --git a/src/main/java/net/minecraft/server/BlockPortal.java b/src/main/java/net/minecraft/server/BlockPortal.java
index ba88a26cc9..4b9314beed 100644
--- a/src/main/java/net/minecraft/server/BlockPortal.java
+++ b/src/main/java/net/minecraft/server/BlockPortal.java
@@ -166,7 +166,7 @@ public class BlockPortal extends BlockBreakable {
world.getServer().getPluginManager().callEvent(event);
// CraftBukkit end
- entity.T();
+ entity.Y();
}
}
}
diff --git a/src/main/java/net/minecraft/server/BlockPressurePlate.java b/src/main/java/net/minecraft/server/BlockPressurePlate.java
index e0cf2fe591..f32adaa162 100644
--- a/src/main/java/net/minecraft/server/BlockPressurePlate.java
+++ b/src/main/java/net/minecraft/server/BlockPressurePlate.java
@@ -22,7 +22,7 @@ public class BlockPressurePlate extends Block {
this.a(f, 0.0F, f, 1.0F - f, 0.03125F, 1.0F - f);
}
- public int c() {
+ public int d() {
return 20;
}
@@ -52,7 +52,7 @@ public class BlockPressurePlate extends Block {
}
if (flag) {
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
}
}
@@ -144,7 +144,7 @@ public class BlockPressurePlate extends Block {
}
if (flag1) {
- world.c(i, j, k, this.id, this.c());
+ world.c(i, j, k, this.id, this.d());
}
}
@@ -182,7 +182,15 @@ public class BlockPressurePlate extends Block {
return true;
}
- public int e() {
+ public void f() {
+ float f = 0.5F;
+ float f1 = 0.125F;
+ float f2 = 0.5F;
+
+ this.a(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2);
+ }
+
+ public int g() {
return 1;
}
}
diff --git a/src/main/java/net/minecraft/server/BlockPumpkin.java b/src/main/java/net/minecraft/server/BlockPumpkin.java
index 420bc11ba5..c751e6e188 100644
--- a/src/main/java/net/minecraft/server/BlockPumpkin.java
+++ b/src/main/java/net/minecraft/server/BlockPumpkin.java
@@ -35,6 +35,21 @@ public class BlockPumpkin extends Block {
public void a(World world, int i, int j, int k) {
super.a(world, i, j, k);
+ if (world.getTypeId(i, j - 1, k) == Block.SNOW_BLOCK.id && world.getTypeId(i, j - 2, k) == Block.SNOW_BLOCK.id) {
+ if (!world.isStatic) {
+ world.setTypeId(i, j, k, 0);
+ world.setTypeId(i, j - 1, k, 0);
+ world.setTypeId(i, j - 2, k, 0);
+ EntitySnowman entitysnowman = new EntitySnowman(world);
+
+ entitysnowman.setPositionRotation((double) i + 0.5D, (double) j - 1.95D, (double) k + 0.5D, 0.0F, 0.0F);
+ world.addEntity(entitysnowman);
+ }
+
+ for (int l = 0; l < 120; ++l) {
+ world.a("snowshovel", (double) i + world.random.nextDouble(), (double) (j - 2) + world.random.nextDouble() * 2.5D, (double) k + world.random.nextDouble(), 0.0D, 0.0D, 0.0D);
+ }
+ }
}
public boolean canPlace(World world, int i, int j, int k) {
diff --git a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
index 847e64c52b..e78cdb6656 100644
--- a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
+++ b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
@@ -42,7 +42,7 @@ public class BlockRedstoneTorch extends BlockTorch {
this.a(true);
}
- public int c() {
+ public int d() {
return 2;
}
@@ -145,14 +145,14 @@ public class BlockRedstoneTorch extends BlockTorch {
public void doPhysics(World world, int i, int j, int k, int l) {
super.doPhysics(world, i, j, k, l);
- world.c(i, j, k, this.id, this.c());
+ world.c(i, j, k, this.id, this.d());
}
public boolean d(World world, int i, int j, int k, int l) {
return l == 0 ? this.a(world, i, j, k, l) : false;
}
- public int a(int i, Random random) {
+ public int a(int i, Random random, int j) {
return Block.REDSTONE_TORCH_ON.id;
}
diff --git a/src/main/java/net/minecraft/server/BlockRedstoneWire.java b/src/main/java/net/minecraft/server/BlockRedstoneWire.java
index b57b6378bf..f6ee548739 100644
--- a/src/main/java/net/minecraft/server/BlockRedstoneWire.java
+++ b/src/main/java/net/minecraft/server/BlockRedstoneWire.java
@@ -33,6 +33,10 @@ public class BlockRedstoneWire extends Block {
return false;
}
+ public int c() {
+ return 5;
+ }
+
public boolean canPlace(World world, int i, int j, int k) {
return world.e(i, j - 1, k);
}
@@ -280,7 +284,7 @@ public class BlockRedstoneWire extends Block {
boolean flag = this.canPlace(world, i, j, k);
if (!flag) {
- this.g(world, i, j, k, i1);
+ this.b(world, i, j, k, i1, 0);
world.setTypeId(i, j, k, 0);
} else {
this.g(world, i, j, k);
@@ -290,7 +294,7 @@ public class BlockRedstoneWire extends Block {
}
}
- public int a(int i, Random random) {
+ public int a(int i, Random random, int j) {
return Item.REDSTONE.id;
}
@@ -306,25 +310,25 @@ public class BlockRedstoneWire extends Block {
} else if (l == 1) {
return true;
} else {
- boolean flag = c(iblockaccess, i - 1, j, k, 1) || !iblockaccess.e(i - 1, j, k) && c(iblockaccess, i - 1, j - 1, k, -1);
- boolean flag1 = c(iblockaccess, i + 1, j, k, 3) || !iblockaccess.e(i + 1, j, k) && c(iblockaccess, i + 1, j - 1, k, -1);
- boolean flag2 = c(iblockaccess, i, j, k - 1, 2) || !iblockaccess.e(i, j, k - 1) && c(iblockaccess, i, j - 1, k - 1, -1);
- boolean flag3 = c(iblockaccess, i, j, k + 1, 0) || !iblockaccess.e(i, j, k + 1) && c(iblockaccess, i, j - 1, k + 1, -1);
+ boolean flag = d(iblockaccess, i - 1, j, k, 1) || !iblockaccess.e(i - 1, j, k) && d(iblockaccess, i - 1, j - 1, k, -1);
+ boolean flag1 = d(iblockaccess, i + 1, j, k, 3) || !iblockaccess.e(i + 1, j, k) && d(iblockaccess, i + 1, j - 1, k, -1);
+ boolean flag2 = d(iblockaccess, i, j, k - 1, 2) || !iblockaccess.e(i, j, k - 1) && d(iblockaccess, i, j - 1, k - 1, -1);
+ boolean flag3 = d(iblockaccess, i, j, k + 1, 0) || !iblockaccess.e(i, j, k + 1) && d(iblockaccess, i, j - 1, k + 1, -1);
if (!iblockaccess.e(i, j + 1, k)) {
- if (iblockaccess.e(i - 1, j, k) && c(iblockaccess, i - 1, j + 1, k, -1)) {
+ if (iblockaccess.e(i - 1, j, k) && d(iblockaccess, i - 1, j + 1, k, -1)) {
flag = true;
}
- if (iblockaccess.e(i + 1, j, k) && c(iblockaccess, i + 1, j + 1, k, -1)) {
+ if (iblockaccess.e(i + 1, j, k) && d(iblockaccess, i + 1, j + 1, k, -1)) {
flag1 = true;
}
- if (iblockaccess.e(i, j, k - 1) && c(iblockaccess, i, j + 1, k - 1, -1)) {
+ if (iblockaccess.e(i, j, k - 1) && d(iblockaccess, i, j + 1, k - 1, -1)) {
flag2 = true;
}
- if (iblockaccess.e(i, j, k + 1) && c(iblockaccess, i, j + 1, k + 1, -1)) {
+ if (iblockaccess.e(i, j, k + 1) && d(iblockaccess, i, j + 1, k + 1, -1)) {
flag3 = true;
}
}
@@ -344,14 +348,30 @@ public class BlockRedstoneWire extends Block {
return true;
} else if (i1 == 0) {
return false;
- } else if (Block.byId[i1].isPowerSource()) {
+ } else if (Block.byId[i1].isPowerSource() && l != -1) {
return true;
} else if (i1 != Block.DIODE_OFF.id && i1 != Block.DIODE_ON.id) {
return false;
} else {
int j1 = iblockaccess.getData(i, j, k);
- return l == Direction.e[j1 & 3];
+ return l == (j1 & 3) || l == Direction.e[j1 & 3];
+ }
+ }
+
+ public static boolean d(IBlockAccess iblockaccess, int i, int j, int k, int l) {
+ if (c(iblockaccess, i, j, k, l)) {
+ return true;
+ } else {
+ int i1 = iblockaccess.getTypeId(i, j, k);
+
+ if (i1 == Block.DIODE_ON.id) {
+ int j1 = iblockaccess.getData(i, j, k);
+
+ return l == (j1 & 3);
+ } else {
+ return false;
+ }
}
}
}
diff --git a/src/main/java/net/minecraft/server/BlockSand.java b/src/main/java/net/minecraft/server/BlockSand.java
index cc4ef57ed5..bc38fccbaf 100644
--- a/src/main/java/net/minecraft/server/BlockSand.java
+++ b/src/main/java/net/minecraft/server/BlockSand.java
@@ -11,30 +11,32 @@ public class BlockSand extends Block {
}
public void a(World world, int i, int j, int k) {
- world.c(i, j, k, this.id, this.c());
+ world.c(i, j, k, this.id, this.d());
}
public void doPhysics(World world, int i, int j, int k, int l) {
- world.c(i, j, k, this.id, this.c());
+ world.c(i, j, k, this.id, this.d());
}
public void a(World world, int i, int j, int k, Random random) {
- this.g(world, i, j, k);
+ this.h(world, i, j, k);
}
- private void g(World world, int i, int j, int k) {
- if (d_(world, i, j - 1, k) && j >= 0) {
+ private void h(World world, int i, int j, int k) {
+ if (g(world, i, j - 1, k) && j >= 0) {
byte b0 = 32;
if (!instaFall && world.a(i - b0, j - b0, k - b0, i + b0, j + b0, k + b0)) {
- // CraftBukkit Change call to add data
- EntityFallingSand entityfallingsand = new EntityFallingSand(world, (double) ((float) i + 0.5F), (double) ((float) j + 0.5F), (double) ((float) k + 0.5F), this.id, world.getData(i, j, k));
+ if (!world.isStatic) {
+ // CraftBukkit Change call to add data
+ EntityFallingSand entityfallingsand = new EntityFallingSand(world, (double) ((float) i + 0.5F), (double) ((float) j + 0.5F), (double) ((float) k + 0.5F), this.id, world.getData(i, j, k));
- world.addEntity(entityfallingsand);
+ world.addEntity(entityfallingsand);
+ }
} else {
world.setTypeId(i, j, k, 0);
- while (d_(world, i, j - 1, k) && j > 0) {
+ while (g(world, i, j - 1, k) && j > 0) {
--j;
}
@@ -45,11 +47,11 @@ public class BlockSand extends Block {
}
}
- public int c() {
+ public int d() {
return 3;
}
- public static boolean d_(World world, int i, int j, int k) {
+ public static boolean g(World world, int i, int j, int k) {
int l = world.getTypeId(i, j, k);
if (l == 0) {
diff --git a/src/main/java/net/minecraft/server/BlockSapling.java b/src/main/java/net/minecraft/server/BlockSapling.java
index 91b9efd865..4eccdee054 100644
--- a/src/main/java/net/minecraft/server/BlockSapling.java
+++ b/src/main/java/net/minecraft/server/BlockSapling.java
@@ -16,7 +16,7 @@ public class BlockSapling extends BlockFlower {
public void a(World world, int i, int j, int k, Random random) {
if (!world.isStatic) {
super.a(world, i, j, k, random);
- if (world.getLightLevel(i, j + 1, k) >= 9 && random.nextInt(30) == 0) {
+ if (world.getLightLevel(i, j + 1, k) >= 9 && random.nextInt(7) == 0) {
int l = world.getData(i, j, k);
if ((l & 8) == 0) {
@@ -42,15 +42,16 @@ public class BlockSapling extends BlockFlower {
boolean grownTree;
BlockChangeWithNotify delegate = new BlockChangeWithNotify(world);
+ // All of these are 'false' because we need the 'raw' calls so the block-delegate works
if (l == 1) {
- grownTree = new WorldGenTaiga2().generate(delegate, random, i, j, k);
+ grownTree = new WorldGenTaiga2(false).generate(delegate, random, i, j, k);
} else if (l == 2) {
- grownTree = new WorldGenForest().generate(delegate, random, i, j, k);
+ grownTree = new WorldGenForest(false).generate(delegate, random, i, j, k);
} else {
if (random.nextInt(10) == 0) {
- grownTree = new WorldGenBigTree().generate(delegate, random, i, j, k);
+ grownTree = new WorldGenBigTree(false).generate(delegate, random, i, j, k);
} else {
- grownTree = new WorldGenTrees().generate(delegate, random, i, j, k);
+ grownTree = new WorldGenTrees(false).generate(delegate, random, i, j, k);
}
}
@@ -60,7 +61,7 @@ public class BlockSapling extends BlockFlower {
// CraftBukkit end
}
- protected int a_(int i) {
+ protected int c(int i) {
return i & 3;
}
diff --git a/src/main/java/net/minecraft/server/BlockSign.java b/src/main/java/net/minecraft/server/BlockSign.java
index 7a2e8fb020..888b79f316 100644
--- a/src/main/java/net/minecraft/server/BlockSign.java
+++ b/src/main/java/net/minecraft/server/BlockSign.java
@@ -52,6 +52,10 @@ public class BlockSign extends BlockContainer {
}
}
+ public int c() {
+ return -1;
+ }
+
public boolean b() {
return false;
}
@@ -68,7 +72,7 @@ public class BlockSign extends BlockContainer {
}
}
- public int a(int i, Random random) {
+ public int a(int i, Random random, int j) {
return Item.SIGN.id;
}
@@ -101,7 +105,7 @@ public class BlockSign extends BlockContainer {
}
if (flag) {
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
}
diff --git a/src/main/java/net/minecraft/server/BlockSnow.java b/src/main/java/net/minecraft/server/BlockSnow.java
index bec1991925..24a327cdad 100644
--- a/src/main/java/net/minecraft/server/BlockSnow.java
+++ b/src/main/java/net/minecraft/server/BlockSnow.java
@@ -44,7 +44,7 @@ public class BlockSnow extends Block {
private boolean g(World world, int i, int j, int k) {
if (!this.canPlace(world, i, j, k)) {
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
return false;
} else {
@@ -66,7 +66,7 @@ public class BlockSnow extends Block {
entityhuman.a(StatisticList.C[this.id], 1);
}
- public int a(int i, Random random) {
+ public int a(int i, Random random, int j) {
return Item.SNOW_BALL.id;
}
@@ -82,7 +82,7 @@ public class BlockSnow extends Block {
}
// CraftBukkit end
- this.g(world, i, j, k, world.getData(i, j, k));
+ this.b(world, i, j, k, world.getData(i, j, k), 0);
world.setTypeId(i, j, k, 0);
}
}
diff --git a/src/main/java/net/minecraft/server/BlockSoil.java b/src/main/java/net/minecraft/server/BlockSoil.java
index 54509332f1..9afaf178e5 100644
--- a/src/main/java/net/minecraft/server/BlockSoil.java
+++ b/src/main/java/net/minecraft/server/BlockSoil.java
@@ -14,7 +14,7 @@ public class BlockSoil extends Block {
this.textureId = 87;
this.a(true);
this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.9375F, 1.0F);
- this.f(255);
+ this.g(255);
}
public AxisAlignedBB e(World world, int i, int j, int k) {
@@ -34,18 +34,16 @@ public class BlockSoil extends Block {
}
public void a(World world, int i, int j, int k, Random random) {
- if (random.nextInt(5) == 0) {
- if (!this.h(world, i, j, k) && !world.s(i, j + 1, k)) {
- int l = world.getData(i, j, k);
+ if (!this.h(world, i, j, k) && !world.v(i, j + 1, k)) {
+ int l = world.getData(i, j, k);
- if (l > 0) {
- world.setData(i, j, k, l - 1);
- } else if (!this.g(world, i, j, k)) {
- world.setTypeId(i, j, k, Block.DIRT.id);
- }
- } else {
- world.setData(i, j, k, 7);
+ if (l > 0) {
+ world.setData(i, j, k, l - 1);
+ } else if (!this.g(world, i, j, k)) {
+ world.setTypeId(i, j, k, Block.DIRT.id);
}
+ } else {
+ world.setData(i, j, k, 7);
}
}
@@ -108,7 +106,7 @@ public class BlockSoil extends Block {
}
}
- public int a(int i, Random random) {
- return Block.DIRT.a(0, random);
+ public int a(int i, Random random, int j) {
+ return Block.DIRT.a(0, random, j);
}
}
diff --git a/src/main/java/net/minecraft/server/BlockStairs.java b/src/main/java/net/minecraft/server/BlockStairs.java
index f3830cb1f1..66d2a6cce8 100644
--- a/src/main/java/net/minecraft/server/BlockStairs.java
+++ b/src/main/java/net/minecraft/server/BlockStairs.java
@@ -13,7 +13,7 @@ public class BlockStairs extends Block {
this.c(block.strength);
this.b(block.durability / 3.0F);
this.a(block.stepSound);
- this.f(255);
+ this.g(255);
}
public void a(IBlockAccess iblockaccess, int i, int j, int k) {
@@ -32,6 +32,10 @@ public class BlockStairs extends Block {
return false;
}
+ public int c() {
+ return 10;
+ }
+
public void a(World world, int i, int j, int k, AxisAlignedBB axisalignedbb, ArrayList arraylist) {
int l = world.getData(i, j, k);
@@ -72,14 +76,6 @@ public class BlockStairs extends Block {
return this.a.a(entity);
}
- public int a(int i, Random random) {
- return this.a.a(i, random);
- }
-
- public int a(Random random) {
- return this.a.a(random);
- }
-
public int a(int i, int j) {
return this.a.a(i, 0);
}
@@ -88,16 +84,16 @@ public class BlockStairs extends Block {
return this.a.a(i, 0);
}
- public int c() {
- return this.a.c();
+ public int d() {
+ return this.a.d();
}
public void a(World world, int i, int j, int k, Entity entity, Vec3D vec3d) {
this.a.a(world, i, j, k, entity, vec3d);
}
- public boolean q_() {
- return this.a.q_();
+ public boolean v_() {
+ return this.a.v_();
}
public boolean a(int i, boolean flag) {
@@ -117,8 +113,8 @@ public class BlockStairs extends Block {
this.a.remove(world, i, j, k);
}
- public void dropNaturally(World world, int i, int j, int k, int l, float f) {
- this.a.dropNaturally(world, i, j, k, 0, f); // CraftBukkit - don't propagate stair direction
+ public void dropNaturally(World world, int i, int j, int k, int l, float f, int i1) {
+ this.a.dropNaturally(world, i, j, k, 0, f, i1); // CraftBukkit - don't propagate stair direction
}
public void b(World world, int i, int j, int k, Entity entity) {
diff --git a/src/main/java/net/minecraft/server/BlockStationary.java b/src/main/java/net/minecraft/server/BlockStationary.java
index fd45ee70e1..1b091e700b 100644
--- a/src/main/java/net/minecraft/server/BlockStationary.java
+++ b/src/main/java/net/minecraft/server/BlockStationary.java
@@ -27,7 +27,7 @@ public class BlockStationary extends BlockFluids {
world.suppressPhysics = true;
world.setRawTypeIdAndData(i, j, k, this.id - 1, l);
world.b(i, j, k, i, j, k);
- world.c(i, j, k, this.id - 1, this.c());
+ world.c(i, j, k, this.id - 1, this.d());
world.suppressPhysics = false;
}
diff --git a/src/main/java/net/minecraft/server/BlockTrapdoor.java b/src/main/java/net/minecraft/server/BlockTrapdoor.java
index 52cbbcf824..153e896163 100644
--- a/src/main/java/net/minecraft/server/BlockTrapdoor.java
+++ b/src/main/java/net/minecraft/server/BlockTrapdoor.java
@@ -25,20 +25,30 @@ public class BlockTrapdoor extends Block {
return false;
}
+ public int c() {
+ return 0;
+ }
+
public AxisAlignedBB e(World world, int i, int j, int k) {
- this.a((IBlockAccess)world, i, j, k); // CraftBukkit - Make sure this points to the below method!
+ this.a(world, i, j, k);
return super.e(world, i, j, k);
}
public void a(IBlockAccess iblockaccess, int i, int j, int k) {
- this.c(iblockaccess.getData(i, j, k));
+ this.d(iblockaccess.getData(i, j, k));
}
- public void c(int i) {
+ public void f() {
+ float f = 0.1875F;
+
+ this.a(0.0F, 0.5F - f / 2.0F, 0.0F, 1.0F, 0.5F + f / 2.0F, 1.0F);
+ }
+
+ public void d(int i) {
float f = 0.1875F;
this.a(0.0F, 0.0F, 0.0F, 1.0F, f, 1.0F);
- if (d(i)) {
+ if (e(i)) {
if ((i & 3) == 0) {
this.a(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F);
}
@@ -105,9 +115,9 @@ public class BlockTrapdoor extends Block {
--j1;
}
- if (!world.e(j1, j, k1)) {
+ if (!f(world.getTypeId(j1, j, k1))) {
world.setTypeId(i, j, k, 0);
- this.g(world, i, j, k, i1);
+ this.b(world, i, j, k, i1, 0);
}
// CraftBukkit start
@@ -179,11 +189,21 @@ public class BlockTrapdoor extends Block {
--i;
}
- return world.e(i, j, k);
+ return f(world.getTypeId(i, j, k));
}
}
- public static boolean d(int i) {
+ public static boolean e(int i) {
return (i & 4) != 0;
}
+
+ private static boolean f(int i) {
+ if (i <= 0) {
+ return false;
+ } else {
+ Block block = Block.byId[i];
+
+ return block != null && block.material.j() && block.b() || block == Block.GLOWSTONE;
+ }
+ }
}
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 82955f656a..88d6917f01 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -7,7 +7,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
-import org.bukkit.Bukkit;
+import org.bukkit.Bukkit; // CraftBukkit
public class Chunk {
@@ -24,6 +24,7 @@ public class Chunk {
public int k;
public final int x;
public final int z;
+ private boolean v;
public Map tileEntities;
public List[] entitySlices;
public boolean done;
@@ -36,14 +37,14 @@ public class Chunk {
public Chunk(World world, int i, int j) {
this.c = new int[256];
this.d = new boolean[256];
+ this.v = false;
this.tileEntities = new HashMap();
this.done = false;
this.q = false;
this.s = false;
this.t = 0L;
this.u = false;
- world.getClass();
- this.entitySlices = new List[128 / 16];
+ this.entitySlices = new List[world.height / 16];
this.world = world;
this.x = i;
this.z = j;
@@ -71,14 +72,9 @@ public class Chunk {
public Chunk(World world, byte[] abyte, int i, int j) {
this(world, i, j);
this.b = abyte;
-
- 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
+ this.g = new NibbleArray(abyte.length, world.heightBits);
+ this.h = new NibbleArray(abyte.length, world.heightBits);
+ this.i = new NibbleArray(abyte.length, world.heightBits);
}
public boolean a(int i, int j) {
@@ -92,22 +88,18 @@ public class Chunk {
public void a() {}
public void initLighting() {
-
- int i = 128 - 1;
+ int i = this.world.height - 1;
int j;
int k;
for (j = 0; j < 16; ++j) {
for (k = 0; k < 16; ++k) {
+ int l = this.world.height - 1;
- int l = 128 - 1;
+ int i1;
- int i1 = j << 11;
-
- int j1;
-
- for (j1 = i1 | k << 7; l > 0 && Block.q[this.b[j1 + l - 1] & 255] == 0; --l) {
+ for (i1 = j << this.world.heightBitsPlusFour | k << this.world.heightBits; l > 0 && Block.q[this.b[i1 + l - 1] & 255] == 0; --l) {
;
}
@@ -117,18 +109,17 @@ public class Chunk {
}
if (!this.world.worldProvider.e) {
- int k1 = 15;
-
- int l1 = 128 - 1;
+ int j1 = 15;
+ int k1 = this.world.height - 1;
do {
- k1 -= Block.q[this.b[j1 + l1] & 255];
- if (k1 > 0) {
- this.h.a(j, l1, k, k1);
+ j1 -= Block.q[this.b[i1 + k1] & 255];
+ if (j1 > 0) {
+ this.h.a(j, k1, k, j1);
}
- --l1;
- } while (l1 > 0 && k1 > 0);
+ --k1;
+ } while (k1 > 0 && j1 > 0);
}
}
}
@@ -148,44 +139,41 @@ public class Chunk {
private void d(int i, int j) {
this.d[i + j * 16] = true;
+ this.v = true;
}
- private void i() {
- World j0000 = this.world;
- int j0001 = this.x * 16 + 8;
+ private void k() {
+ if (this.world.areChunksLoaded(this.x * 16 + 8, this.world.height / 2, this.z * 16 + 8, 16)) {
+ for (int i = 0; i < 16; ++i) {
+ for (int j = 0; j < 16; ++j) {
+ if (this.d[i + j * 16]) {
+ this.d[i + j * 16] = false;
+ int k = this.b(i, j);
+ int l = this.x * 16 + i;
+ int i1 = this.z * 16 + j;
+ int j1 = this.world.getHighestBlockYAt(l - 1, i1);
+ int k1 = this.world.getHighestBlockYAt(l + 1, i1);
+ int l1 = this.world.getHighestBlockYAt(l, i1 - 1);
+ int i2 = this.world.getHighestBlockYAt(l, i1 + 1);
- 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 (k1 < j1) {
+ j1 = k1;
}
- if (i2 < k1) {
- k1 = i2;
+ if (l1 < j1) {
+ j1 = l1;
}
- if (j2 < k1) {
- k1 = j2;
+ if (i2 < j1) {
+ j1 = i2;
}
- 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);
+ this.f(l, i1, j1);
+ this.f(l - 1, i1, k);
+ this.f(l + 1, i1, k);
+ this.f(l, i1 - 1, k);
+ this.f(l, i1 + 1, k);
+ this.v = false;
}
}
}
@@ -203,16 +191,12 @@ public class Chunk {
}
private void d(int i, int j, int k, int l) {
- if (l > k) {
- World world = this.world;
-
- 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;
+ if (l > k && this.world.areChunksLoaded(i, this.world.height / 2, j, 16)) {
+ for (int i1 = k; i1 < l; ++i1) {
+ this.world.b(EnumSkyBlock.SKY, i, i1, j);
}
+
+ this.q = true;
}
}
@@ -223,88 +207,87 @@ public class Chunk {
if (j > l) {
i1 = j;
}
- //
- this.world.getClass();
- int j1 = i << 11;
- for (int k1 = j1 | k << 7; i1 > 0 && Block.q[this.b[k1 + i1 - 1] & 255] == 0; --i1) {
+ for (int j1 = i << this.world.heightBitsPlusFour | k << this.world.heightBits; i1 > 0 && Block.q[this.b[j1 + 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.k) {
this.k = i1;
} else {
+ k1 = this.world.height - 1;
- l1 = 128 - 1;
-
- 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;
+ 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;
}
}
}
- this.k = l1;
+ this.k = k1;
}
- l1 = this.x * 16 + i;
- i2 = this.z * 16 + k;
- if (i1 < l) {
- for (j2 = i1; j2 < l; ++j2) {
- this.h.a(i, j2, k, 15);
- }
- } else {
- for (j2 = l; j2 < i1; ++j2) {
- this.h.a(i, j2, k, 0);
- }
- }
+ k1 = this.x * 16 + i;
+ l1 = this.z * 16 + k;
+ int j2;
- for (j2 = 15; i1 > 0 && j2 > 0; this.h.a(i, i1, k, j2)) {
- --i1;
- int k2 = Block.q[this.getTypeId(i, i1, k)];
-
- if (k2 == 0) {
- k2 = 1;
+ if (!this.world.worldProvider.e) {
+ if (i1 < l) {
+ for (i2 = i1; i2 < l; ++i2) {
+ this.h.a(i, i2, k, 15);
+ }
+ } else {
+ for (i2 = l; i2 < i1; ++i2) {
+ this.h.a(i, i2, k, 0);
+ }
}
- j2 -= k2;
- if (j2 < 0) {
- j2 = 0;
+ for (i2 = 15; i1 > 0 && i2 > 0; this.h.a(i, i1, k, i2)) {
+ --i1;
+ j2 = Block.q[this.getTypeId(i, i1, k)];
+ if (j2 == 0) {
+ j2 = 1;
+ }
+
+ i2 -= j2;
+ if (i2 < 0) {
+ i2 = 0;
+ }
}
}
byte b0 = this.heightMap[k << 4 | i];
- int l2 = l;
- int i3 = b0;
+
+ j2 = l;
+ int k2 = b0;
if (b0 < l) {
- l2 = b0;
- i3 = l;
+ j2 = b0;
+ k2 = l;
+ }
+
+ if (!this.world.worldProvider.e) {
+ this.d(k1 - 1, l1, j2, k2);
+ this.d(k1 + 1, l1, j2, k2);
+ this.d(k1, l1 - 1, j2, k2);
+ this.d(k1, l1 + 1, j2, k2);
+ this.d(k1, l1, j2, k2);
}
- 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) {
- byte[] abyte = this.b;
-
- int l = i << 11;
-
- return abyte[l | k << 7 | j] & 255;
+ return this.b[i << this.world.heightBitsPlusFour | k << this.world.heightBits | j] & 255;
}
public boolean a(int i, int j, int k, int l, int i1) {
@@ -316,25 +299,21 @@ public class Chunk {
}
int k1 = this.heightMap[k << 4 | i] & 255;
- byte[] j2000 = this.b;
+ int l1 = this.b[i << this.world.heightBitsPlusFour | k << this.world.heightBits | j] & 255;
- int j2001 = i << 11;
-
- int i2 = j2000[j2001 | k << 7 | j] & 255;
-
- if (i2 == l && this.g.a(i, j, k) == i1) {
+ if (l1 == l && this.g.a(i, j, k) == i1) {
return false;
} else {
- int j2 = this.x * 16 + i;
- int k2 = this.z * 16 + k;
+ int i2 = this.x * 16 + i;
+ int j2 = this.z * 16 + k;
- j2000 = this.b;
-
- j2001 = i << 11;
-
- j2000[j2001 | k << 7 | j] = (byte) (b0 & 255);
- if (i2 != 0 && !this.world.isStatic) {
- Block.byId[i2].remove(this.world, j2, j, k2);
+ this.b[i << this.world.heightBitsPlusFour | k << this.world.heightBits | j] = (byte) (b0 & 255);
+ if (l1 != 0) {
+ if (!this.world.isStatic) {
+ Block.byId[l1].remove(this.world, i2, j, j2);
+ } else if (Block.byId[l1] instanceof BlockContainer) {
+ this.world.n(i2, j, j2);
+ }
}
this.g.a(i, j, k, i1);
@@ -347,17 +326,17 @@ public class Chunk {
this.g(i, j, k);
}
- this.world.a(EnumSkyBlock.SKY, j2, j, k2, j2, j, k2);
+ this.world.a(EnumSkyBlock.SKY, i2, j, j2, i2, j, j2);
}
- this.world.a(EnumSkyBlock.BLOCK, j2, j, k2, j2, j, k2);
+ this.world.a(EnumSkyBlock.BLOCK, i2, j, j2, i2, j, j2);
this.d(i, k);
this.g.a(i, j, k, i1);
TileEntity tileentity;
if (l != 0) {
if (!this.world.isStatic) {
- Block.byId[l].a(this.world, j2, j, k2);
+ Block.byId[l].a(this.world, i2, j, j2);
}
if (Block.byId[l] instanceof BlockContainer) {
@@ -368,13 +347,13 @@ public class Chunk {
}
if (tileentity != null) {
- tileentity.g();
+ tileentity.d();
}
}
- } else if (i2 > 0 && Block.byId[i2] instanceof BlockContainer) {
+ } else if (l1 > 0 && Block.byId[l1] instanceof BlockContainer) {
tileentity = this.d(i, j, k);
if (tileentity != null) {
- tileentity.g();
+ tileentity.d();
}
}
@@ -392,25 +371,17 @@ public class Chunk {
}
int j1 = this.heightMap[i1] & 255;
- byte[] j2000 = this.b;
+ int k1 = this.b[i << this.world.heightBitsPlusFour | k << this.world.heightBits | j] & 255;
- int j2001 = i << 11;
-
- int l1 = j2000[j2001 | k << 7 | j] & 255;
-
- if (l1 == l) {
+ if (k1 == l) {
return false;
} else {
- int i2 = this.x * 16 + i;
- int j2 = this.z * 16 + k;
+ int l1 = this.x * 16 + i;
+ int i2 = this.z * 16 + k;
- j2000 = this.b;
-
- j2001 = i << 11;
-
- j2000[j2001 | k << 7 | j] = (byte) (b0 & 255);
- if (l1 != 0) {
- Block.byId[l1].remove(this.world, i2, j, j2);
+ this.b[i << this.world.heightBitsPlusFour | k << this.world.heightBits | j] = (byte) (b0 & 255);
+ if (k1 != 0) {
+ Block.byId[k1].remove(this.world, l1, j, i2);
}
this.g.a(i, j, k, 0);
@@ -422,14 +393,14 @@ public class Chunk {
this.g(i, j, k);
}
- this.world.a(EnumSkyBlock.SKY, i2, j, j2, i2, j, j2);
- this.world.a(EnumSkyBlock.BLOCK, i2, j, j2, i2, j, j2);
+ this.world.a(EnumSkyBlock.SKY, l1, j, i2, l1, j, i2);
+ this.world.a(EnumSkyBlock.BLOCK, l1, j, i2, l1, j, i2);
this.d(i, k);
TileEntity tileentity;
if (l != 0) {
if (!this.world.isStatic) {
- Block.byId[l].a(this.world, i2, j, j2);
+ Block.byId[l].a(this.world, l1, j, i2);
}
if (l > 0 && Block.byId[l] instanceof BlockContainer) {
@@ -440,13 +411,13 @@ public class Chunk {
}
if (tileentity != null) {
- tileentity.g();
+ tileentity.d();
}
}
- } else if (l1 > 0 && Block.byId[l1] instanceof BlockContainer) {
+ } else if (k1 > 0 && Block.byId[k1] instanceof BlockContainer) {
tileentity = this.d(i, j, k);
if (tileentity != null) {
- tileentity.g();
+ tileentity.d();
}
}
@@ -459,18 +430,26 @@ public class Chunk {
return this.g.a(i, j, k);
}
- public void b(int i, int j, int k, int l) {
+ public boolean b(int i, int j, int k, int l) {
this.q = true;
- this.g.a(i, j, k, l);
- int i1 = this.getTypeId(i, j, k);
+ int i1 = this.g.a(i, j, k);
- if (i1 > 0 && Block.byId[i1] instanceof BlockContainer) {
- TileEntity tileentity = this.d(i, j, k);
+ if (i1 == l) {
+ return false;
+ } else {
+ this.g.a(i, j, k, l);
+ int j1 = this.getTypeId(i, j, k);
- if (tileentity != null) {
- tileentity.g();
- tileentity.n = l;
+ if (j1 > 0 && Block.byId[j1] instanceof BlockContainer) {
+ TileEntity tileentity = this.d(i, j, k);
+
+ if (tileentity != null) {
+ tileentity.d();
+ tileentity.p = l;
+ }
}
+
+ return true;
}
}
@@ -481,7 +460,9 @@ public class Chunk {
public void a(EnumSkyBlock enumskyblock, int i, int j, int k, int l) {
this.q = true;
if (enumskyblock == EnumSkyBlock.SKY) {
- this.h.a(i, j, k, l);
+ if (!this.world.worldProvider.e) {
+ this.h.a(i, j, k, l);
+ }
} else {
if (enumskyblock != EnumSkyBlock.BLOCK) {
return;
@@ -492,7 +473,7 @@ public class Chunk {
}
public int c(int i, int j, int k, int l) {
- int i1 = this.h.a(i, j, k);
+ int i1 = this.world.worldProvider.e ? 0 : this.h.a(i, j, k);
if (i1 > 0) {
a = true;
@@ -531,15 +512,15 @@ public class Chunk {
k = this.entitySlices.length - 1;
}
- entity.bV = true;
- entity.bW = this.x;
- entity.bX = k;
- entity.bY = this.z;
+ entity.bW = true;
+ entity.bX = this.x;
+ entity.bY = k;
+ entity.bZ = this.z;
this.entitySlices[k].add(entity);
}
public void b(Entity entity) {
- this.a(entity, entity.bX);
+ this.a(entity, entity.bY);
}
public void a(Entity entity, int i) {
@@ -577,7 +558,7 @@ public class Chunk {
tileentity = (TileEntity) this.tileEntities.get(chunkposition);
}
- if (tileentity != null && tileentity.m()) {
+ if (tileentity != null && tileentity.l()) {
this.tileEntities.remove(chunkposition);
return null;
} else {
@@ -604,10 +585,10 @@ 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.n();
+ tileentity.m();
this.tileEntities.put(chunkposition, tileentity);
+ // CraftBukkit start
} else {
- // CraftBukkit start
System.out.println("Attempted to place a tile entity (" + tileentity + ") at " + tileentity.x + "," + tileentity.y + "," + tileentity.z
+ " (" + org.bukkit.Material.getMaterial(getTypeId(i, j, k)) + ") where there was no entity tile!");
// CraftBukkit end
@@ -689,6 +670,16 @@ public class Chunk {
if (entity1 != entity && entity1.boundingBox.a(axisalignedbb)) {
list.add(entity1);
+ Entity[] aentity = entity1.aG();
+
+ if (aentity != null) {
+ for (int i1 = 0; i1 < aentity.length; ++i1) {
+ entity1 = aentity[i1];
+ if (entity1 != entity && entity1.boundingBox.a(axisalignedbb)) {
+ list.add(entity1);
+ }
+ }
+ }
}
}
}
@@ -700,10 +691,14 @@ public class Chunk {
if (i < 0) {
i = 0;
+ } else if (i >= this.entitySlices.length) {
+ i = this.entitySlices.length - 1;
}
if (j >= this.entitySlices.length) {
j = this.entitySlices.length - 1;
+ } else if (j < 0) {
+ j = 0;
}
for (int k = i; k <= j; ++k) {
@@ -755,53 +750,40 @@ public class Chunk {
int l2;
int i3;
int j3;
- int k3;
for (k2 = i; k2 < l; ++k2) {
- for (i3 = k; i3 < j1; ++i3) {
-
- l2 = k2 << 11;
-
- j3 = l2 | i3 << 7 | j;
- k3 = i1 - j;
- System.arraycopy(this.b, j3, abyte, k1, k3);
- k1 += k3;
+ for (l2 = k; l2 < j1; ++l2) {
+ i3 = k2 << this.world.heightBitsPlusFour | l2 << this.world.heightBits | j;
+ j3 = i1 - j;
+ System.arraycopy(this.b, i3, abyte, k1, j3);
+ k1 += j3;
}
}
for (k2 = i; k2 < l; ++k2) {
- for (i3 = k; i3 < j1; ++i3) {
-
- l2 = k2 << 11;
-
- j3 = (l2 | i3 << 7 | j) >> 1;
- k3 = (i1 - j) / 2;
- System.arraycopy(this.g.a, j3, abyte, k1, k3);
- k1 += k3;
+ for (l2 = k; l2 < j1; ++l2) {
+ i3 = (k2 << this.world.heightBitsPlusFour | l2 << this.world.heightBits | j) >> 1;
+ j3 = (i1 - j) / 2;
+ System.arraycopy(this.g.a, i3, abyte, k1, j3);
+ k1 += j3;
}
}
for (k2 = i; k2 < l; ++k2) {
- for (i3 = k; i3 < j1; ++i3) {
-
- l2 = k2 << 11;
-
- j3 = (l2 | i3 << 7 | j) >> 1;
- k3 = (i1 - j) / 2;
- System.arraycopy(this.i.a, j3, abyte, k1, k3);
- k1 += k3;
+ for (l2 = k; l2 < j1; ++l2) {
+ i3 = (k2 << this.world.heightBitsPlusFour | l2 << this.world.heightBits | j) >> 1;
+ j3 = (i1 - j) / 2;
+ System.arraycopy(this.i.a, i3, abyte, k1, j3);
+ k1 += j3;
}
}
for (k2 = i; k2 < l; ++k2) {
- for (i3 = k; i3 < j1; ++i3) {
-
- l2 = k2 << 11;
-
- j3 = (l2 | i3 << 7 | j) >> 1;
- k3 = (i1 - j) / 2;
- System.arraycopy(this.h.a, j3, abyte, k1, k3);
- k1 += k3;
+ for (l2 = k; l2 < j1; ++l2) {
+ i3 = (k2 << this.world.heightBitsPlusFour | l2 << this.world.heightBits | j) >> 1;
+ j3 = (i1 - j) / 2;
+ System.arraycopy(this.h.a, i3, abyte, k1, j3);
+ k1 += j3;
}
}
@@ -813,7 +795,11 @@ 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 void g() {
+ public boolean isEmpty() {
+ return false;
+ }
+
+ public void h() {
BlockRegister.a(this.b);
}
@@ -840,8 +826,7 @@ public class Chunk {
int l = this.c[k];
if (l == -999) {
-
- int i1 = 128 - 1;
+ int i1 = this.world.height - 1;
l = -1;
@@ -862,7 +847,13 @@ public class Chunk {
return l;
}
- public void h() {
- this.i();
+ public void i() {
+ if (this.v && !this.world.worldProvider.e) {
+ this.k();
+ }
+ }
+
+ public ChunkCoordIntPair j() {
+ return new ChunkCoordIntPair(this.x, this.z);
}
}
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
index 4aef10cb70..36351951ab 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
@@ -31,11 +31,7 @@ public class ChunkProviderServer implements IChunkProvider {
// CraftBukkit end
public ChunkProviderServer(WorldServer worldserver, IChunkLoader ichunkloader, IChunkProvider ichunkprovider) {
-
- worldserver.getClass();
- EmptyChunk emptychunk = new EmptyChunk(worldserver, new byte[256 * 128], 0, 0);
-
- this.emptyChunk = emptychunk;
+ this.emptyChunk = new EmptyChunk(worldserver, new byte[256 * worldserver.height], 0, 0);
this.world = worldserver;
this.e = ichunkloader;
this.chunkProvider = ichunkprovider;
@@ -46,12 +42,16 @@ public class ChunkProviderServer implements IChunkProvider {
}
public void queueUnload(int i, int j) {
- ChunkCoordinates chunkcoordinates = this.world.getSpawn();
- int k = i * 16 + 8 - chunkcoordinates.x;
- int l = j * 16 + 8 - chunkcoordinates.z;
- short short1 = 128;
+ if (this.world.worldProvider.c()) {
+ ChunkCoordinates chunkcoordinates = this.world.getSpawn();
+ int k = i * 16 + 8 - chunkcoordinates.x;
+ int l = j * 16 + 8 - chunkcoordinates.z;
+ short short1 = 128;
- if (k < -short1 || k > short1 || l < -short1 || l > short1 || !(this.world.keepSpawnInMemory)) { // CraftBukkit - added 'this.world.keepSpawnInMemory'
+ if (k < -short1 || k > short1 || l < -short1 || l > short1 || !(this.world.keepSpawnInMemory)) { // CraftBukkit - added 'this.world.keepSpawnInMemory'
+ this.unloadQueue.add(i, j); // CraftBukkit
+ }
+ } else {
this.unloadQueue.add(i, j); // CraftBukkit
}
}
@@ -253,4 +253,12 @@ public class ChunkProviderServer implements IChunkProvider {
public boolean canSave() {
return !this.world.savingDisabled;
}
+
+ public List a(EnumCreatureType enumcreaturetype, int i, int j, int k) {
+ return this.chunkProvider.a(enumcreaturetype, i, j, k);
+ }
+
+ public ChunkPosition a(World world, String s, int i, int j, int k) {
+ return this.chunkProvider.a(world, s, i, j, k);
+ }
}
diff --git a/src/main/java/net/minecraft/server/ContainerPlayer.java b/src/main/java/net/minecraft/server/ContainerPlayer.java
index aa13bc7b1b..96f006e7f2 100644
--- a/src/main/java/net/minecraft/server/ContainerPlayer.java
+++ b/src/main/java/net/minecraft/server/ContainerPlayer.java
@@ -77,7 +77,7 @@ public class ContainerPlayer extends Container {
ItemStack itemstack = null;
Slot slot = (Slot) this.e.get(i);
- if (slot != null && slot.b()) {
+ if (slot != null && slot.c()) {
ItemStack itemstack1 = slot.getItem();
itemstack = itemstack1.cloneItemStack();
@@ -100,14 +100,14 @@ public class ContainerPlayer extends Container {
if (itemstack1.count == 0) {
slot.c((ItemStack) null);
} else {
- slot.c();
+ slot.d();
}
if (itemstack1.count == itemstack.count) {
return null;
}
- slot.a(itemstack1);
+ slot.b(itemstack1);
}
return itemstack;
diff --git a/src/main/java/net/minecraft/server/ContainerWorkbench.java b/src/main/java/net/minecraft/server/ContainerWorkbench.java
index f0e29fa0a5..3f62b82dbe 100644
--- a/src/main/java/net/minecraft/server/ContainerWorkbench.java
+++ b/src/main/java/net/minecraft/server/ContainerWorkbench.java
@@ -72,7 +72,7 @@ public class ContainerWorkbench extends Container {
ItemStack itemstack = null;
Slot slot = (Slot) this.e.get(i);
- if (slot != null && slot.b()) {
+ if (slot != null && slot.c()) {
ItemStack itemstack1 = slot.getItem();
itemstack = itemstack1.cloneItemStack();
@@ -95,14 +95,14 @@ public class ContainerWorkbench extends Container {
if (itemstack1.count == 0) {
slot.c((ItemStack) null);
} else {
- slot.c();
+ slot.d();
}
if (itemstack1.count == itemstack.count) {
return null;
}
- slot.a(itemstack1);
+ slot.b(itemstack1);
}
return itemstack;
diff --git a/src/main/java/net/minecraft/server/CraftingManager.java b/src/main/java/net/minecraft/server/CraftingManager.java
index 7a01145f73..c306818bd3 100644
--- a/src/main/java/net/minecraft/server/CraftingManager.java
+++ b/src/main/java/net/minecraft/server/CraftingManager.java
@@ -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.NETHER_FENCE, 6), new Object[] { "###", "###", Character.valueOf('#'), Block.NETHER_BRICK});
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});
@@ -53,10 +54,13 @@ public class CraftingManager {
this.registerShapedRecipe(new ItemStack(Block.TORCH, 4), new Object[] { "X", "#", Character.valueOf('X'), Item.COAL, Character.valueOf('#'), Item.STICK});
this.registerShapedRecipe(new ItemStack(Block.TORCH, 4), new Object[] { "X", "#", Character.valueOf('X'), new ItemStack(Item.COAL, 1, 1), Character.valueOf('#'), Item.STICK});
this.registerShapedRecipe(new ItemStack(Item.BOWL, 4), new Object[] { "# #", " # ", Character.valueOf('#'), Block.WOOD});
+ this.registerShapedRecipe(new ItemStack(Item.GLASS_BOTTLE, 3), new Object[] { "# #", " # ", Character.valueOf('#'), Block.GLASS});
this.registerShapedRecipe(new ItemStack(Block.RAILS, 16), new Object[] { "X X", "X#X", "X X", Character.valueOf('X'), Item.IRON_INGOT, Character.valueOf('#'), Item.STICK});
this.registerShapedRecipe(new ItemStack(Block.GOLDEN_RAIL, 6), new Object[] { "X X", "X#X", "XRX", Character.valueOf('X'), Item.GOLD_INGOT, Character.valueOf('R'), Item.REDSTONE, Character.valueOf('#'), Item.STICK});
this.registerShapedRecipe(new ItemStack(Block.DETECTOR_RAIL, 6), new Object[] { "X X", "X#X", "XRX", Character.valueOf('X'), Item.IRON_INGOT, Character.valueOf('R'), Item.REDSTONE, Character.valueOf('#'), Block.STONE_PLATE});
this.registerShapedRecipe(new ItemStack(Item.MINECART, 1), new Object[] { "# #", "###", Character.valueOf('#'), Item.IRON_INGOT});
+ this.registerShapedRecipe(new ItemStack(Item.CAULDRON, 1), new Object[] { "# #", "# #", "###", Character.valueOf('#'), Item.IRON_INGOT});
+ this.registerShapedRecipe(new ItemStack(Item.BREWING_STAND, 1), new Object[] { " B ", "###", Character.valueOf('#'), Block.COBBLESTONE, Character.valueOf('B'), Item.BLAZE_ROD});
this.registerShapedRecipe(new ItemStack(Block.JACK_O_LANTERN, 1), new Object[] { "A", "B", Character.valueOf('A'), Block.PUMPKIN, Character.valueOf('B'), Block.TORCH});
this.registerShapedRecipe(new ItemStack(Item.STORAGE_MINECART, 1), new Object[] { "A", "B", Character.valueOf('A'), Block.CHEST, Character.valueOf('B'), Item.MINECART});
this.registerShapedRecipe(new ItemStack(Item.POWERED_MINECART, 1), new Object[] { "A", "B", Character.valueOf('A'), Block.FURNACE, Character.valueOf('B'), Item.MINECART});
@@ -69,6 +73,7 @@ public class CraftingManager {
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(Block.NETHER_BRICK_STAIRS, 4), new Object[] { "# ", "## ", "###", Character.valueOf('#'), Block.NETHER_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});
@@ -84,6 +89,8 @@ public class CraftingManager {
this.registerShapedRecipe(new ItemStack(Block.PISTON, 1), new Object[] { "TTT", "#X#", "#R#", Character.valueOf('#'), Block.COBBLESTONE, Character.valueOf('X'), Item.IRON_INGOT, Character.valueOf('R'), Item.REDSTONE, Character.valueOf('T'), Block.WOOD});
this.registerShapedRecipe(new ItemStack(Block.PISTON_STICKY, 1), new Object[] { "S", "P", Character.valueOf('S'), Item.SLIME_BALL, Character.valueOf('P'), Block.PISTON});
this.registerShapedRecipe(new ItemStack(Item.BED, 1), new Object[] { "###", "XXX", Character.valueOf('#'), Block.WOOL, Character.valueOf('X'), Block.WOOD});
+ this.registerShapedRecipe(new ItemStack(Block.ENCHANTMENT_TABLE, 1), new Object[] { " B ", "D#D", "###", Character.valueOf('#'), Block.OBSIDIAN, Character.valueOf('B'), Item.BOOK, Character.valueOf('D'), Item.DIAMOND});
+ this.registerShapelessRecipe(new ItemStack(Item.EYE_OF_ENDER, 1), new Object[] { Item.ENDER_PEARL, Item.BLAZE_POWDER});
Collections.sort(this.b, new RecipeSorter(this));
System.out.println(this.b.size() + " recipes");
}
@@ -171,15 +178,51 @@ public class CraftingManager {
}
public ItemStack craft(InventoryCrafting inventorycrafting) {
- for (int i = 0; i < this.b.size(); ++i) {
- CraftingRecipe craftingrecipe = (CraftingRecipe) this.b.get(i);
+ int i = 0;
+ ItemStack itemstack = null;
+ ItemStack itemstack1 = null;
- if (craftingrecipe.a(inventorycrafting)) {
- return craftingrecipe.b(inventorycrafting);
+ int j;
+
+ for (j = 0; j < inventorycrafting.getSize(); ++j) {
+ ItemStack itemstack2 = inventorycrafting.getItem(j);
+
+ if (itemstack2 != null) {
+ if (i == 0) {
+ itemstack = itemstack2;
+ }
+
+ if (i == 1) {
+ itemstack1 = itemstack2;
+ }
+
+ ++i;
}
}
- return null;
+ if (i == 2 && itemstack.id == itemstack1.id && itemstack.count == 1 && itemstack1.count == 1 && Item.byId[itemstack.id].g()) {
+ Item item = Item.byId[itemstack.id];
+ int k = item.getMaxDurability() - itemstack.g();
+ int l = item.getMaxDurability() - itemstack1.g();
+ int i1 = k + l + item.getMaxDurability() * 10 / 100;
+ int j1 = item.getMaxDurability() - i1;
+
+ if (j1 < 0) {
+ j1 = 0;
+ }
+
+ return new ItemStack(itemstack.id, 1, j1);
+ } else {
+ for (j = 0; j < this.b.size(); ++j) {
+ CraftingRecipe craftingrecipe = (CraftingRecipe) this.b.get(j);
+
+ if (craftingrecipe.a(inventorycrafting)) {
+ return craftingrecipe.b(inventorycrafting);
+ }
+ }
+
+ return null;
+ }
}
public List b() {
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 38e407bf53..2625ad3540 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -22,8 +22,8 @@ public abstract class Entity {
private static int entityCount = 0;
public int id;
- public double aX;
- public boolean aY;
+ public double bb;
+ public boolean bc;
public Entity passenger;
public Entity vehicle;
public World world;
@@ -43,83 +43,82 @@ public abstract class Entity {
public final AxisAlignedBB boundingBox;
public boolean onGround;
public boolean positionChanged;
- public boolean bs;
- public boolean bt;
- public boolean velocityChanged;
- protected boolean bv;
public boolean bw;
+ public boolean bx;
+ public boolean velocityChanged;
+ protected boolean bz;
+ public boolean bA;
public boolean dead;
public float height;
public float length;
public float width;
- public float bB;
- public float bC;
+ public float bF;
+ public float bG;
public float fallDistance; // CraftBukkit - private -> public
private int b;
- public double bE;
- public double bF;
- public double bG;
- public float bH;
- public float bI;
- public boolean bJ;
- public float bK;
+ public double bI;
+ public double bJ;
+ public double bK;
+ public float bL;
+ public float bM;
+ public boolean bN;
+ public float bO;
protected Random random;
public int ticksLived;
public int maxFireTicks;
- public int fireTicks;
- public int maxAirTicks; // CraftBukkit - protected - >public
- protected boolean bQ;
+ public int fireTicks; // CraftBukkit - private -> public
+ public int maxAirTicks; // CraftBukkit - protected -> public
+ protected boolean bS;
public int noDamageTicks;
public int airTicks;
private boolean justCreated;
protected boolean fireProof;
protected DataWatcher datawatcher;
- private double d;
private double e;
- public boolean bV;
- public int bW;
+ private double f;
+ public boolean bW;
public int bX;
public int bY;
- public boolean bZ;
+ public int bZ;
public boolean ca;
+ public boolean cb;
public UUID uniqueId = UUID.randomUUID(); // CraftBukkit
public Entity(World world) {
this.id = entityCount++;
- this.aX = 1.0D;
- this.aY = false;
+ this.bb = 1.0D;
+ this.bc = false;
this.boundingBox = AxisAlignedBB.a(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
this.onGround = false;
- this.bt = false;
+ this.bx = false;
this.velocityChanged = false;
- this.bw = true;
+ this.bA = true;
this.dead = false;
this.height = 0.0F;
this.length = 0.6F;
this.width = 1.8F;
- this.bB = 0.0F;
- this.bC = 0.0F;
+ this.bF = 0.0F;
+ this.bG = 0.0F;
this.fallDistance = 0.0F;
this.b = 1;
- this.bH = 0.0F;
- this.bI = 0.0F;
- this.bJ = false;
- this.bK = 0.0F;
+ this.bL = 0.0F;
+ this.bM = 0.0F;
+ this.bN = false;
+ this.bO = 0.0F;
this.random = new Random();
this.ticksLived = 0;
this.maxFireTicks = 1;
this.fireTicks = 0;
- this.maxAirTicks = 300;
- this.bQ = false;
+ this.bS = false;
this.noDamageTicks = 0;
- this.airTicks = 300;
this.justCreated = true;
this.fireProof = false;
this.datawatcher = new DataWatcher();
- this.bV = false;
+ this.bW = false;
this.world = world;
this.setPosition(0.0D, 0.0D, 0.0D);
this.datawatcher.a(0, Byte.valueOf((byte) 0));
+ this.datawatcher.a(1, Short.valueOf((short) 300));
this.b();
}
@@ -185,20 +184,21 @@ 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.bH, d2 - (double) f, d0 + (double) f, d1 - (double) this.height + (double) this.bH + (double) f1, d2 + (double) f);
+ this.boundingBox.c(d0 - (double) f, d1 - (double) this.height + (double) this.bL, d2 - (double) f, d0 + (double) f, d1 - (double) this.height + (double) this.bL + (double) f1, d2 + (double) f);
}
- public void s_() {
- this.aa();
+ public void w_() {
+ this.af();
}
- public void aa() {
+ public void af() {
+ MethodProfiler.a("entityBaseTick");
if (this.vehicle != null && this.vehicle.dead) {
this.vehicle = null;
}
++this.ticksLived;
- this.bB = this.bC;
+ this.bF = this.bG;
this.lastX = this.locX;
this.lastY = this.locY;
this.lastZ = this.locZ;
@@ -218,8 +218,8 @@ public abstract class Entity {
}
}
- if (this.f_()) {
- if (!this.bQ && !this.justCreated) {
+ if (this.i_()) {
+ if (!this.bS && !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) {
@@ -246,10 +246,10 @@ public abstract class Entity {
}
this.fallDistance = 0.0F;
- this.bQ = true;
+ this.bS = true;
this.fireTicks = 0;
} else {
- this.bQ = false;
+ this.bS = false;
}
if (this.world.isStatic) {
@@ -280,12 +280,13 @@ public abstract class Entity {
}
}
- if (this.ap()) {
- this.am();
+ if (this.aA()) {
+ this.av();
+ this.fallDistance *= 0.5F;
}
if (this.locY < -64.0D) {
- this.ah();
+ this.ao();
}
if (!this.world.isStatic) {
@@ -294,9 +295,10 @@ public abstract class Entity {
}
this.justCreated = false;
+ MethodProfiler.a();
}
- protected void am() {
+ protected void av() {
if (!this.fireProof) {
// CraftBukkit start - TODO: this event spams!
if (this instanceof EntityLiving) {
@@ -319,22 +321,33 @@ public abstract class Entity {
server.getPluginManager().callEvent(combustEvent);
if (!combustEvent.isCancelled()) {
- this.fireTicks = 600;
+ this.j(15);
}
} else {
- // reset fire level back to max
- this.fireTicks = 600;
+ this.j(15);
}
return;
}
// CraftBukkit end
this.damageEntity(DamageSource.LAVA, 4);
- this.fireTicks = 600;
+ this.j(15);
}
}
- protected void ah() {
+ public void j(int i) {
+ int j = i * 20;
+
+ if (this.fireTicks < j) {
+ this.fireTicks = j;
+ }
+ }
+
+ public void aw() {
+ this.fireTicks = 0;
+ }
+
+ protected void ao() {
this.die();
}
@@ -346,18 +359,19 @@ public abstract class Entity {
}
public void move(double d0, double d1, double d2) {
- if (this.bJ) {
+ if (this.bN) {
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.bH;
+ this.locY = this.boundingBox.b + (double) this.height - (double) this.bL;
this.locZ = (this.boundingBox.c + this.boundingBox.f) / 2.0D;
} else {
- this.bH *= 0.4F;
+ MethodProfiler.a("move");
+ this.bL *= 0.4F;
double d3 = this.locX;
double d4 = this.locZ;
- if (this.bv) {
- this.bv = false;
+ if (this.bz) {
+ this.bz = false;
d0 *= 0.25D;
d1 *= 0.05000000074505806D;
d2 *= 0.25D;
@@ -403,7 +417,7 @@ public abstract class Entity {
}
this.boundingBox.d(0.0D, d1, 0.0D);
- if (!this.bw && d6 != d1) {
+ if (!this.bA && d6 != d1) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
@@ -418,7 +432,7 @@ public abstract class Entity {
}
this.boundingBox.d(d0, 0.0D, 0.0D);
- if (!this.bw && d5 != d0) {
+ if (!this.bA && d5 != d0) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
@@ -429,7 +443,7 @@ public abstract class Entity {
}
this.boundingBox.d(0.0D, 0.0D, d2);
- if (!this.bw && d7 != d2) {
+ if (!this.bA && d7 != d2) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
@@ -439,13 +453,13 @@ public abstract class Entity {
double d10;
int k;
- if (this.bI > 0.0F && flag1 && (flag || this.bH < 0.05F) && (d5 != d0 || d7 != d2)) {
+ if (this.bM > 0.0F && flag1 && (flag || this.bL < 0.05F) && (d5 != d0 || d7 != d2)) {
d9 = d0;
d10 = d1;
double d11 = d2;
d0 = d5;
- d1 = (double) this.bI;
+ d1 = (double) this.bM;
d2 = d7;
AxisAlignedBB axisalignedbb1 = this.boundingBox.clone();
@@ -457,7 +471,7 @@ public abstract class Entity {
}
this.boundingBox.d(0.0D, d1, 0.0D);
- if (!this.bw && d6 != d1) {
+ if (!this.bA && d6 != d1) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
@@ -468,7 +482,7 @@ public abstract class Entity {
}
this.boundingBox.d(d0, 0.0D, 0.0D);
- if (!this.bw && d5 != d0) {
+ if (!this.bA && d5 != d0) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
@@ -479,18 +493,18 @@ public abstract class Entity {
}
this.boundingBox.d(0.0D, 0.0D, d2);
- if (!this.bw && d7 != d2) {
+ if (!this.bA && d7 != d2) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
}
- if (!this.bw && d6 != d1) {
+ if (!this.bA && d6 != d1) {
d2 = 0.0D;
d1 = 0.0D;
d0 = 0.0D;
} else {
- d1 = (double) (-this.bI);
+ d1 = (double) (-this.bM);
for (k = 0; k < list.size(); ++k) {
d1 = ((AxisAlignedBB) list.get(k)).b(this.boundingBox, d1);
@@ -508,18 +522,20 @@ public abstract class Entity {
double d12 = this.boundingBox.b - (double) ((int) this.boundingBox.b);
if (d12 > 0.0D) {
- this.bH = (float) ((double) this.bH + d12 + 0.01D);
+ this.bL = (float) ((double) this.bL + d12 + 0.01D);
}
}
}
+ MethodProfiler.a();
+ MethodProfiler.a("rest");
this.locX = (this.boundingBox.a + this.boundingBox.d) / 2.0D;
- this.locY = this.boundingBox.b + (double) this.height - (double) this.bH;
+ this.locY = this.boundingBox.b + (double) this.height - (double) this.bL;
this.locZ = (this.boundingBox.c + this.boundingBox.f) / 2.0D;
this.positionChanged = d5 != d0 || d7 != d2;
- this.bs = d6 != d1;
+ this.bw = d6 != d1;
this.onGround = d6 != d1 && d6 < 0.0D;
- this.bt = this.positionChanged || this.bs;
+ this.bx = this.positionChanged || this.bw;
this.a(d1, this.onGround);
if (d5 != d0) {
this.motX = 0.0D;
@@ -559,27 +575,19 @@ public abstract class Entity {
}
// CraftBukkit end
- if (this.e_() && !flag && this.vehicle == null) {
- this.bC = (float) ((double) this.bC + (double) MathHelper.a(d9 * d9 + d10 * d10) * 0.6D);
+ if (this.g_() && !flag && this.vehicle == null) {
+ this.bG = (float) ((double) this.bG + (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);
k = this.world.getTypeId(l, i1, j1);
- if (this.world.getTypeId(l, i1 - 1, j1) == Block.FENCE.id) {
+ if (k == 0 && this.world.getTypeId(l, i1 - 1, j1) == Block.FENCE.id) {
k = this.world.getTypeId(l, i1 - 1, j1);
}
- 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) {
- stepsound = Block.SNOW.stepSound;
- this.world.makeSound(this, stepsound.getName(), stepsound.getVolume1() * 0.15F, stepsound.getVolume2());
- } else if (!Block.byId[k].material.isLiquid()) {
- this.world.makeSound(this, stepsound.getName(), stepsound.getVolume1() * 0.15F, stepsound.getVolume2());
- }
-
+ if (this.bG > (float) this.b && k > 0) {
+ this.b = (int) this.bG + 1;
+ this.a(l, i1, j1, k);
Block.byId[k].b(this.world, l, i1, j1, this);
}
}
@@ -605,7 +613,7 @@ public abstract class Entity {
}
}
- boolean flag2 = this.an();
+ boolean flag2 = this.ay();
if (this.world.d(this.boundingBox.shrink(0.0010D, 0.0010D, 0.0010D))) {
this.burn(1);
@@ -617,11 +625,11 @@ public abstract class Entity {
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
- this.fireTicks = 300;
+ this.j(8);
}
} else {
- // CraftBukkit end - reset fire level back to max
- this.fireTicks = 300;
+ // CraftBukkit end
+ this.j(8);
}
}
} else if (this.fireTicks <= 0) {
@@ -632,17 +640,30 @@ public abstract class Entity {
this.world.makeSound(this, "random.fizz", 0.7F, 1.6F + (this.random.nextFloat() - this.random.nextFloat()) * 0.4F);
this.fireTicks = -this.maxFireTicks;
}
+
+ MethodProfiler.a();
}
}
- protected boolean e_() {
+ protected void a(int i, int j, int k, int l) {
+ StepSound stepsound = Block.byId[l].stepSound;
+
+ if (this.world.getTypeId(i, j + 1, k) == Block.SNOW.id) {
+ stepsound = Block.SNOW.stepSound;
+ this.world.makeSound(this, stepsound.getName(), stepsound.getVolume1() * 0.15F, stepsound.getVolume2());
+ } else if (!Block.byId[l].material.isLiquid()) {
+ this.world.makeSound(this, stepsound.getName(), stepsound.getVolume1() * 0.15F, stepsound.getVolume2());
+ }
+ }
+
+ protected boolean g_() {
return true;
}
protected void a(double d0, boolean flag) {
if (flag) {
if (this.fallDistance > 0.0F) {
- this.a(this.fallDistance);
+ this.b(this.fallDistance);
this.fallDistance = 0.0F;
}
} else if (d0 < 0.0D) {
@@ -650,7 +671,7 @@ public abstract class Entity {
}
}
- public AxisAlignedBB f() {
+ public AxisAlignedBB h_() {
return null;
}
@@ -672,33 +693,37 @@ public abstract class Entity {
}
}
- protected void a(float f) {
+ public final boolean ax() {
+ return this.fireProof;
+ }
+
+ protected void b(float f) {
if (this.passenger != null) {
- this.passenger.a(f);
+ this.passenger.b(f);
}
}
- public boolean an() {
- return this.bQ || this.world.s(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ));
+ public boolean ay() {
+ return this.bS || this.world.v(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ));
}
- public boolean ao() {
- return this.bQ;
+ public boolean az() {
+ return this.bS;
}
- public boolean f_() {
+ public boolean i_() {
return this.world.a(this.boundingBox.b(0.0D, -0.4000000059604645D, 0.0D).shrink(0.0010D, 0.0010D, 0.0010D), Material.WATER, this);
}
public boolean a(Material material) {
- double d0 = this.locY + (double) this.t();
+ double d0 = this.locY + (double) this.x();
int i = MathHelper.floor(this.locX);
int j = MathHelper.d((float) MathHelper.floor(d0));
int k = MathHelper.floor(this.locZ);
int l = this.world.getTypeId(i, j, k);
if (l != 0 && Block.byId[l].material == material) {
- float f = BlockFluids.c(this.world.getData(i, j, k)) - 0.11111111F;
+ float f = BlockFluids.d(this.world.getData(i, j, k)) - 0.11111111F;
float f1 = (float) (j + 1) - f;
return d0 < (double) f1;
@@ -707,11 +732,11 @@ public abstract class Entity {
}
}
- public float t() {
+ public float x() {
return 0.0F;
}
- public boolean ap() {
+ public boolean aA() {
return this.world.a(this.boundingBox.b(-0.10000000149011612D, -0.4000000059604645D, -0.10000000149011612D), Material.LAVA);
}
@@ -734,12 +759,11 @@ public abstract class Entity {
}
}
- public float a_(float f) {
+ public float a(float f) {
int i = MathHelper.floor(this.locX);
int j = MathHelper.floor(this.locZ);
- World world = this.world;
- if (world.isLoaded(i, 128 / 2, j)) {
+ if (this.world.isLoaded(i, this.world.height / 2, j)) {
double d0 = (this.boundingBox.e - this.boundingBox.b) * 0.66D;
int k = MathHelper.floor(this.locY - (double) this.height + d0);
@@ -766,7 +790,7 @@ public abstract class Entity {
this.lastZ = this.locZ = d2;
this.lastYaw = this.yaw = f;
this.lastPitch = this.pitch = f1;
- this.bH = 0.0F;
+ this.bL = 0.0F;
double d3 = (double) (this.lastYaw - f);
if (d3 < -180.0D) {
@@ -782,15 +806,15 @@ public abstract class Entity {
}
public void setPositionRotation(double d0, double d1, double d2, float f, float f1) {
- 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.bI = this.lastX = this.locX = d0;
+ this.bJ = this.lastY = this.locY = d1 + (double) this.height;
+ this.bK = this.lastZ = this.locZ = d2;
this.yaw = f;
this.pitch = f1;
this.setPosition(this.locX, this.locY, this.locZ);
}
- public float g(Entity entity) {
+ public float h(Entity entity) {
float f = (float) (this.locX - entity.locX);
float f1 = (float) (this.locY - entity.locY);
float f2 = (float) (this.locZ - entity.locZ);
@@ -814,7 +838,7 @@ public abstract class Entity {
return (double) MathHelper.a(d3 * d3 + d4 * d4 + d5 * d5);
}
- public double h(Entity entity) {
+ public double i(Entity entity) {
double d0 = this.locX - entity.locX;
double d1 = this.locY - entity.locY;
double d2 = this.locZ - entity.locZ;
@@ -844,42 +868,42 @@ public abstract class Entity {
d1 *= d3;
d0 *= 0.05000000074505806D;
d1 *= 0.05000000074505806D;
- d0 *= (double) (1.0F - this.bK);
- d1 *= (double) (1.0F - this.bK);
- this.b(-d0, 0.0D, -d1);
- entity.b(d0, 0.0D, d1);
+ d0 *= (double) (1.0F - this.bO);
+ d1 *= (double) (1.0F - this.bO);
+ this.b_(-d0, 0.0D, -d1);
+ entity.b_(d0, 0.0D, d1);
}
}
}
- public void b(double d0, double d1, double d2) {
+ public void b_(double d0, double d1, double d2) {
this.motX += d0;
this.motY += d1;
this.motZ += d2;
- this.ca = true;
+ this.cb = true;
}
- protected void aq() {
+ protected void aB() {
this.velocityChanged = true;
}
public boolean damageEntity(DamageSource damagesource, int i) {
- this.aq();
+ this.aB();
return false;
}
- public boolean r_() {
+ public boolean e_() {
return false;
}
- public boolean g() {
+ public boolean f_() {
return false;
}
public void b(Entity entity, int i) {}
public boolean c(NBTTagCompound nbttagcompound) {
- String s = this.ar();
+ String s = this.aC();
if (!this.dead && s != null) {
nbttagcompound.setString("id", s);
@@ -891,7 +915,7 @@ public abstract class Entity {
}
public void d(NBTTagCompound nbttagcompound) {
- nbttagcompound.a("Pos", (NBTBase) this.a(new double[] { this.locX, this.locY + (double) this.bH, this.locZ}));
+ nbttagcompound.a("Pos", (NBTBase) this.a(new double[] { this.locX, this.locY + (double) this.bL, 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
@@ -908,7 +932,7 @@ public abstract class Entity {
nbttagcompound.a("Rotation", (NBTBase) this.a(new float[] { this.yaw, this.pitch}));
nbttagcompound.a("FallDistance", this.fallDistance);
nbttagcompound.a("Fire", (short) this.fireTicks);
- nbttagcompound.a("Air", (short) this.airTicks);
+ nbttagcompound.a("Air", (short) this.getAirTicks());
nbttagcompound.a("OnGround", this.onGround);
// CraftBukkit start
nbttagcompound.setLong("WorldUUIDLeast", this.world.getUUID().getLeastSignificantBits());
@@ -920,9 +944,9 @@ public abstract class Entity {
}
public void e(NBTTagCompound nbttagcompound) {
- NBTTagList nbttaglist = nbttagcompound.l("Pos");
- NBTTagList nbttaglist1 = nbttagcompound.l("Motion");
- NBTTagList nbttaglist2 = nbttagcompound.l("Rotation");
+ NBTTagList nbttaglist = nbttagcompound.m("Pos");
+ NBTTagList nbttaglist1 = nbttagcompound.m("Motion");
+ NBTTagList nbttaglist2 = nbttagcompound.m("Rotation");
this.motX = ((NBTTagDouble) nbttaglist1.a(0)).a;
this.motY = ((NBTTagDouble) nbttaglist1.a(1)).a;
@@ -941,15 +965,15 @@ public abstract class Entity {
}
// CraftBukkit end */
- 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.lastX = this.bI = this.locX = ((NBTTagDouble) nbttaglist.a(0)).a;
+ this.lastY = this.bJ = this.locY = ((NBTTagDouble) nbttaglist.a(1)).a;
+ this.lastZ = this.bK = 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");
- this.fireTicks = nbttagcompound.d("Fire");
- this.airTicks = nbttagcompound.d("Air");
- this.onGround = nbttagcompound.m("OnGround");
+ this.fallDistance = nbttagcompound.h("FallDistance");
+ this.fireTicks = nbttagcompound.e("Fire");
+ this.setAirTicks(nbttagcompound.e("Air"));
+ this.onGround = nbttagcompound.n("OnGround");
this.setPosition(this.locX, this.locY, this.locZ);
// CraftBukkit start
@@ -1004,7 +1028,7 @@ public abstract class Entity {
// CraftBukkit end
}
- protected final String ar() {
+ protected final String aC() {
return EntityTypes.b(this);
}
@@ -1020,7 +1044,7 @@ public abstract class Entity {
for (int j = 0; j < i; ++j) {
double d0 = adouble1[j];
- nbttaglist.a((NBTBase) (new NBTTagDouble(d0)));
+ nbttaglist.a((NBTBase) (new NBTTagDouble((String) null, d0)));
}
return nbttaglist;
@@ -1034,7 +1058,7 @@ public abstract class Entity {
for (int j = 0; j < i; ++j) {
float f = afloat1[j];
- nbttaglist.a((NBTBase) (new NBTTagFloat(f)));
+ nbttaglist.a((NBTBase) (new NBTTagFloat((String) null, f)));
}
return nbttaglist;
@@ -1056,17 +1080,17 @@ public abstract class Entity {
return entityitem;
}
- public boolean ac() {
+ public boolean aj() {
return !this.dead;
}
- public boolean O() {
+ public boolean T() {
for (int i = 0; i < 8; ++i) {
- float f = ((float) ((i >> 0) % 2) - 0.5F) * this.length * 0.9F;
+ float f = ((float) ((i >> 0) % 2) - 0.5F) * this.length * 0.8F;
float f1 = ((float) ((i >> 1) % 2) - 0.5F) * 0.1F;
- float f2 = ((float) ((i >> 2) % 2) - 0.5F) * this.length * 0.9F;
+ float f2 = ((float) ((i >> 2) % 2) - 0.5F) * this.length * 0.8F;
int j = MathHelper.floor(this.locX + (double) f);
- int k = MathHelper.floor(this.locY + (double) this.t() + (double) f1);
+ int k = MathHelper.floor(this.locY + (double) this.x() + (double) f1);
int l = MathHelper.floor(this.locZ + (double) f2);
if (this.world.e(j, k, l)) {
@@ -1081,40 +1105,40 @@ public abstract class Entity {
return false;
}
- public AxisAlignedBB b(Entity entity) {
+ public AxisAlignedBB a_(Entity entity) {
return null;
}
- public void I() {
+ public void M() {
if (this.vehicle.dead) {
this.vehicle = null;
} else {
this.motX = 0.0D;
this.motY = 0.0D;
this.motZ = 0.0D;
- this.s_();
+ this.w_();
if (this.vehicle != null) {
- this.vehicle.g_();
- this.e += (double) (this.vehicle.yaw - this.vehicle.lastYaw);
+ this.vehicle.i();
+ this.f += (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) {
+ for (this.e += (double) (this.vehicle.pitch - this.vehicle.lastPitch); this.f >= 180.0D; this.f -= 360.0D) {
;
}
+ while (this.f < -180.0D) {
+ this.f += 360.0D;
+ }
+
+ while (this.e >= 180.0D) {
+ this.e -= 360.0D;
+ }
+
while (this.e < -180.0D) {
this.e += 360.0D;
}
- while (this.d >= 180.0D) {
- this.d -= 360.0D;
- }
-
- while (this.d < -180.0D) {
- this.d += 360.0D;
- }
-
- double d0 = this.e * 0.5D;
- double d1 = this.d * 0.5D;
+ double d0 = this.f * 0.5D;
+ double d1 = this.e * 0.5D;
float f = 10.0F;
if (d0 > (double) f) {
@@ -1133,23 +1157,23 @@ public abstract class Entity {
d1 = (double) (-f);
}
- this.e -= d0;
- this.d -= d1;
+ this.f -= d0;
+ this.e -= d1;
this.yaw = (float) ((double) this.yaw + d0);
this.pitch = (float) ((double) this.pitch + d1);
}
}
}
- public void g_() {
- this.passenger.setPosition(this.locX, this.locY + this.n() + this.passenger.M(), this.locZ);
+ public void i() {
+ this.passenger.setPosition(this.locX, this.locY + this.q() + this.passenger.R(), this.locZ);
}
- public double M() {
+ public double R() {
return (double) this.height;
}
- public double n() {
+ public double q() {
return (double) this.width * 0.75D;
}
@@ -1172,8 +1196,8 @@ public abstract class Entity {
// so this method is needed
// CraftBukkit end
- this.d = 0.0D;
this.e = 0.0D;
+ this.f = 0.0D;
if (entity == null) {
if (this.vehicle != null) {
// CraftBukkit start
@@ -1213,18 +1237,26 @@ public abstract class Entity {
}
}
- public Vec3D ai() {
+ public float j_() {
+ return 0.1F;
+ }
+
+ public Vec3D ap() {
return null;
}
- public void T() {}
+ public void Y() {}
public ItemStack[] getEquipment() {
return null;
}
+ public boolean z() {
+ return this.fireTicks > 0 || this.k(0);
+ }
+
public boolean isSneaking() {
- return this.e(1);
+ return this.k(1);
}
public void setSneak(boolean flag) {
@@ -1232,18 +1264,18 @@ public abstract class Entity {
}
public boolean isSprinting() {
- return this.e(3);
+ return this.k(3);
}
public void setSprinting(boolean flag) {
this.a(3, flag);
}
- public void h(boolean flag) {
+ public void g(boolean flag) {
this.a(4, flag);
}
- protected boolean e(int i) {
+ protected boolean k(int i) {
return (this.datawatcher.getByte(0) & 1 << i) != 0;
}
@@ -1257,6 +1289,14 @@ public abstract class Entity {
}
}
+ public int getAirTicks() {
+ return this.datawatcher.b(1);
+ }
+
+ public void setAirTicks(int i) {
+ this.datawatcher.watch(1, Short.valueOf((short) i));
+ }
+
public void a(EntityWeatherStorm entityweatherstorm) {
// CraftBukkit start
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(entityweatherstorm.getBukkitEntity(), this.getBukkitEntity(), EntityDamageEvent.DamageCause.LIGHTNING, 5);
@@ -1271,7 +1311,7 @@ public abstract class Entity {
++this.fireTicks;
if (this.fireTicks == 0) {
- this.fireTicks = 300;
+ this.j(8);
}
}
@@ -1350,16 +1390,18 @@ public abstract class Entity {
if (b0 == 5) {
this.motZ = (double) f;
}
+
+ return true;
+ } else {
+ return false;
}
-
- return false;
}
- public void q() {
- this.bv = true;
+ public void s() {
+ this.bz = true;
}
- public String Y() {
+ public String ad() {
String s = EntityTypes.b(this);
if (s == null) {
@@ -1368,4 +1410,12 @@ public abstract class Entity {
return StatisticCollector.a("entity." + s + ".name");
}
+
+ public Entity[] aG() {
+ return null;
+ }
+
+ public boolean a(Entity entity) {
+ return this == entity;
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityArrow.java b/src/main/java/net/minecraft/server/EntityArrow.java
index 3c6f9ad2a6..22b8c20538 100644
--- a/src/main/java/net/minecraft/server/EntityArrow.java
+++ b/src/main/java/net/minecraft/server/EntityArrow.java
@@ -43,7 +43,7 @@ public class EntityArrow extends Entity {
this.shooter = entityliving;
this.fromPlayer = entityliving instanceof EntityHuman;
this.b(0.5F, 0.5F);
- this.setPositionRotation(entityliving.locX, entityliving.locY + (double) entityliving.t(), entityliving.locZ, entityliving.yaw, entityliving.pitch);
+ this.setPositionRotation(entityliving.locX, entityliving.locY + (double) entityliving.x(), entityliving.locZ, entityliving.yaw, entityliving.pitch);
this.locX -= (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * 0.16F);
this.locY -= 0.10000000149011612D;
this.locZ -= (double) (MathHelper.sin(this.yaw / 180.0F * 3.1415927F) * 0.16F);
@@ -79,8 +79,8 @@ public class EntityArrow extends Entity {
this.k = 0;
}
- public void s_() {
- super.s_();
+ public void w_() {
+ super.w_();
if (this.lastPitch == 0.0F && this.lastYaw == 0.0F) {
float f = MathHelper.a(this.motX * this.motX + this.motZ * this.motZ);
@@ -142,7 +142,7 @@ public class EntityArrow extends Entity {
for (k = 0; k < list.size(); ++k) {
Entity entity1 = (Entity) list.get(k);
- if (entity1.r_() && (entity1 != this.shooter || this.l >= 5)) {
+ if (entity1.e_() && (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);
@@ -174,7 +174,15 @@ public class EntityArrow extends Entity {
int l = (int) Math.ceil((double) f2 * 2.0D);
if (this.d) {
- l = l * 3 / 2 + 1;
+ l += this.random.nextInt(l / 2 + 2);
+ }
+
+ DamageSource damagesource = null;
+
+ if (this.shooter == null) {
+ damagesource = DamageSource.arrow(this, this);
+ } else {
+ damagesource = DamageSource.arrow(this, this.shooter);
}
// CraftBukkit start
@@ -196,18 +204,18 @@ 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(DamageSource.arrow(this, this.shooter), event.getDamage());
+ stick = movingobjectposition.entity.damageEntity(damagesource, event.getDamage());
}
} else {
- stick = movingobjectposition.entity.damageEntity(DamageSource.arrow(this, this.shooter), l);
+ stick = movingobjectposition.entity.damageEntity(damagesource, l);
}
if (stick) {
// CraftBukkit end
if (movingobjectposition.entity instanceof EntityLiving) {
- ++((EntityLiving) movingobjectposition.entity).aD;
+ ++((EntityLiving) movingobjectposition.entity).aH;
}
- this.world.makeSound(this, "random.drr", 1.0F, 1.2F / (this.random.nextFloat() * 0.2F + 0.9F));
+ this.world.makeSound(this, "random.bowhit", 1.0F, 1.2F / (this.random.nextFloat() * 0.2F + 0.9F));
this.die();
} else {
this.motX *= -0.10000000149011612D;
@@ -230,7 +238,7 @@ public class EntityArrow extends Entity {
this.locX -= this.motX / (double) f2 * 0.05000000074505806D;
this.locY -= this.motY / (double) f2 * 0.05000000074505806D;
this.locZ -= this.motZ / (double) f2 * 0.05000000074505806D;
- this.world.makeSound(this, "random.drr", 1.0F, 1.2F / (this.random.nextFloat() * 0.2F + 0.9F));
+ this.world.makeSound(this, "random.bowhit", 1.0F, 1.2F / (this.random.nextFloat() * 0.2F + 0.9F));
this.inGround = true;
this.shake = 7;
this.d = false;
@@ -270,7 +278,7 @@ public class EntityArrow extends Entity {
float f3 = 0.99F;
f1 = 0.05F;
- if (this.ao()) {
+ if (this.az()) {
for (int i1 = 0; i1 < 4; ++i1) {
float f4 = 0.25F;
@@ -300,14 +308,14 @@ public class EntityArrow extends Entity {
}
public void a(NBTTagCompound nbttagcompound) {
- 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");
+ this.e = nbttagcompound.e("xTile");
+ this.f = nbttagcompound.e("yTile");
+ this.g = nbttagcompound.e("zTile");
+ this.h = nbttagcompound.d("inTile") & 255;
+ this.i = nbttagcompound.d("inData") & 255;
+ this.shake = nbttagcompound.d("shake") & 255;
+ this.inGround = nbttagcompound.d("inGround") == 1;
+ this.fromPlayer = nbttagcompound.n("player");
}
public void a_(EntityHuman entityhuman) {
diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java
index d959ed36b1..9bdbae6bf2 100644
--- a/src/main/java/net/minecraft/server/EntityBoat.java
+++ b/src/main/java/net/minecraft/server/EntityBoat.java
@@ -16,15 +16,12 @@ import org.bukkit.event.vehicle.VehicleUpdateEvent;
public class EntityBoat extends Entity {
- public int damage;
- public int b;
- public int c;
- private int d;
+ private int a;
+ private double b;
+ private double c;
+ private double d;
private double e;
private double f;
- private double g;
- private double h;
- private double i;
// CraftBukkit start
public double maxSpeed = 0.4D;
@@ -49,29 +46,30 @@ public class EntityBoat extends Entity {
public EntityBoat(World world) {
super(world);
- this.damage = 0;
- this.b = 0;
- this.c = 1;
- this.aY = true;
+ this.bc = true;
this.b(1.5F, 0.6F);
this.height = this.width / 2.0F;
}
- protected boolean e_() {
+ protected boolean g_() {
return false;
}
- protected void b() {}
+ protected void b() {
+ this.datawatcher.a(17, new Integer(0));
+ this.datawatcher.a(18, new Integer(1));
+ this.datawatcher.a(19, new Integer(0));
+ }
- public AxisAlignedBB b(Entity entity) {
+ public AxisAlignedBB a_(Entity entity) {
return entity.boundingBox;
}
- public AxisAlignedBB f() {
+ public AxisAlignedBB h_() {
return this.boundingBox;
}
- public boolean g() {
+ public boolean f_() {
return true;
}
@@ -88,7 +86,7 @@ public class EntityBoat extends Entity {
this.world.getServer().getPluginManager().callEvent(new VehicleCreateEvent((Vehicle) this.getBukkitEntity())); // CraftBukkit
}
- public double n() {
+ public double q() {
return (double) this.width * 0.0D - 0.30000001192092896D;
}
@@ -107,18 +105,17 @@ public class EntityBoat extends Entity {
// i = event.getDamage(); // TODO Why don't we do this?
// CraftBukkit end
- this.c = -this.c;
- this.b = 10;
- this.damage += i * 10;
- this.aq();
- if (this.damage > 40) {
-
+ this.d(-this.l());
+ this.c(10);
+ this.setDamage(this.getDamage() + i * 10);
+ this.aB();
+ if (this.getDamage() > 40) {
// CraftBukkit start
VehicleDestroyEvent destroyEvent = new VehicleDestroyEvent(vehicle, attacker);
this.world.getServer().getPluginManager().callEvent(destroyEvent);
if (destroyEvent.isCancelled()) {
- this.damage = 40; // Maximize damage so this doesn't get triggered again right away
+ this.setDamage(40); // Maximize damage so this doesn't get triggered again right away
return true;
}
// CraftBukkit end
@@ -146,11 +143,11 @@ public class EntityBoat extends Entity {
}
}
- public boolean r_() {
+ public boolean e_() {
return !this.dead;
}
- public void s_() {
+ public void w_() {
// CraftBukkit start
double prevX = this.locX;
double prevY = this.locY;
@@ -159,13 +156,13 @@ public class EntityBoat extends Entity {
float prevPitch = this.pitch;
// CraftBukkit end
- super.s_();
- if (this.b > 0) {
- --this.b;
+ super.w_();
+ if (this.k() > 0) {
+ this.c(this.k() - 1);
}
- if (this.damage > 0) {
- --this.damage;
+ if (this.getDamage() > 0) {
+ this.setDamage(this.getDamage() - 1);
}
this.lastX = this.locX;
@@ -184,35 +181,59 @@ public class EntityBoat extends Entity {
}
}
- double d3;
+ double d3 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
double d4;
double d5;
- double d6;
+
+ if (d3 > 0.15D) {
+ d4 = Math.cos((double) this.yaw * 3.141592653589793D / 180.0D);
+ d5 = Math.sin((double) this.yaw * 3.141592653589793D / 180.0D);
+
+ for (int j = 0; (double) j < 1.0D + d3 * 60.0D; ++j) {
+ double d6 = (double) (this.random.nextFloat() * 2.0F - 1.0F);
+ double d7 = (double) (this.random.nextInt(2) * 2 - 1) * 0.7D;
+ double d8;
+ double d9;
+
+ if (this.random.nextBoolean()) {
+ d8 = this.locX - d4 * d6 * 0.8D + d5 * d7;
+ d9 = this.locZ - d5 * d6 * 0.8D - d4 * d7;
+ this.world.a("splash", d8, this.locY - 0.125D, d9, this.motX, this.motY, this.motZ);
+ } else {
+ d8 = this.locX + d4 + d5 * d6 * 0.7D;
+ d9 = this.locZ + d5 - d4 * d6 * 0.7D;
+ this.world.a("splash", d8, this.locY - 0.125D, d9, this.motX, this.motY, this.motZ);
+ }
+ }
+ }
+
+ double d10;
+ double d11;
if (this.world.isStatic) {
- if (this.d > 0) {
- d3 = this.locX + (this.e - this.locX) / (double) this.d;
- d4 = this.locY + (this.f - this.locY) / (double) this.d;
- d5 = this.locZ + (this.g - this.locZ) / (double) this.d;
+ if (this.a > 0) {
+ d4 = this.locX + (this.b - this.locX) / (double) this.a;
+ d5 = this.locY + (this.c - this.locY) / (double) this.a;
+ d10 = this.locZ + (this.d - this.locZ) / (double) this.a;
- for (d6 = this.h - (double) this.yaw; d6 < -180.0D; d6 += 360.0D) {
+ for (d11 = this.e - (double) this.yaw; d11 < -180.0D; d11 += 360.0D) {
;
}
- while (d6 >= 180.0D) {
- d6 -= 360.0D;
+ while (d11 >= 180.0D) {
+ d11 -= 360.0D;
}
- this.yaw = (float) ((double) this.yaw + d6 / (double) this.d);
- this.pitch = (float) ((double) this.pitch + (this.i - (double) this.pitch) / (double) this.d);
- --this.d;
- this.setPosition(d3, d4, d5);
+ this.yaw = (float) ((double) this.yaw + d11 / (double) this.a);
+ this.pitch = (float) ((double) this.pitch + (this.f - (double) this.pitch) / (double) this.a);
+ --this.a;
+ this.setPosition(d4, d5, d10);
this.c(this.yaw, this.pitch);
} else {
- d3 = this.locX + this.motX;
- d4 = this.locY + this.motY;
- d5 = this.locZ + this.motZ;
- this.setPosition(d3, d4, d5);
+ d4 = this.locX + this.motX;
+ d5 = this.locY + this.motY;
+ d10 = this.locZ + this.motZ;
+ this.setPosition(d4, d5, d10);
if (this.onGround) {
this.motX *= 0.5D;
this.motY *= 0.5D;
@@ -225,8 +246,8 @@ public class EntityBoat extends Entity {
}
} else {
if (d0 < 1.0D) {
- d3 = d0 * 2.0D - 1.0D;
- this.motY += 0.03999999910593033D * d3;
+ d4 = d0 * 2.0D - 1.0D;
+ this.motY += 0.03999999910593033D * d4;
} else {
if (this.motY < 0.0D) {
this.motY /= 2.0D;
@@ -254,21 +275,21 @@ public class EntityBoat extends Entity {
// CraftBukkit end
// CraftBukkit
- d3 = this.maxSpeed;
- if (this.motX < -d3) {
- this.motX = -d3;
+ d4 = this.maxSpeed;
+ if (this.motX < -d4) {
+ this.motX = -d4;
}
- if (this.motX > d3) {
- this.motX = d3;
+ if (this.motX > d4) {
+ this.motX = d4;
}
- if (this.motZ < -d3) {
- this.motZ = -d3;
+ if (this.motZ < -d4) {
+ this.motZ = -d4;
}
- if (this.motZ > d3) {
- this.motZ = d3;
+ if (this.motZ > d4) {
+ this.motZ = d4;
}
if (this.onGround && !landBoats) { // CraftBukkit
@@ -278,30 +299,7 @@ public class EntityBoat extends Entity {
}
this.move(this.motX, this.motY, this.motZ);
- d4 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
- if (d4 > 0.15D) {
- d5 = Math.cos((double) this.yaw * 3.141592653589793D / 180.0D);
- d6 = Math.sin((double) this.yaw * 3.141592653589793D / 180.0D);
-
- for (int j = 0; (double) j < 1.0D + d4 * 60.0D; ++j) {
- double d7 = (double) (this.random.nextFloat() * 2.0F - 1.0F);
- double d8 = (double) (this.random.nextInt(2) * 2 - 1) * 0.7D;
- double d9;
- double d10;
-
- if (this.random.nextBoolean()) {
- d9 = this.locX - d5 * d7 * 0.8D + d6 * d8;
- d10 = this.locZ - d6 * d7 * 0.8D - d5 * d8;
- this.world.a("splash", d9, this.locY - 0.125D, d10, this.motX, this.motY, this.motZ);
- } else {
- d9 = this.locX + d5 + d6 * d7 * 0.7D;
- d10 = this.locZ + d6 - d5 * d7 * 0.7D;
- this.world.a("splash", d9, this.locY - 0.125D, d10, this.motX, this.motY, this.motZ);
- }
- }
- }
-
- if (this.positionChanged && d4 > 0.15D) {
+ if (this.positionChanged && d3 > 0.2D) {
if (!this.world.isStatic) {
// CraftBukkit start
Vehicle vehicle = (Vehicle) this.getBukkitEntity();
@@ -321,7 +319,7 @@ public class EntityBoat extends Entity {
for (k = 0; k < 2; ++k) {
this.a(Item.STICK.id, 1, 0.0F);
}
- }// CraftBukkit
+ } // CraftBukkit
}
} else {
this.motX *= 0.9900000095367432D;
@@ -331,11 +329,10 @@ public class EntityBoat extends Entity {
this.pitch = 0.0F;
d5 = (double) this.yaw;
- d6 = this.lastX - this.locX;
- double d11 = this.lastZ - this.locZ;
-
- if (d6 * d6 + d11 * d11 > 0.0010D) {
- d5 = (double) ((float) (Math.atan2(d11, d6) * 180.0D / 3.141592653589793D));
+ d10 = this.lastX - this.locX;
+ d11 = this.lastZ - this.locZ;
+ if (d10 * d10 + d11 * d11 > 0.0010D) {
+ d5 = (double) ((float) (Math.atan2(d11, d10) * 180.0D / 3.141592653589793D));
}
double d12;
@@ -382,7 +379,7 @@ public class EntityBoat extends Entity {
for (l = 0; l < list.size(); ++l) {
Entity entity = (Entity) list.get(l);
- if (entity != this.passenger && entity.g() && entity instanceof EntityBoat) {
+ if (entity != this.passenger && entity.f_() && entity instanceof EntityBoat) {
entity.collide(this);
}
}
@@ -405,12 +402,12 @@ public class EntityBoat extends Entity {
}
}
- public void g_() {
+ public void i() {
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.n() + this.passenger.M(), this.locZ + d1);
+ this.passenger.setPosition(this.locX + d0, this.locY + this.q() + this.passenger.R(), this.locZ + d1);
}
}
@@ -438,4 +435,28 @@ public class EntityBoat extends Entity {
return true;
}
}
+
+ public void setDamage(int i) {
+ this.datawatcher.watch(19, Integer.valueOf(i));
+ }
+
+ public int getDamage() {
+ return this.datawatcher.getInt(19);
+ }
+
+ public void c(int i) {
+ this.datawatcher.watch(17, Integer.valueOf(i));
+ }
+
+ public int k() {
+ return this.datawatcher.getInt(17);
+ }
+
+ public void d(int i) {
+ this.datawatcher.watch(18, Integer.valueOf(i));
+ }
+
+ public int l() {
+ return this.datawatcher.getInt(18);
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java
index 2cd588026f..4f21a3ff4e 100644
--- a/src/main/java/net/minecraft/server/EntityChicken.java
+++ b/src/main/java/net/minecraft/server/EntityChicken.java
@@ -19,12 +19,15 @@ public class EntityChicken extends EntityAnimal {
super(world);
this.texture = "/mob/chicken.png";
this.b(0.3F, 0.7F);
- this.health = 4;
this.j = this.random.nextInt(6000) + 6000;
}
- public void s() {
- super.s();
+ public int getMaxHealth() {
+ return 4;
+ }
+
+ public void d() {
+ super.d();
this.h = this.b;
this.g = this.c;
this.c = (float) ((double) this.c + (double) (this.onGround ? -1 : 4) * 0.3D);
@@ -46,14 +49,14 @@ public class EntityChicken extends EntityAnimal {
}
this.b += this.i * 2.0F;
- if (!this.world.isStatic && --this.j <= 0) {
+ if (!this.l() && !this.world.isStatic && --this.j <= 0) {
this.world.makeSound(this, "mob.chickenplop", 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
this.b(Item.EGG.id, 1);
this.j = this.random.nextInt(6000) + 6000;
}
}
- protected void a(float f) {}
+ protected void b(float f) {}
public void b(NBTTagCompound nbttagcompound) {
super.b(nbttagcompound);
@@ -63,33 +66,42 @@ public class EntityChicken extends EntityAnimal {
super.a(nbttagcompound);
}
- protected String h() {
+ protected String c_() {
return "mob.chicken";
}
- protected String i() {
+ protected String m() {
return "mob.chickenhurt";
}
- protected String j() {
+ protected String n() {
return "mob.chickenhurt";
}
- protected int k() {
+ protected int e() {
return Item.FEATHER.id;
}
- protected void a(boolean flag) {
+ protected void a(boolean flag, int i) {
// CraftBukkit start - whole method
List loot = new java.util.ArrayList();
- int count = this.random.nextInt(3);
+ int j = this.random.nextInt(3) + this.random.nextInt(1 + i);
- if (count > 0) {
- loot.add(new org.bukkit.inventory.ItemStack(Item.FEATHER.id, count));
- loot.add(new org.bukkit.inventory.ItemStack(this.fireTicks > 0 ? Item.COOKED_CHICKEN.id : Item.RAW_CHICKEN.id, 1));
+ if (j > 0) {
+ loot.add(new org.bukkit.inventory.ItemStack(Item.FEATHER.id, j));
+ }
+
+ if (this.z()) {
+ this.b(Item.COOKED_CHICKEN.id, 1);
+ } else {
+ this.b(Item.RAW_CHICKEN.id, 1);
}
CraftEventFactory.callEntityDeathEvent(this, loot);
// CraftBukkit end
}
+
+ protected EntityAnimal createChild(EntityAnimal entityanimal) {
+ return new EntityChicken(this.world);
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java
index 41e67767c7..1e3cb07503 100644
--- a/src/main/java/net/minecraft/server/EntityCow.java
+++ b/src/main/java/net/minecraft/server/EntityCow.java
@@ -4,10 +4,8 @@ package net.minecraft.server;
import java.util.List;
import org.bukkit.Location;
-import org.bukkit.craftbukkit.entity.CraftEntity;
import org.bukkit.craftbukkit.event.CraftEventFactory;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
-import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.player.PlayerBucketFillEvent;
// CraftBukkit end
@@ -19,6 +17,10 @@ public class EntityCow extends EntityAnimal {
this.b(0.9F, 1.3F);
}
+ public int getMaxHealth() {
+ return 10;
+ }
+
public void b(NBTTagCompound nbttagcompound) {
super.b(nbttagcompound);
}
@@ -27,39 +29,39 @@ public class EntityCow extends EntityAnimal {
super.a(nbttagcompound);
}
- protected String h() {
+ protected String c_() {
return "mob.cow";
}
- protected String i() {
+ protected String m() {
return "mob.cowhurt";
}
- protected String j() {
+ protected String n() {
return "mob.cowhurt";
}
- protected float l() {
+ protected float o() {
return 0.4F;
}
- protected int k() {
+ protected int e() {
return Item.LEATHER.id;
}
- protected void a(boolean flag) {
+ protected void a(boolean flag, int i) {
// CraftBukkit start - whole method
List loot = new java.util.ArrayList();
- int count = this.random.nextInt(3);
+ int j = this.random.nextInt(3) + this.random.nextInt(1 + i);
- if (count > 0) {
- loot.add(new org.bukkit.inventory.ItemStack(Item.LEATHER.id, count));
+ if (j > 0) {
+ loot.add(new org.bukkit.inventory.ItemStack(Item.LEATHER.id, j));
}
- count = this.random.nextInt(3) + 1;
+ j = this.random.nextInt(3) + 1 + this.random.nextInt(1 + i);
- if (count > 0) {
- loot.add(new org.bukkit.inventory.ItemStack(this.fireTicks > 0 ? Item.COOKED_BEEF.id : Item.RAW_BEEF.id, count));
+ if (j > 0) {
+ loot.add(new org.bukkit.inventory.ItemStack(this.z() ? Item.COOKED_BEEF.id : Item.RAW_BEEF.id, j));
}
CraftEventFactory.callEntityDeathEvent(this, loot);
@@ -87,7 +89,11 @@ public class EntityCow extends EntityAnimal {
return true;
} else {
- return false;
+ return super.b(entityhuman);
}
}
+
+ protected EntityAnimal createChild(EntityAnimal entityanimal) {
+ return new EntityCow(this.world);
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityCreature.java b/src/main/java/net/minecraft/server/EntityCreature.java
index 605a852d43..0f0bf22169 100644
--- a/src/main/java/net/minecraft/server/EntityCreature.java
+++ b/src/main/java/net/minecraft/server/EntityCreature.java
@@ -17,16 +17,17 @@ public abstract class EntityCreature extends EntityLiving {
super(world);
}
- protected boolean v() {
+ protected boolean w() {
return false;
}
- protected void c_() {
+ protected void m_() {
+ MethodProfiler.a("ai");
if (this.f > 0) {
--this.f;
}
- this.e = this.v();
+ this.e = this.w();
float f = 16.0F;
if (this.target == null) {
@@ -49,7 +50,7 @@ public abstract class EntityCreature extends EntityLiving {
if (this.target != null) {
this.pathEntity = this.world.findPath(this, this.target, f);
}
- } else if (!this.target.ac()) {
+ } else if (!this.target.aj()) {
// CraftBukkit start
EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), null, EntityTargetEvent.TargetReason.TARGET_DIED);
this.world.getServer().getPluginManager().callEvent(event);
@@ -63,27 +64,29 @@ public abstract class EntityCreature extends EntityLiving {
}
// CraftBukkit end
} else {
- float f1 = this.target.g(this);
+ float f1 = this.target.h(this);
- if (this.f(this.target)) {
+ if (this.g(this.target)) {
this.a(this.target, f1);
} else {
this.b(this.target, f1);
}
}
+ MethodProfiler.a();
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.f > 0 || this.random.nextInt(80) == 0)) {
- this.A();
+ } else if (!this.e && (this.pathEntity == null && this.random.nextInt(180) == 0 || this.random.nextInt(120) == 0 || this.f > 0) && this.aS < 100) {
+ this.C();
}
int i = MathHelper.floor(this.boundingBox.b + 0.5D);
- boolean flag = this.ao();
- boolean flag1 = this.ap();
+ boolean flag = this.az();
+ boolean flag1 = this.aA();
this.pitch = 0.0F;
if (this.pathEntity != null && this.random.nextInt(100) != 0) {
+ MethodProfiler.a("followpath");
Vec3D vec3d = this.pathEntity.a(this);
double d0 = (double) (this.length * 2.0F);
@@ -97,7 +100,7 @@ public abstract class EntityCreature extends EntityLiving {
}
}
- this.aS = false;
+ this.aW = false;
if (vec3d != null) {
double d1 = vec3d.a - this.locX;
double d2 = vec3d.c - this.locZ;
@@ -106,7 +109,7 @@ public abstract class EntityCreature extends EntityLiving {
float f2 = (float) (TrigMath.atan2(d2, d1) * 180.0D / 3.1415927410125732D) - 90.0F;
float f3 = f2 - this.yaw;
- for (this.aQ = this.aU; f3 < -180.0F; f3 += 360.0F) {
+ for (this.aU = this.aY; f3 < -180.0F; f3 += 360.0F) {
;
}
@@ -130,12 +133,12 @@ public abstract 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.aP = -MathHelper.sin(f3) * this.aQ * 1.0F;
- this.aQ = MathHelper.cos(f3) * this.aQ * 1.0F;
+ this.aT = -MathHelper.sin(f3) * this.aU * 1.0F;
+ this.aU = MathHelper.cos(f3) * this.aU * 1.0F;
}
if (d3 > 0.0D) {
- this.aS = true;
+ this.aW = true;
}
}
@@ -143,20 +146,23 @@ public abstract class EntityCreature extends EntityLiving {
this.a(this.target, 30.0F, 30.0F);
}
- if (this.positionChanged && !this.B()) {
- this.aS = true;
+ if (this.positionChanged && !this.D()) {
+ this.aW = true;
}
if (this.random.nextFloat() < 0.8F && (flag || flag1)) {
- this.aS = true;
+ this.aW = true;
}
+
+ MethodProfiler.a();
} else {
- super.c_();
+ super.m_();
this.pathEntity = null;
}
}
- protected void A() {
+ protected void C() {
+ MethodProfiler.a("stroll");
boolean flag = false;
int i = -1;
int j = -1;
@@ -181,6 +187,8 @@ public abstract class EntityCreature extends EntityLiving {
if (flag) {
this.pathEntity = this.world.a(this, i, j, k, 10.0F);
}
+
+ MethodProfiler.a();
}
protected void a(Entity entity, float f) {}
@@ -195,15 +203,15 @@ public abstract class EntityCreature extends EntityLiving {
return null;
}
- public boolean d() {
+ public boolean g() {
int i = MathHelper.floor(this.locX);
int j = MathHelper.floor(this.boundingBox.b);
int k = MathHelper.floor(this.locZ);
- return super.d() && this.a(i, j, k) >= 0.0F;
+ return super.g() && this.a(i, j, k) >= 0.0F;
}
- public boolean B() {
+ public boolean D() {
return this.pathEntity != null;
}
@@ -211,7 +219,7 @@ public abstract class EntityCreature extends EntityLiving {
this.pathEntity = pathentity;
}
- public Entity C() {
+ public Entity E() {
return this.target;
}
@@ -219,8 +227,8 @@ public abstract class EntityCreature extends EntityLiving {
this.target = entity;
}
- protected float D() {
- float f = super.D();
+ protected float F() {
+ float f = super.F();
if (this.f > 0) {
f *= 2.0F;
diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java
index 0a1be51ded..94ed2f4afa 100644
--- a/src/main/java/net/minecraft/server/EntityCreeper.java
+++ b/src/main/java/net/minecraft/server/EntityCreeper.java
@@ -16,6 +16,10 @@ public class EntityCreeper extends EntityMonster {
this.texture = "/mob/creeper.png";
}
+ public int getMaxHealth() {
+ return 20;
+ }
+
protected void b() {
super.b();
this.datawatcher.a(16, Byte.valueOf((byte) -1));
@@ -31,7 +35,7 @@ public class EntityCreeper extends EntityMonster {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- this.datawatcher.watch(17, Byte.valueOf((byte) (nbttagcompound.m("powered") ? 1 : 0)));
+ this.datawatcher.watch(17, Byte.valueOf((byte) (nbttagcompound.n("powered") ? 1 : 0)));
}
protected void b(Entity entity, float f) {
@@ -46,10 +50,10 @@ public class EntityCreeper extends EntityMonster {
}
}
- public void s_() {
+ public void w_() {
this.b = this.fuseTicks;
if (this.world.isStatic) {
- int i = this.w();
+ int i = this.A();
if (i > 0 && this.fuseTicks == 0) {
this.world.makeSound(this, "random.fuse", 1.0F, 0.5F);
@@ -65,7 +69,7 @@ public class EntityCreeper extends EntityMonster {
}
}
- super.s_();
+ super.w_();
if (this.target == null && this.fuseTicks > 0) {
this.b(-1);
--this.fuseTicks;
@@ -75,24 +79,24 @@ public class EntityCreeper extends EntityMonster {
}
}
- protected String i() {
+ protected String m() {
return "mob.creeper";
}
- protected String j() {
+ protected String n() {
return "mob.creeperdeath";
}
public void die(DamageSource damagesource) {
super.die(damagesource);
if (damagesource.getEntity() instanceof EntitySkeleton) {
- this.b(Item.GOLD_RECORD.id + this.random.nextInt(2), 1);
+ this.b(Item.RECORD_1.id + this.random.nextInt(2), 1);
}
}
protected void a(Entity entity, float f) {
if (!this.world.isStatic) {
- int i = this.w();
+ int i = this.A();
if ((i > 0 || f >= 3.0F) && (i <= 0 || f >= 7.0F)) {
this.b(-1);
@@ -132,11 +136,11 @@ public class EntityCreeper extends EntityMonster {
return this.datawatcher.getByte(17) == 1;
}
- protected int k() {
+ protected int e() {
return Item.SULPHUR.id;
}
- private int w() {
+ private int A() {
return this.datawatcher.getByte(16);
}
diff --git a/src/main/java/net/minecraft/server/EntityDamageSourceIndirect.java b/src/main/java/net/minecraft/server/EntityDamageSourceIndirect.java
index b6d310d3e0..5855df9839 100644
--- a/src/main/java/net/minecraft/server/EntityDamageSourceIndirect.java
+++ b/src/main/java/net/minecraft/server/EntityDamageSourceIndirect.java
@@ -15,7 +15,7 @@ public class EntityDamageSourceIndirect extends EntityDamageSource {
public String a(EntityHuman entityhuman) {
// CraftBukkit start
- String source = (this.n == null) ? "Herobrine" : this.n.Y();
+ String source = (this.n == null) ? "Herobrine" : this.n.ad();
return StatisticCollector.a("death." + this.m, new Object[] { entityhuman.name, source});
// CraftBukkit end
}
diff --git a/src/main/java/net/minecraft/server/EntityEgg.java b/src/main/java/net/minecraft/server/EntityEgg.java
index 5459af4df0..9a5738099e 100644
--- a/src/main/java/net/minecraft/server/EntityEgg.java
+++ b/src/main/java/net/minecraft/server/EntityEgg.java
@@ -1,8 +1,6 @@
package net.minecraft.server;
-import java.util.List;
-
-// CraftBukkit start
+import org.bukkit.Location;
import org.bukkit.entity.CreatureType;
import org.bukkit.entity.Projectile;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
@@ -10,325 +8,82 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.player.PlayerEggThrowEvent;
-// CraftBukkit end
-public class EntityEgg extends Entity {
-
- private int b = -1;
- private int c = -1;
- private int d = -1;
- private int e = 0;
- private boolean f = false;
- public int a = 0;
- public EntityLiving thrower; // CraftBukkit - private -> public
- private int h;
- private int i = 0;
+public class EntityEgg extends EntityProjectile {
public EntityEgg(World world) {
super(world);
- this.b(0.25F, 0.25F);
}
- protected void b() {}
-
public EntityEgg(World world, EntityLiving entityliving) {
- super(world);
- this.thrower = entityliving;
- this.b(0.25F, 0.25F);
- this.setPositionRotation(entityliving.locX, entityliving.locY + (double) entityliving.t(), entityliving.locZ, entityliving.yaw, entityliving.pitch);
- this.locX -= (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * 0.16F);
- this.locY -= 0.10000000149011612D;
- this.locZ -= (double) (MathHelper.sin(this.yaw / 180.0F * 3.1415927F) * 0.16F);
- this.setPosition(this.locX, this.locY, this.locZ);
- this.height = 0.0F;
- float f = 0.4F;
-
- this.motX = (double) (-MathHelper.sin(this.yaw / 180.0F * 3.1415927F) * MathHelper.cos(this.pitch / 180.0F * 3.1415927F) * f);
- this.motZ = (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * MathHelper.cos(this.pitch / 180.0F * 3.1415927F) * f);
- this.motY = (double) (-MathHelper.sin(this.pitch / 180.0F * 3.1415927F) * f);
- this.a(this.motX, this.motY, this.motZ, 1.5F, 1.0F);
+ super(world, entityliving);
}
public EntityEgg(World world, double d0, double d1, double d2) {
- super(world);
- this.h = 0;
- this.b(0.25F, 0.25F);
- this.setPosition(d0, d1, d2);
- this.height = 0.0F;
+ super(world, d0, d1, d2);
}
- public void a(double d0, double d1, double d2, float f, float f1) {
- float f2 = MathHelper.a(d0 * d0 + d1 * d1 + d2 * d2);
+ protected void a(MovingObjectPosition movingobjectposition) {
+ // CraftBukkit start
+ ProjectileHitEvent phe = new ProjectileHitEvent((Projectile) this.getBukkitEntity());
+ this.world.getServer().getPluginManager().callEvent(phe);
- d0 /= (double) f2;
- d1 /= (double) f2;
- d2 /= (double) f2;
- d0 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
- d1 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
- d2 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
- d0 *= (double) f;
- d1 *= (double) f;
- d2 *= (double) f;
- this.motX = d0;
- this.motY = d1;
- this.motZ = d2;
- float f3 = MathHelper.a(d0 * d0 + d2 * d2);
+ if (movingobjectposition.entity != null) {
+ boolean stick;
+ if (movingobjectposition.entity instanceof EntityLiving) {
+ org.bukkit.entity.Entity damagee = movingobjectposition.entity.getBukkitEntity();
+ Projectile projectile = (Projectile) this.getBukkitEntity();
- 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.h = 0;
- }
+ // TODO @see EntityArrow#162
+ EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(projectile, damagee, EntityDamageEvent.DamageCause.PROJECTILE, 0);
+ this.world.getServer().getPluginManager().callEvent(event);
- public void s_() {
- this.bE = this.locX;
- this.bF = this.locY;
- this.bG = this.locZ;
- super.s_();
- if (this.a > 0) {
- --this.a;
- }
-
- if (this.f) {
- int i = this.world.getTypeId(this.b, this.c, this.d);
-
- if (i == this.e) {
- ++this.h;
- if (this.h == 1200) {
- this.die();
+ if (event.isCancelled()) {
+ stick = !projectile.doesBounce();
+ } else {
+ // this function returns if the egg should stick in or not, i.e. !bounce
+ stick = movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.shooter), event.getDamage());
}
-
- return;
+ } else {
+ stick = movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.shooter), 0);
}
- this.f = false;
- 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.h = 0;
- this.i = 0;
- } else {
- ++this.i;
+ if (stick) {
+ ; // Original code does nothing *yet*
+ }
}
- 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.a(vec3d, vec3d1);
+ boolean hatching = !this.world.isStatic && this.random.nextInt(8) == 0;
+ int numHatching = (this.random.nextInt(32) == 0) ? 4 : 1;
+ if (!hatching) {
+ numHatching = 0;
+ }
- vec3d = Vec3D.create(this.locX, this.locY, this.locZ);
- vec3d1 = Vec3D.create(this.locX + this.motX, this.locY + this.motY, this.locZ + this.motZ);
- if (movingobjectposition != null) {
- vec3d1 = Vec3D.create(movingobjectposition.f.a, movingobjectposition.f.b, movingobjectposition.f.c);
+ CreatureType hatchingType = CreatureType.CHICKEN;
+
+ if (this.shooter instanceof EntityPlayer) {
+ org.bukkit.entity.Player player = (this.shooter == null) ? null : (org.bukkit.entity.Player) this.shooter.getBukkitEntity();
+
+ PlayerEggThrowEvent event = new PlayerEggThrowEvent(player, (org.bukkit.entity.Egg) this.getBukkitEntity(), hatching, (byte) numHatching, hatchingType);
+ this.world.getServer().getPluginManager().callEvent(event);
+
+ hatching = event.isHatching();
+ numHatching = event.getNumHatches();
+ hatchingType = event.getHatchType();
+ }
+
+ if (hatching) {
+ for (int k = 0; k < numHatching; k++) {
+ world.getWorld().spawn(new Location(world.getWorld(), this.locX, this.locY, this.locZ, this.yaw, 0.0F), hatchingType.getEntityClass(), SpawnReason.EGG);
+ }
+ }
+ // CraftBukkit end
+
+ for (int j = 0; j < 8; ++j) {
+ this.world.a("snowballpoof", this.locX, this.locY, this.locZ, 0.0D, 0.0D, 0.0D);
}
if (!this.world.isStatic) {
- Entity entity = null;
- 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;
-
- for (int j = 0; j < list.size(); ++j) {
- Entity entity1 = (Entity) list.get(j);
-
- 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.b(movingobjectposition1.f);
-
- if (d1 < d0 || d0 == 0.0D) {
- entity = entity1;
- d0 = d1;
- }
- }
- }
- }
-
- if (entity != null) {
- movingobjectposition = new MovingObjectPosition(entity);
- }
- }
-
- if (movingobjectposition != null) {
- // CraftBukkit start
- ProjectileHitEvent phe = new ProjectileHitEvent((Projectile) this.getBukkitEntity());
- this.world.getServer().getPluginManager().callEvent(phe);
-
- if (movingobjectposition.entity != null) {
- boolean stick;
- if (movingobjectposition.entity instanceof EntityLiving) {
- org.bukkit.entity.Entity damagee = movingobjectposition.entity.getBukkitEntity();
- Projectile projectile = (Projectile) this.getBukkitEntity();
-
- // TODO @see EntityArrow#162
- EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(projectile, damagee, EntityDamageEvent.DamageCause.PROJECTILE, 0);
- this.world.getServer().getPluginManager().callEvent(event);
-
- if (event.isCancelled()) {
- stick = !projectile.doesBounce();
- } else {
- // this function returns if the egg should stick in or not, i.e. !bounce
- stick = movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.thrower), event.getDamage());
- }
- } else {
- stick = movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.thrower), 0);
- }
-
- if (stick) {
- ; // Original code does nothing *yet*
- }
- }
-
- boolean hatching = !this.world.isStatic && this.random.nextInt(8) == 0;
- int numHatching = (this.random.nextInt(32) == 0) ? 4 : 1;
- if (!hatching) {
- numHatching = 0;
- }
-
- CreatureType hatchingType = CreatureType.CHICKEN;
-
- if (this.thrower instanceof EntityPlayer) {
- org.bukkit.entity.Player player = (this.thrower == null) ? null : (org.bukkit.entity.Player) this.thrower.getBukkitEntity();
-
- PlayerEggThrowEvent event = new PlayerEggThrowEvent(player, (org.bukkit.entity.Egg) this.getBukkitEntity(), hatching, (byte) numHatching, hatchingType);
- this.world.getServer().getPluginManager().callEvent(event);
-
- hatching = event.isHatching();
- numHatching = event.getNumHatches();
- hatchingType = event.getHatchType();
- }
-
- if (hatching) {
- for (int k = 0; k < numHatching; k++) {
- Entity entity = null;
- switch (hatchingType) {
- case CHICKEN:
- entity = new EntityChicken(this.world);
- break;
- case COW:
- entity = new EntityCow(this.world);
- break;
- case CREEPER:
- entity = new EntityCreeper(this.world);
- break;
- case GHAST:
- entity = new EntityGhast(this.world);
- break;
- case GIANT:
- entity = new EntityGiantZombie(this.world);
- break;
- case PIG:
- entity = new EntityPig(this.world);
- break;
- case PIG_ZOMBIE:
- entity = new EntityPigZombie(this.world);
- break;
- case SHEEP:
- entity = new EntitySheep(this.world);
- break;
- case SKELETON:
- entity = new EntitySkeleton(this.world);
- break;
- case SPIDER:
- entity = new EntitySpider(this.world);
- break;
- case ZOMBIE:
- entity = new EntityZombie(this.world);
- break;
- case SQUID:
- entity = new EntitySquid(this.world);
- break;
- case SLIME:
- entity = new EntitySlime(this.world);
- break;
- case WOLF:
- entity = new EntityWolf(this.world);
- break;
- default:
- entity = new EntityChicken(this.world);
- break;
- }
-
- entity.setPositionRotation(this.locX, this.locY, this.locZ, this.yaw, 0.0F);
- this.world.addEntity(entity, SpawnReason.EGG);
- // CraftBukkit end
- }
- }
-
- for (int l = 0; l < 8; ++l) {
- this.world.a("snowballpoof", this.locX, this.locY, this.locZ, 0.0D, 0.0D, 0.0D);
- }
-
- this.die();
- }
-
- this.locX += this.motX;
- this.locY += this.motY;
- this.locZ += this.motZ;
- float f1 = MathHelper.a(this.motX * this.motX + this.motZ * this.motZ);
-
- this.yaw = (float) (Math.atan2(this.motX, this.motZ) * 180.0D / 3.1415927410125732D);
-
- for (this.pitch = (float) (Math.atan2(this.motY, (double) f1) * 180.0D / 3.1415927410125732D); this.pitch - this.lastPitch < -180.0F; this.lastPitch -= 360.0F) {
- ;
- }
-
- while (this.pitch - this.lastPitch >= 180.0F) {
- this.lastPitch += 360.0F;
- }
-
- while (this.yaw - this.lastYaw < -180.0F) {
- this.lastYaw -= 360.0F;
- }
-
- while (this.yaw - this.lastYaw >= 180.0F) {
- this.lastYaw += 360.0F;
- }
-
- this.pitch = this.lastPitch + (this.pitch - this.lastPitch) * 0.2F;
- this.yaw = this.lastYaw + (this.yaw - this.lastYaw) * 0.2F;
- float f2 = 0.99F;
- float f3 = 0.03F;
-
- 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);
- }
-
- f2 = 0.8F;
- }
-
- this.motX *= (double) f2;
- this.motY *= (double) f2;
- this.motZ *= (double) f2;
- this.motY -= (double) f3;
- this.setPosition(this.locX, this.locY, this.locZ);
- }
-
- public void b(NBTTagCompound nbttagcompound) {
- nbttagcompound.a("xTile", (short) this.b);
- nbttagcompound.a("yTile", (short) this.c);
- nbttagcompound.a("zTile", (short) this.d);
- nbttagcompound.a("inTile", (byte) this.e);
- nbttagcompound.a("shake", (byte) this.a);
- nbttagcompound.a("inGround", (byte) (this.f ? 1 : 0));
- }
-
- public void a(NBTTagCompound nbttagcompound) {
- this.b = nbttagcompound.d("xTile");
- this.c = nbttagcompound.d("yTile");
- this.d = nbttagcompound.d("zTile");
- this.e = nbttagcompound.c("inTile") & 255;
- this.a = nbttagcompound.c("shake") & 255;
- this.f = nbttagcompound.c("inGround") == 1;
- }
-
- 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);
this.die();
}
}
diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java
index 2890c9af90..3362f41ea2 100644
--- a/src/main/java/net/minecraft/server/EntityEnderman.java
+++ b/src/main/java/net/minecraft/server/EntityEnderman.java
@@ -19,10 +19,14 @@ public class EntityEnderman extends EntityMonster {
public EntityEnderman(World world) {
super(world);
this.texture = "/mob/enderman.png";
- this.aU = 0.2F;
- this.damage = 5;
+ this.aY = 0.2F;
+ this.damage = 7;
this.b(0.6F, 2.9F);
- this.bI = 1.0F;
+ this.bM = 1.0F;
+ }
+
+ public int getMaxHealth() {
+ return 40;
}
protected void b() {
@@ -34,17 +38,17 @@ public class EntityEnderman extends EntityMonster {
public void b(NBTTagCompound nbttagcompound) {
super.b(nbttagcompound);
nbttagcompound.a("carried", (short) this.getCarriedId());
- nbttagcompound.a("carryingData", (short) this.getCarriedData()); // Craftbukkit - fixed from carriedData
+ nbttagcompound.a("carriedData", (short) this.getCarriedData());
}
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- this.setCarriedId(nbttagcompound.d("carried"));
- this.setCarriedData(nbttagcompound.d("carryingData"));
+ this.setCarriedId(nbttagcompound.e("carried"));
+ this.setCarriedData(nbttagcompound.e("carriedData"));
}
protected Entity findTarget() {
- EntityHuman entityhuman = this.world.findNearbyPlayer(this, 64.0D);
+ EntityHuman entityhuman = this.world.b(this, 64.0D);
if (entityhuman != null) {
if (this.c(entityhuman)) {
@@ -60,8 +64,8 @@ public class EntityEnderman extends EntityMonster {
return null;
}
- public float a_(float f) {
- return super.a_(f);
+ public float a(float f) {
+ return super.a(f);
}
private boolean c(EntityHuman entityhuman) {
@@ -70,24 +74,24 @@ public class EntityEnderman extends EntityMonster {
if (itemstack != null && itemstack.id == Block.PUMPKIN.id) {
return false;
} else {
- Vec3D vec3d = entityhuman.c(1.0F).b();
- Vec3D vec3d1 = Vec3D.create(this.locX - entityhuman.locX, this.boundingBox.b + (double) (this.width / 2.0F) - entityhuman.locY + (double) entityhuman.t(), this.locZ - entityhuman.locZ);
+ Vec3D vec3d = entityhuman.d(1.0F).b();
+ Vec3D vec3d1 = Vec3D.create(this.locX - entityhuman.locX, this.boundingBox.b + (double) (this.width / 2.0F) - (entityhuman.locY + (double) entityhuman.x()), this.locZ - entityhuman.locZ);
double d0 = vec3d1.c();
vec3d1 = vec3d1.b();
double d1 = vec3d.a(vec3d1);
- return d1 > 1.0D - 0.025D / d0 ? entityhuman.f(this) : false;
+ return d1 > 1.0D - 0.025D / d0 ? entityhuman.g(this) : false;
}
}
- public void s() {
- if (this.an()) {
+ public void d() {
+ if (this.ay()) {
this.damageEntity(DamageSource.DROWN, 1);
}
this.a = this.target != null;
- this.aU = this.target != null ? 4.5F : 0.3F;
+ this.aY = this.target != null ? 6.5F : 0.3F;
int i;
if (!this.world.isStatic) {
@@ -137,30 +141,36 @@ public class EntityEnderman extends EntityMonster {
this.world.a("portal", this.locX + (this.random.nextDouble() - 0.5D) * (double) this.length, this.locY + this.random.nextDouble() * (double) this.width - 0.25D, this.locZ + (this.random.nextDouble() - 0.5D) * (double) this.length, (this.random.nextDouble() - 0.5D) * 2.0D, -this.random.nextDouble(), (this.random.nextDouble() - 0.5D) * 2.0D);
}
- if (this.world.d() && !this.world.isStatic) {
- float f = this.a_(1.0F);
+ if (this.world.e() && !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) {
- this.fireTicks = 300;
+ this.target = null;
+ this.u_();
}
}
- this.aS = false;
+ if (this.ay()) {
+ this.target = null;
+ this.u_();
+ }
+
+ this.aW = false;
if (this.target != null) {
this.a(this.target, 100.0F, 100.0F);
}
- if (!this.world.isStatic) {
+ if (!this.world.isStatic && this.aj()) {
if (this.target != null) {
if (this.target instanceof EntityHuman && this.c((EntityHuman) this.target)) {
- this.aP = this.aQ = 0.0F;
- this.aU = 0.0F;
- if (this.target.h(this) < 16.0D) {
- this.w();
+ this.aT = this.aU = 0.0F;
+ this.aY = 0.0F;
+ if (this.target.i(this) < 16.0D) {
+ this.u_();
}
this.g = 0;
- } else if (this.target.h(this) > 256.0D && this.g++ >= 30 && this.e(this.target)) {
+ } else if (this.target.i(this) > 256.0D && this.g++ >= 30 && this.f(this.target)) {
this.g = 0;
}
} else {
@@ -168,19 +178,19 @@ public class EntityEnderman extends EntityMonster {
}
}
- super.s();
+ super.d();
}
- protected boolean w() {
+ protected boolean u_() {
double d0 = this.locX + (this.random.nextDouble() - 0.5D) * 64.0D;
double d1 = this.locY + (double) (this.random.nextInt(64) - 32);
double d2 = this.locZ + (this.random.nextDouble() - 0.5D) * 64.0D;
- return this.a(d0, d1, d2);
+ return this.b(d0, d1, d2);
}
- protected boolean e(Entity entity) {
- Vec3D vec3d = Vec3D.create(this.locX - entity.locX, this.boundingBox.b + (double) (this.width / 2.0F) - entity.locY + (double) entity.t(), this.locZ - entity.locZ);
+ protected boolean f(Entity entity) {
+ Vec3D vec3d = Vec3D.create(this.locX - entity.locX, this.boundingBox.b + (double) (this.width / 2.0F) - entity.locY + (double) entity.x(), this.locZ - entity.locZ);
vec3d = vec3d.b();
double d0 = 16.0D;
@@ -188,10 +198,10 @@ public class EntityEnderman extends EntityMonster {
double d2 = this.locY + (double) (this.random.nextInt(16) - 8) - vec3d.b * d0;
double d3 = this.locZ + (this.random.nextDouble() - 0.5D) * 8.0D - vec3d.c * d0;
- return this.a(d1, d2, d3);
+ return this.b(d1, d2, d3);
}
- protected boolean a(double d0, double d1, double d2) {
+ protected boolean b(double d0, double d1, double d2) {
double d3 = this.locX;
double d4 = this.locY;
double d5 = this.locZ;
@@ -244,39 +254,43 @@ public class EntityEnderman extends EntityMonster {
this.world.a("portal", d7, d8, d9, (double) f, (double) f1, (double) f2);
}
+ this.world.makeSound(d3, d4, d5, "mob.endermen.portal", 1.0F, 1.0F);
+ this.world.makeSound(this, "mob.endermen.portal", 1.0F, 1.0F);
return true;
}
}
- protected String h() {
- return "mob.zombie";
+ protected String c_() {
+ return "mob.endermen.idle";
}
- protected String i() {
- return "mob.zombiehurt";
+ protected String m() {
+ return "mob.endermen.hit";
}
- protected String j() {
- return "mob.zombiedeath";
+ protected String n() {
+ return "mob.endermen.death";
}
- protected int k() {
+ protected int e() {
return Item.ENDER_PEARL.id;
}
- protected void a(boolean flag) {
- int i = this.k();
+ protected void a(boolean flag, int i) {
+ int j = this.e();
- // CraftBukkit start - whole method
- List loot = new java.util.ArrayList();
- int count = this.random.nextInt(2);
+ if (j > 0) {
+ // CraftBukkit start - whole method
+ List loot = new java.util.ArrayList();
+ int count = this.random.nextInt(2 + i);
- if ((i > 0) && (count > 0)) {
- loot.add(new org.bukkit.inventory.ItemStack(i, count));
+ if ((j > 0) && (count > 0)) {
+ loot.add(new org.bukkit.inventory.ItemStack(j, count));
+ }
+
+ CraftEventFactory.callEntityDeathEvent(this, loot);
+ // CraftBukkit end
}
-
- CraftEventFactory.callEntityDeathEvent(this, loot);
- // CraftBukkit end
}
public void setCarriedId(int i) {
@@ -295,51 +309,34 @@ public class EntityEnderman extends EntityMonster {
return this.datawatcher.getByte(17);
}
+ public boolean damageEntity(DamageSource damagesource, int i) {
+ if (damagesource instanceof EntityDamageSourceIndirect) {
+ for (int j = 0; j < 64; ++j) {
+ if (this.u_()) {
+ return true;
+ }
+ }
+
+ return false;
+ } else {
+ return super.damageEntity(damagesource, i);
+ }
+ }
+
static {
- b[Block.STONE.id] = true;
b[Block.GRASS.id] = true;
b[Block.DIRT.id] = true;
- b[Block.COBBLESTONE.id] = true;
- b[Block.WOOD.id] = true;
b[Block.SAND.id] = true;
b[Block.GRAVEL.id] = true;
- b[Block.GOLD_ORE.id] = true;
- b[Block.IRON_ORE.id] = true;
- b[Block.COAL_ORE.id] = true;
- b[Block.LOG.id] = true;
- b[Block.LEAVES.id] = true;
- b[Block.SPONGE.id] = true;
- b[Block.GLASS.id] = true;
- b[Block.LAPIS_ORE.id] = true;
- b[Block.LAPIS_BLOCK.id] = true;
- b[Block.SANDSTONE.id] = true;
- b[Block.WOOL.id] = true;
b[Block.YELLOW_FLOWER.id] = true;
b[Block.RED_ROSE.id] = true;
b[Block.BROWN_MUSHROOM.id] = true;
b[Block.RED_MUSHROOM.id] = true;
- b[Block.GOLD_BLOCK.id] = true;
- b[Block.IRON_BLOCK.id] = true;
- b[Block.BRICK.id] = true;
b[Block.TNT.id] = true;
- b[Block.BOOKSHELF.id] = true;
- b[Block.MOSSY_COBBLESTONE.id] = true;
- b[Block.DIAMOND_ORE.id] = true;
- b[Block.DIAMOND_BLOCK.id] = true;
- b[Block.WORKBENCH.id] = true;
- b[Block.REDSTONE_ORE.id] = true;
- b[Block.GLOWING_REDSTONE_ORE.id] = true;
- b[Block.ICE.id] = true;
b[Block.CACTUS.id] = true;
b[Block.CLAY.id] = true;
b[Block.PUMPKIN.id] = true;
- b[Block.NETHERRACK.id] = true;
- b[Block.SOUL_SAND.id] = true;
- b[Block.GLOWSTONE.id] = true;
- b[Block.JACK_O_LANTERN.id] = true;
- b[Block.SMOOTH_BRICK.id] = true;
- b[Block.BIG_MUSHROOM_1.id] = true;
- b[Block.BIG_MUSHROOM_2.id] = true;
b[Block.MELON.id] = true;
+ b[Block.MYCEL.id] = true;
}
}
diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
index e9f09756a4..b8c0a9aeaa 100644
--- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java
+++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
@@ -5,9 +5,8 @@ public class EntityExperienceOrb extends Entity {
public int a;
public int b = 0;
public int c;
- private int e = 5;
+ private int d = 5;
public int value; // CraftBukkit - priv to pub
- public float d = (float) (Math.random() * 3.141592653589793D * 2.0D);
public EntityExperienceOrb(World world, double d0, double d1, double d2, int i) {
super(world);
@@ -21,7 +20,7 @@ public class EntityExperienceOrb extends Entity {
this.value = i;
}
- protected boolean e_() {
+ protected boolean g_() {
return false;
}
@@ -33,8 +32,8 @@ public class EntityExperienceOrb extends Entity {
protected void b() {}
- public void s_() {
- super.s_();
+ public void w_() {
+ super.w_();
if (this.c > 0) {
--this.c;
}
@@ -56,7 +55,7 @@ public class EntityExperienceOrb extends Entity {
if (entityhuman != null) {
double d1 = (entityhuman.locX - this.locX) / d0;
- double d2 = (entityhuman.locY + (double) entityhuman.t() - this.locY) / d0;
+ double d2 = (entityhuman.locY + (double) entityhuman.x() - this.locY) / d0;
double d3 = (entityhuman.locZ - this.locZ) / d0;
double d4 = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3);
double d5 = 1.0D - d4;
@@ -95,7 +94,7 @@ public class EntityExperienceOrb extends Entity {
}
}
- public boolean f_() {
+ public boolean i_() {
return this.world.a(this.boundingBox, Material.WATER, this);
}
@@ -104,9 +103,9 @@ public class EntityExperienceOrb extends Entity {
}
public boolean damageEntity(DamageSource damagesource, int i) {
- this.aq();
- this.e -= i;
- if (this.e <= 0) {
+ this.aB();
+ this.d -= i;
+ if (this.d <= 0) {
this.die();
}
@@ -114,30 +113,30 @@ public class EntityExperienceOrb extends Entity {
}
public void b(NBTTagCompound nbttagcompound) {
- nbttagcompound.a("Health", (short) ((byte) this.e));
+ nbttagcompound.a("Health", (short) ((byte) this.d));
nbttagcompound.a("Age", (short) this.b);
nbttagcompound.a("Value", (short) this.value);
}
public void a(NBTTagCompound nbttagcompound) {
- this.e = nbttagcompound.d("Health") & 255;
- this.b = nbttagcompound.d("Age");
- this.value = nbttagcompound.d("Value");
+ this.d = nbttagcompound.e("Health") & 255;
+ this.b = nbttagcompound.e("Age");
+ this.value = nbttagcompound.e("Value");
}
public void a_(EntityHuman entityhuman) {
if (!this.world.isStatic) {
- if (this.c == 0 && entityhuman.w == 0) {
- entityhuman.w = 2;
- this.world.makeSound(this, "random.pop", 0.2F, 0.5F * ((this.random.nextFloat() - this.random.nextFloat()) * 0.7F + 1.0F));
+ if (this.c == 0 && entityhuman.x == 0) {
+ entityhuman.x = 2;
+ this.world.makeSound(this, "random.orb", 0.1F, 0.5F * ((this.random.nextFloat() - this.random.nextFloat()) * 0.7F + 1.8F));
entityhuman.receive(this, 1);
- entityhuman.d(this.value);
+ entityhuman.h(this.value);
this.die();
}
}
}
- public int j_() {
+ public int g() {
return this.value;
}
diff --git a/src/main/java/net/minecraft/server/EntityFallingSand.java b/src/main/java/net/minecraft/server/EntityFallingSand.java
index dead5a749e..2546f1e6df 100644
--- a/src/main/java/net/minecraft/server/EntityFallingSand.java
+++ b/src/main/java/net/minecraft/server/EntityFallingSand.java
@@ -14,8 +14,8 @@ public class EntityFallingSand extends Entity {
public EntityFallingSand(World world, double d0, double d1, double d2, int i, int data) {
super(world);
this.a = i;
+ this.bc = true;
this.data = data; // CraftBukkit
- this.aY = true;
this.b(0.98F, 0.98F);
this.height = this.width / 2.0F;
this.setPosition(d0, d1, d2);
@@ -27,17 +27,17 @@ public class EntityFallingSand extends Entity {
this.lastZ = d2;
}
- protected boolean e_() {
+ protected boolean g_() {
return false;
}
protected void b() {}
- public boolean r_() {
+ public boolean e_() {
return !this.dead;
}
- public void s_() {
+ public void w_() {
if (this.a == 0) {
this.die();
} else {
@@ -54,18 +54,22 @@ public class EntityFallingSand extends Entity {
int j = MathHelper.floor(this.locY);
int k = MathHelper.floor(this.locZ);
- if (this.world.getTypeId(i, j, k) == this.a) {
+ if (this.b == 1 && this.world.getTypeId(i, j, k) == this.a) {
this.world.setTypeId(i, j, k, 0);
+ } else if (!this.world.isStatic && this.b == 1) {
+ this.die();
}
if (this.onGround) {
this.motX *= 0.699999988079071D;
this.motZ *= 0.699999988079071D;
this.motY *= -0.5D;
- this.die();
- // CraftBukkit -- setTypeId => setTypeIdAndData
- if ((!this.world.a(this.a, i, j, k, true, 1) || BlockSand.d_(this.world, i, j - 1, k) || !this.world.setTypeIdAndData(i, j, k, this.a, this.data)) && !this.world.isStatic) {
- this.b(this.a, 1);
+ if (this.world.getTypeId(i, j, k) != Block.PISTON_MOVING.id) {
+ this.die();
+ // CraftBukkit -- setTypeId => setTypeIdAndData
+ if ((!this.world.a(this.a, i, j, k, true, 1) || BlockSand.g(this.world, i, j - 1, k) || !this.world.setTypeIdAndData(i, j, k, this.a, this.data)) && !this.world.isStatic) {
+ this.b(this.a, 1);
+ }
}
} else if (this.b > 100 && !this.world.isStatic) {
this.b(this.a, 1);
@@ -80,7 +84,7 @@ public class EntityFallingSand extends Entity {
}
protected void a(NBTTagCompound nbttagcompound) {
- this.a = nbttagcompound.c("Tile") & 255;
- this.data = nbttagcompound.c("Data") & 15; // CraftBukkit
+ this.a = nbttagcompound.d("Tile") & 255;
+ this.data = nbttagcompound.d("Data") & 15; // CraftBukkit
}
}
diff --git a/src/main/java/net/minecraft/server/EntityFireball.java b/src/main/java/net/minecraft/server/EntityFireball.java
index 99937ae9c1..32ec99a269 100644
--- a/src/main/java/net/minecraft/server/EntityFireball.java
+++ b/src/main/java/net/minecraft/server/EntityFireball.java
@@ -15,15 +15,14 @@ import org.bukkit.event.entity.ProjectileHitEvent;
public class EntityFireball extends Entity {
+ private int e = -1;
private int f = -1;
private int g = -1;
- private int h = -1;
- private int i = 0;
- private boolean j = false;
- public int a = 0;
+ private int h = 0;
+ private boolean i = false;
public EntityLiving shooter;
- private int k;
- private int l = 0;
+ private int j;
+ private int k = 0;
public double dirX;
public double dirY;
public double dirZ;
@@ -61,33 +60,33 @@ public class EntityFireball extends Entity {
this.dirZ = d2 / d3 * 0.1D;
}
- public void s_() {
- super.s_();
- this.fireTicks = 10;
- if (this.a > 0) {
- --this.a;
+ public void w_() {
+ super.w_();
+ this.j(1);
+ if (!this.world.isStatic && (this.shooter == null || this.shooter.dead)) {
+ this.die();
}
- if (this.j) {
- int i = this.world.getTypeId(this.f, this.g, this.h);
+ if (this.i) {
+ int i = this.world.getTypeId(this.e, this.f, this.g);
- if (i == this.i) {
- ++this.k;
- if (this.k == 1200) {
+ if (i == this.h) {
+ ++this.j;
+ if (this.j == 1200) {
this.die();
}
return;
}
- this.j = false;
+ this.i = false;
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.l;
+ ++this.k;
}
Vec3D vec3d = Vec3D.create(this.locX, this.locY, this.locZ);
@@ -107,7 +106,7 @@ public class EntityFireball extends Entity {
for (int j = 0; j < list.size(); ++j) {
Entity entity1 = (Entity) list.get(j);
- if (entity1.r_() && (entity1 != this.shooter || this.l >= 25)) {
+ if (entity1.e_() && (!entity1.a((Entity) this.shooter) || this.k >= 25)) {
float f = 0.3F;
AxisAlignedBB axisalignedbb = entity1.boundingBox.b((double) f, (double) f, (double) f);
MovingObjectPosition movingobjectposition1 = axisalignedbb.a(vec3d, vec3d1);
@@ -128,6 +127,57 @@ public class EntityFireball extends Entity {
}
if (movingobjectposition != null) {
+ }
+
+ this.locX += this.motX;
+ this.locY += this.motY;
+ this.locZ += this.motZ;
+ float f1 = MathHelper.a(this.motX * this.motX + this.motZ * this.motZ);
+
+ this.yaw = (float) (Math.atan2(this.motX, this.motZ) * 180.0D / 3.1415927410125732D);
+
+ for (this.pitch = (float) (Math.atan2(this.motY, (double) f1) * 180.0D / 3.1415927410125732D); this.pitch - this.lastPitch < -180.0F; this.lastPitch -= 360.0F) {
+ ;
+ }
+
+ while (this.pitch - this.lastPitch >= 180.0F) {
+ this.lastPitch += 360.0F;
+ }
+
+ while (this.yaw - this.lastYaw < -180.0F) {
+ this.lastYaw -= 360.0F;
+ }
+
+ while (this.yaw - this.lastYaw >= 180.0F) {
+ this.lastYaw += 360.0F;
+ }
+
+ this.pitch = this.lastPitch + (this.pitch - this.lastPitch) * 0.2F;
+ this.yaw = this.lastYaw + (this.yaw - this.lastYaw) * 0.2F;
+ float f2 = 0.95F;
+
+ if (this.az()) {
+ for (int k = 0; k < 4; ++k) {
+ float f3 = 0.25F;
+
+ this.world.a("bubble", this.locX - this.motX * (double) f3, this.locY - this.motY * (double) f3, this.locZ - this.motZ * (double) f3, this.motX, this.motY, this.motZ);
+ }
+
+ f2 = 0.8F;
+ }
+
+ this.motX += this.dirX;
+ this.motY += this.dirY;
+ this.motZ += this.dirZ;
+ this.motX *= (double) f2;
+ this.motY *= (double) f2;
+ this.motZ *= (double) f2;
+ this.world.a("smoke", this.locX, this.locY + 0.5D, this.locZ, 0.0D, 0.0D, 0.0D);
+ this.setPosition(this.locX, this.locY, this.locZ);
+ }
+
+ protected void a(MovingObjectPosition movingobjectposition) {
+ if (!this.world.isStatic) {
// CraftBukkit start
ProjectileHitEvent phe = new ProjectileHitEvent((Projectile) this.getBukkitEntity());
this.world.getServer().getPluginManager().callEvent(phe);
@@ -170,82 +220,39 @@ public class EntityFireball extends Entity {
// CraftBukkit end
}
+ // this.world.createExplosion((Entity) null, this.locX, this.locY, this.locZ, 1.0F, true); // CraftBukkit
this.die();
}
-
- this.locX += this.motX;
- this.locY += this.motY;
- this.locZ += this.motZ;
- float f1 = MathHelper.a(this.motX * this.motX + this.motZ * this.motZ);
-
- this.yaw = (float) (Math.atan2(this.motX, this.motZ) * 180.0D / 3.1415927410125732D);
-
- for (this.pitch = (float) (Math.atan2(this.motY, (double) f1) * 180.0D / 3.1415927410125732D); this.pitch - this.lastPitch < -180.0F; this.lastPitch -= 360.0F) {
- ;
- }
-
- while (this.pitch - this.lastPitch >= 180.0F) {
- this.lastPitch += 360.0F;
- }
-
- while (this.yaw - this.lastYaw < -180.0F) {
- this.lastYaw -= 360.0F;
- }
-
- while (this.yaw - this.lastYaw >= 180.0F) {
- this.lastYaw += 360.0F;
- }
-
- this.pitch = this.lastPitch + (this.pitch - this.lastPitch) * 0.2F;
- this.yaw = this.lastYaw + (this.yaw - this.lastYaw) * 0.2F;
- float f2 = 0.95F;
-
- if (this.ao()) {
- for (int k = 0; k < 4; ++k) {
- float f3 = 0.25F;
-
- this.world.a("bubble", this.locX - this.motX * (double) f3, this.locY - this.motY * (double) f3, this.locZ - this.motZ * (double) f3, this.motX, this.motY, this.motZ);
- }
-
- f2 = 0.8F;
- }
-
- this.motX += this.dirX;
- this.motY += this.dirY;
- this.motZ += this.dirZ;
- this.motX *= (double) f2;
- this.motY *= (double) f2;
- this.motZ *= (double) f2;
- this.world.a("smoke", this.locX, this.locY + 0.5D, this.locZ, 0.0D, 0.0D, 0.0D);
- this.setPosition(this.locX, this.locY, this.locZ);
}
public void b(NBTTagCompound nbttagcompound) {
- nbttagcompound.a("xTile", (short) this.f);
- nbttagcompound.a("yTile", (short) this.g);
- nbttagcompound.a("zTile", (short) this.h);
- nbttagcompound.a("inTile", (byte) this.i);
- nbttagcompound.a("shake", (byte) this.a);
- nbttagcompound.a("inGround", (byte) (this.j ? 1 : 0));
+ 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("inGround", (byte) (this.i ? 1 : 0));
}
public void a(NBTTagCompound nbttagcompound) {
- this.f = nbttagcompound.d("xTile");
- this.g = nbttagcompound.d("yTile");
- this.h = nbttagcompound.d("zTile");
- this.i = nbttagcompound.c("inTile") & 255;
- this.a = nbttagcompound.c("shake") & 255;
- this.j = nbttagcompound.c("inGround") == 1;
+ this.e = nbttagcompound.e("xTile");
+ this.f = nbttagcompound.e("yTile");
+ this.g = nbttagcompound.e("zTile");
+ this.h = nbttagcompound.d("inTile") & 255;
+ this.i = nbttagcompound.d("inGround") == 1;
}
- public boolean r_() {
+ public boolean e_() {
return true;
}
+ public float j_() {
+ return 1.0F;
+ }
+
public boolean damageEntity(DamageSource damagesource, int i) {
- this.aq();
+ this.aB();
if (damagesource.getEntity() != null) {
- Vec3D vec3d = damagesource.getEntity().ai();
+ Vec3D vec3d = damagesource.getEntity().ap();
if (vec3d != null) {
this.motX = vec3d.a;
@@ -256,9 +263,17 @@ public class EntityFireball extends Entity {
this.dirZ = this.motZ * 0.1D;
}
+ if (damagesource.getEntity() instanceof EntityLiving) {
+ this.shooter = (EntityLiving) damagesource.getEntity();
+ }
+
return true;
} else {
return false;
}
}
+
+ public float a(float f) {
+ return 1.0F;
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityFishingHook.java b/src/main/java/net/minecraft/server/EntityFishingHook.java
index a1ab1f2504..7a60dac000 100644
--- a/src/main/java/net/minecraft/server/EntityFishingHook.java
+++ b/src/main/java/net/minecraft/server/EntityFishingHook.java
@@ -32,12 +32,12 @@ public class EntityFishingHook extends Entity {
public EntityFishingHook(World world) {
super(world);
this.b(0.25F, 0.25F);
- this.bZ = true;
+ this.ca = true;
}
public EntityFishingHook(World world, EntityHuman entityhuman) {
super(world);
- this.bZ = true;
+ this.ca = true;
this.owner = entityhuman;
this.owner.hookedFish = this;
this.b(0.25F, 0.25F);
@@ -79,8 +79,8 @@ public class EntityFishingHook extends Entity {
this.i = 0;
}
- public void s_() {
- super.s_();
+ public void w_() {
+ super.w_();
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 EntityFishingHook extends Entity {
this.c(this.yaw, this.pitch);
} else {
if (!this.world.isStatic) {
- ItemStack itemstack = this.owner.K();
+ ItemStack itemstack = this.owner.P();
- if (this.owner.dead || !this.owner.ac() || itemstack == null || itemstack.getItem() != Item.FISHING_ROD || this.h(this.owner) > 1024.0D) {
+ if (this.owner.dead || !this.owner.aj() || itemstack == null || itemstack.getItem() != Item.FISHING_ROD || this.i(this.owner) > 1024.0D) {
this.die();
this.owner.hookedFish = null;
return;
@@ -168,7 +168,7 @@ public class EntityFishingHook extends Entity {
for (int j = 0; j < list.size(); ++j) {
Entity entity1 = (Entity) list.get(j);
- if (entity1.r_() && (entity1 != this.owner || this.j >= 5)) {
+ if (entity1.e_() && (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);
@@ -207,7 +207,7 @@ public class EntityFishingHook extends Entity {
stick = movingobjectposition.entity.damageEntity(DamageSource.projectile((Entity) this, this.owner), event.getDamage());
}
} else {
- stick = movingobjectposition.entity.damageEntity(DamageSource.projectile((Entity) this, this.owner), 0);
+ stick = movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.owner), 0);
}
if (!stick) {
// CraftBukkit end
@@ -267,7 +267,7 @@ public class EntityFishingHook extends Entity {
} else {
short short1 = 500;
- if (this.world.s(MathHelper.floor(this.locX), MathHelper.floor(this.locY) + 1, MathHelper.floor(this.locZ))) {
+ if (this.world.v(MathHelper.floor(this.locX), MathHelper.floor(this.locY) + 1, MathHelper.floor(this.locZ))) {
short1 = 300;
}
@@ -325,15 +325,15 @@ public class EntityFishingHook extends Entity {
}
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.a = nbttagcompound.c("shake") & 255;
- this.h = nbttagcompound.c("inGround") == 1;
+ this.d = nbttagcompound.e("xTile");
+ this.e = nbttagcompound.e("yTile");
+ this.f = nbttagcompound.e("zTile");
+ this.g = nbttagcompound.d("inTile") & 255;
+ this.a = nbttagcompound.d("shake") & 255;
+ this.h = nbttagcompound.d("inGround") == 1;
}
- public int i() {
+ public int j() {
byte b0 = 0;
if (this.c != null) {
@@ -347,6 +347,7 @@ public class EntityFishingHook extends Entity {
return 0;
}
// CraftBukkit end
+
double d0 = this.owner.locX - this.locX;
double d1 = this.owner.locY - this.locY;
double d2 = this.owner.locZ - this.locZ;
@@ -369,6 +370,7 @@ public class EntityFishingHook extends Entity {
return 0;
}
// CraftBukkit end
+
double d5 = this.owner.locX - this.locX;
double d6 = this.owner.locY - this.locY;
double d7 = this.owner.locZ - this.locZ;
diff --git a/src/main/java/net/minecraft/server/EntityGhast.java b/src/main/java/net/minecraft/server/EntityGhast.java
index 2ef307828b..ff10ab4d55 100644
--- a/src/main/java/net/minecraft/server/EntityGhast.java
+++ b/src/main/java/net/minecraft/server/EntityGhast.java
@@ -21,7 +21,17 @@ public class EntityGhast extends EntityFlying implements IMonster {
this.texture = "/mob/ghast.png";
this.b(4.0F, 4.0F);
this.fireProof = true;
- this.ax = 5;
+ this.az = 5;
+ }
+
+ public boolean damageEntity(DamageSource damagesource, int i) {
+ if ("fireball".equals(damagesource.l()) && damagesource.getEntity() instanceof EntityHuman) {
+ super.damageEntity(damagesource, 1000);
+ ((EntityHuman) damagesource.getEntity()).a((Statistic) AchievementList.y);
+ return true;
+ } else {
+ return super.damageEntity(damagesource, i);
+ }
}
protected void b() {
@@ -29,19 +39,23 @@ public class EntityGhast extends EntityFlying implements IMonster {
this.datawatcher.a(16, Byte.valueOf((byte) 0));
}
- public void s_() {
- super.s_();
+ public int getMaxHealth() {
+ return 10;
+ }
+
+ public void w_() {
+ super.w_();
byte b0 = this.datawatcher.getByte(16);
this.texture = b0 == 1 ? "/mob/ghast_fire.png" : "/mob/ghast.png";
}
- protected void c_() {
+ protected void m_() {
if (!this.world.isStatic && this.world.difficulty == 0) {
this.die();
}
- this.ad();
+ this.ak();
this.e = this.f;
double d0 = this.b - this.locX;
double d1 = this.c - this.locY;
@@ -84,7 +98,7 @@ public class EntityGhast extends EntityFlying implements IMonster {
if (this.target == null || this.h-- <= 0) {
// CraftBukkit start
- Entity target = this.world.findNearbyPlayer(this, 100.0D);
+ Entity target = this.world.b(this, 100.0D);
if (target != null) {
EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), target.getBukkitEntity(), EntityTargetEvent.TargetReason.CLOSEST_PLAYER);
this.world.getServer().getPluginManager().callEvent(event);
@@ -105,23 +119,23 @@ public class EntityGhast extends EntityFlying implements IMonster {
double d4 = 64.0D;
- if (this.target != null && this.target.h(this) < d4 * d4) {
+ if (this.target != null && this.target.i(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.U = this.yaw = -((float) Math.atan2(d5, d7)) * 180.0F / 3.1415927F;
- if (this.f(this.target)) {
+ this.V = this.yaw = -((float) Math.atan2(d5, d7)) * 180.0F / 3.1415927F;
+ if (this.g(this.target)) {
if (this.f == 10) {
- this.world.makeSound(this, "mob.ghast.charge", this.l(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
+ this.world.a((EntityHuman) null, 1007, (int) this.locX, (int) this.locY, (int) this.locZ, 0);
}
++this.f;
if (this.f == 20) {
- this.world.makeSound(this, "mob.ghast.fireball", this.l(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
+ this.world.a((EntityHuman) null, 1008, (int) this.locX, (int) this.locY, (int) this.locZ, 0);
EntityFireball entityfireball = new EntityFireball(this.world, this, d5, d6, d7);
double d8 = 4.0D;
- Vec3D vec3d = this.c(1.0F);
+ Vec3D vec3d = this.d(1.0F);
entityfireball.locX = this.locX + vec3d.a * d8;
entityfireball.locY = this.locY + (double) (this.width / 2.0F) + 0.5D;
@@ -133,7 +147,7 @@ public class EntityGhast extends EntityFlying implements IMonster {
--this.f;
}
} else {
- this.U = this.yaw = -((float) Math.atan2(this.motX, this.motZ)) * 180.0F / 3.1415927F;
+ this.V = this.yaw = -((float) Math.atan2(this.motX, this.motZ)) * 180.0F / 3.1415927F;
if (this.f > 0) {
--this.f;
}
@@ -165,31 +179,47 @@ public class EntityGhast extends EntityFlying implements IMonster {
return true;
}
- protected String h() {
+ protected String c_() {
return "mob.ghast.moan";
}
- protected String i() {
+ protected String m() {
return "mob.ghast.scream";
}
- protected String j() {
+ protected String n() {
return "mob.ghast.death";
}
- protected int k() {
+ protected int e() {
return Item.SULPHUR.id;
}
- protected float l() {
+ protected void a(boolean flag, int i) {
+ int j = this.random.nextInt(2) + this.random.nextInt(1 + i);
+
+ int k;
+
+ for (k = 0; k < j; ++k) {
+ this.b(Item.GHAST_TEAR.id, 1);
+ }
+
+ j = this.random.nextInt(3) + this.random.nextInt(1 + i);
+
+ for (k = 0; k < j; ++k) {
+ this.b(Item.SULPHUR.id, 1);
+ }
+ }
+
+ protected float o() {
return 10.0F;
}
- public boolean d() {
- return this.random.nextInt(20) == 0 && super.d() && this.world.difficulty > 0;
+ public boolean g() {
+ return this.random.nextInt(20) == 0 && super.g() && this.world.difficulty > 0;
}
- public int m() {
+ public int p() {
return 1;
}
}
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
index 3cce840906..0688632d02 100644
--- a/src/main/java/net/minecraft/server/EntityHuman.java
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
@@ -23,45 +23,45 @@ public abstract class EntityHuman extends EntityLiving {
public Container defaultContainer;
public Container activeContainer;
protected FoodMetaData foodData = new FoodMetaData();
- protected int n = 0;
- public byte o = 0;
- public int p = 0;
- public float q;
+ protected int o = 0;
+ public byte p = 0;
+ public int q = 0;
public float r;
- public boolean s = false;
- public int t = 0;
+ public float s;
+ public boolean t = false;
+ public int u = 0;
public String name;
public int dimension;
- public int w = 0;
- public double x;
+ public int x = 0;
public double y;
public double z;
public double A;
public double B;
public double C;
+ public double D;
// CraftBukkit start
public boolean sleeping;
public boolean fauxSleeping;
public String spawnWorld = "";
- public int sleepTicks;
// CraftBukkit end
- public ChunkCoordinates E;
- public float F;
+
+ public ChunkCoordinates F;
+ public int sleepTicks; // CraftBukkit private -> public
public float G;
+ public float H;
private ChunkCoordinates b;
private ChunkCoordinates c;
- public int H = 20;
- protected boolean I = false;
- public float J;
+ public int I = 20;
+ protected boolean J = false;
+ public float K;
public PlayerAbilities abilities = new PlayerAbilities();
- public int exp;
- public int expLevel;
public int expTotal;
+ public int exp;
+ public float expLevel;
private ItemStack d;
private int e;
- protected float O = 0.1F;
- protected float P = 0.02F;
- private int f = 0;
+ protected float P = 0.1F;
+ protected float Q = 0.02F;
public EntityFishingHook hookedFish = null;
public EntityHuman(World world) {
@@ -72,62 +72,65 @@ public abstract class EntityHuman extends EntityLiving {
ChunkCoordinates chunkcoordinates = world.getSpawn();
this.setPositionRotation((double) chunkcoordinates.x + 0.5D, (double) (chunkcoordinates.y + 1), (double) chunkcoordinates.z + 0.5D, 0.0F, 0.0F);
- this.health = 20;
- this.ae = "humanoid";
- this.ad = 180.0F;
+ this.af = "humanoid";
+ this.ae = 180.0F;
this.maxFireTicks = 20;
this.texture = "/mob/char.png";
}
+ public int getMaxHealth() {
+ return 20;
+ }
+
protected void b() {
super.b();
this.datawatcher.a(16, Byte.valueOf((byte) 0));
this.datawatcher.a(17, Byte.valueOf((byte) 0));
}
- public boolean o_() {
+ public boolean H() {
return this.d != null;
}
- public void E() {
+ public void I() {
if (this.d != null) {
this.d.a(this.world, this, this.e);
}
- this.F();
+ this.J();
}
- public void F() {
+ public void J() {
this.d = null;
this.e = 0;
if (!this.world.isStatic) {
- this.h(false);
+ this.g(false);
}
}
- public boolean G() {
- return this.o_() && Item.byId[this.d.id].b(this.d) == EnumAnimation.c;
+ public boolean K() {
+ return this.H() && Item.byId[this.d.id].d(this.d) == EnumAnimation.d;
}
- public void s_() {
+ public void w_() {
if (this.d != null) {
ItemStack itemstack = this.inventory.getItemInHand();
if (itemstack != this.d) {
- this.F();
+ this.J();
} else {
if (this.e <= 25 && this.e % 4 == 0) {
this.b(itemstack, 5);
}
if (--this.e == 0 && !this.world.isStatic) {
- this.C();
+ this.G();
}
}
}
- if (this.w > 0) {
- --this.w;
+ if (this.x > 0) {
+ --this.x;
}
if (this.isSleeping()) {
@@ -137,9 +140,9 @@ public abstract class EntityHuman extends EntityLiving {
}
if (!this.world.isStatic) {
- if (!this.w()) {
+ if (!this.C()) {
this.a(true, true, false);
- } else if (this.world.d()) {
+ } else if (this.world.e()) {
this.a(false, true, true);
}
}
@@ -150,7 +153,7 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- super.s_();
+ super.w_();
if (!this.world.isStatic && this.activeContainer != null && !this.activeContainer.b(this)) {
this.closeInventory();
this.activeContainer = this.defaultContainer;
@@ -162,45 +165,45 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- if (this.fireTicks > 0 && this.abilities.isInvulnerable) {
- this.fireTicks = 0;
+ if (this.z() && this.abilities.isInvulnerable) {
+ this.aw();
}
- this.x = this.A;
this.y = this.B;
this.z = this.C;
- double d0 = this.locX - this.A;
- double d1 = this.locY - this.B;
- double d2 = this.locZ - this.C;
+ this.A = this.D;
+ double d0 = this.locX - this.B;
+ double d1 = this.locY - this.C;
+ double d2 = this.locZ - this.D;
double d3 = 10.0D;
if (d0 > d3) {
- this.x = this.A = this.locX;
+ this.y = this.B = this.locX;
}
if (d2 > d3) {
- this.z = this.C = this.locZ;
+ this.A = this.D = this.locZ;
}
if (d1 > d3) {
- this.y = this.B = this.locY;
+ this.z = this.C = this.locY;
}
if (d0 < -d3) {
- this.x = this.A = this.locX;
+ this.y = this.B = this.locX;
}
if (d2 < -d3) {
- this.z = this.C = this.locZ;
+ this.A = this.D = this.locZ;
}
if (d1 < -d3) {
- this.y = this.B = this.locY;
+ this.z = this.C = this.locY;
}
- this.A += d0 * 0.25D;
- this.C += d2 * 0.25D;
- this.B += d1 * 0.25D;
+ this.B += d0 * 0.25D;
+ this.D += d2 * 0.25D;
+ this.C += d1 * 0.25D;
this.a(StatisticList.k, 1);
if (this.vehicle == null) {
this.c = null;
@@ -212,6 +215,10 @@ public abstract class EntityHuman extends EntityLiving {
}
protected void b(ItemStack itemstack, int i) {
+ if (itemstack.m() == EnumAnimation.c) {
+ this.world.makeSound(this, "random.drink", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
+ }
+
if (itemstack.m() == EnumAnimation.b) {
for (int j = 0; j < i; ++j) {
Vec3D vec3d = Vec3D.create(((double) this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
@@ -222,15 +229,15 @@ public abstract class EntityHuman extends EntityLiving {
vec3d1.a(-this.pitch * 3.1415927F / 180.0F);
vec3d1.b(-this.yaw * 3.1415927F / 180.0F);
- vec3d1 = vec3d1.add(this.locX, this.locY + (double) this.t(), this.locZ);
+ vec3d1 = vec3d1.add(this.locX, this.locY + (double) this.x(), this.locZ);
this.world.a("iconcrack_" + itemstack.getItem().id, vec3d1.a, vec3d1.b, vec3d1.c, vec3d.a, vec3d.b + 0.05D, vec3d.c);
}
- this.world.makeSound(this, "mob.eat", 0.5F + 0.5F * (float) this.random.nextInt(2), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
+ this.world.makeSound(this, "random.eat", 0.5F + 0.5F * (float) this.random.nextInt(2), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
}
}
- protected void C() {
+ protected void G() {
if (this.d != null) {
this.b(this.d, 16);
int i = this.d.count;
@@ -243,67 +250,67 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- this.F();
+ this.J();
}
}
- protected boolean H() {
- return this.health <= 0 || this.isSleeping();
+ protected boolean L() {
+ return this.getHealth() <= 0 || this.isSleeping();
}
protected void closeInventory() {
this.activeContainer = this.defaultContainer;
}
- public void I() {
+ public void M() {
double d0 = this.locX;
double d1 = this.locY;
double d2 = this.locZ;
- super.I();
- this.q = this.r;
- this.r = 0.0F;
+ super.M();
+ this.r = this.s;
+ this.s = 0.0F;
this.h(this.locX - d0, this.locY - d1, this.locZ - d2);
}
- private int o() {
+ private int A() {
return this.hasEffect(MobEffectList.FASTER_DIG) ? 6 - (1 + this.getEffect(MobEffectList.FASTER_DIG).getAmplifier()) * 1 : (this.hasEffect(MobEffectList.SLOWER_DIG) ? 6 + (1 + this.getEffect(MobEffectList.SLOWER_DIG).getAmplifier()) * 2 : 6);
}
- protected void c_() {
- int i = this.o();
+ protected void m_() {
+ int i = this.A();
- if (this.s) {
- ++this.t;
- if (this.t >= i) {
- this.t = 0;
- this.s = false;
+ if (this.t) {
+ ++this.u;
+ if (this.u >= i) {
+ this.u = 0;
+ this.t = false;
}
} else {
- this.t = 0;
+ this.u = 0;
}
- this.am = (float) this.t / (float) i;
+ this.an = (float) this.u / (float) i;
}
- public void s() {
- if (this.n > 0) {
- --this.n;
+ public void d() {
+ if (this.o > 0) {
+ --this.o;
}
- if (this.world.difficulty == 0 && this.health < 20 && this.ticksLived % 20 * 12 == 0) {
+ if (this.world.difficulty == 0 && this.getHealth() < this.getMaxHealth() && this.ticksLived % 20 * 12 == 0) {
// CraftBukkit - added regain reason of "REGEN" for filtering purposes.
- this.c(1, RegainReason.REGEN);
+ this.d(1, RegainReason.REGEN);
}
- this.inventory.h();
- this.q = this.r;
- super.s();
- this.aj = this.O;
+ this.inventory.i();
+ this.r = this.s;
+ super.d();
this.ak = this.P;
+ this.al = this.Q;
if (this.isSprinting()) {
- this.aj = (float) ((double) this.aj + (double) this.O * 0.3D);
this.ak = (float) ((double) this.ak + (double) this.P * 0.3D);
+ this.al = (float) ((double) this.al + (double) this.Q * 0.3D);
}
float f = MathHelper.a(this.motX * this.motX + this.motZ * this.motZ);
@@ -314,17 +321,17 @@ public abstract class EntityHuman extends EntityLiving {
f = 0.1F;
}
- if (!this.onGround || this.health <= 0) {
+ if (!this.onGround || this.getHealth() <= 0) {
f = 0.0F;
}
- if (this.onGround || this.health <= 0) {
+ if (this.onGround || this.getHealth() <= 0) {
f1 = 0.0F;
}
- this.r += (f - this.r) * 0.4F;
- this.av += (f1 - this.av) * 0.8F;
- if (this.health > 0) {
+ this.s += (f - this.s) * 0.4F;
+ this.ax += (f1 - this.ax) * 0.8F;
+ if (this.getHealth() > 0) {
List list = this.world.b((Entity) this, this.boundingBox.b(1.0D, 0.0D, 1.0D));
if (list != null) {
@@ -332,14 +339,14 @@ public abstract class EntityHuman extends EntityLiving {
Entity entity = (Entity) list.get(i);
if (!entity.dead) {
- this.j(entity);
+ this.k(entity);
}
}
}
}
}
- private void j(Entity entity) {
+ private void k(Entity entity) {
entity.a_(this);
}
@@ -352,10 +359,10 @@ public abstract class EntityHuman extends EntityLiving {
this.a(new ItemStack(Item.APPLE, 1), true);
}
- this.inventory.j();
+ this.inventory.k();
if (damagesource != null) {
- this.motX = (double) (-MathHelper.cos((this.ar + this.yaw) * 3.1415927F / 180.0F) * 0.1F);
- this.motZ = (double) (-MathHelper.sin((this.ar + this.yaw) * 3.1415927F / 180.0F) * 0.1F);
+ this.motX = (double) (-MathHelper.cos((this.at + this.yaw) * 3.1415927F / 180.0F) * 0.1F);
+ this.motZ = (double) (-MathHelper.sin((this.at + this.yaw) * 3.1415927F / 180.0F) * 0.1F);
} else {
this.motX = this.motZ = 0.0D;
}
@@ -365,7 +372,7 @@ public abstract class EntityHuman extends EntityLiving {
}
public void b(Entity entity, int i) {
- this.p += i;
+ this.q += i;
if (entity instanceof EntityHuman) {
this.a(StatisticList.A, 1);
} else {
@@ -373,7 +380,13 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- public void J() {
+ protected int f(int i) {
+ int j = EnchantmentManager.a(this.inventory);
+
+ return j > 0 && this.random.nextInt(j + 1) > 0 ? i : super.f(i);
+ }
+
+ public void N() {
this.a(this.inventory.splitStack(this.inventory.itemInHandIndex, 1), false);
}
@@ -383,7 +396,7 @@ public abstract class EntityHuman extends EntityLiving {
public void a(ItemStack itemstack, boolean flag) {
if (itemstack != null) {
- EntityItem entityitem = new EntityItem(this.world, this.locX, this.locY - 0.30000001192092896D + (double) this.t(), this.locZ, itemstack);
+ EntityItem entityitem = new EntityItem(this.world, this.locX, this.locY - 0.30000001192092896D + (double) this.x(), this.locZ, itemstack);
entityitem.pickupDelay = 40;
float f = 0.1F;
@@ -433,24 +446,30 @@ public abstract class EntityHuman extends EntityLiving {
public float a(Block block) {
float f = this.inventory.a(block);
+ float f1 = f;
+ int i = EnchantmentManager.b(this.inventory);
- if (this.a(Material.WATER)) {
- f /= 5.0F;
- }
-
- if (!this.onGround) {
- f /= 5.0F;
+ if (i > 0 && this.inventory.b(block)) {
+ f1 = f + (float) (i * i + 1);
}
if (this.hasEffect(MobEffectList.FASTER_DIG)) {
- f *= 1.0F + (float) (this.getEffect(MobEffectList.FASTER_DIG).getAmplifier() + 1) * 0.2F;
+ f1 *= 1.0F + (float) (this.getEffect(MobEffectList.FASTER_DIG).getAmplifier() + 1) * 0.2F;
}
if (this.hasEffect(MobEffectList.SLOWER_DIG)) {
- f *= 1.0F - (float) (this.getEffect(MobEffectList.SLOWER_DIG).getAmplifier() + 1) * 0.2F;
+ f1 *= 1.0F - (float) (this.getEffect(MobEffectList.SLOWER_DIG).getAmplifier() + 1) * 0.2F;
}
- return f;
+ if (this.a(Material.WATER) && !EnchantmentManager.g(this.inventory)) {
+ f1 /= 5.0F;
+ }
+
+ if (!this.onGround) {
+ f1 /= 5.0F;
+ }
+
+ return f1;
}
public boolean b(Block block) {
@@ -459,17 +478,17 @@ public abstract class EntityHuman extends EntityLiving {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- NBTTagList nbttaglist = nbttagcompound.l("Inventory");
+ NBTTagList nbttaglist = nbttagcompound.m("Inventory");
this.inventory.b(nbttaglist);
- this.dimension = nbttagcompound.e("Dimension");
- this.sleeping = nbttagcompound.m("Sleeping");
- this.sleepTicks = nbttagcompound.d("SleepTimer");
- this.exp = nbttagcompound.e("Xp");
- this.expLevel = nbttagcompound.e("XpLevel");
- this.expTotal = nbttagcompound.e("XpTotal");
+ this.dimension = nbttagcompound.f("Dimension");
+ this.sleeping = nbttagcompound.n("Sleeping");
+ this.sleepTicks = nbttagcompound.e("SleepTimer");
+ this.expLevel = nbttagcompound.h("XpP");
+ this.expTotal = nbttagcompound.f("XpLevel");
+ this.exp = nbttagcompound.f("XpTotal");
if (this.sleeping) {
- this.E = new ChunkCoordinates(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ));
+ this.F = new ChunkCoordinates(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ));
this.a(true, true, false);
}
@@ -481,10 +500,11 @@ public abstract class EntityHuman extends EntityLiving {
// CraftBukkit end
if (nbttagcompound.hasKey("SpawnX") && nbttagcompound.hasKey("SpawnY") && nbttagcompound.hasKey("SpawnZ")) {
- this.b = new ChunkCoordinates(nbttagcompound.e("SpawnX"), nbttagcompound.e("SpawnY"), nbttagcompound.e("SpawnZ"));
+ this.b = new ChunkCoordinates(nbttagcompound.f("SpawnX"), nbttagcompound.f("SpawnY"), nbttagcompound.f("SpawnZ"));
}
this.foodData.a(nbttagcompound);
+ this.abilities.b(nbttagcompound);
}
public void b(NBTTagCompound nbttagcompound) {
@@ -493,9 +513,9 @@ public abstract class EntityHuman extends EntityLiving {
nbttagcompound.a("Dimension", this.dimension);
nbttagcompound.a("Sleeping", this.sleeping);
nbttagcompound.a("SleepTimer", (short) this.sleepTicks);
- nbttagcompound.a("Xp", this.exp);
- nbttagcompound.a("XpLevel", this.expLevel);
- nbttagcompound.a("XpTotal", this.expTotal);
+ nbttagcompound.a("XpP", this.expLevel);
+ nbttagcompound.a("XpLevel", this.expTotal);
+ nbttagcompound.a("XpTotal", this.exp);
if (this.b != null) {
nbttagcompound.a("SpawnX", this.b.x);
nbttagcompound.a("SpawnY", this.b.y);
@@ -504,19 +524,22 @@ public abstract class EntityHuman extends EntityLiving {
}
this.foodData.b(nbttagcompound);
+ this.abilities.a(nbttagcompound);
}
public void a(IInventory iinventory) {}
+ public void c(int i, int j, int k) {}
+
public void b(int i, int j, int k) {}
public void receive(Entity entity, int i) {}
- public float t() {
+ public float x() {
return 0.12F;
}
- protected void m_() {
+ protected void w() {
this.height = 1.62F;
}
@@ -524,8 +547,8 @@ public abstract class EntityHuman extends EntityLiving {
if (this.abilities.isInvulnerable && !damagesource.ignoresInvulnerability()) {
return false;
} else {
- this.aO = 0;
- if (this.health <= 0) {
+ this.aS = 0;
+ if (this.getHealth() <= 0) {
return false;
} else {
if (this.isSleeping() && !this.world.isStatic) {
@@ -540,7 +563,7 @@ public abstract class EntityHuman extends EntityLiving {
}
if (this.world.difficulty == 1) {
- i = i / 3 + 1;
+ i = i / 2 + 1;
}
if (this.world.difficulty == 3) {
@@ -587,7 +610,31 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- protected boolean n_() {
+ protected int b(DamageSource damagesource, int i) {
+ int j = super.b(damagesource, i);
+
+ if (j <= 0) {
+ return 0;
+ } else {
+ int k = EnchantmentManager.a(this.inventory, damagesource);
+
+ if (k > 20) {
+ k = 20;
+ }
+
+ if (k > 0 && k <= 20) {
+ int l = 25 - k;
+ int i1 = j * l + this.aq;
+
+ j = i1 / 25;
+ this.aq = i1 % 25;
+ }
+
+ return j;
+ }
+ }
+
+ protected boolean y() {
return false;
}
@@ -601,7 +648,7 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- if (!(entityliving instanceof EntityHuman) || this.n_()) {
+ if (!(entityliving instanceof EntityHuman) || this.y()) {
List list = this.world.a(EntityWolf.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));
Iterator iterator = list.iterator();
@@ -609,7 +656,7 @@ public abstract class EntityHuman extends EntityLiving {
Entity entity = (Entity) iterator.next();
EntityWolf entitywolf1 = (EntityWolf) entity;
- if (entitywolf1.isTamed() && entitywolf1.C() == null && this.name.equals(entitywolf1.getOwnerName()) && (!flag || !entitywolf1.isSitting())) {
+ if (entitywolf1.isTamed() && entitywolf1.E() == null && this.name.equals(entitywolf1.getOwnerName()) && (!flag || !entitywolf1.isSitting())) {
// CraftBukkit start
org.bukkit.entity.Entity bukkitTarget = entity == null ? null : entityliving.getBukkitEntity();
@@ -634,22 +681,23 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- protected void b(DamageSource damagesource, int i) {
- if (!damagesource.ignoresArmor() && this.G()) {
+ protected void g(int i) {
+ this.inventory.d(i);
+ }
+
+ protected int O() {
+ return this.inventory.j();
+ }
+
+ protected void c(DamageSource damagesource, int i) {
+ if (!damagesource.ignoresArmor() && this.K()) {
i = 1 + i >> 1;
}
- if (!damagesource.ignoresArmor()) {
- int j = 25 - this.inventory.i();
- int k = i * j + this.f;
-
- this.inventory.d(i);
- i = k / 25;
- this.f = k % 25;
- }
-
- this.b(damagesource.c());
- super.b(damagesource, i);
+ i = this.d(damagesource, i);
+ i = this.b(damagesource, i);
+ this.c(damagesource.e());
+ super.c(damagesource, i);
}
public void a(TileEntityFurnace tileentityfurnace) {}
@@ -658,48 +706,70 @@ public abstract class EntityHuman extends EntityLiving {
public void a(TileEntitySign tileentitysign) {}
- public void c(Entity entity) {
+ public void a(TileEntityBrewingStand tileentitybrewingstand) {}
+
+ public void e(Entity entity) {
if (!entity.b(this)) {
- ItemStack itemstack = this.K();
+ ItemStack itemstack = this.P();
if (itemstack != null && entity instanceof EntityLiving) {
itemstack.a((EntityLiving) entity);
// CraftBukkit - bypass infinite items; <= 0 -> == 0
if (itemstack.count == 0) {
itemstack.a(this);
- this.L();
+ this.Q();
}
}
}
}
- public ItemStack K() {
+ public ItemStack P() {
return this.inventory.getItemInHand();
}
- public void L() {
+ public void Q() {
this.inventory.setItem(this.inventory.itemInHandIndex, (ItemStack) null);
}
- public double M() {
+ public double R() {
return (double) (this.height - 0.5F);
}
- public void v() {
- if (!this.s || this.t >= this.o() / 2 || this.t < 0) {
- this.t = -1;
- this.s = true;
+ public void r_() {
+ if (!this.t || this.u >= this.A() / 2 || this.u < 0) {
+ this.u = -1;
+ this.t = true;
}
}
- public void d(Entity entity) {
+ public void f(Entity entity) {
int i = this.inventory.a(entity);
- if (i > 0) {
- boolean flag = this.motY < 0.0D && !this.onGround && !this.p() && !this.ao();
+ if (this.hasEffect(MobEffectList.INCREASE_DAMAGE)) {
+ i += 3 << this.getEffect(MobEffectList.INCREASE_DAMAGE).getAmplifier();
+ }
+
+ if (this.hasEffect(MobEffectList.WEAKNESS)) {
+ i -= 2 << this.getEffect(MobEffectList.WEAKNESS).getAmplifier();
+ }
+
+ int j = 0;
+ int k = 0;
+
+ if (entity instanceof EntityLiving) {
+ k = EnchantmentManager.a(this.inventory, (EntityLiving) entity);
+ j += EnchantmentManager.b(this.inventory, (EntityLiving) entity);
+ }
+
+ if (this.isSprinting()) {
+ ++j;
+ }
+
+ if (i > 0 || k > 0) {
+ boolean flag = this.fallDistance > 0.0F && !this.onGround && !this.r() && !this.az() && !this.hasEffect(MobEffectList.BLINDNESS) && this.vehicle == null && entity instanceof EntityLiving;
if (flag) {
- i = i * 3 / 2 + 1;
+ i += this.random.nextInt(i / 2 + 2);
}
// CraftBukkit start - Don't call the event when the entity is human since it will be called with damageEntity
@@ -718,6 +788,7 @@ public abstract class EntityHuman extends EntityLiving {
}
// CraftBukkit end
+ i += k;
boolean flag1 = entity.damageEntity(DamageSource.playerAttack(this), i);
// CraftBukkit start - Return when the damage fails so that the item will not lose durability
@@ -727,42 +798,57 @@ public abstract class EntityHuman extends EntityLiving {
// CraftBukkit end
if (flag1) {
- if (this.isSprinting()) {
- entity.b((double) (-MathHelper.sin(this.yaw * 3.1415927F / 180.0F) * 1.0F), 0.1D, (double) (MathHelper.cos(this.yaw * 3.1415927F / 180.0F) * 1.0F));
+ if (j > 0) {
+ entity.b_((double) (-MathHelper.sin(this.yaw * 3.1415927F / 180.0F) * (float) j * 0.5F), 0.1D, (double) (MathHelper.cos(this.yaw * 3.1415927F / 180.0F) * (float) j * 0.5F));
this.motX *= 0.6D;
this.motZ *= 0.6D;
this.setSprinting(false);
}
if (flag) {
- this.e(entity);
+ this.c(entity);
+ }
+
+ if (k > 0) {
+ this.d(entity);
+ }
+
+ if (i >= 18) {
+ this.a((Statistic) AchievementList.E);
}
}
- ItemStack itemstack = this.K();
+ ItemStack itemstack = this.P();
if (itemstack != null && entity instanceof EntityLiving) {
itemstack.a((EntityLiving) entity, this);
// CraftBukkit - bypass infinite items; <= 0 -> == 0
if (itemstack.count == 0) {
itemstack.a(this);
- this.L();
+ this.Q();
}
}
if (entity instanceof EntityLiving) {
- if (entity.ac()) {
+ if (entity.aj()) {
this.a((EntityLiving) entity, true);
}
this.a(StatisticList.w, i);
+ int l = EnchantmentManager.c(this.inventory, (EntityLiving) entity);
+
+ if (l > 0) {
+ entity.j(l * 4);
+ }
}
- this.b(0.3F);
+ this.c(0.3F);
}
}
- public void e(Entity entity) {}
+ public void c(Entity entity) {}
+
+ public void d(Entity entity) {}
public void a(ItemStack itemstack) {}
@@ -774,13 +860,13 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- public boolean O() {
- return !this.sleeping && super.O();
+ public boolean T() {
+ return !this.sleeping && super.T();
}
public EnumBedError a(int i, int j, int k) {
if (!this.world.isStatic) {
- if (this.isSleeping() || !this.ac()) {
+ if (this.isSleeping() || !this.aj()) {
return EnumBedError.OTHER_PROBLEM;
}
@@ -788,13 +874,21 @@ public abstract class EntityHuman extends EntityLiving {
return EnumBedError.NOT_POSSIBLE_HERE;
}
- if (this.world.d()) {
+ if (this.world.e()) {
return EnumBedError.NOT_POSSIBLE_NOW;
}
if (Math.abs(this.locX - (double) i) > 3.0D || Math.abs(this.locY - (double) j) > 2.0D || Math.abs(this.locZ - (double) k) > 3.0D) {
return EnumBedError.TOO_FAR_AWAY;
}
+
+ double d0 = 8.0D;
+ double d1 = 5.0D;
+ List list = this.world.a(EntityMonster.class, AxisAlignedBB.b((double) i - d0, (double) j - d1, (double) k - d0, (double) i + d0, (double) j + d1, (double) k + d0));
+
+ if (!list.isEmpty()) {
+ return EnumBedError.NOT_SAFE;
+ }
}
// CraftBukkit start
@@ -815,7 +909,7 @@ public abstract class EntityHuman extends EntityLiving {
this.height = 0.2F;
if (this.world.isLoaded(i, j, k)) {
int l = this.world.getData(i, j, k);
- int i1 = BlockBed.c(l);
+ int i1 = BlockBed.d(l);
float f = 0.5F;
float f1 = 0.5F;
@@ -836,7 +930,7 @@ public abstract class EntityHuman extends EntityLiving {
f = 0.9F;
}
- this.b(i1);
+ this.c(i1);
this.setPosition((double) ((float) i + f), (double) ((float) j + 0.9375F), (double) ((float) k + f1));
} else {
this.setPosition((double) ((float) i + 0.5F), (double) ((float) j + 0.9375F), (double) ((float) k + 0.5F));
@@ -844,7 +938,7 @@ public abstract class EntityHuman extends EntityLiving {
this.sleeping = true;
this.sleepTicks = 0;
- this.E = new ChunkCoordinates(i, j, k);
+ this.F = new ChunkCoordinates(i, j, k);
this.motX = this.motZ = this.motY = 0.0D;
if (!this.world.isStatic) {
this.world.everyoneSleeping();
@@ -853,24 +947,24 @@ public abstract class EntityHuman extends EntityLiving {
return EnumBedError.OK;
}
- private void b(int i) {
- this.F = 0.0F;
+ private void c(int i) {
this.G = 0.0F;
+ this.H = 0.0F;
switch (i) {
case 0:
- this.G = -1.8F;
+ this.H = -1.8F;
break;
case 1:
- this.F = 1.8F;
- break;
-
- case 2:
this.G = 1.8F;
break;
+ case 2:
+ this.H = 1.8F;
+ break;
+
case 3:
- this.F = -1.8F;
+ this.G = -1.8F;
}
}
@@ -878,9 +972,9 @@ public abstract class EntityHuman extends EntityLiving {
if (this.fauxSleeping && !this.sleeping) return; // CraftBukkit - Can't leave bed if not in one!
this.b(0.6F, 1.8F);
- this.m_();
- ChunkCoordinates chunkcoordinates = this.E;
- ChunkCoordinates chunkcoordinates1 = this.E;
+ this.w();
+ ChunkCoordinates chunkcoordinates = this.F;
+ ChunkCoordinates chunkcoordinates1 = this.F;
if (chunkcoordinates != null && this.world.getTypeId(chunkcoordinates.x, chunkcoordinates.y, chunkcoordinates.z) == Block.BED.id) {
BlockBed.a(this.world, chunkcoordinates.x, chunkcoordinates.y, chunkcoordinates.z, false);
@@ -920,16 +1014,16 @@ public abstract class EntityHuman extends EntityLiving {
}
if (flag2) {
- this.a(this.E);
+ this.a(this.F);
}
}
- private boolean w() {
- return this.world.getTypeId(this.E.x, this.E.y, this.E.z) == Block.BED.id;
+ private boolean C() {
+ return this.world.getTypeId(this.F.x, this.F.y, this.F.z) == Block.BED.id;
}
public static ChunkCoordinates getBed(World world, ChunkCoordinates chunkcoordinates) {
- IChunkProvider ichunkprovider = world.n();
+ IChunkProvider ichunkprovider = world.p();
ichunkprovider.getChunkAt(chunkcoordinates.x - 3 >> 4, chunkcoordinates.z - 3 >> 4);
ichunkprovider.getChunkAt(chunkcoordinates.x + 3 >> 4, chunkcoordinates.z - 3 >> 4);
@@ -973,13 +1067,13 @@ public abstract class EntityHuman extends EntityLiving {
public void a(Statistic statistic, int i) {}
- protected void S() {
- super.S();
+ protected void X() {
+ super.X();
this.a(StatisticList.u, 1);
if (this.isSprinting()) {
- this.b(0.8F);
+ this.c(0.8F);
} else {
- this.b(0.2F);
+ this.c(0.2F);
}
}
@@ -990,20 +1084,20 @@ public abstract class EntityHuman extends EntityLiving {
if (this.abilities.isFlying) {
double d3 = this.motY;
- float f2 = this.ak;
+ float f2 = this.al;
- this.ak = 0.05F;
+ this.al = 0.05F;
super.a(f, f1);
this.motY = d3 * 0.6D;
- this.ak = f2;
+ this.al = f2;
} else {
super.a(f, f1);
}
- this.a(this.locX - d0, this.locY - d1, this.locZ - d2);
+ this.b(this.locX - d0, this.locY - d1, this.locZ - d2);
}
- public void a(double d0, double d1, double d2) {
+ public void b(double d0, double d1, double d2) {
if (this.vehicle == null) {
int i;
@@ -1011,15 +1105,15 @@ public abstract class EntityHuman extends EntityLiving {
i = Math.round(MathHelper.a(d0 * d0 + d1 * d1 + d2 * d2) * 100.0F);
if (i > 0) {
this.a(StatisticList.q, i);
- this.b(0.015F * (float) i * 0.01F);
+ this.c(0.015F * (float) i * 0.01F);
}
- } else if (this.ao()) {
+ } else if (this.az()) {
i = Math.round(MathHelper.a(d0 * d0 + d2 * d2) * 100.0F);
if (i > 0) {
this.a(StatisticList.m, i);
- this.b(0.015F * (float) i * 0.01F);
+ this.c(0.015F * (float) i * 0.01F);
}
- } else if (this.p()) {
+ } else if (this.r()) {
if (d1 > 0.0D) {
this.a(StatisticList.o, (int) Math.round(d1 * 100.0D));
}
@@ -1028,9 +1122,9 @@ public abstract class EntityHuman extends EntityLiving {
if (i > 0) {
this.a(StatisticList.l, i);
if (this.isSprinting()) {
- this.b(0.099999994F * (float) i * 0.01F);
+ this.c(0.099999994F * (float) i * 0.01F);
} else {
- this.b(0.01F * (float) i * 0.01F);
+ this.c(0.01F * (float) i * 0.01F);
}
}
} else {
@@ -1063,13 +1157,13 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- protected void a(float f) {
+ protected void b(float f) {
if (!this.abilities.canFly) {
if (f >= 2.0F) {
this.a(StatisticList.n, (int) Math.round((double) f * 100.0D));
}
- super.a(f);
+ super.b(f);
}
}
@@ -1079,33 +1173,41 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- public void T() {
- if (this.H > 0) {
- this.H = 10;
+ public void Y() {
+ if (this.I > 0) {
+ this.I = 10;
} else {
- this.I = true;
+ this.J = true;
}
}
- public void d(int i) {
+ public void h(int i) {
+ this.q += i;
+ this.expLevel += (float) i / (float) this.Z();
this.exp += i;
- this.expTotal += i;
- while (this.exp >= this.U()) {
- this.exp -= this.U();
- this.y();
+ while (this.expLevel >= 1.0F) {
+ --this.expLevel;
+ this.D();
}
}
- public int U() {
- return (this.expLevel + 1) * 10;
+ public void b(int i) {
+ this.expTotal -= i;
+ if (this.expTotal < 0) {
+ this.expTotal = 0;
+ }
}
- private void y() {
- ++this.expLevel;
+ public int Z() {
+ return 7 + (this.expTotal * 7 >> 1);
}
- public void b(float f) {
+ private void D() {
+ ++this.expTotal;
+ }
+
+ public void c(float f) {
if (!this.abilities.isInvulnerable) {
if (!this.world.isStatic) {
this.foodData.a(f);
@@ -1117,12 +1219,12 @@ public abstract class EntityHuman extends EntityLiving {
return this.foodData;
}
- public boolean c(boolean flag) {
+ public boolean b(boolean flag) {
return (flag || this.foodData.b()) && !this.abilities.isInvulnerable;
}
- public boolean W() {
- return this.health > 0 && this.health < 20;
+ public boolean ab() {
+ return this.getHealth() > 0 && this.getHealth() < this.getMaxHealth();
}
public void a(ItemStack itemstack, int i) {
@@ -1130,24 +1232,38 @@ public abstract class EntityHuman extends EntityLiving {
this.d = itemstack;
this.e = i;
if (!this.world.isStatic) {
- this.h(true);
+ this.g(true);
}
}
}
- public boolean c(int i, int j, int k) {
+ public boolean d(int i, int j, int k) {
return true;
}
protected int a(EntityHuman entityhuman) {
- return this.expTotal >> 1;
+ int i = this.expTotal * 7;
+
+ return i > 100 ? 100 : i;
}
- protected boolean X() {
+ protected boolean ac() {
return true;
}
- public String Y() {
+ public String ad() {
return this.name;
}
+
+ public void e(int i) {}
+
+ public void copyTo(EntityHuman entityhuman) {
+ this.inventory.a(entityhuman.inventory);
+ this.health = entityhuman.health;
+ this.foodData = entityhuman.foodData;
+ this.expTotal = entityhuman.expTotal;
+ this.exp = entityhuman.exp;
+ this.expLevel = entityhuman.expLevel;
+ this.q = entityhuman.q;
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java
index 695e42e081..7f82da6105 100644
--- a/src/main/java/net/minecraft/server/EntityItem.java
+++ b/src/main/java/net/minecraft/server/EntityItem.java
@@ -29,7 +29,7 @@ public class EntityItem extends Entity {
this.motZ = (double) ((float) (Math.random() * 0.20000000298023224D - 0.10000000149011612D));
}
- protected boolean e_() {
+ protected boolean g_() {
return false;
}
@@ -41,8 +41,8 @@ public class EntityItem extends Entity {
protected void b() {}
- public void s_() {
- super.s_();
+ public void w_() {
+ super.w_();
// CraftBukkit start
int currentTick = (int) (System.currentTimeMillis() / 50);
this.pickupDelay -= (currentTick - this.lastTick);
@@ -87,7 +87,7 @@ public class EntityItem extends Entity {
}
}
- public boolean f_() {
+ public boolean i_() {
return this.world.a(this.boundingBox, Material.WATER, this);
}
@@ -96,7 +96,7 @@ public class EntityItem extends Entity {
}
public boolean damageEntity(DamageSource damagesource, int i) {
- this.aq();
+ this.aB();
this.f -= i;
if (this.f <= 0) {
this.die();
@@ -112,9 +112,9 @@ public class EntityItem extends Entity {
}
public void a(NBTTagCompound nbttagcompound) {
- this.f = nbttagcompound.d("Health") & 255;
- this.b = nbttagcompound.d("Age");
- NBTTagCompound nbttagcompound1 = nbttagcompound.k("Item");
+ this.f = nbttagcompound.e("Health") & 255;
+ this.b = nbttagcompound.e("Age");
+ NBTTagCompound nbttagcompound1 = nbttagcompound.l("Item");
this.itemStack = ItemStack.a(nbttagcompound1);
if (this.itemStack == null) {
@@ -153,6 +153,14 @@ public class EntityItem extends Entity {
entityhuman.a((Statistic) AchievementList.t);
}
+ if (this.itemStack.id == Item.DIAMOND.id) {
+ entityhuman.a((Statistic) AchievementList.w);
+ }
+
+ if (this.itemStack.id == Item.BLAZE_ROD.id) {
+ entityhuman.a((Statistic) AchievementList.z);
+ }
+
this.world.makeSound(this, "random.pop", 0.2F, ((this.random.nextFloat() - this.random.nextFloat()) * 0.7F + 1.0F) * 2.0F);
entityhuman.receive(this, i);
if (this.itemStack.count <= 0) {
@@ -162,7 +170,7 @@ public class EntityItem extends Entity {
}
}
- public String Y() {
+ public String ad() {
return StatisticCollector.a("item." + this.itemStack.k());
}
}
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index 0587045797..56e6dc8cdf 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -17,117 +17,124 @@ import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
public abstract class EntityLiving extends Entity {
public int maxNoDamageTicks = 20;
- public float S;
public float T;
- public float U = 0.0F;
+ public float U;
public float V = 0.0F;
- protected float W;
+ public float W = 0.0F;
protected float X;
protected float Y;
protected float Z;
- protected boolean aa = true;
+ protected float aa;
+ protected boolean ab = true;
protected String texture = "/mob/char.png";
- protected boolean ac = true;
- protected float ad = 0.0F;
- protected String ae = null;
- protected float af = 1.0F;
- protected int ag = 0;
- protected float ah = 0.0F;
- public boolean ai = false;
- public float aj = 0.1F;
- public float ak = 0.02F;
- public float al;
+ protected boolean ad = true;
+ protected float ae = 0.0F;
+ protected String af = null;
+ protected float ag = 1.0F;
+ protected int ah = 0;
+ protected float ai = 0.0F;
+ public boolean aj = false;
+ public float ak = 0.1F;
+ public float al = 0.02F;
public float am;
- public int health = 10;
- public int ao;
+ public float an;
+ protected int health = this.getMaxHealth();
+ public int ap;
+ protected int aq;
private int a;
public int hurtTicks;
- public int aq;
- public float ar = 0.0F;
+ public int as;
+ public float at = 0.0F;
public int deathTicks = 0;
public int attackTicks = 0;
- public float au;
- public float av;
- protected boolean aw = false;
- protected int ax;
- public int ay = -1;
- public float az = (float) (Math.random() * 0.8999999761581421D + 0.10000000149011612D);
- public float aA;
- public float aB;
+ public float aw;
+ public float ax;
+ protected boolean ay = false;
+ protected int az;
+ public int aA = -1;
+ public float aB = (float) (Math.random() * 0.8999999761581421D + 0.10000000149011612D);
public float aC;
- private EntityHuman b = null;
- private int c = 0;
- public int aD = 0;
- public int aE = 0;
+ public float aD;
+ public float aE;
+ protected EntityHuman aF = null;
+ protected int aG = 0;
+ public int aH = 0;
+ public int aI = 0;
protected HashMap effects = new HashMap();
- protected int aG;
- protected double aH;
- protected double aI;
- protected double aJ;
- protected double aK;
+ private boolean b = true;
+ private int c;
+ protected int aK;
protected double aL;
- float aM = 0.0F;
+ protected double aM;
+ protected double aN;
+ protected double aO;
+ protected double aP;
+ float aQ = 0.0F;
public int lastDamage = 0; // CraftBukkit - protected -> public
- protected int aO = 0;
- protected float aP;
- protected float aQ;
- protected float aR;
- protected boolean aS = false;
- protected float aT = 0.0F;
- protected float aU = 0.7F;
- private Entity d;
- protected int aV = 0;
+ protected int aS = 0;
+ protected float aT;
+ protected float aU;
+ protected float aV;
+ protected boolean aW = false;
+ protected float aX = 0.0F;
+ protected float aY = 0.7F;
+ private int d = 0;
+ private Entity e;
+ protected int aZ = 0;
public int expToDrop = 0; // CraftBukkit added
public EntityLiving(World world) {
super(world);
- this.aY = true;
- this.T = (float) (Math.random() + 1.0D) * 0.01F;
+ this.bc = true;
+ this.U = (float) (Math.random() + 1.0D) * 0.01F;
this.setPosition(this.locX, this.locY, this.locZ);
- this.S = (float) Math.random() * 12398.0F;
+ this.T = (float) Math.random() * 12398.0F;
this.yaw = (float) (Math.random() * 3.1415927410125732D * 2.0D);
- this.bI = 0.5F;
+ this.bM = 0.5F;
}
- protected void b() {}
-
- public boolean f(Entity entity) {
- return this.world.a(Vec3D.create(this.locX, this.locY + (double) this.t(), this.locZ), Vec3D.create(entity.locX, entity.locY + (double) entity.t(), entity.locZ)) == null;
+ protected void b() {
+ this.datawatcher.a(8, Integer.valueOf(this.c));
}
- public boolean r_() {
+ public boolean g(Entity entity) {
+ return this.world.a(Vec3D.create(this.locX, this.locY + (double) this.x(), this.locZ), Vec3D.create(entity.locX, entity.locY + (double) entity.x(), entity.locZ)) == null;
+ }
+
+ public boolean e_() {
return !this.dead;
}
- public boolean g() {
+ public boolean f_() {
return !this.dead;
}
- public float t() {
+ public float x() {
return this.width * 0.85F;
}
- public int e() {
+ public int h() {
return 80;
}
- public void Z() {
- String s = this.h();
+ public void ae() {
+ String s = this.c_();
if (s != null) {
- this.world.makeSound(this, s, this.l(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
+ this.world.makeSound(this, s, this.o(), this.w());
}
}
- public void aa() {
- this.al = this.am;
- super.aa();
+ public void af() {
+ this.am = this.an;
+ super.af();
+ MethodProfiler.a("mobBaseTick");
if (this.random.nextInt(1000) < this.a++) {
- this.a = -this.e();
- this.Z();
+ this.a = -this.h();
+ this.ae();
}
- if (this.ac() && this.O()) {
+ if (this.aj() && this.T()) {
// CraftBukkit start
EntityDamageEvent event = new EntityDamageEvent(this.getBukkitEntity(), EntityDamageEvent.DamageCause.SUFFOCATION, 1);
this.world.getServer().getPluginManager().callEvent(event);
@@ -138,18 +145,16 @@ public abstract class EntityLiving extends Entity {
// CraftBukkit end
}
- if (this.fireProof || this.world.isStatic) {
- this.fireTicks = 0;
+ if (this.ax() || this.world.isStatic) {
+ this.aw();
}
- int i;
+ if (this.aj() && this.a(Material.WATER) && !this.f() && !this.effects.containsKey(Integer.valueOf(MobEffectList.WATER_BREATHING.id))) {
+ this.setAirTicks(this.f(this.getAirTicks()));
+ if (this.getAirTicks() == -20) {
+ this.setAirTicks(0);
- if (this.ac() && this.a(Material.WATER) && !this.b_() && !this.effects.containsKey(Integer.valueOf(MobEffectList.WATER_BREATHING.id))) {
- --this.airTicks;
- if (this.airTicks == -20) {
- this.airTicks = 0;
-
- for (i = 0; i < 8; ++i) {
+ for (int i = 0; i < 8; ++i) {
float f = this.random.nextFloat() - this.random.nextFloat();
float f1 = this.random.nextFloat() - this.random.nextFloat();
float f2 = this.random.nextFloat() - this.random.nextFloat();
@@ -167,12 +172,12 @@ public abstract class EntityLiving extends Entity {
// CraftBukkit end
}
- this.fireTicks = 0;
+ this.aw();
} else {
- this.airTicks = this.maxAirTicks;
+ this.setAirTicks(300);
}
- this.au = this.av;
+ this.aw = this.ax;
if (this.attackTicks > 0) {
--this.attackTicks;
}
@@ -186,56 +191,28 @@ public abstract class EntityLiving extends Entity {
}
if (this.health <= 0) {
- ++this.deathTicks;
- if (this.deathTicks > 20) {
- // CraftBukkit start - update getExpReward() below if this changes!
- if (expToDrop > 0) {
- i = expToDrop;
-
- while (i > 0) {
- int j = EntityExperienceOrb.b(i);
-
- i -= j;
- this.world.addEntity(new EntityExperienceOrb(this.world, this.locX, this.locY, this.locZ, j));
- }
- }
- // CraftBukkit end
-
- this.ag();
- this.die();
-
- for (i = 0; i < 20; ++i) {
- double d0 = this.random.nextGaussian() * 0.02D;
- double d1 = this.random.nextGaussian() * 0.02D;
- double d2 = this.random.nextGaussian() * 0.02D;
-
- this.world.a("explode", this.locX + (double) (this.random.nextFloat() * this.length * 2.0F) - (double) this.length, this.locY + (double) (this.random.nextFloat() * this.width), this.locZ + (double) (this.random.nextFloat() * this.length * 2.0F) - (double) this.length, d0, d1, d2);
- }
- }
+ this.ag();
}
- if (this.c > 0) {
- --this.c;
+ if (this.aG > 0) {
+ --this.aG;
} else {
- this.b = null;
+ this.aF = null;
}
- this.aj();
- this.Z = this.Y;
- this.V = this.U;
+ this.aq();
+ this.aa = this.Z;
+ this.W = this.V;
this.lastYaw = this.yaw;
this.lastPitch = this.pitch;
- }
-
- protected int a(EntityHuman entityhuman) {
- return this.ax;
+ MethodProfiler.a();
}
// CraftBukkit start
public int getExpReward() {
- int exp = a(this.b);
-
- if (this.c > 0 || this.X()) {
+ int exp = a(this.aF);
+
+ if (!this.world.isStatic && (this.aG > 0 || this.ac()) && !this.l()) {
return exp;
} else {
return 0;
@@ -243,11 +220,47 @@ public abstract class EntityLiving extends Entity {
}
// CraftBukkit end
- protected boolean X() {
+ protected void ag() {
+ ++this.deathTicks;
+ if (this.deathTicks == 20) {
+ int i;
+
+ // CraftBukkit start - update getExpReward() below if the removed if() changes!
+ i = expToDrop;
+ while (i > 0) {
+ int j = EntityExperienceOrb.b(i);
+
+ i -= j;
+ this.world.addEntity(new EntityExperienceOrb(this.world, this.locX, this.locY, this.locZ, j));
+ }
+ // CraftBukkit end
+
+ this.an();
+ this.die();
+
+ for (i = 0; i < 20; ++i) {
+ double d0 = this.random.nextGaussian() * 0.02D;
+ double d1 = this.random.nextGaussian() * 0.02D;
+ double d2 = this.random.nextGaussian() * 0.02D;
+
+ this.world.a("explode", this.locX + (double) (this.random.nextFloat() * this.length * 2.0F) - (double) this.length, this.locY + (double) (this.random.nextFloat() * this.width), this.locZ + (double) (this.random.nextFloat() * this.length * 2.0F) - (double) this.length, d0, d1, d2);
+ }
+ }
+ }
+
+ protected int f(int i) {
+ return i - 1;
+ }
+
+ protected int a(EntityHuman entityhuman) {
+ return this.az;
+ }
+
+ protected boolean ac() {
return false;
}
- public void ab() {
+ public void ah() {
for (int i = 0; i < 20; ++i) {
double d0 = this.random.nextGaussian() * 0.02D;
double d1 = this.random.nextGaussian() * 0.02D;
@@ -258,33 +271,34 @@ public abstract class EntityLiving extends Entity {
}
}
- public void I() {
- super.I();
- this.W = this.X;
- this.X = 0.0F;
+ public void M() {
+ super.M();
+ this.X = this.Y;
+ this.Y = 0.0F;
+ this.fallDistance = 0.0F;
}
- public void s_() {
- super.s_();
- if (this.aD > 0) {
- if (this.aE <= 0) {
- this.aE = 60;
+ public void w_() {
+ super.w_();
+ if (this.aH > 0) {
+ if (this.aI <= 0) {
+ this.aI = 60;
}
- --this.aE;
- if (this.aE <= 0) {
- --this.aD;
+ --this.aI;
+ if (this.aI <= 0) {
+ --this.aH;
}
}
- this.s();
+ this.d();
double d0 = this.locX - this.lastX;
double d1 = this.locZ - this.lastZ;
float f = MathHelper.a(d0 * d0 + d1 * d1);
- float f1 = this.U;
+ float f1 = this.V;
float f2 = 0.0F;
- this.W = this.X;
+ this.X = this.Y;
float f3 = 0.0F;
if (f > 0.05F) {
@@ -294,7 +308,7 @@ public abstract class EntityLiving extends Entity {
f1 = (float) TrigMath.atan2(d1, d0) * 180.0F / 3.1415927F - 90.0F;
}
- if (this.am > 0.0F) {
+ if (this.an > 0.0F) {
f1 = this.yaw;
}
@@ -302,11 +316,11 @@ public abstract class EntityLiving extends Entity {
f3 = 0.0F;
}
- this.X += (f3 - this.X) * 0.3F;
+ this.Y += (f3 - this.Y) * 0.3F;
float f4;
- for (f4 = f1 - this.U; f4 < -180.0F; f4 += 360.0F) {
+ for (f4 = f1 - this.V; f4 < -180.0F; f4 += 360.0F) {
;
}
@@ -314,11 +328,11 @@ public abstract class EntityLiving extends Entity {
f4 -= 360.0F;
}
- this.U += f4 * 0.3F;
+ this.V += f4 * 0.3F;
float f5;
- for (f5 = this.yaw - this.U; f5 < -180.0F; f5 += 360.0F) {
+ for (f5 = this.yaw - this.V; f5 < -180.0F; f5 += 360.0F) {
;
}
@@ -336,9 +350,9 @@ public abstract class EntityLiving extends Entity {
f5 = 75.0F;
}
- this.U = this.yaw - f5;
+ this.V = this.yaw - f5;
if (f5 * f5 > 2500.0F) {
- this.U += f5 * 0.2F;
+ this.V += f5 * 0.2F;
}
if (flag) {
@@ -353,12 +367,12 @@ public abstract class EntityLiving extends Entity {
this.lastYaw += 360.0F;
}
- while (this.U - this.V < -180.0F) {
- this.V -= 360.0F;
+ while (this.V - this.W < -180.0F) {
+ this.W -= 360.0F;
}
- while (this.U - this.V >= 180.0F) {
- this.V += 360.0F;
+ while (this.V - this.W >= 180.0F) {
+ this.W += 360.0F;
}
while (this.pitch - this.lastPitch < -180.0F) {
@@ -369,7 +383,7 @@ public abstract class EntityLiving extends Entity {
this.lastPitch += 360.0F;
}
- this.Y += f2;
+ this.Z += f2;
}
protected void b(float f, float f1) {
@@ -377,11 +391,11 @@ public abstract class EntityLiving extends Entity {
}
// CraftBukkit start - delegate so we can handle providing a reason for health being regained
- public void c(int i) {
- c(i, RegainReason.CUSTOM);
+ public void d(int i) {
+ d(i, RegainReason.CUSTOM);
}
- public void c(int i, RegainReason regainReason) {
+ public void d(int i, RegainReason regainReason) {
if (this.health > 0) {
EntityRegainHealthEvent event = new EntityRegainHealthEvent(this.getBukkitEntity(), i, regainReason);
this.world.getServer().getPluginManager().callEvent(event);
@@ -390,23 +404,39 @@ public abstract class EntityLiving extends Entity {
this.health += event.getAmount();
}
// CraftBukkit end
- if (this.health > 20) {
- this.health = 20;
+
+ if (this.health > this.getMaxHealth()) {
+ this.health = this.getMaxHealth();
}
this.noDamageTicks = this.maxNoDamageTicks / 2;
}
}
+ public abstract int getMaxHealth();
+
+ public int getHealth() {
+ return this.health;
+ }
+
+ public void setHealth(int i) {
+ this.health = i;
+ if (i > this.getMaxHealth()) {
+ i = this.getMaxHealth();
+ }
+ }
+
public boolean damageEntity(DamageSource damagesource, int i) {
if (this.world.isStatic) {
return false;
} else {
- this.aO = 0;
+ this.aS = 0;
if (this.health <= 0) {
return false;
+ } else if (damagesource.k() && this.hasEffect(MobEffectList.FIRE_RESISTANCE)) {
+ return false;
} else {
- this.aB = 1.5F;
+ this.aD = 1.5F;
boolean flag = true;
if ((float) this.noDamageTicks > (float) this.maxNoDamageTicks / 2.0F) {
@@ -414,37 +444,37 @@ public abstract class EntityLiving extends Entity {
return false;
}
- this.b(damagesource, i - this.lastDamage);
+ this.c(damagesource, i - this.lastDamage);
this.lastDamage = i;
flag = false;
} else {
this.lastDamage = i;
- this.ao = this.health;
+ this.ap = this.health;
this.noDamageTicks = this.maxNoDamageTicks;
- this.b(damagesource, i);
- this.hurtTicks = this.aq = 10;
+ this.c(damagesource, i);
+ this.hurtTicks = this.as = 10;
}
- this.ar = 0.0F;
+ this.at = 0.0F;
Entity entity = damagesource.getEntity();
if (entity != null) {
if (entity instanceof EntityHuman) {
- this.c = 60;
- this.b = (EntityHuman) entity;
+ this.aG = 60;
+ this.aF = (EntityHuman) entity;
} else if (entity instanceof EntityWolf) {
EntityWolf entitywolf = (EntityWolf) entity;
if (entitywolf.isTamed()) {
- this.c = 60;
- this.b = null;
+ this.aG = 60;
+ this.aF = null;
}
}
}
if (flag) {
this.world.a(this, (byte) 2);
- this.aq();
+ this.aB();
if (entity != null) {
double d0 = entity.locX - this.locX;
@@ -454,21 +484,21 @@ public abstract class EntityLiving extends Entity {
d0 = (Math.random() - Math.random()) * 0.01D;
}
- this.ar = (float) (Math.atan2(d1, d0) * 180.0D / 3.1415927410125732D) - this.yaw;
+ this.at = (float) (Math.atan2(d1, d0) * 180.0D / 3.1415927410125732D) - this.yaw;
this.a(entity, i, d0, d1);
} else {
- this.ar = (float) ((int) (Math.random() * 2.0D) * 180);
+ this.at = (float) ((int) (Math.random() * 2.0D) * 180);
}
}
if (this.health <= 0) {
if (flag) {
- this.world.makeSound(this, this.j(), this.l(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
+ this.world.makeSound(this, this.n(), this.o(), this.w());
}
this.die(damagesource);
} else if (flag) {
- this.world.makeSound(this, this.i(), this.l(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
+ this.world.makeSound(this, this.m(), this.o(), this.w());
}
return true;
@@ -476,28 +506,66 @@ public abstract class EntityLiving extends Entity {
}
}
- protected void b(DamageSource damagesource, int i) {
+ private float w() {
+ return this.l() ? (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.5F : (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F;
+ }
+
+ protected int O() {
+ return 0;
+ }
+
+ protected void g(int i) {}
+
+ protected int d(DamageSource damagesource, int i) {
+ if (!damagesource.ignoresArmor()) {
+ int j = 25 - this.O();
+ int k = i * j + this.aq;
+
+ this.g(i);
+ i = k / 25;
+ this.aq = k % 25;
+ }
+
+ return i;
+ }
+
+ protected int b(DamageSource damagesource, int i) {
+ if (this.hasEffect(MobEffectList.RESISTANCE)) {
+ int j = (this.getEffect(MobEffectList.RESISTANCE).getAmplifier() + 1) * 5;
+ int k = 25 - j;
+ int l = i * k + this.aq;
+
+ i = l / 25;
+ this.aq = l % 25;
+ }
+
+ return i;
+ }
+
+ protected void c(DamageSource damagesource, int i) {
+ i = this.d(damagesource, i);
+ i = this.b(damagesource, i);
this.health -= i;
}
- protected float l() {
+ protected float o() {
return 1.0F;
}
- protected String h() {
+ protected String c_() {
return null;
}
- protected String i() {
- return "random.hurt";
+ protected String m() {
+ return "damage.hurtflesh";
}
- protected String j() {
- return "random.hurt";
+ protected String n() {
+ return "damage.hurtflesh";
}
public void a(Entity entity, int i, double d0, double d1) {
- this.ca = true;
+ this.cb = true;
float f = MathHelper.a(d0 * d0 + d1 * d1);
float f1 = 0.4F;
@@ -515,43 +583,58 @@ public abstract class EntityLiving extends Entity {
public void die(DamageSource damagesource) {
Entity entity = damagesource.getEntity();
- if (this.ag >= 0 && entity != null) {
- entity.b(this, this.ag);
+ if (this.ah >= 0 && entity != null) {
+ entity.b(this, this.ah);
}
if (entity != null) {
entity.a(this);
}
- this.aw = true;
+ this.ay = true;
if (!this.world.isStatic) {
- this.a(this.c > 0);
+ int i = 0;
+
+ if (entity instanceof EntityHuman) {
+ i = EnchantmentManager.f(((EntityHuman) entity).inventory);
+ }
+
+ if (!this.l()) {
+ this.a(this.aG > 0, i);
+ }
}
this.world.a(this, (byte) 3);
}
- protected void a(boolean flag) {
- int i = this.k();
+ protected void a(boolean flag, int i) {
+ int j = this.e();
// CraftBukkit start - whole method
List loot = new java.util.ArrayList();
- int count = this.random.nextInt(3);
- if ((i > 0) && (count > 0)) {
- loot.add(new org.bukkit.inventory.ItemStack(i, count));
+ if (j > 0) {
+ int k = this.random.nextInt(3);
+
+ if (i > 0) {
+ k += this.random.nextInt(i + 1);
+ }
+
+ if (k > 0) {
+ loot.add(new org.bukkit.inventory.ItemStack(j, k));
+ }
+
+ CraftEventFactory.callEntityDeathEvent(this, loot);
+ // CraftBukkit end
}
-
- CraftEventFactory.callEntityDeathEvent(this, loot);
- // CraftBukkit end
}
- protected int k() {
+ protected int e() {
return 0;
}
- protected void a(float f) {
- super.a(f);
+ protected void b(float f) {
+ super.b(f);
int i = (int) Math.ceil((double) (f - 3.0F));
if (i > 0) {
@@ -560,7 +643,15 @@ public abstract class EntityLiving extends Entity {
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled() && event.getDamage() != 0) {
- this.damageEntity(DamageSource.FALL, event.getDamage());
+ i = event.getDamage();
+
+ if (i > 4) {
+ this.world.makeSound(this, "damage.fallbig", 1.0F, 1.0F);
+ } else {
+ this.world.makeSound(this, "damage.fallsmall", 1.0F, 1.0F);
+ }
+
+ this.damageEntity(DamageSource.FALL, i);
}
// CraftBukkit end
@@ -577,7 +668,7 @@ public abstract class EntityLiving extends Entity {
public void a(float f, float f1) {
double d0;
- if (this.ao()) {
+ if (this.az()) {
d0 = this.locY;
this.a(f, f1, 0.02F);
this.move(this.motX, this.motY, this.motZ);
@@ -588,7 +679,7 @@ public abstract class EntityLiving extends Entity {
if (this.positionChanged && this.d(this.motX, this.motY + 0.6000000238418579D - this.locY + d0, this.motZ)) {
this.motY = 0.30000001192092896D;
}
- } else if (this.ap()) {
+ } else if (this.aA()) {
d0 = this.locY;
this.a(f, f1, 0.02F);
this.move(this.motX, this.motY, this.motZ);
@@ -612,7 +703,7 @@ public abstract class EntityLiving extends Entity {
}
float f3 = 0.16277136F / (f2 * f2 * f2);
- float f4 = this.onGround ? this.aj * f3 : this.ak;
+ float f4 = this.onGround ? this.ak * f3 : this.al;
this.a(f, f1, f4);
f2 = 0.91F;
@@ -625,7 +716,7 @@ public abstract class EntityLiving extends Entity {
}
}
- if (this.p()) {
+ if (this.r()) {
float f5 = 0.15F;
if (this.motX < (double) (-f5)) {
@@ -655,7 +746,7 @@ public abstract class EntityLiving extends Entity {
}
this.move(this.motX, this.motY, this.motZ);
- if (this.positionChanged && this.p()) {
+ if (this.positionChanged && this.r()) {
this.motY = 0.2D;
}
@@ -665,7 +756,7 @@ public abstract class EntityLiving extends Entity {
this.motZ *= (double) f2;
}
- this.aA = this.aB;
+ this.aC = this.aD;
d0 = this.locX - this.lastX;
double d1 = this.locZ - this.lastZ;
float f6 = MathHelper.a(d0 * d0 + d1 * d1) * 4.0F;
@@ -674,11 +765,11 @@ public abstract class EntityLiving extends Entity {
f6 = 1.0F;
}
- this.aB += (f6 - this.aB) * 0.4F;
- this.aC += this.aB;
+ this.aD += (f6 - this.aD) * 0.4F;
+ this.aE += this.aD;
}
- public boolean p() {
+ public boolean r() {
int i = MathHelper.floor(this.locX);
int j = MathHelper.floor(this.boundingBox.b);
int k = MathHelper.floor(this.locZ);
@@ -710,45 +801,49 @@ public abstract class EntityLiving extends Entity {
}
public void a(NBTTagCompound nbttagcompound) {
- this.health = nbttagcompound.d("Health");
+ this.health = nbttagcompound.e("Health");
if (!nbttagcompound.hasKey("Health")) {
- this.health = 10;
+ this.health = this.getMaxHealth();
}
- this.hurtTicks = nbttagcompound.d("HurtTime");
- this.deathTicks = nbttagcompound.d("DeathTime");
- this.attackTicks = nbttagcompound.d("AttackTime");
+ this.hurtTicks = nbttagcompound.e("HurtTime");
+ this.deathTicks = nbttagcompound.e("DeathTime");
+ this.attackTicks = nbttagcompound.e("AttackTime");
if (nbttagcompound.hasKey("ActiveEffects")) {
- NBTTagList nbttaglist = nbttagcompound.l("ActiveEffects");
+ NBTTagList nbttaglist = nbttagcompound.m("ActiveEffects");
- for (int i = 0; i < nbttaglist.c(); ++i) {
+ for (int i = 0; i < nbttaglist.d(); ++i) {
NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttaglist.a(i);
- byte b0 = nbttagcompound1.c("Id");
- byte b1 = nbttagcompound1.c("Amplifier");
- int j = nbttagcompound1.e("Duration");
+ byte b0 = nbttagcompound1.d("Id");
+ byte b1 = nbttagcompound1.d("Amplifier");
+ int j = nbttagcompound1.f("Duration");
this.effects.put(Integer.valueOf(b0), new MobEffect(b0, j, b1));
}
}
}
- public boolean ac() {
+ public boolean aj() {
return !this.dead && this.health > 0;
}
- public boolean b_() {
+ public boolean f() {
return false;
}
- public void s() {
- if (this.aG > 0) {
- double d0 = this.locX + (this.aH - this.locX) / (double) this.aG;
- double d1 = this.locY + (this.aI - this.locY) / (double) this.aG;
- double d2 = this.locZ + (this.aJ - this.locZ) / (double) this.aG;
+ public void d() {
+ if (this.d > 0) {
+ --this.d;
+ }
+
+ if (this.aK > 0) {
+ double d0 = this.locX + (this.aL - this.locX) / (double) this.aK;
+ double d1 = this.locY + (this.aM - this.locY) / (double) this.aK;
+ double d2 = this.locZ + (this.aN - this.locZ) / (double) this.aK;
double d3;
- for (d3 = this.aK - (double) this.yaw; d3 < -180.0D; d3 += 360.0D) {
+ for (d3 = this.aO - (double) this.yaw; d3 < -180.0D; d3 += 360.0D) {
;
}
@@ -756,9 +851,9 @@ public abstract class EntityLiving extends Entity {
d3 -= 360.0D;
}
- this.yaw = (float) ((double) this.yaw + d3 / (double) this.aG);
- this.pitch = (float) ((double) this.pitch + (this.aL - (double) this.pitch) / (double) this.aG);
- --this.aG;
+ this.yaw = (float) ((double) this.yaw + d3 / (double) this.aK);
+ this.pitch = (float) ((double) this.pitch + (this.aP - (double) this.pitch) / (double) this.aK);
+ --this.aK;
this.setPosition(d0, d1, d2);
this.c(this.yaw, this.pitch);
List list = this.world.getEntities(this, this.boundingBox.shrink(0.03125D, 0.0D, 0.03125D));
@@ -779,59 +874,71 @@ public abstract class EntityLiving extends Entity {
}
}
- if (this.H()) {
- this.aS = false;
- this.aP = 0.0F;
- this.aQ = 0.0F;
- this.aR = 0.0F;
- } else if (!this.ai) {
- this.c_();
+ MethodProfiler.a("ai");
+ if (this.L()) {
+ this.aW = false;
+ this.aT = 0.0F;
+ this.aU = 0.0F;
+ this.aV = 0.0F;
+ } else if (!this.aj) {
+ this.m_();
}
- boolean flag = this.ao();
- boolean flag1 = this.ap();
+ MethodProfiler.a();
+ boolean flag = this.az();
+ boolean flag1 = this.aA();
- if (this.aS) {
+ if (this.aW) {
if (flag) {
this.motY += 0.03999999910593033D;
} else if (flag1) {
this.motY += 0.03999999910593033D;
- } else if (this.onGround) {
- this.S();
+ } else if (this.onGround && this.d == 0) {
+ this.X();
+ this.d = 10;
}
+ } else {
+ this.d = 0;
}
- this.aP *= 0.98F;
- this.aQ *= 0.98F;
- this.aR *= 0.9F;
- float f = this.aj;
+ this.aT *= 0.98F;
+ this.aU *= 0.98F;
+ this.aV *= 0.9F;
+ float f = this.ak;
- this.aj *= this.D();
- this.a(this.aP, this.aQ);
- this.aj = f;
+ this.ak *= this.F();
+ this.a(this.aT, this.aU);
+ this.ak = f;
+ MethodProfiler.a("push");
List list1 = this.world.b((Entity) this, this.boundingBox.b(0.20000000298023224D, 0.0D, 0.20000000298023224D));
if (list1 != null && list1.size() > 0) {
for (int j = 0; j < list1.size(); ++j) {
Entity entity = (Entity) list1.get(j);
- if (entity.g()) {
+ if (entity.f_()) {
entity.collide(this);
}
}
}
+
+ MethodProfiler.a();
}
- protected boolean H() {
+ protected boolean L() {
return this.health <= 0;
}
- public boolean G() {
+ public boolean K() {
return false;
}
- protected void S() {
+ protected void X() {
this.motY = 0.41999998688697815D;
+ if (this.hasEffect(MobEffectList.JUMP)) {
+ this.motY += (double) ((float) (this.getEffect(MobEffectList.JUMP).getAmplifier() + 1) * 0.1F);
+ }
+
if (this.isSprinting()) {
float f = this.yaw * 0.017453292F;
@@ -839,78 +946,76 @@ public abstract class EntityLiving extends Entity {
this.motZ += (double) (MathHelper.cos(f) * 0.2F);
}
- this.ca = true;
+ this.cb = true;
}
protected boolean d_() {
return true;
}
- protected void ad() {
+ protected void ak() {
EntityHuman entityhuman = this.world.findNearbyPlayer(this, -1.0D);
- if (this.d_() && entityhuman != null) {
+ if (entityhuman != null) {
double d0 = entityhuman.locX - this.locX;
double d1 = entityhuman.locY - this.locY;
double d2 = entityhuman.locZ - this.locZ;
double d3 = d0 * d0 + d1 * d1 + d2 * d2;
- if (d3 > 16384.0D) {
+ if (this.d_() && d3 > 16384.0D) {
this.die();
}
- if (this.aO > 600 && this.random.nextInt(800) == 0) {
- if (d3 < 1024.0D) {
- this.aO = 0;
- } else {
- this.die();
- }
+ if (this.aS > 600 && this.random.nextInt(800) == 0 && d3 > 1024.0D && this.d_()) {
+ this.die();
+ } else if (d3 < 1024.0D) {
+ this.aS = 0;
}
}
}
- protected void c_() {
- ++this.aO;
+ protected void m_() {
+ ++this.aS;
EntityHuman entityhuman = this.world.findNearbyPlayer(this, -1.0D);
- this.ad();
- this.aP = 0.0F;
- this.aQ = 0.0F;
+ this.ak();
+ this.aT = 0.0F;
+ this.aU = 0.0F;
float f = 8.0F;
if (this.random.nextFloat() < 0.02F) {
entityhuman = this.world.findNearbyPlayer(this, (double) f);
if (entityhuman != null) {
- this.d = entityhuman;
- this.aV = 10 + this.random.nextInt(20);
+ this.e = entityhuman;
+ this.aZ = 10 + this.random.nextInt(20);
} else {
- this.aR = (this.random.nextFloat() - 0.5F) * 20.0F;
+ this.aV = (this.random.nextFloat() - 0.5F) * 20.0F;
}
}
- if (this.d != null) {
- this.a(this.d, 10.0F, (float) this.u());
- if (this.aV-- <= 0 || this.d.dead || this.d.h(this) > (double) (f * f)) {
- this.d = null;
+ if (this.e != null) {
+ this.a(this.e, 10.0F, (float) this.q_());
+ if (this.aZ-- <= 0 || this.e.dead || this.e.i(this) > (double) (f * f)) {
+ this.e = null;
}
} else {
if (this.random.nextFloat() < 0.05F) {
- this.aR = (this.random.nextFloat() - 0.5F) * 20.0F;
+ this.aV = (this.random.nextFloat() - 0.5F) * 20.0F;
}
- this.yaw += this.aR;
- this.pitch = this.aT;
+ this.yaw += this.aV;
+ this.pitch = this.aX;
}
- boolean flag = this.ao();
- boolean flag1 = this.ap();
+ boolean flag = this.az();
+ boolean flag1 = this.aA();
if (flag || flag1) {
- this.aS = this.random.nextFloat() < 0.8F;
+ this.aW = this.random.nextFloat() < 0.8F;
}
}
- protected int u() {
+ protected int q_() {
return 40;
}
@@ -922,9 +1027,9 @@ public abstract class EntityLiving extends Entity {
if (entity instanceof EntityLiving) {
EntityLiving entityliving = (EntityLiving) entity;
- d2 = this.locY + (double) this.t() - (entityliving.locY + (double) entityliving.t());
+ d2 = this.locY + (double) this.x() - (entityliving.locY + (double) entityliving.x());
} else {
- d2 = (entity.boundingBox.b + entity.boundingBox.e) / 2.0D - (this.locY + (double) this.t());
+ d2 = (entity.boundingBox.b + entity.boundingBox.e) / 2.0D - (this.locY + (double) this.x());
}
double d3 = (double) MathHelper.a(d0 * d0 + d1 * d1);
@@ -935,12 +1040,12 @@ public abstract class EntityLiving extends Entity {
this.yaw = this.b(this.yaw, f2, f);
}
- public boolean ae() {
- return this.d != null;
+ public boolean al() {
+ return this.e != null;
}
- public Entity af() {
- return this.d;
+ public Entity am() {
+ return this.e;
}
private float b(float f, float f1, float f2) {
@@ -965,13 +1070,13 @@ public abstract class EntityLiving extends Entity {
return f + f3;
}
- public void ag() {}
+ public void an() {}
- public boolean d() {
+ public boolean g() {
return this.world.containsEntity(this.boundingBox) && this.world.getEntities(this, this.boundingBox).size() == 0 && !this.world.c(this.boundingBox);
}
- protected void ah() {
+ protected void ao() {
// CraftBukkit start
EntityDamageByBlockEvent event = new EntityDamageByBlockEvent(null, this.getBukkitEntity(), EntityDamageEvent.DamageCause.VOID, 4);
this.world.getServer().getPluginManager().callEvent(event);
@@ -984,11 +1089,11 @@ public abstract class EntityLiving extends Entity {
// CraftBukkit end
}
- public Vec3D ai() {
- return this.c(1.0F);
+ public Vec3D ap() {
+ return this.d(1.0F);
}
- public Vec3D c(float f) {
+ public Vec3D d(float f) {
float f1;
float f2;
float f3;
@@ -1012,7 +1117,7 @@ public abstract class EntityLiving extends Entity {
}
}
- public int m() {
+ public int p() {
return 4;
}
@@ -1020,7 +1125,7 @@ public abstract class EntityLiving extends Entity {
return false;
}
- protected void aj() {
+ protected void aq() {
Iterator iterator = this.effects.keySet().iterator();
while (iterator.hasNext()) {
@@ -1029,7 +1134,47 @@ public abstract class EntityLiving extends Entity {
if (!mobeffect.tick(this) && !this.world.isStatic) {
iterator.remove();
- this.c(mobeffect);
+ this.d(mobeffect);
+ }
+ }
+
+ int i;
+
+ if (this.b) {
+ if (!this.world.isStatic) {
+ if (!this.effects.isEmpty()) {
+ i = PotionBrewer.a(this.effects.values());
+ this.datawatcher.watch(8, Integer.valueOf(i));
+ } else {
+ this.datawatcher.watch(8, Integer.valueOf(0));
+ }
+ }
+
+ this.b = false;
+ }
+
+ if (this.random.nextBoolean()) {
+ i = this.datawatcher.getInt(8);
+ if (i > 0) {
+ double d0 = (double) (i >> 16 & 255) / 255.0D;
+ double d1 = (double) (i >> 8 & 255) / 255.0D;
+ double d2 = (double) (i >> 0 & 255) / 255.0D;
+
+ this.world.a("mobSpell", this.locX + (this.random.nextDouble() - 0.5D) * (double) this.length, this.locY + this.random.nextDouble() * (double) this.width - (double) this.height, this.locZ + (this.random.nextDouble() - 0.5D) * (double) this.length, d0, d1, d2);
+ }
+ }
+ }
+
+ public void ar() {
+ Iterator iterator = this.effects.keySet().iterator();
+
+ while (iterator.hasNext()) {
+ Integer integer = (Integer) iterator.next();
+ MobEffect mobeffect = (MobEffect) this.effects.get(integer);
+
+ if (!this.world.isStatic) {
+ iterator.remove();
+ this.d(mobeffect);
}
}
}
@@ -1047,22 +1192,46 @@ public abstract class EntityLiving extends Entity {
}
public void addEffect(MobEffect mobeffect) {
- if (this.effects.containsKey(Integer.valueOf(mobeffect.getEffectId()))) {
- ((MobEffect) this.effects.get(Integer.valueOf(mobeffect.getEffectId()))).a(mobeffect);
- this.b((MobEffect) this.effects.get(Integer.valueOf(mobeffect.getEffectId())));
- } else {
- this.effects.put(Integer.valueOf(mobeffect.getEffectId()), mobeffect);
- this.a(mobeffect);
+ if (this.a(mobeffect)) {
+ if (this.effects.containsKey(Integer.valueOf(mobeffect.getEffectId()))) {
+ ((MobEffect) this.effects.get(Integer.valueOf(mobeffect.getEffectId()))).a(mobeffect);
+ this.c((MobEffect) this.effects.get(Integer.valueOf(mobeffect.getEffectId())));
+ } else {
+ this.effects.put(Integer.valueOf(mobeffect.getEffectId()), mobeffect);
+ this.b(mobeffect);
+ }
}
}
- protected void a(MobEffect mobeffect) {}
+ public boolean a(MobEffect mobeffect) {
+ if (this.t() == EnchantmentDamage.b) {
+ int i = mobeffect.getEffectId();
- protected void b(MobEffect mobeffect) {}
+ if (i == MobEffectList.REGENERATION.id || i == MobEffectList.POISON.id) {
+ return false;
+ }
+ }
- protected void c(MobEffect mobeffect) {}
+ return true;
+ }
- protected float D() {
+ public boolean at() {
+ return this.t() == EnchantmentDamage.b;
+ }
+
+ protected void b(MobEffect mobeffect) {
+ this.b = true;
+ }
+
+ protected void c(MobEffect mobeffect) {
+ this.b = true;
+ }
+
+ protected void d(MobEffect mobeffect) {
+ this.b = true;
+ }
+
+ protected float F() {
float f = 1.0F;
if (this.hasEffect(MobEffectList.FASTER_MOVEMENT)) {
@@ -1075,4 +1244,33 @@ public abstract class EntityLiving extends Entity {
return f;
}
+
+ public void a_(double d0, double d1, double d2) {
+ this.setPositionRotation(d0, d1, d2, this.yaw, this.pitch);
+ }
+
+ public boolean l() {
+ return false;
+ }
+
+ public EnchantmentDamage t() {
+ return EnchantmentDamage.a;
+ }
+
+ public void c(ItemStack itemstack) {
+ this.world.makeSound(this, "random.break", 0.8F, 0.8F + this.world.random.nextFloat() * 0.4F);
+
+ for (int i = 0; i < 5; ++i) {
+ Vec3D vec3d = Vec3D.create(((double) this.random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
+
+ vec3d.a(-this.pitch * 3.1415927F / 180.0F);
+ vec3d.b(-this.yaw * 3.1415927F / 180.0F);
+ Vec3D vec3d1 = Vec3D.create(((double) this.random.nextFloat() - 0.5D) * 0.3D, (double) (-this.random.nextFloat()) * 0.6D - 0.3D, 0.6D);
+
+ vec3d1.a(-this.pitch * 3.1415927F / 180.0F);
+ vec3d1.b(-this.yaw * 3.1415927F / 180.0F);
+ vec3d1 = vec3d1.add(this.locX, this.locY + (double) this.x(), this.locZ);
+ this.world.a("iconcrack_" + itemstack.getItem().id, vec3d1.a, vec3d1.b, vec3d1.c, vec3d.a, vec3d.b + 0.05D, vec3d.c);
+ }
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityMinecart.java b/src/main/java/net/minecraft/server/EntityMinecart.java
index 5cce3667a3..74aafbebb5 100644
--- a/src/main/java/net/minecraft/server/EntityMinecart.java
+++ b/src/main/java/net/minecraft/server/EntityMinecart.java
@@ -17,21 +17,18 @@ import org.bukkit.event.vehicle.VehicleUpdateEvent;
public class EntityMinecart extends Entity implements IInventory {
private ItemStack[] items;
- public int damage;
- public int b;
- public int c;
- private boolean i;
+ private int e;
+ private boolean f;
public int type;
- public int e;
- public double f;
- public double g;
+ public double b;
+ public double c;
private static final int[][][] matrix = new int[][][] { { { 0, 0, -1}, { 0, 0, 1}}, { { -1, 0, 0}, { 1, 0, 0}}, { { -1, -1, 0}, { 1, 0, 0}}, { { -1, 0, 0}, { 1, -1, 0}}, { { 0, 0, -1}, { 0, -1, 1}}, { { 0, -1, -1}, { 0, 0, 1}}, { { 0, 0, 1}, { 1, 0, 0}}, { { 0, 0, 1}, { -1, 0, 0}}, { { 0, 0, -1}, { -1, 0, 0}}, { { 0, 0, -1}, { 1, 0, 0}}};
- private int k;
+ private int h;
+ private double i;
+ private double j;
+ private double k;
private double l;
private double m;
- private double n;
- private double o;
- private double p;
// CraftBukkit start
public boolean slowWhenEmpty = true;
@@ -51,30 +48,33 @@ public class EntityMinecart extends Entity implements IInventory {
public EntityMinecart(World world) {
super(world);
this.items = new ItemStack[27]; // CraftBukkit
- this.damage = 0;
- this.b = 0;
- this.c = 1;
- this.i = false;
- this.aY = true;
+ this.e = 0;
+ this.f = false;
+ this.bc = true;
this.b(0.98F, 0.7F);
this.height = this.width / 2.0F;
}
- protected boolean e_() {
+ protected boolean g_() {
return false;
}
- protected void b() {}
+ protected void b() {
+ this.datawatcher.a(16, new Byte((byte) 0));
+ this.datawatcher.a(17, new Integer(0));
+ this.datawatcher.a(18, new Integer(1));
+ this.datawatcher.a(19, new Integer(0));
+ }
- public AxisAlignedBB b(Entity entity) {
+ public AxisAlignedBB a_(Entity entity) {
return entity.boundingBox;
}
- public AxisAlignedBB f() {
+ public AxisAlignedBB h_() {
return null;
}
- public boolean g() {
+ public boolean f_() {
return true;
}
@@ -92,7 +92,7 @@ public class EntityMinecart extends Entity implements IInventory {
this.world.getServer().getPluginManager().callEvent(new VehicleCreateEvent((Vehicle) this.getBukkitEntity())); // CraftBukkit
}
- public double n() {
+ public double q() {
return (double) this.width * 0.0D - 0.30000001192092896D;
}
@@ -112,11 +112,11 @@ public class EntityMinecart extends Entity implements IInventory {
i = event.getDamage();
// CraftBukkit end
- this.c = -this.c;
- this.b = 10;
- this.aq();
- this.damage += i * 10;
- if (this.damage > 40) {
+ this.d(-this.m());
+ this.c(10);
+ this.aB();
+ this.setDamage(this.getDamage() + i * 10);
+ if (this.getDamage() > 40) {
if (this.passenger != null) {
this.passenger.mount(this);
}
@@ -126,7 +126,7 @@ public class EntityMinecart extends Entity implements IInventory {
this.world.getServer().getPluginManager().callEvent(destroyEvent);
if (destroyEvent.isCancelled()) {
- this.damage = 40; // Maximize damage so this doesn't get triggered again right away
+ this.setDamage(40); // Maximize damage so this doesn't get triggered again right away
return true;
}
// CraftBukkit end
@@ -175,7 +175,7 @@ public class EntityMinecart extends Entity implements IInventory {
}
}
- public boolean r_() {
+ public boolean e_() {
return !this.dead;
}
@@ -210,7 +210,7 @@ public class EntityMinecart extends Entity implements IInventory {
super.die();
}
- public void s_() {
+ public void w_() {
// CraftBukkit start
double prevX = this.locX;
double prevY = this.locY;
@@ -219,34 +219,38 @@ public class EntityMinecart extends Entity implements IInventory {
float prevPitch = this.pitch;
// CraftBukkit end
- if (this.b > 0) {
- --this.b;
+ if (this.l() > 0) {
+ this.c(this.l() - 1);
}
- if (this.damage > 0) {
- --this.damage;
+ if (this.getDamage() > 0) {
+ this.setDamage(this.getDamage() - 1);
}
- double d0;
+ if (this.j() && this.random.nextInt(4) == 0) {
+ this.world.a("largesmoke", this.locX, this.locY + 0.8D, this.locZ, 0.0D, 0.0D, 0.0D);
+ }
- if (this.world.isStatic && this.k > 0) {
- if (this.k > 0) {
- double d1 = this.locX + (this.l - this.locX) / (double) this.k;
- double d2 = this.locY + (this.m - this.locY) / (double) this.k;
- double d3 = this.locZ + (this.n - this.locZ) / (double) this.k;
+ if (this.world.isStatic) {
+ if (this.h > 0) {
+ double d0 = this.locX + (this.i - this.locX) / (double) this.h;
+ double d1 = this.locY + (this.j - this.locY) / (double) this.h;
+ double d2 = this.locZ + (this.k - this.locZ) / (double) this.h;
- for (d0 = this.o - (double) this.yaw; d0 < -180.0D; d0 += 360.0D) {
+ double d3;
+
+ for (d3 = this.l - (double) this.yaw; d3 < -180.0D; d3 += 360.0D) {
;
}
- while (d0 >= 180.0D) {
- d0 -= 360.0D;
+ while (d3 >= 180.0D) {
+ d3 -= 360.0D;
}
- this.yaw = (float) ((double) this.yaw + d0 / (double) this.k);
- this.pitch = (float) ((double) this.pitch + (this.p - (double) this.pitch) / (double) this.k);
- --this.k;
- this.setPosition(d1, d2, d3);
+ this.yaw = (float) ((double) this.yaw + d3 / (double) this.h);
+ this.pitch = (float) ((double) this.pitch + (this.m - (double) this.pitch) / (double) this.h);
+ --this.h;
+ this.setPosition(d0, d1, d2);
this.c(this.yaw, this.pitch);
} else {
this.setPosition(this.locX, this.locY, this.locZ);
@@ -267,25 +271,23 @@ public class EntityMinecart extends Entity implements IInventory {
// CraftBukkit
double d4 = this.maxSpeed;
- boolean flag = false;
-
- d0 = 0.0078125D;
+ double d5 = 0.0078125D;
int l = this.world.getTypeId(i, j, k);
- if (BlockMinecartTrack.c(l)) {
+ if (BlockMinecartTrack.d(l)) {
Vec3D vec3d = this.h(this.locX, this.locY, this.locZ);
int i1 = this.world.getData(i, j, k);
this.locY = (double) j;
+ boolean flag = false;
boolean flag1 = false;
- boolean flag2 = false;
if (l == Block.GOLDEN_RAIL.id) {
- flag1 = (i1 & 8) != 0;
- flag2 = !flag1;
+ flag = (i1 & 8) != 0;
+ flag1 = !flag;
}
- if (((BlockMinecartTrack) Block.byId[l]).f()) {
+ if (((BlockMinecartTrack) Block.byId[l]).h()) {
i1 &= 7;
}
@@ -294,41 +296,41 @@ public class EntityMinecart extends Entity implements IInventory {
}
if (i1 == 2) {
- this.motX -= d0;
+ this.motX -= d5;
}
if (i1 == 3) {
- this.motX += d0;
+ this.motX += d5;
}
if (i1 == 4) {
- this.motZ += d0;
+ this.motZ += d5;
}
if (i1 == 5) {
- this.motZ -= d0;
+ this.motZ -= d5;
}
int[][] aint = matrix[i1];
- double d5 = (double) (aint[1][0] - aint[0][0]);
- double d6 = (double) (aint[1][2] - aint[0][2]);
- double d7 = Math.sqrt(d5 * d5 + d6 * d6);
- double d8 = this.motX * d5 + this.motZ * d6;
+ double d6 = (double) (aint[1][0] - aint[0][0]);
+ double d7 = (double) (aint[1][2] - aint[0][2]);
+ double d8 = Math.sqrt(d6 * d6 + d7 * d7);
+ double d9 = this.motX * d6 + this.motZ * d7;
- if (d8 < 0.0D) {
- d5 = -d5;
+ if (d9 < 0.0D) {
d6 = -d6;
+ d7 = -d7;
}
- double d9 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
+ double d10 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
- this.motX = d9 * d5 / d7;
- this.motZ = d9 * d6 / d7;
- double d10;
+ this.motX = d10 * d6 / d8;
+ this.motZ = d10 * d7 / d8;
+ double d11;
- if (flag2) {
- d10 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
- if (d10 < 0.03D) {
+ if (flag1) {
+ d11 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
+ if (d11 < 0.03D) {
this.motX *= 0.0D;
this.motY *= 0.0D;
this.motZ *= 0.0D;
@@ -339,39 +341,39 @@ public class EntityMinecart extends Entity implements IInventory {
}
}
- d10 = 0.0D;
- double d11 = (double) i + 0.5D + (double) aint[0][0] * 0.5D;
- double d12 = (double) k + 0.5D + (double) aint[0][2] * 0.5D;
- double d13 = (double) i + 0.5D + (double) aint[1][0] * 0.5D;
- double d14 = (double) k + 0.5D + (double) aint[1][2] * 0.5D;
+ d11 = 0.0D;
+ double d12 = (double) i + 0.5D + (double) aint[0][0] * 0.5D;
+ double d13 = (double) k + 0.5D + (double) aint[0][2] * 0.5D;
+ double d14 = (double) i + 0.5D + (double) aint[1][0] * 0.5D;
+ double d15 = (double) k + 0.5D + (double) aint[1][2] * 0.5D;
- d5 = d13 - d11;
d6 = d14 - d12;
- double d15;
+ d7 = d15 - d13;
double d16;
double d17;
+ double d18;
- if (d5 == 0.0D) {
+ if (d6 == 0.0D) {
this.locX = (double) i + 0.5D;
- d10 = this.locZ - (double) k;
- } else if (d6 == 0.0D) {
+ d11 = this.locZ - (double) k;
+ } else if (d7 == 0.0D) {
this.locZ = (double) k + 0.5D;
- d10 = this.locX - (double) i;
+ d11 = this.locX - (double) i;
} else {
- d16 = this.locX - d11;
- d15 = this.locZ - d12;
- d17 = (d16 * d5 + d15 * d6) * 2.0D;
- d10 = d17;
+ d16 = this.locX - d12;
+ d18 = this.locZ - d13;
+ d17 = (d16 * d6 + d18 * d7) * 2.0D;
+ d11 = d17;
}
- this.locX = d11 + d5 * d10;
- this.locZ = d12 + d6 * d10;
+ this.locX = d12 + d6 * d11;
+ this.locZ = d13 + d7 * d11;
this.setPosition(this.locX, this.locY + (double) this.height, this.locZ);
d16 = this.motX;
- d15 = this.motZ;
+ d18 = this.motZ;
if (this.passenger != null) {
d16 *= 0.75D;
- d15 *= 0.75D;
+ d18 *= 0.75D;
}
if (d16 < -d4) {
@@ -382,15 +384,15 @@ public class EntityMinecart extends Entity implements IInventory {
d16 = d4;
}
- if (d15 < -d4) {
- d15 = -d4;
+ if (d18 < -d4) {
+ d18 = -d4;
}
- if (d15 > d4) {
- d15 = d4;
+ if (d18 > d4) {
+ d18 = d4;
}
- this.move(d16, 0.0D, d15);
+ this.move(d16, 0.0D, d18);
if (aint[0][1] != 0 && MathHelper.floor(this.locX) - i == aint[0][0] && MathHelper.floor(this.locZ) - k == aint[0][2]) {
this.setPosition(this.locX, this.locY + (double) aint[0][1], this.locZ);
} else if (aint[1][1] != 0 && MathHelper.floor(this.locX) - i == aint[1][0] && MathHelper.floor(this.locZ) - k == aint[1][2]) {
@@ -404,18 +406,17 @@ public class EntityMinecart extends Entity implements IInventory {
this.motZ *= 0.996999979019165D;
} else {
if (this.type == 2) {
- d17 = (double) MathHelper.a(this.f * this.f + this.g * this.g);
+ d17 = (double) MathHelper.a(this.b * this.b + this.c * this.c);
if (d17 > 0.01D) {
- flag = true;
- this.f /= d17;
- this.g /= d17;
- double d18 = 0.04D;
+ this.b /= d17;
+ this.c /= d17;
+ double d19 = 0.04D;
this.motX *= 0.800000011920929D;
this.motY *= 0.0D;
this.motZ *= 0.800000011920929D;
- this.motX += this.f * d18;
- this.motZ += this.g * d18;
+ this.motX += this.b * d19;
+ this.motZ += this.c * d19;
} else {
this.motX *= 0.8999999761581421D;
this.motY *= 0.0D;
@@ -431,12 +432,12 @@ public class EntityMinecart extends Entity implements IInventory {
Vec3D vec3d1 = this.h(this.locX, this.locY, this.locZ);
if (vec3d1 != null && vec3d != null) {
- double d19 = (vec3d.b - vec3d1.b) * 0.05D;
+ double d20 = (vec3d.b - vec3d1.b) * 0.05D;
- d9 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
- if (d9 > 0.0D) {
- this.motX = this.motX / d9 * (d9 + d19);
- this.motZ = this.motZ / d9 * (d9 + d19);
+ d10 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
+ if (d10 > 0.0D) {
+ this.motX = this.motX / d10 * (d10 + d20);
+ this.motZ = this.motZ / d10 * (d10 + d20);
}
this.setPosition(this.locX, vec3d1.b, this.locZ);
@@ -446,35 +447,35 @@ public class EntityMinecart extends Entity implements IInventory {
int k1 = MathHelper.floor(this.locZ);
if (j1 != i || k1 != k) {
- d9 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
- this.motX = d9 * (double) (j1 - i);
- this.motZ = d9 * (double) (k1 - k);
+ d10 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
+ this.motX = d10 * (double) (j1 - i);
+ this.motZ = d10 * (double) (k1 - k);
}
- double d20;
+ double d21;
if (this.type == 2) {
- d20 = (double) MathHelper.a(this.f * this.f + this.g * this.g);
- if (d20 > 0.01D && this.motX * this.motX + this.motZ * this.motZ > 0.0010D) {
- this.f /= d20;
- this.g /= d20;
- if (this.f * this.motX + this.g * this.motZ < 0.0D) {
- this.f = 0.0D;
- this.g = 0.0D;
+ d21 = (double) MathHelper.a(this.b * this.b + this.c * this.c);
+ if (d21 > 0.01D && this.motX * this.motX + this.motZ * this.motZ > 0.0010D) {
+ this.b /= d21;
+ this.c /= d21;
+ if (this.b * this.motX + this.c * this.motZ < 0.0D) {
+ this.b = 0.0D;
+ this.c = 0.0D;
} else {
- this.f = this.motX;
- this.g = this.motZ;
+ this.b = this.motX;
+ this.c = this.motZ;
}
}
}
- if (flag1) {
- d20 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
- if (d20 > 0.01D) {
- double d21 = 0.06D;
+ if (flag) {
+ d21 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ);
+ if (d21 > 0.01D) {
+ double d22 = 0.06D;
- this.motX += this.motX / d20 * d21;
- this.motZ += this.motZ / d20 * d21;
+ this.motX += this.motX / d21 * d22;
+ this.motZ += this.motZ / d21 * d22;
} else if (i1 == 1) {
if (this.world.e(i - 1, j, k)) {
this.motX = 0.02D;
@@ -525,29 +526,29 @@ public class EntityMinecart extends Entity implements IInventory {
}
this.pitch = 0.0F;
- double d22 = this.lastX - this.locX;
- double d23 = this.lastZ - this.locZ;
+ double d23 = this.lastX - this.locX;
+ double d24 = this.lastZ - this.locZ;
- if (d22 * d22 + d23 * d23 > 0.0010D) {
- this.yaw = (float) (Math.atan2(d23, d22) * 180.0D / 3.141592653589793D);
- if (this.i) {
+ if (d23 * d23 + d24 * d24 > 0.0010D) {
+ this.yaw = (float) (Math.atan2(d24, d23) * 180.0D / 3.141592653589793D);
+ if (this.f) {
this.yaw += 180.0F;
}
}
- double d24;
+ double d25;
- for (d24 = (double) (this.yaw - this.lastYaw); d24 >= 180.0D; d24 -= 360.0D) {
+ for (d25 = (double) (this.yaw - this.lastYaw); d25 >= 180.0D; d25 -= 360.0D) {
;
}
- while (d24 < -180.0D) {
- d24 += 360.0D;
+ while (d25 < -180.0D) {
+ d25 += 360.0D;
}
- if (d24 < -170.0D || d24 >= 170.0D) {
+ if (d25 < -170.0D || d25 >= 170.0D) {
this.yaw += 180.0F;
- this.i = !this.i;
+ this.f = !this.f;
}
this.c(this.yaw, this.pitch);
@@ -571,25 +572,29 @@ 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.g() && entity instanceof EntityMinecart) {
+ if (entity != this.passenger && entity.f_() && entity instanceof EntityMinecart) {
entity.collide(this);
}
}
}
if (this.passenger != null && this.passenger.dead) {
- this.passenger.vehicle = null; // CraftBukkit
+ if (this.passenger.vehicle == this) {
+ this.passenger.vehicle = null;
+ }
+
this.passenger = null;
}
- if (flag && this.random.nextInt(4) == 0) {
+ if (this.e > 0) {
--this.e;
- if (this.e < 0) {
- this.f = this.g = 0.0D;
- }
-
- this.world.a("largesmoke", this.locX, this.locY + 0.8D, this.locZ, 0.0D, 0.0D, 0.0D);
}
+
+ if (this.e <= 0) {
+ this.b = this.c = 0.0D;
+ }
+
+ this.a(this.e > 0);
}
}
@@ -604,11 +609,11 @@ public class EntityMinecart extends Entity implements IInventory {
int l = this.world.getTypeId(i, j, k);
- if (BlockMinecartTrack.c(l)) {
+ if (BlockMinecartTrack.d(l)) {
int i1 = this.world.getData(i, j, k);
d1 = (double) j;
- if (((BlockMinecartTrack) Block.byId[l]).f()) {
+ if (((BlockMinecartTrack) Block.byId[l]).h()) {
i1 &= 7;
}
@@ -662,8 +667,8 @@ public class EntityMinecart extends Entity implements IInventory {
protected void b(NBTTagCompound nbttagcompound) {
nbttagcompound.a("Type", this.type);
if (this.type == 2) {
- nbttagcompound.a("PushX", this.f);
- nbttagcompound.a("PushZ", this.g);
+ nbttagcompound.a("PushX", this.b);
+ nbttagcompound.a("PushZ", this.c);
nbttagcompound.a("Fuel", (short) this.e);
} else if (this.type == 1) {
NBTTagList nbttaglist = new NBTTagList();
@@ -683,19 +688,19 @@ public class EntityMinecart extends Entity implements IInventory {
}
protected void a(NBTTagCompound nbttagcompound) {
- this.type = nbttagcompound.e("Type");
+ this.type = nbttagcompound.f("Type");
if (this.type == 2) {
- this.f = nbttagcompound.h("PushX");
- this.g = nbttagcompound.h("PushZ");
- this.e = nbttagcompound.d("Fuel");
+ this.b = nbttagcompound.i("PushX");
+ this.c = nbttagcompound.i("PushZ");
+ this.e = nbttagcompound.e("Fuel");
} else if (this.type == 1) {
- NBTTagList nbttaglist = nbttagcompound.l("Items");
+ NBTTagList nbttaglist = nbttagcompound.m("Items");
this.items = new ItemStack[this.getSize()];
- for (int i = 0; i < nbttaglist.c(); ++i) {
+ for (int i = 0; i < nbttaglist.d(); ++i) {
NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttaglist.a(i);
- int j = nbttagcompound1.c("Slot") & 255;
+ int j = nbttagcompound1.d("Slot") & 255;
if (j >= 0 && j < this.items.length) {
this.items[j] = ItemStack.a(nbttagcompound1);
@@ -749,17 +754,18 @@ public class EntityMinecart extends Entity implements IInventory {
d1 *= d3;
d0 *= 0.10000000149011612D;
d1 *= 0.10000000149011612D;
- d0 *= (double) (1.0F - this.bK);
- d1 *= (double) (1.0F - this.bK);
+ d0 *= (double) (1.0F - this.bO);
+ d1 *= (double) (1.0F - this.bO);
d0 *= 0.5D;
d1 *= 0.5D;
if (entity instanceof EntityMinecart) {
double d4 = entity.locX - this.locX;
double d5 = entity.locZ - this.locZ;
- double d6 = d4 * entity.motZ + d5 * entity.lastX;
+ Vec3D vec3d = Vec3D.create(d4, 0.0D, d5).b();
+ Vec3D vec3d1 = Vec3D.create((double) MathHelper.cos(this.yaw * 3.1415927F / 180.0F), 0.0D, (double) MathHelper.sin(this.yaw * 3.1415927F / 180.0F)).b();
+ double d6 = Math.abs(vec3d.a(vec3d1));
- d6 *= d6;
- if (d6 > 5.0D) {
+ if (d6 < 0.800000011920929D) {
return;
}
@@ -769,28 +775,28 @@ public class EntityMinecart extends Entity implements IInventory {
if (((EntityMinecart) entity).type == 2 && this.type != 2) {
this.motX *= 0.20000000298023224D;
this.motZ *= 0.20000000298023224D;
- this.b(entity.motX - d0, 0.0D, entity.motZ - d1);
- entity.motX *= 0.699999988079071D;
- entity.motZ *= 0.699999988079071D;
+ this.b_(entity.motX - d0, 0.0D, entity.motZ - d1);
+ entity.motX *= 0.949999988079071D;
+ entity.motZ *= 0.949999988079071D;
} else if (((EntityMinecart) entity).type != 2 && this.type == 2) {
entity.motX *= 0.20000000298023224D;
entity.motZ *= 0.20000000298023224D;
- entity.b(this.motX + d0, 0.0D, this.motZ + d1);
- this.motX *= 0.699999988079071D;
- this.motZ *= 0.699999988079071D;
+ entity.b_(this.motX + d0, 0.0D, this.motZ + d1);
+ this.motX *= 0.949999988079071D;
+ this.motZ *= 0.949999988079071D;
} else {
d7 /= 2.0D;
d8 /= 2.0D;
this.motX *= 0.20000000298023224D;
this.motZ *= 0.20000000298023224D;
- this.b(d7 - d0, 0.0D, d8 - d1);
+ this.b_(d7 - d0, 0.0D, d8 - d1);
entity.motX *= 0.20000000298023224D;
entity.motZ *= 0.20000000298023224D;
- entity.b(d7 + d0, 0.0D, d8 + d1);
+ entity.b_(d7 + d0, 0.0D, d8 + d1);
}
} else {
- this.b(-d0, 0.0D, -d1);
- entity.b(d0 / 4.0D, 0.0D, d1 / 4.0D);
+ this.b_(-d0, 0.0D, -d1);
+ entity.b_(d0 / 4.0D, 0.0D, d1 / 4.0D);
}
}
}
@@ -875,21 +881,57 @@ public class EntityMinecart extends Entity implements IInventory {
entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, (ItemStack) null);
}
- this.e += 1200;
+ this.e += 3600;
}
- this.f = this.locX - entityhuman.locX;
- this.g = this.locZ - entityhuman.locZ;
+ this.b = this.locX - entityhuman.locX;
+ this.c = this.locZ - entityhuman.locZ;
}
return true;
}
public boolean a(EntityHuman entityhuman) {
- return this.dead ? false : entityhuman.h(this) <= 64.0D;
+ return this.dead ? false : entityhuman.i(this) <= 64.0D;
}
- public void e() {}
+ protected boolean j() {
+ return (this.datawatcher.getByte(16) & 1) != 0;
+ }
- public void t_() {}
+ protected void a(boolean flag) {
+ if (flag) {
+ this.datawatcher.watch(16, Byte.valueOf((byte) (this.datawatcher.getByte(16) | 1)));
+ } else {
+ this.datawatcher.watch(16, Byte.valueOf((byte) (this.datawatcher.getByte(16) & -2)));
+ }
+ }
+
+ public void f() {}
+
+ public void g() {}
+
+ public void setDamage(int i) {
+ this.datawatcher.watch(19, Integer.valueOf(i));
+ }
+
+ public int getDamage() {
+ return this.datawatcher.getInt(19);
+ }
+
+ public void c(int i) {
+ this.datawatcher.watch(17, Integer.valueOf(i));
+ }
+
+ public int l() {
+ return this.datawatcher.getInt(17);
+ }
+
+ public void d(int i) {
+ this.datawatcher.watch(18, Integer.valueOf(i));
+ }
+
+ public int m() {
+ return this.datawatcher.getInt(18);
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityMonster.java b/src/main/java/net/minecraft/server/EntityMonster.java
index 2edf909fd5..79600d571b 100644
--- a/src/main/java/net/minecraft/server/EntityMonster.java
+++ b/src/main/java/net/minecraft/server/EntityMonster.java
@@ -13,31 +13,30 @@ public abstract class EntityMonster extends EntityCreature implements IMonster {
public EntityMonster(World world) {
super(world);
- this.health = 20;
- this.ax = 5;
+ this.az = 5;
}
- public void s() {
- float f = this.a_(1.0F);
+ public void d() {
+ float f = this.a(1.0F);
if (f > 0.5F) {
- this.aO += 2;
+ this.aS += 2;
}
- super.s();
+ super.d();
}
- public void s_() {
- super.s_();
+ public void w_() {
+ super.w_();
if (!this.world.isStatic && this.world.difficulty == 0) {
this.die();
}
}
protected Entity findTarget() {
- EntityHuman entityhuman = this.world.findNearbyPlayer(this, 16.0D);
+ EntityHuman entityhuman = this.world.b(this, 16.0D);
- return entityhuman != null && this.f(entityhuman) ? entityhuman : null;
+ return entityhuman != null && this.g(entityhuman) ? entityhuman : null;
}
public boolean damageEntity(DamageSource damagesource, int i) {
@@ -71,7 +70,17 @@ public abstract class EntityMonster extends EntityCreature implements IMonster {
}
}
- protected boolean c(Entity entity) {
+ protected boolean d(Entity entity) {
+ int i = this.damage;
+
+ if (this.hasEffect(MobEffectList.INCREASE_DAMAGE)) {
+ i += 3 << this.getEffect(MobEffectList.INCREASE_DAMAGE).getAmplifier();
+ }
+
+ if (this.hasEffect(MobEffectList.WEAKNESS)) {
+ i -= 2 << this.getEffect(MobEffectList.WEAKNESS).getAmplifier();
+ }
+
// 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.
@@ -80,22 +89,23 @@ public abstract class EntityMonster extends EntityCreature implements IMonster {
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(this.getBukkitEntity(), damagee, EntityDamageEvent.DamageCause.ENTITY_ATTACK, this.damage);
this.world.getServer().getPluginManager().callEvent(event);
+ i = event.getDamage();
if (!event.isCancelled()) {
- return entity.damageEntity(DamageSource.mobAttack(this), event.getDamage());
+ return entity.damageEntity(DamageSource.mobAttack(this), i);
}
return false;
}
// CraftBukkit end
- return entity.damageEntity(DamageSource.mobAttack((EntityLiving) this), this.damage);
+ return entity.damageEntity(DamageSource.mobAttack(this), i);
}
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;
- this.c(entity);
+ this.d(entity);
}
}
@@ -111,7 +121,7 @@ public abstract class EntityMonster extends EntityCreature implements IMonster {
super.a(nbttagcompound);
}
- public boolean d() {
+ protected boolean y() {
int i = MathHelper.floor(this.locX);
int j = MathHelper.floor(this.boundingBox.b);
int k = MathHelper.floor(this.locZ);
@@ -121,7 +131,7 @@ public abstract class EntityMonster extends EntityCreature implements IMonster {
} else {
int l = this.world.getLightLevel(i, j, k);
- if (this.world.t()) {
+ if (this.world.v()) {
int i1 = this.world.k;
this.world.k = 10;
@@ -129,7 +139,11 @@ public abstract class EntityMonster extends EntityCreature implements IMonster {
this.world.k = i1;
}
- return l <= this.random.nextInt(8) && super.d();
+ return l <= this.random.nextInt(8);
}
}
+
+ public boolean g() {
+ return this.y() && super.g();
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityPainting.java b/src/main/java/net/minecraft/server/EntityPainting.java
index c0441a8e1e..7ab4def7c2 100644
--- a/src/main/java/net/minecraft/server/EntityPainting.java
+++ b/src/main/java/net/minecraft/server/EntityPainting.java
@@ -43,7 +43,7 @@ public class EntityPainting extends Entity {
this.e = enumart;
this.b(l);
- if (this.i()) {
+ if (this.j()) {
arraylist.add(enumart);
}
}
@@ -121,10 +121,10 @@ public class EntityPainting extends Entity {
return i == 32 ? 0.5F : (i == 64 ? 0.5F : 0.0F);
}
- public void s_() {
+ public void w_() {
if (this.f++ == 100 && !this.world.isStatic) {
this.f = 0;
- if (!this.i()) {
+ if (!this.j()) {
// CraftBukkit start
Material material = this.world.getMaterial((int)this.locX, (int)this.locY, (int)this.locZ);
RemoveCause cause;
@@ -152,7 +152,7 @@ public class EntityPainting extends Entity {
}
}
- public boolean i() {
+ public boolean j() {
if (this.world.getEntities(this, this.boundingBox).size() > 0) {
return false;
} else {
@@ -210,7 +210,7 @@ public class EntityPainting extends Entity {
}
}
- public boolean r_() {
+ public boolean e_() {
return true;
}
@@ -234,12 +234,12 @@ public class EntityPainting extends Entity {
}
}
- if(!dead) {
- this.die();
- this.aq();
- this.world.addEntity(new EntityItem(this.world, this.locX, this.locY, this.locZ, new ItemStack(Item.PAINTING)));
- }
+ if (dead) return true;
// CraftBukkit end
+
+ this.die();
+ this.aB();
+ this.world.addEntity(new EntityItem(this.world, this.locX, this.locY, this.locZ, new ItemStack(Item.PAINTING)));
}
return true;
@@ -259,7 +259,7 @@ public class EntityPainting extends Entity {
++this.fireTicks;
if (this.fireTicks == 0) {
- this.fireTicks = 300;
+ this.j(8);
}
}
// CraftBukkit end
@@ -273,10 +273,10 @@ public class EntityPainting extends Entity {
}
public void a(NBTTagCompound nbttagcompound) {
- this.a = nbttagcompound.c("Dir");
- this.b = nbttagcompound.e("TileX");
- this.c = nbttagcompound.e("TileY");
- this.d = nbttagcompound.e("TileZ");
+ this.a = nbttagcompound.d("Dir");
+ this.b = nbttagcompound.f("TileX");
+ this.c = nbttagcompound.f("TileY");
+ this.d = nbttagcompound.f("TileZ");
String s = nbttagcompound.getString("Motive");
EnumArt[] aenumart = EnumArt.values();
int i = aenumart.length;
@@ -298,25 +298,19 @@ public class EntityPainting extends Entity {
public void move(double d0, double d1, double d2) {
if (!this.world.isStatic && d0 * d0 + d1 * d1 + d2 * d2 > 0.0D) {
+ if (dead) return; // CraftBukkit
- // CraftBukkit start
- if(!dead) {
- this.die();
- this.world.addEntity(new EntityItem(this.world, this.locX, this.locY, this.locZ, new ItemStack(Item.PAINTING)));
- }
- // CraftBukkit end
+ this.die();
+ this.world.addEntity(new EntityItem(this.world, this.locX, this.locY, this.locZ, new ItemStack(Item.PAINTING)));
}
}
- public void b(double d0, double d1, double d2) {
+ public void b_(double d0, double d1, double d2) {
if (!this.world.isStatic && d0 * d0 + d1 * d1 + d2 * d2 > 0.0D) {
+ if (dead) return; // CraftBukkit
- // CraftBukkit start
- if(!dead) {
- this.die();
- this.world.addEntity(new EntityItem(this.world, this.locX, this.locY, this.locZ, new ItemStack(Item.PAINTING)));
- }
- // CraftBukkit end
+ this.die();
+ this.world.addEntity(new EntityItem(this.world, this.locX, this.locY, this.locZ, new ItemStack(Item.PAINTING)));
}
}
}
diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java
index c4c0019490..8c6829f8a9 100644
--- a/src/main/java/net/minecraft/server/EntityPig.java
+++ b/src/main/java/net/minecraft/server/EntityPig.java
@@ -13,7 +13,12 @@ public class EntityPig extends EntityAnimal {
this.b(0.9F, 0.9F);
}
+ public int getMaxHealth() {
+ return 10;
+ }
+
protected void b() {
+ super.b();
this.datawatcher.a(16, Byte.valueOf((byte) 0));
}
@@ -24,23 +29,25 @@ public class EntityPig extends EntityAnimal {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- this.setSaddle(nbttagcompound.m("Saddle"));
+ this.setSaddle(nbttagcompound.n("Saddle"));
}
- protected String h() {
+ protected String c_() {
return "mob.pig";
}
- protected String i() {
+ protected String m() {
return "mob.pig";
}
- protected String j() {
+ protected String n() {
return "mob.pigdeath";
}
public boolean b(EntityHuman entityhuman) {
- if (this.hasSaddle() && !this.world.isStatic && (this.passenger == null || this.passenger == entityhuman)) {
+ if (super.b(entityhuman)) {
+ return true;
+ } else if (this.hasSaddle() && !this.world.isStatic && (this.passenger == null || this.passenger == entityhuman)) {
entityhuman.mount(this);
return true;
} else {
@@ -48,8 +55,8 @@ public class EntityPig extends EntityAnimal {
}
}
- protected int k() {
- return this.fireTicks > 0 ? Item.GRILLED_PORK.id : Item.PORK.id;
+ protected int e() {
+ return this.z() ? Item.GRILLED_PORK.id : Item.PORK.id;
}
public boolean hasSaddle() {
@@ -84,10 +91,14 @@ public class EntityPig extends EntityAnimal {
}
}
- protected void a(float f) {
- super.a(f);
+ protected void b(float f) {
+ super.b(f);
if (f > 5.0F && this.passenger instanceof EntityHuman) {
((EntityHuman) this.passenger).a((Statistic) AchievementList.u);
}
}
+
+ protected EntityAnimal createChild(EntityAnimal entityanimal) {
+ return new EntityPig(this.world);
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java
index 3c4cbd9874..84c42746f0 100644
--- a/src/main/java/net/minecraft/server/EntityPigZombie.java
+++ b/src/main/java/net/minecraft/server/EntityPigZombie.java
@@ -16,21 +16,21 @@ public class EntityPigZombie extends EntityZombie {
public EntityPigZombie(World world) {
super(world);
this.texture = "/mob/pigzombie.png";
- this.aU = 0.5F;
+ this.aY = 0.5F;
this.damage = 5;
this.fireProof = true;
}
- public void s_() {
- this.aU = this.target != null ? 0.95F : 0.5F;
+ public void w_() {
+ this.aY = this.target != null ? 0.95F : 0.5F;
if (this.soundDelay > 0 && --this.soundDelay == 0) {
- this.world.makeSound(this, "mob.zombiepig.zpigangry", this.l() * 2.0F, ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) * 1.8F);
+ this.world.makeSound(this, "mob.zombiepig.zpigangry", this.o() * 2.0F, ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) * 1.8F);
}
- super.s_();
+ super.w_();
}
- public boolean d() {
+ public boolean g() {
return this.world.difficulty > 0 && this.world.containsEntity(this.boundingBox) && this.world.getEntities(this, this.boundingBox).size() == 0 && !this.world.c(this.boundingBox);
}
@@ -41,15 +41,15 @@ public class EntityPigZombie extends EntityZombie {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- this.angerLevel = nbttagcompound.d("Anger");
+ this.angerLevel = nbttagcompound.e("Anger");
}
protected Entity findTarget() {
return this.angerLevel == 0 ? null : super.findTarget();
}
- public void s() {
- super.s();
+ public void d() {
+ super.d();
}
public boolean damageEntity(DamageSource damagesource, int i) {
@@ -64,17 +64,17 @@ public class EntityPigZombie extends EntityZombie {
if (entity1 instanceof EntityPigZombie) {
EntityPigZombie entitypigzombie = (EntityPigZombie) entity1;
- entitypigzombie.e(entity);
+ entitypigzombie.f(entity);
}
}
- this.e(entity);
+ this.f(entity);
}
return super.damageEntity(damagesource, i);
}
- private void e(Entity entity) {
+ private void f(Entity entity) {
// CraftBukkit start
org.bukkit.entity.Entity bukkitTarget = entity == null ? null : entity.getBukkitEntity();
@@ -97,19 +97,35 @@ public class EntityPigZombie extends EntityZombie {
this.soundDelay = this.random.nextInt(40);
}
- protected String h() {
+ protected String c_() {
return "mob.zombiepig.zpig";
}
- protected String i() {
+ protected String m() {
return "mob.zombiepig.zpighurt";
}
- protected String j() {
+ protected String n() {
return "mob.zombiepig.zpigdeath";
}
- protected int k() {
- return Item.GRILLED_PORK.id;
+ protected void a(boolean flag, int i) {
+ int j = this.random.nextInt(2 + i);
+
+ int k;
+
+ for (k = 0; k < j; ++k) {
+ this.b(Item.ROTTEN_FLESH.id, 1);
+ }
+
+ j = this.random.nextInt(2 + i);
+
+ for (k = 0; k < j; ++k) {
+ this.b(Item.GOLD_NUGGET.id, 1);
+ }
+ }
+
+ protected int e() {
+ return Item.ROTTEN_FLESH.id;
}
}
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
index 45cc613c3a..2bcef14b72 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -24,15 +24,16 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
public double e;
public List chunkCoordIntPairQueue = new LinkedList();
public Set playerChunkCoordIntPairs = new HashSet();
- 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;
+ private int cd = -99999999;
+ private boolean ce = true;
+ private int cf = -99999999;
+ private int cg = 60;
+ private ItemStack[] ch = new ItemStack[] { null, null, null, null, null};
+ private int ci = 0;
public boolean h;
public int i;
+ public boolean j = false;
public EntityPlayer(MinecraftServer minecraftserver, World world, String s, ItemInWorldManager iteminworldmanager) {
super(world);
@@ -51,7 +52,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.bI = 0.0F;
+ this.bM = 0.0F;
this.name = s;
this.height = 0.0F;
@@ -69,7 +70,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
if (nbttagcompound.hasKey("playerGameType")) {
- this.itemInWorldManager.a(nbttagcompound.e("playerGameType"));
+ this.itemInWorldManager.a(nbttagcompound.f("playerGameType"));
}
}
@@ -106,38 +107,43 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
// CraftBukkit end
}
+ public void b(int i) {
+ super.b(i);
+ this.cf = -1;
+ }
+
public void syncInventory() {
this.activeContainer.a((ICrafting) this);
}
public ItemStack[] getEquipment() {
- return this.cg;
+ return this.ch;
}
- protected void m_() {
+ protected void w() {
this.height = 0.0F;
}
- public float t() {
+ public float x() {
return 1.62F;
}
- public void s_() {
+ public void w_() {
this.itemInWorldManager.c();
- --this.cf;
+ --this.cg;
this.activeContainer.a();
for (int i = 0; i < 5; ++i) {
- ItemStack itemstack = this.b(i);
+ ItemStack itemstack = this.c(i);
- if (itemstack != this.cg[i]) {
+ if (itemstack != this.ch[i]) {
this.b.getTracker(this.dimension).a(this, new Packet5EntityEquipment(this.id, i, itemstack));
- this.cg[i] = itemstack;
+ this.ch[i] = itemstack;
}
}
}
- public ItemStack b(int i) {
+ public ItemStack c(int i) {
return i == 0 ? this.inventory.getItemInHand() : this.inventory.armor[i - 1];
}
@@ -179,7 +185,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
}
public boolean damageEntity(DamageSource damagesource, int i) {
- if (this.cf > 0) {
+ if (this.cg > 0) {
return false;
} else {
// CraftBukkit - this.b.pvpMode -> this.world.pvpMode
@@ -203,21 +209,21 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
}
}
- protected boolean n_() {
+ protected boolean y() {
return this.b.pvpMode;
}
- public void c(int i) {
- super.c(i, RegainReason.EATING);
+ public void d(int i) {
+ super.d(i);
}
- public void b(boolean flag) {
- super.s_();
+ public void a(boolean flag) {
+ super.w_();
for (int i = 0; i < this.inventory.getSize(); ++i) {
ItemStack itemstack = this.inventory.getItem(i);
- if (itemstack != null && Item.byId[itemstack.id].i_() && this.netServerHandler.b() <= 2) {
+ if (itemstack != null && Item.byId[itemstack.id].n_() && this.netServerHandler.b() <= 2) {
Packet packet = ((ItemWorldMapBase) Item.byId[itemstack.id]).c(itemstack, this.world, this);
if (packet != null) {
@@ -240,31 +246,17 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
WorldServer worldserver = this.b.getWorldServer(this.dimension);
this.chunkCoordIntPairQueue.remove(chunkcoordintpair);
- NetServerHandler netserverhandler = this.netServerHandler;
+ this.netServerHandler.sendPacket(new Packet51MapChunk(chunkcoordintpair.x * 16, 0, chunkcoordintpair.z * 16, 16, worldserver.height, 16, worldserver));
+ List list = worldserver.getTileEntities(chunkcoordintpair.x * 16, 0, chunkcoordintpair.z * 16, chunkcoordintpair.x * 16 + 16, worldserver.height, chunkcoordintpair.z * 16 + 16);
- 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));
+ for (int j = 0; j < list.size(); ++j) {
+ this.a((TileEntity) list.get(j));
}
}
}
}
- if (this.I) {
+ if (this.J) {
//if (this.b.propertyManager.getBoolean("allow-nether", true)) { // CraftBukkit
if (this.activeContainer != this.defaultContainer) {
this.closeInventory();
@@ -273,49 +265,80 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
if (this.vehicle != null) {
this.mount(this.vehicle);
} else {
- 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.K += 0.0125F;
+ if (this.K >= 1.0F) {
+ this.K = 1.0F;
+ this.I = 10;
+ boolean flag2 = false;
+ byte b0;
+
+ if (this.dimension == -1) {
+ b0 = 0;
+ } else {
+ b0 = -1;
+ }
+
+ this.b.serverConfigurationManager.a(this, b0);
+ this.cf = -1;
this.cc = -1;
+ this.cd = -1;
+ this.a((Statistic) AchievementList.x);
}
}
- this.I = false;
+ this.J = false;
//} // CraftBukkit
} else {
- if (this.J > 0.0F) {
- this.J -= 0.05F;
+ if (this.K > 0.0F) {
+ this.K -= 0.05F;
}
- if (this.J < 0.0F) {
- this.J = 0.0F;
+ if (this.K < 0.0F) {
+ this.K = 0.0F;
}
}
- if (this.H > 0) {
- --this.H;
+ if (this.I > 0) {
+ --this.I;
}
- if (this.health != this.cb || this.cc != this.foodData.a() || this.foodData.c() == 0.0F != this.cd) {
- this.netServerHandler.sendPacket(new Packet8UpdateHealth(this.health, this.foodData.a(), this.foodData.c()));
- this.cb = this.health;
- this.cc = this.foodData.a();
- this.cd = this.foodData.c() == 0.0F;
+ if (this.getHealth() != this.cc || this.cd != this.foodData.a() || this.foodData.c() == 0.0F != this.ce) {
+ this.netServerHandler.sendPacket(new Packet8UpdateHealth(this.getHealth(), this.foodData.a(), this.foodData.c()));
+ this.cc = this.getHealth();
+ this.cd = this.foodData.a();
+ this.ce = this.foodData.c() == 0.0F;
}
- if (this.expTotal != this.ce) {
- this.ce = this.expTotal;
- this.netServerHandler.sendPacket(new Packet43SetExperience(this.exp, this.expTotal, this.expLevel));
+ if (this.exp != this.cf) {
+ this.cf = this.exp;
+ this.netServerHandler.sendPacket(new Packet43SetExperience(this.expLevel, this.exp, this.expTotal));
+ }
+ }
+
+ public void e(int i) {
+ if (this.dimension == 1 && i == 1) {
+ this.a((Statistic) AchievementList.C);
+ this.world.kill(this);
+ this.j = true;
+ this.netServerHandler.sendPacket(new Packet70Bed(4, 0));
+ } else {
+ this.a((Statistic) AchievementList.B);
+ ChunkCoordinates chunkcoordinates = this.b.getWorldServer(i).d();
+
+ if (chunkcoordinates != null) {
+ this.netServerHandler.a((double) chunkcoordinates.x, (double) chunkcoordinates.y, (double) chunkcoordinates.z, 0.0F, 0.0F);
+ }
+
+ this.b.serverConfigurationManager.a(this, 1);
+ this.cf = -1;
+ this.cc = -1;
+ this.cd = -1;
}
}
private void a(TileEntity tileentity) {
if (tileentity != null) {
- Packet packet = tileentity.l();
+ Packet packet = tileentity.k();
if (packet != null) {
this.netServerHandler.sendPacket(packet);
@@ -344,17 +367,17 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
this.activeContainer.a();
}
- public void v() {
- if (!this.s) {
- this.t = -1;
- this.s = true;
+ public void r_() {
+ if (!this.t) {
+ this.u = -1;
+ this.t = true;
EntityTracker entitytracker = this.b.getTracker(this.dimension);
entitytracker.a(this, new Packet18ArmAnimation(this, 1));
}
}
- public void w() {}
+ public void A() {}
public EnumBedError a(int i, int j, int k) {
EnumBedError enumbederror = super.a(i, j, k);
@@ -406,39 +429,55 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
super.a(d0, flag);
}
- private void au() {
- this.ch = this.ch % 100 + 1;
+ private void aH() {
+ this.ci = this.ci % 100 + 1;
}
public void b(int i, int j, int k) {
- this.au();
- this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ch, 1, "Crafting", 9));
+ this.aH();
+ this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ci, 1, "Crafting", 9));
this.activeContainer = new ContainerWorkbench(this.inventory, this.world, i, j, k);
- this.activeContainer.windowId = this.ch;
+ this.activeContainer.windowId = this.ci;
+ this.activeContainer.a((ICrafting) this);
+ }
+
+ public void c(int i, int j, int k) {
+ this.aH();
+ this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ci, 4, "Enchanting", 9));
+ this.activeContainer = new ContainerEnchantTable(this.inventory, this.world, i, j, k);
+ this.activeContainer.windowId = this.ci;
this.activeContainer.a((ICrafting) this);
}
public void a(IInventory iinventory) {
- this.au();
- this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ch, 0, iinventory.getName(), iinventory.getSize()));
+ this.aH();
+ this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ci, 0, iinventory.getName(), iinventory.getSize()));
this.activeContainer = new ContainerChest(this.inventory, iinventory);
- this.activeContainer.windowId = this.ch;
+ this.activeContainer.windowId = this.ci;
this.activeContainer.a((ICrafting) this);
}
public void a(TileEntityFurnace tileentityfurnace) {
- this.au();
- this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ch, 2, tileentityfurnace.getName(), tileentityfurnace.getSize()));
+ this.aH();
+ this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ci, 2, tileentityfurnace.getName(), tileentityfurnace.getSize()));
this.activeContainer = new ContainerFurnace(this.inventory, tileentityfurnace);
- this.activeContainer.windowId = this.ch;
+ this.activeContainer.windowId = this.ci;
this.activeContainer.a((ICrafting) this);
}
public void a(TileEntityDispenser tileentitydispenser) {
- this.au();
- this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ch, 3, tileentitydispenser.getName(), tileentitydispenser.getSize()));
+ this.aH();
+ this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ci, 3, tileentitydispenser.getName(), tileentitydispenser.getSize()));
this.activeContainer = new ContainerDispenser(this.inventory, tileentitydispenser);
- this.activeContainer.windowId = this.ch;
+ this.activeContainer.windowId = this.ci;
+ this.activeContainer.a((ICrafting) this);
+ }
+
+ public void a(TileEntityBrewingStand tileentitybrewingstand) {
+ this.aH();
+ this.netServerHandler.sendPacket(new Packet100OpenWindow(this.ci, 5, tileentitybrewingstand.getName(), tileentitybrewingstand.getSize()));
+ this.activeContainer = new ContainerBrewingStand(this.inventory, tileentitybrewingstand);
+ this.activeContainer.windowId = this.ci;
this.activeContainer.a((ICrafting) this);
}
@@ -467,24 +506,24 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
public void closeInventory() {
this.netServerHandler.sendPacket(new Packet101CloseWindow(this.activeContainer.windowId));
- this.z();
+ this.D();
}
- public void y() {
+ public void C() {
if (!this.h) {
this.netServerHandler.sendPacket(new Packet103SetSlot(-1, -1, this.inventory.l()));
}
}
- public void z() {
+ public void D() {
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.aP = f;
- this.aQ = f1;
- this.aS = flag;
+ this.aT = f;
+ this.aU = f1;
+ this.aW = flag;
this.setSneak(flag1);
this.pitch = f2;
this.yaw = f3;
@@ -503,7 +542,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
}
}
- public void A() {
+ public void E() {
if (this.vehicle != null) {
this.mount(this.vehicle);
}
@@ -517,8 +556,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
}
}
- public void B() {
- this.cb = -99999999;
+ public void s_() {
+ this.cc = -99999999;
}
public void a(String s) {
@@ -528,25 +567,20 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
this.netServerHandler.sendPacket(new Packet3Chat(s1));
}
- protected void C() {
+ protected void G() {
this.netServerHandler.sendPacket(new Packet38EntityStatus(this.id, (byte) 9));
- super.C();
+ super.G();
}
public void a(ItemStack itemstack, int i) {
super.a(itemstack, i);
- if (itemstack != null && itemstack.getItem() != null && itemstack.getItem().b(itemstack) == EnumAnimation.b) {
+ if (itemstack != null && itemstack.getItem() != null && itemstack.getItem().d(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));
@@ -554,9 +588,30 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
protected void c(MobEffect mobeffect) {
super.c(mobeffect);
+ this.netServerHandler.sendPacket(new Packet41MobEffect(this.id, mobeffect));
+ }
+
+ protected void d(MobEffect mobeffect) {
+ super.d(mobeffect);
this.netServerHandler.sendPacket(new Packet42RemoveMobEffect(this.id, mobeffect));
}
+ public void a_(double d0, double d1, double d2) {
+ this.netServerHandler.a(d0, d1, d2, this.yaw, this.pitch);
+ }
+
+ public void c(Entity entity) {
+ EntityTracker entitytracker = this.b.getTracker(this.dimension);
+
+ entitytracker.sendPacketToEntity(this, new Packet18ArmAnimation(entity, 6));
+ }
+
+ public void d(Entity entity) {
+ EntityTracker entitytracker = this.b.getTracker(this.dimension);
+
+ entitytracker.sendPacketToEntity(this, new Packet18ArmAnimation(entity, 7));
+ }
+
// CraftBukkit start
public long timeOffset = 0;
public boolean relativeTime = true;
diff --git a/src/main/java/net/minecraft/server/EntityProjectile.java b/src/main/java/net/minecraft/server/EntityProjectile.java
new file mode 100644
index 0000000000..018580e54b
--- /dev/null
+++ b/src/main/java/net/minecraft/server/EntityProjectile.java
@@ -0,0 +1,224 @@
+package net.minecraft.server;
+
+import java.util.List;
+
+public abstract class EntityProjectile extends Entity {
+
+ private int blockX = -1;
+ private int blockY = -1;
+ private int blockZ = -1;
+ private int inBlockId = 0;
+ protected boolean inGround = false;
+ public int shake = 0;
+ public EntityLiving shooter; // CraftBukkit - prot to public
+ private int h;
+ private int i = 0;
+
+ public EntityProjectile(World world) {
+ super(world);
+ this.b(0.25F, 0.25F);
+ }
+
+ protected void b() {}
+
+ public EntityProjectile(World world, EntityLiving entityliving) {
+ super(world);
+ this.shooter = entityliving;
+ this.b(0.25F, 0.25F);
+ this.setPositionRotation(entityliving.locX, entityliving.locY + (double) entityliving.x(), entityliving.locZ, entityliving.yaw, entityliving.pitch);
+ this.locX -= (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * 0.16F);
+ this.locY -= 0.10000000149011612D;
+ this.locZ -= (double) (MathHelper.sin(this.yaw / 180.0F * 3.1415927F) * 0.16F);
+ this.setPosition(this.locX, this.locY, this.locZ);
+ this.height = 0.0F;
+ float f = 0.4F;
+
+ this.motX = (double) (-MathHelper.sin(this.yaw / 180.0F * 3.1415927F) * MathHelper.cos(this.pitch / 180.0F * 3.1415927F) * f);
+ this.motZ = (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * MathHelper.cos(this.pitch / 180.0F * 3.1415927F) * f);
+ this.motY = (double) (-MathHelper.sin((this.pitch + this.d()) / 180.0F * 3.1415927F) * f);
+ this.a(this.motX, this.motY, this.motZ, this.c(), 1.0F);
+ }
+
+ public EntityProjectile(World world, double d0, double d1, double d2) {
+ super(world);
+ this.h = 0;
+ this.b(0.25F, 0.25F);
+ this.setPosition(d0, d1, d2);
+ this.height = 0.0F;
+ }
+
+ protected float c() {
+ return 1.5F;
+ }
+
+ protected float d() {
+ return 0.0F;
+ }
+
+ public void a(double d0, double d1, double d2, float f, float f1) {
+ float f2 = MathHelper.a(d0 * d0 + d1 * d1 + d2 * d2);
+
+ d0 /= (double) f2;
+ d1 /= (double) f2;
+ d2 /= (double) f2;
+ d0 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
+ d1 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
+ d2 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
+ d0 *= (double) f;
+ d1 *= (double) f;
+ d2 *= (double) f;
+ this.motX = d0;
+ this.motY = d1;
+ this.motZ = d2;
+ float f3 = MathHelper.a(d0 * d0 + d2 * d2);
+
+ 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.h = 0;
+ }
+
+ public void w_() {
+ this.bI = this.locX;
+ this.bJ = this.locY;
+ this.bK = this.locZ;
+ super.w_();
+ if (this.shake > 0) {
+ --this.shake;
+ }
+
+ if (this.inGround) {
+ int i = this.world.getTypeId(this.blockX, this.blockY, this.blockZ);
+
+ if (i == this.inBlockId) {
+ ++this.h;
+ if (this.h == 1200) {
+ this.die();
+ }
+
+ return;
+ }
+
+ this.inGround = false;
+ 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.h = 0;
+ this.i = 0;
+ } else {
+ ++this.i;
+ }
+
+ 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.a(vec3d, vec3d1);
+
+ vec3d = Vec3D.create(this.locX, this.locY, this.locZ);
+ vec3d1 = Vec3D.create(this.locX + this.motX, this.locY + this.motY, this.locZ + this.motZ);
+ if (movingobjectposition != null) {
+ vec3d1 = Vec3D.create(movingobjectposition.f.a, movingobjectposition.f.b, movingobjectposition.f.c);
+ }
+
+ if (!this.world.isStatic) {
+ Entity entity = null;
+ 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;
+
+ for (int j = 0; j < list.size(); ++j) {
+ Entity entity1 = (Entity) list.get(j);
+
+ if (entity1.e_() && (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.b(movingobjectposition1.f);
+
+ if (d1 < d0 || d0 == 0.0D) {
+ entity = entity1;
+ d0 = d1;
+ }
+ }
+ }
+ }
+
+ if (entity != null) {
+ movingobjectposition = new MovingObjectPosition(entity);
+ }
+ }
+
+ if (movingobjectposition != null) {
+ this.a(movingobjectposition);
+ }
+
+ this.locX += this.motX;
+ this.locY += this.motY;
+ this.locZ += this.motZ;
+ float f1 = MathHelper.a(this.motX * this.motX + this.motZ * this.motZ);
+
+ this.yaw = (float) (Math.atan2(this.motX, this.motZ) * 180.0D / 3.1415927410125732D);
+
+ for (this.pitch = (float) (Math.atan2(this.motY, (double) f1) * 180.0D / 3.1415927410125732D); this.pitch - this.lastPitch < -180.0F; this.lastPitch -= 360.0F) {
+ ;
+ }
+
+ while (this.pitch - this.lastPitch >= 180.0F) {
+ this.lastPitch += 360.0F;
+ }
+
+ while (this.yaw - this.lastYaw < -180.0F) {
+ this.lastYaw -= 360.0F;
+ }
+
+ while (this.yaw - this.lastYaw >= 180.0F) {
+ this.lastYaw += 360.0F;
+ }
+
+ this.pitch = this.lastPitch + (this.pitch - this.lastPitch) * 0.2F;
+ this.yaw = this.lastYaw + (this.yaw - this.lastYaw) * 0.2F;
+ float f2 = 0.99F;
+ float f3 = this.e();
+
+ if (this.az()) {
+ for (int k = 0; k < 4; ++k) {
+ 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);
+ }
+
+ f2 = 0.8F;
+ }
+
+ this.motX *= (double) f2;
+ this.motY *= (double) f2;
+ this.motZ *= (double) f2;
+ this.motY -= (double) f3;
+ this.setPosition(this.locX, this.locY, this.locZ);
+ }
+
+ protected float e() {
+ return 0.03F;
+ }
+
+ protected abstract void a(MovingObjectPosition movingobjectposition);
+
+ public void b(NBTTagCompound nbttagcompound) {
+ nbttagcompound.a("xTile", (short) this.blockX);
+ nbttagcompound.a("yTile", (short) this.blockY);
+ nbttagcompound.a("zTile", (short) this.blockZ);
+ nbttagcompound.a("inTile", (byte) this.inBlockId);
+ nbttagcompound.a("shake", (byte) this.shake);
+ nbttagcompound.a("inGround", (byte) (this.inGround ? 1 : 0));
+ }
+
+ public void a(NBTTagCompound nbttagcompound) {
+ this.blockX = nbttagcompound.e("xTile");
+ this.blockY = nbttagcompound.e("yTile");
+ this.blockZ = nbttagcompound.e("zTile");
+ this.inBlockId = nbttagcompound.d("inTile") & 255;
+ this.shake = nbttagcompound.d("shake") & 255;
+ this.inGround = nbttagcompound.d("inGround") == 1;
+ }
+
+ public void a_(EntityHuman entityhuman) {}
+}
diff --git a/src/main/java/net/minecraft/server/EntitySheep.java b/src/main/java/net/minecraft/server/EntitySheep.java
index 64bce95432..02ca25d64b 100644
--- a/src/main/java/net/minecraft/server/EntitySheep.java
+++ b/src/main/java/net/minecraft/server/EntitySheep.java
@@ -13,12 +13,16 @@ public class EntitySheep extends EntityAnimal {
this.b(0.9F, 1.3F);
}
+ public int getMaxHealth() {
+ return 8;
+ }
+
protected void b() {
super.b();
this.datawatcher.a(16, new Byte((byte) 0));
}
- protected void a(boolean flag) {
+ protected void a(boolean flag, int i) {
// CraftBukkit start - whole method
java.util.List loot = new java.util.ArrayList();
@@ -30,7 +34,7 @@ public class EntitySheep extends EntityAnimal {
// CraftBukkit end
}
- protected int k() {
+ protected int e() {
return Block.WOOL.id;
}
@@ -54,7 +58,7 @@ public class EntitySheep extends EntityAnimal {
itemstack.damage(1, entityhuman);
}
- return false;
+ return super.b(entityhuman);
}
public void b(NBTTagCompound nbttagcompound) {
@@ -65,19 +69,19 @@ public class EntitySheep extends EntityAnimal {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- this.setSheared(nbttagcompound.m("Sheared"));
- this.setColor(nbttagcompound.c("Color"));
+ this.setSheared(nbttagcompound.n("Sheared"));
+ this.setColor(nbttagcompound.d("Color"));
}
- protected String h() {
+ protected String c_() {
return "mob.sheep";
}
- protected String i() {
+ protected String m() {
return "mob.sheep";
}
- protected String j() {
+ protected String n() {
return "mob.sheep";
}
@@ -110,4 +114,17 @@ public class EntitySheep extends EntityAnimal {
return i < 5 ? 15 : (i < 10 ? 7 : (i < 15 ? 8 : (i < 18 ? 12 : (random.nextInt(500) == 0 ? 6 : 0))));
}
+
+ protected EntityAnimal createChild(EntityAnimal entityanimal) {
+ EntitySheep entitysheep = (EntitySheep) entityanimal;
+ EntitySheep entitysheep1 = new EntitySheep(this.world);
+
+ if (this.random.nextBoolean()) {
+ entitysheep1.setColor(this.getColor());
+ } else {
+ entitysheep1.setColor(entitysheep.getColor());
+ }
+
+ return entitysheep1;
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntitySilverfish.java b/src/main/java/net/minecraft/server/EntitySilverfish.java
deleted file mode 100644
index 5c9a5b5d2d..0000000000
--- a/src/main/java/net/minecraft/server/EntitySilverfish.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package net.minecraft.server;
-
-public class EntitySilverfish extends EntityMonster {
-
- private int a;
-
- public EntitySilverfish(World world) {
- super(world);
- this.texture = "/mob/silverfish.png";
- this.b(0.3F, 0.7F);
- this.aU = 0.6F;
- this.damage = 1; // CraftBukkit - 0 -> 1, temporary fix for Silverfish base damage.
- }
-
- protected boolean e_() {
- return false;
- }
-
- protected Entity findTarget() {
- double d0 = 8.0D;
-
- return this.world.findNearbyPlayer(this, d0);
- }
-
- protected String h() {
- return "mob.spider";
- }
-
- protected String i() {
- return "mob.spider";
- }
-
- protected String j() {
- return "mob.spiderdeath";
- }
-
- public boolean damageEntity(DamageSource damagesource, int i) {
- if (this.a <= 0 && damagesource instanceof EntityDamageSource) {
- this.a = 20;
- }
-
- return super.damageEntity(damagesource, i);
- }
-
- protected void a(Entity entity, float f) {
- if (this.attackTicks <= 0 && f < 1.2F && entity.boundingBox.e > this.boundingBox.b && entity.boundingBox.b < this.boundingBox.e) {
- this.attackTicks = 20;
- entity.damageEntity(DamageSource.mobAttack(this), this.damage);
- }
- }
-
- public void b(NBTTagCompound nbttagcompound) {
- super.b(nbttagcompound);
- }
-
- public void a(NBTTagCompound nbttagcompound) {
- super.a(nbttagcompound);
- }
-
- protected int k() {
- return 0;
- }
-
- public void s_() {
- this.U = this.yaw;
- super.s_();
- }
-
- protected void c_() {
- super.c_();
- if (!this.world.isStatic) {
- int i;
- int j;
- int k;
- int l;
-
- if (this.a > 0) {
- --this.a;
- if (this.a == 0) {
- i = MathHelper.floor(this.locX);
- j = MathHelper.floor(this.locY);
- k = MathHelper.floor(this.locZ);
- boolean flag = false;
-
- for (l = 0; !flag && l <= 5 && l >= -5; l = l <= 0 ? 1 - l : 0 - l) {
- for (int i1 = 0; !flag && i1 <= 10 && i1 >= -10; i1 = i1 <= 0 ? 1 - i1 : 0 - i1) {
- for (int j1 = 0; !flag && j1 <= 10 && j1 >= -10; j1 = j1 <= 0 ? 1 - j1 : 0 - j1) {
- int k1 = this.world.getTypeId(i + i1, j + l, k + j1);
-
- if (k1 == Block.MONSTER_EGGS.id) {
- this.world.e(2001, i + i1, j + l, k + j1, Block.MONSTER_EGGS.id + this.world.getData(i + i1, j + l, k + j1) * 256);
- this.world.setTypeId(i + i1, j + l, k + j1, 0);
- Block.MONSTER_EGGS.postBreak(this.world, i + i1, j + l, k + j1, 0);
- if (this.random.nextBoolean()) {
- flag = true;
- break;
- }
- }
- }
- }
- }
- }
- }
-
- if (this.target == null && !this.B()) {
- i = MathHelper.floor(this.locX);
- j = MathHelper.floor(this.locY + 0.5D);
- k = MathHelper.floor(this.locZ);
- int l1 = this.random.nextInt(6);
-
- l = this.world.getTypeId(i + PistonBlockTextures.b[l1], j + PistonBlockTextures.c[l1], k + PistonBlockTextures.d[l1]);
- if (BlockMonsterEggs.c(l)) {
- this.world.setTypeIdAndData(i + PistonBlockTextures.b[l1], j + PistonBlockTextures.c[l1], k + PistonBlockTextures.d[l1], Block.MONSTER_EGGS.id, BlockMonsterEggs.d(l));
- this.ab();
- this.die();
- } else {
- this.A();
- }
- } else if (this.target != null && !this.B()) {
- this.target = null;
- }
- }
- }
-
- protected float a(int i, int j, int k) {
- return this.world.getTypeId(i, j - 1, k) == Block.STONE.id ? 10.0F : super.a(i, j, k);
- }
-}
diff --git a/src/main/java/net/minecraft/server/EntitySkeleton.java b/src/main/java/net/minecraft/server/EntitySkeleton.java
index 8ff71b6c43..0f159efd73 100644
--- a/src/main/java/net/minecraft/server/EntitySkeleton.java
+++ b/src/main/java/net/minecraft/server/EntitySkeleton.java
@@ -14,15 +14,19 @@ public class EntitySkeleton extends EntityMonster {
this.texture = "/mob/skeleton.png";
}
- protected String h() {
+ public int getMaxHealth() {
+ return 20;
+ }
+
+ protected String c_() {
return "mob.skeleton";
}
- protected String i() {
+ protected String m() {
return "mob.skeletonhurt";
}
- protected String j() {
+ protected String n() {
return "mob.skeletonhurt";
}
@@ -32,7 +36,7 @@ public class EntitySkeleton extends EntityMonster {
public void die(DamageSource damagesource) {
super.die(damagesource);
- if (damagesource.e() instanceof EntityArrow && damagesource.getEntity() instanceof EntityHuman) {
+ if (damagesource.g() instanceof EntityArrow && damagesource.getEntity() instanceof EntityHuman) {
EntityHuman entityhuman = (EntityHuman) damagesource.getEntity();
double d0 = entityhuman.locX - this.locX;
double d1 = entityhuman.locZ - this.locZ;
@@ -43,9 +47,9 @@ public class EntitySkeleton extends EntityMonster {
}
}
- public void s() {
- if (this.world.d() && !this.world.isStatic) {
- float f = this.a_(1.0F);
+ public void d() {
+ if (this.world.e() && !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
@@ -53,13 +57,13 @@ public class EntitySkeleton extends EntityMonster {
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
- this.fireTicks = 300;
+ this.j(8);
}
// CraftBukkit end
}
}
- super.s();
+ super.d();
}
protected void a(Entity entity, float f) {
@@ -69,7 +73,7 @@ public class EntitySkeleton extends EntityMonster {
if (this.attackTicks == 0) {
EntityArrow entityarrow = new EntityArrow(this.world, this, 1.0F);
- double d2 = entity.locY + (double) entity.t() - 0.699999988079071D - entityarrow.locY;
+ double d2 = entity.locY + (double) entity.x() - 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));
@@ -91,20 +95,20 @@ public class EntitySkeleton extends EntityMonster {
super.a(nbttagcompound);
}
- protected int k() {
+ protected int e() {
return Item.ARROW.id;
}
- protected void a(boolean flag) {
+ protected void a(boolean flag, int i) {
// CraftBukkit start - whole method
java.util.List loot = new java.util.ArrayList();
- int count = this.random.nextInt(3);
+ int count = this.random.nextInt(3 + i);
if (count > 0) {
loot.add(new org.bukkit.inventory.ItemStack(org.bukkit.Material.ARROW, count));
}
- count = this.random.nextInt(3);
+ count = this.random.nextInt(3 + i);
if (count > 0) {
loot.add(new org.bukkit.inventory.ItemStack(org.bukkit.Material.BONE, count));
}
@@ -112,4 +116,8 @@ public class EntitySkeleton extends EntityMonster {
org.bukkit.craftbukkit.event.CraftEventFactory.callEntityDeathEvent(this, loot);
// CraftBukkit end
}
+
+ public EnchantmentDamage t() {
+ return EnchantmentDamage.b;
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntitySlime.java b/src/main/java/net/minecraft/server/EntitySlime.java
index 310c8e5e7b..f4de65742a 100644
--- a/src/main/java/net/minecraft/server/EntitySlime.java
+++ b/src/main/java/net/minecraft/server/EntitySlime.java
@@ -4,6 +4,7 @@ public class EntitySlime extends EntityLiving implements IMonster {
public float a;
public float b;
+ public float c;
private int size = 0;
public EntitySlime(World world) {
@@ -14,7 +15,7 @@ public class EntitySlime extends EntityLiving implements IMonster {
this.height = 0.0F;
this.size = this.random.nextInt(20) + 10;
this.setSize(i);
- this.ax = i;
+ this.az = i;
}
protected void b() {
@@ -25,8 +26,14 @@ public class EntitySlime extends EntityLiving implements IMonster {
public void setSize(int i) {
this.datawatcher.watch(16, new Byte((byte) i));
this.b(0.6F * (float) i, 0.6F * (float) i);
- this.health = i * i;
this.setPosition(this.locX, this.locY, this.locZ);
+ this.setHealth(this.getMaxHealth());
+ }
+
+ public int getMaxHealth() {
+ int i = this.getSize();
+
+ return i * i;
}
public int getSize() {
@@ -40,14 +47,27 @@ public class EntitySlime extends EntityLiving implements IMonster {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- this.setSize(nbttagcompound.e("Size") + 1);
+ this.setSize(nbttagcompound.f("Size") + 1);
}
- public void s_() {
- this.b = this.a;
+ protected String w() {
+ return "slime";
+ }
+
+ protected String E() {
+ return "mob.slime";
+ }
+
+ public void w_() {
+ if (!this.world.isStatic && this.world.difficulty == 0 && this.getSize() > 0) {
+ this.dead = true;
+ }
+
+ this.b += (this.a - this.b) * 0.5F;
+ this.c = this.b;
boolean flag = this.onGround;
- super.s_();
+ super.w_();
if (this.onGround && !flag) {
int i = this.getSize();
@@ -57,101 +77,142 @@ public class EntitySlime extends EntityLiving implements IMonster {
float f2 = MathHelper.sin(f) * (float) i * 0.5F * f1;
float f3 = MathHelper.cos(f) * (float) i * 0.5F * f1;
- this.world.a("slime", this.locX + (double) f2, this.boundingBox.b, this.locZ + (double) f3, 0.0D, 0.0D, 0.0D);
+ this.world.a(this.w(), this.locX + (double) f2, this.boundingBox.b, this.locZ + (double) f3, 0.0D, 0.0D, 0.0D);
}
- if (i > 2) {
- this.world.makeSound(this, "mob.slime", this.l(), ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) / 0.8F);
+ if (this.G()) {
+ this.world.makeSound(this, this.E(), this.o(), ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) / 0.8F);
}
this.a = -0.5F;
}
- this.a *= 0.6F;
+ this.B();
}
- protected void c_() {
- this.ad();
- EntityHuman entityhuman = this.world.findNearbyPlayer(this, 16.0D);
+ protected void m_() {
+ this.ak();
+ EntityHuman entityhuman = this.world.b(this, 16.0D);
if (entityhuman != null) {
this.a(entityhuman, 10.0F, 20.0F);
}
if (this.onGround && this.size-- <= 0) {
- this.size = this.random.nextInt(20) + 10;
+ this.size = this.A();
if (entityhuman != null) {
this.size /= 3;
}
- this.aS = true;
- if (this.getSize() > 1) {
- this.world.makeSound(this, "mob.slime", this.l(), ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) * 0.8F);
+ this.aW = true;
+ if (this.I()) {
+ this.world.makeSound(this, this.E(), this.o(), ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) * 0.8F);
}
this.a = 1.0F;
- this.aP = 1.0F - this.random.nextFloat() * 2.0F;
- this.aQ = (float) (1 * this.getSize());
+ this.aT = 1.0F - this.random.nextFloat() * 2.0F;
+ this.aU = (float) (1 * this.getSize());
} else {
- this.aS = false;
+ this.aW = false;
if (this.onGround) {
- this.aP = this.aQ = 0.0F;
+ this.aT = this.aU = 0.0F;
}
}
}
+ protected void B() {
+ this.a *= 0.6F;
+ }
+
+ protected int A() {
+ return this.random.nextInt(20) + 10;
+ }
+
+ protected EntitySlime y() {
+ return new EntitySlime(this.world);
+ }
+
public void die() {
int i = this.getSize();
- if (!this.world.isStatic && i > 1 && this.health == 0) {
+ if (!this.world.isStatic && i > 1 && this.getHealth() <= 0) {
+ int j = 2 + this.random.nextInt(3);
+
// CraftBukkit start
- org.bukkit.event.entity.SlimeSplitEvent event = new org.bukkit.event.entity.SlimeSplitEvent(this.getBukkitEntity(), 4);
+ org.bukkit.event.entity.SlimeSplitEvent event = new org.bukkit.event.entity.SlimeSplitEvent(this.getBukkitEntity(), j);
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled() && event.getCount() > 0) {
- for (int j = 0; j < event.getCount(); ++j) {
- float f = ((float) (j % 2) - 0.5F) * (float) i / 4.0F;
- float f1 = ((float) (j / 2) - 0.5F) * (float) i / 4.0F;
- EntitySlime entityslime = new EntitySlime(this.world);
-
- entityslime.setSize(i / 2);
- entityslime.setPositionRotation(this.locX + (double) f, this.locY + 0.5D, this.locZ + (double) f1, this.random.nextFloat() * 360.0F, 0.0F);
- this.world.addEntity(entityslime);
- }
+ j = event.getCount();
+ } else {
+ super.die();
+ return;
}
// CraftBukkit end
+
+ for (int k = 0; k < j; ++k) {
+ float f = ((float) (k % 2) - 0.5F) * (float) i / 4.0F;
+ float f1 = ((float) (k / 2) - 0.5F) * (float) i / 4.0F;
+ EntitySlime entityslime = this.y();
+
+ entityslime.setSize(i / 2);
+ entityslime.setPositionRotation(this.locX + (double) f, this.locY + 0.5D, this.locZ + (double) f1, this.random.nextFloat() * 360.0F, 0.0F);
+ this.world.addEntity(entityslime);
+ }
}
super.die();
}
public void a_(EntityHuman entityhuman) {
- int i = this.getSize();
+ if (this.C()) {
+ int i = this.getSize();
- if (i > 1 && this.f(entityhuman) && (double) this.g(entityhuman) < 0.6D * (double) i && entityhuman.damageEntity(DamageSource.mobAttack(this), i)) {
- this.world.makeSound(this, "mob.slimeattack", 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
+ if (this.g(entityhuman) && (double) this.h(entityhuman) < 0.6D * (double) i && entityhuman.damageEntity(DamageSource.mobAttack(this), this.D())) {
+ this.world.makeSound(this, "mob.slimeattack", 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
+ }
}
}
- protected String i() {
+ protected boolean C() {
+ return this.getSize() > 1;
+ }
+
+ protected int D() {
+ return this.getSize();
+ }
+
+ protected String m() {
return "mob.slime";
}
- protected String j() {
+ protected String n() {
return "mob.slime";
}
- protected int k() {
+ protected int e() {
return this.getSize() == 1 ? Item.SLIME_BALL.id : 0;
}
- public boolean d() {
+ public boolean g() {
Chunk chunk = this.world.getChunkAtWorldCoords(MathHelper.floor(this.locX), MathHelper.floor(this.locZ));
- return (this.getSize() == 1 || this.world.difficulty > 0) && this.random.nextInt(10) == 0 && chunk.a(987234911L).nextInt(10) == 0 && this.locY < 16.0D;
+ return (this.getSize() == 1 || this.world.difficulty > 0) && this.random.nextInt(10) == 0 && chunk.a(987234911L).nextInt(10) == 0 && this.locY < 40.0D ? super.g() : false;
}
- protected float l() {
- return 0.6F;
+ protected float o() {
+ return 0.4F * (float) this.getSize();
+ }
+
+ protected int q_() {
+ return 0;
+ }
+
+ protected boolean I() {
+ return this.getSize() > 1;
+ }
+
+ protected boolean G() {
+ return this.getSize() > 2;
}
}
diff --git a/src/main/java/net/minecraft/server/EntitySnowball.java b/src/main/java/net/minecraft/server/EntitySnowball.java
index 90c3f47ae7..a586127207 100644
--- a/src/main/java/net/minecraft/server/EntitySnowball.java
+++ b/src/main/java/net/minecraft/server/EntitySnowball.java
@@ -1,7 +1,5 @@
package net.minecraft.server;
-import java.util.List;
-
// CraftBukkit start
import org.bukkit.craftbukkit.entity.CraftLivingEntity;
import org.bukkit.entity.Projectile;
@@ -10,248 +8,65 @@ import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
// CraftBukkit end
-public class EntitySnowball extends Entity {
-
- private int b = -1;
- private int c = -1;
- private int d = -1;
- private int e = 0;
- private boolean f = false;
- public int a = 0;
- public EntityLiving shooter; // CraftBukkit - private -> public
- private int h;
- private int i = 0;
+public class EntitySnowball extends EntityProjectile {
public EntitySnowball(World world) {
super(world);
- this.b(0.25F, 0.25F);
}
- protected void b() {}
-
public EntitySnowball(World world, EntityLiving entityliving) {
- super(world);
- this.shooter = entityliving;
- this.b(0.25F, 0.25F);
- this.setPositionRotation(entityliving.locX, entityliving.locY + (double) entityliving.t(), entityliving.locZ, entityliving.yaw, entityliving.pitch);
- this.locX -= (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * 0.16F);
- this.locY -= 0.10000000149011612D;
- this.locZ -= (double) (MathHelper.sin(this.yaw / 180.0F * 3.1415927F) * 0.16F);
- this.setPosition(this.locX, this.locY, this.locZ);
- this.height = 0.0F;
- float f = 0.4F;
-
- this.motX = (double) (-MathHelper.sin(this.yaw / 180.0F * 3.1415927F) * MathHelper.cos(this.pitch / 180.0F * 3.1415927F) * f);
- this.motZ = (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * MathHelper.cos(this.pitch / 180.0F * 3.1415927F) * f);
- this.motY = (double) (-MathHelper.sin(this.pitch / 180.0F * 3.1415927F) * f);
- this.a(this.motX, this.motY, this.motZ, 1.5F, 1.0F);
+ super(world, entityliving);
}
public EntitySnowball(World world, double d0, double d1, double d2) {
- super(world);
- this.h = 0;
- this.b(0.25F, 0.25F);
- this.setPosition(d0, d1, d2);
- this.height = 0.0F;
+ super(world, d0, d1, d2);
}
- public void a(double d0, double d1, double d2, float f, float f1) {
- float f2 = MathHelper.a(d0 * d0 + d1 * d1 + d2 * d2);
+ protected void a(MovingObjectPosition movingobjectposition) {
+ if (movingobjectposition.entity != null) {
+ byte b0 = 0;
- d0 /= (double) f2;
- d1 /= (double) f2;
- d2 /= (double) f2;
- d0 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
- d1 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
- d2 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
- d0 *= (double) f;
- d1 *= (double) f;
- d2 *= (double) f;
- this.motX = d0;
- this.motY = d1;
- this.motZ = d2;
- float f3 = MathHelper.a(d0 * d0 + d2 * d2);
-
- 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.h = 0;
- }
-
- public void s_() {
- this.bE = this.locX;
- this.bF = this.locY;
- this.bG = this.locZ;
- super.s_();
- if (this.a > 0) {
- --this.a;
- }
-
- if (this.f) {
- int i = this.world.getTypeId(this.b, this.c, this.d);
-
- if (i == this.e) {
- ++this.h;
- if (this.h == 1200) {
- this.die();
- }
-
- return;
+ if (movingobjectposition.entity instanceof EntityBlaze) {
+ b0 = 3;
}
-
- this.f = false;
- 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.h = 0;
- this.i = 0;
- } else {
- ++this.i;
- }
-
- 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.a(vec3d, vec3d1);
-
- vec3d = Vec3D.create(this.locX, this.locY, this.locZ);
- vec3d1 = Vec3D.create(this.locX + this.motX, this.locY + this.motY, this.locZ + this.motZ);
- if (movingobjectposition != null) {
- vec3d1 = Vec3D.create(movingobjectposition.f.a, movingobjectposition.f.b, movingobjectposition.f.c);
- }
-
- if (!this.world.isStatic) {
- Entity entity = null;
- 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;
-
- for (int j = 0; j < list.size(); ++j) {
- Entity entity1 = (Entity) list.get(j);
-
- 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.b(movingobjectposition1.f);
-
- if (d1 < d0 || d0 == 0.0D) {
- entity = entity1;
- d0 = d1;
- }
- }
- }
- }
-
- if (entity != null) {
- movingobjectposition = new MovingObjectPosition(entity);
- }
- }
-
- if (movingobjectposition != null) {
// CraftBukkit start
- ProjectileHitEvent phe = new ProjectileHitEvent((Projectile) this.getBukkitEntity());
- this.world.getServer().getPluginManager().callEvent(phe);
+ ProjectileHitEvent hitEvent = new ProjectileHitEvent((Projectile) this.getBukkitEntity());
+ this.world.getServer().getPluginManager().callEvent(hitEvent);
+ boolean stick = false;
if (movingobjectposition.entity != null) {
- boolean stick;
if (movingobjectposition.entity instanceof EntityLiving) {
org.bukkit.entity.Entity damagee = movingobjectposition.entity.getBukkitEntity();
Projectile projectile = (Projectile) this.getBukkitEntity();
// TODO @see EntityArrow#162
- EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(projectile, damagee, EntityDamageEvent.DamageCause.PROJECTILE, 0);
+ EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(projectile, damagee, EntityDamageEvent.DamageCause.PROJECTILE, b0);
this.world.getServer().getPluginManager().callEvent(event);
this.shooter = (projectile.getShooter() == null) ? null : ((CraftLivingEntity) projectile.getShooter()).getHandle();
+ b0 = (byte) event.getDamage();
if (event.isCancelled()) {
stick = !projectile.doesBounce();
} else {
// this function returns if the snowball should stick in or not, i.e. !bounce
- stick = movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.shooter), event.getDamage());
+ stick = movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.shooter), b0);
}
} else {
- stick = movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.shooter), 0);
- }
- if (stick) {
- ;
+ stick = movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.shooter), b0);
}
}
- // CraftBukkit end
- for (int k = 0; k < 8; ++k) {
- this.world.a("snowballpoof", this.locX, this.locY, this.locZ, 0.0D, 0.0D, 0.0D);
+ if (stick) {
+ // CraftBukkit end
+ ;
}
-
- this.die();
}
- this.locX += this.motX;
- this.locY += this.motY;
- this.locZ += this.motZ;
- float f1 = MathHelper.a(this.motX * this.motX + this.motZ * this.motZ);
-
- this.yaw = (float) (Math.atan2(this.motX, this.motZ) * 180.0D / 3.1415927410125732D);
-
- for (this.pitch = (float) (Math.atan2(this.motY, (double) f1) * 180.0D / 3.1415927410125732D); this.pitch - this.lastPitch < -180.0F; this.lastPitch -= 360.0F) {
- ;
+ for (int i = 0; i < 8; ++i) {
+ this.world.a("snowballpoof", this.locX, this.locY, this.locZ, 0.0D, 0.0D, 0.0D);
}
- while (this.pitch - this.lastPitch >= 180.0F) {
- this.lastPitch += 360.0F;
- }
-
- while (this.yaw - this.lastYaw < -180.0F) {
- this.lastYaw -= 360.0F;
- }
-
- while (this.yaw - this.lastYaw >= 180.0F) {
- this.lastYaw += 360.0F;
- }
-
- this.pitch = this.lastPitch + (this.pitch - this.lastPitch) * 0.2F;
- this.yaw = this.lastYaw + (this.yaw - this.lastYaw) * 0.2F;
- float f2 = 0.99F;
- float f3 = 0.03F;
-
- if (this.ao()) {
- for (int l = 0; l < 4; ++l) {
- 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);
- }
-
- f2 = 0.8F;
- }
-
- this.motX *= (double) f2;
- this.motY *= (double) f2;
- this.motZ *= (double) f2;
- this.motY -= (double) f3;
- this.setPosition(this.locX, this.locY, this.locZ);
- }
-
- public void b(NBTTagCompound nbttagcompound) {
- nbttagcompound.a("xTile", (short) this.b);
- nbttagcompound.a("yTile", (short) this.c);
- nbttagcompound.a("zTile", (short) this.d);
- nbttagcompound.a("inTile", (byte) this.e);
- nbttagcompound.a("shake", (byte) this.a);
- nbttagcompound.a("inGround", (byte) (this.f ? 1 : 0));
- }
-
- public void a(NBTTagCompound nbttagcompound) {
- this.b = nbttagcompound.d("xTile");
- this.c = nbttagcompound.d("yTile");
- this.d = nbttagcompound.d("zTile");
- this.e = nbttagcompound.c("inTile") & 255;
- this.a = nbttagcompound.c("shake") & 255;
- this.f = nbttagcompound.c("inGround") == 1;
- }
-
- 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);
+ if (!this.world.isStatic) {
this.die();
}
}
diff --git a/src/main/java/net/minecraft/server/EntitySpider.java b/src/main/java/net/minecraft/server/EntitySpider.java
index 1bccda26f6..bc724ec70a 100644
--- a/src/main/java/net/minecraft/server/EntitySpider.java
+++ b/src/main/java/net/minecraft/server/EntitySpider.java
@@ -11,43 +11,63 @@ public class EntitySpider extends EntityMonster {
super(world);
this.texture = "/mob/spider.png";
this.b(1.4F, 0.9F);
- this.aU = 0.8F;
+ this.aY = 0.8F;
}
- public double n() {
+ protected void b() {
+ super.b();
+ this.datawatcher.a(16, new Byte((byte) 0));
+ }
+
+ public void d() {
+ super.d();
+ }
+
+ public void w_() {
+ super.w_();
+ if (!this.world.isStatic) {
+ this.a(this.positionChanged);
+ }
+ }
+
+ public int getMaxHealth() {
+ return 16;
+ }
+
+ public double q() {
return (double) this.width * 0.75D - 0.5D;
}
- protected boolean e_() {
+ protected boolean g_() {
return false;
}
protected Entity findTarget() {
- float f = this.a_(1.0F);
+ float f = this.a(1.0F);
if (f < 0.5F) {
double d0 = 16.0D;
- return this.world.findNearbyPlayer(this, d0);
+ return this.world.b(this, d0);
} else {
return null;
}
}
- protected String h() {
+ protected String c_() {
return "mob.spider";
}
- protected String i() {
+ protected String m() {
return "mob.spider";
}
- protected String j() {
+ protected String n() {
return "mob.spiderdeath";
}
protected void a(Entity entity, float f) {
- float f1 = this.a_(1.0F);
+ float f1 = this.a(1.0F);
if (f1 > 0.5F && this.random.nextInt(100) == 0) {
// CraftBukkit start
@@ -88,13 +108,44 @@ public class EntitySpider extends EntityMonster {
super.a(nbttagcompound);
}
- protected int k() {
+ protected int e() {
return Item.STRING.id;
}
- public boolean p() {
- return this.positionChanged;
+ protected void a(boolean flag, int i) {
+ super.a(flag, i);
+ if (flag && (this.random.nextInt(3) == 0 || this.random.nextInt(1 + i) > 0)) {
+ this.b(Item.SPIDER_EYE.id, 1);
+ }
}
- public void q() {}
+ public boolean r() {
+ return this.o_();
+ }
+
+ public void s() {}
+
+ public EnchantmentDamage t() {
+ return EnchantmentDamage.c;
+ }
+
+ public boolean a(MobEffect mobeffect) {
+ return mobeffect.getEffectId() == MobEffectList.POISON.id ? false : super.a(mobeffect);
+ }
+
+ public boolean o_() {
+ return (this.datawatcher.getByte(16) & 1) != 0;
+ }
+
+ public void a(boolean flag) {
+ byte b0 = this.datawatcher.getByte(16);
+
+ if (flag) {
+ b0 = (byte) (b0 | 1);
+ } else {
+ b0 &= -2;
+ }
+
+ this.datawatcher.watch(16, Byte.valueOf(b0));
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntitySquid.java b/src/main/java/net/minecraft/server/EntitySquid.java
index f43967011c..6127b77fb6 100644
--- a/src/main/java/net/minecraft/server/EntitySquid.java
+++ b/src/main/java/net/minecraft/server/EntitySquid.java
@@ -26,6 +26,10 @@ public class EntitySquid extends EntityWaterAnimal {
this.m = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
}
+ public int getMaxHealth() {
+ return 10;
+ }
+
public void b(NBTTagCompound nbttagcompound) {
super.b(nbttagcompound);
}
@@ -34,31 +38,31 @@ public class EntitySquid extends EntityWaterAnimal {
super.a(nbttagcompound);
}
- protected String h() {
+ protected String c_() {
return null;
}
- protected String i() {
+ protected String m() {
return null;
}
- protected String j() {
+ protected String n() {
return null;
}
- protected float l() {
+ protected float o() {
return 0.4F;
}
- protected int k() {
+ protected int e() {
return 0;
}
- protected void a(boolean flag) {
+ protected void a(boolean flag, int i) {
// CraftBukkit start - whole method
java.util.List loot = new java.util.ArrayList();
- int count = this.random.nextInt(3) + 1;
+ int count = this.random.nextInt(3 + i) + 1;
if (count > 0) {
loot.add(new org.bukkit.inventory.ItemStack(org.bukkit.Material.INK_SACK, count));
}
@@ -68,15 +72,15 @@ public class EntitySquid extends EntityWaterAnimal {
}
public boolean b(EntityHuman entityhuman) {
- return false;
+ return super.b(entityhuman);
}
- public boolean ao() {
+ public boolean az() {
return this.world.a(this.boundingBox.b(0.0D, -0.6000000238418579D, 0.0D), Material.WATER, this);
}
- public void s() {
- super.s();
+ public void d() {
+ super.d();
this.b = this.a;
this.g = this.c;
this.i = this.h;
@@ -89,7 +93,7 @@ public class EntitySquid extends EntityWaterAnimal {
}
}
- if (this.ao()) {
+ if (this.az()) {
float f;
if (this.h < 3.1415927F) {
@@ -107,20 +111,20 @@ public class EntitySquid extends EntityWaterAnimal {
this.n *= 0.99F;
}
- if (!this.ai) {
+ if (!this.aj) {
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.U += (-((float) Math.atan2(this.motX, this.motZ)) * 180.0F / 3.1415927F - this.U) * 0.1F;
- this.yaw = this.U;
+ this.V += (-((float) Math.atan2(this.motX, this.motZ)) * 180.0F / 3.1415927F - this.V) * 0.1F;
+ this.yaw = this.V;
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.j = MathHelper.abs(MathHelper.sin(this.h)) * 3.1415927F * 0.25F;
- if (!this.ai) {
+ if (!this.aj) {
this.motX = 0.0D;
this.motY -= 0.08D;
this.motY *= 0.9800000190734863D;
@@ -135,8 +139,11 @@ public class EntitySquid extends EntityWaterAnimal {
this.move(this.motX, this.motY, this.motZ);
}
- protected void c_() {
- if (this.random.nextInt(50) == 0 || !this.bQ || this.o == 0.0F && this.p == 0.0F && this.q == 0.0F) {
+ protected void m_() {
+ ++this.aS;
+ if (this.aS > 100) {
+ this.o = this.p = this.q = 0.0F;
+ } else if (this.random.nextInt(50) == 0 || !this.bS || this.o == 0.0F && this.p == 0.0F && this.q == 0.0F) {
float f = this.random.nextFloat() * 3.1415927F * 2.0F;
this.o = MathHelper.cos(f) * 0.2F;
@@ -144,6 +151,10 @@ public class EntitySquid extends EntityWaterAnimal {
this.q = MathHelper.sin(f) * 0.2F;
}
- this.ad();
+ this.ak();
}
-}
\ No newline at end of file
+
+ public boolean g() {
+ return this.locY > 45.0D && this.locY < (double) this.world.seaLevel && super.g();
+ }
+}
diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
index 66a8451fcd..c445a03ead 100644
--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java
+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
@@ -16,7 +16,7 @@ public class EntityTNTPrimed extends Entity {
public EntityTNTPrimed(World world) {
super(world);
this.fuseTicks = 0;
- this.aY = true;
+ this.bc = 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 e_() {
+ protected boolean g_() {
return false;
}
- public boolean r_() {
+ public boolean e_() {
return !this.dead;
}
- public void s_() {
+ public void w_() {
this.lastX = this.locX;
this.lastY = this.locY;
this.lastZ = this.locZ;
@@ -95,6 +95,6 @@ public class EntityTNTPrimed extends Entity {
}
protected void a(NBTTagCompound nbttagcompound) {
- this.fuseTicks = nbttagcompound.c("Fuse");
+ this.fuseTicks = nbttagcompound.d("Fuse");
}
}
diff --git a/src/main/java/net/minecraft/server/EntityTracker.java b/src/main/java/net/minecraft/server/EntityTracker.java
index a62eaf0b2e..31bccaaa85 100644
--- a/src/main/java/net/minecraft/server/EntityTracker.java
+++ b/src/main/java/net/minecraft/server/EntityTracker.java
@@ -37,21 +37,31 @@ public class EntityTracker {
this.addEntity(entity, 64, 5, true);
} else if (entity instanceof EntityArrow) {
this.addEntity(entity, 64, 20, false);
+ } else if (entity instanceof EntitySmallFireball) {
+ this.addEntity(entity, 64, 10, false);
} else if (entity instanceof EntityFireball) {
this.addEntity(entity, 64, 10, false);
} else if (entity instanceof EntitySnowball) {
this.addEntity(entity, 64, 10, true);
+ } else if (entity instanceof EntityEnderPearl) {
+ this.addEntity(entity, 64, 10, true);
+ } else if (entity instanceof EntityEnderSignal) {
+ this.addEntity(entity, 64, 10, true);
} else if (entity instanceof EntityEgg) {
this.addEntity(entity, 64, 10, true);
+ } else if (entity instanceof EntityPotion) {
+ this.addEntity(entity, 64, 10, true);
} else if (entity instanceof EntityItem) {
this.addEntity(entity, 64, 20, true);
} else if (entity instanceof EntityMinecart) {
- this.addEntity(entity, 160, 5, true);
+ this.addEntity(entity, 80, 3, true);
} else if (entity instanceof EntityBoat) {
- this.addEntity(entity, 160, 5, true);
+ this.addEntity(entity, 80, 3, true);
} else if (entity instanceof EntitySquid) {
- this.addEntity(entity, 160, 3, true);
+ this.addEntity(entity, 64, 3, true);
} else if (entity instanceof IAnimal) {
+ this.addEntity(entity, 80, 3, true);
+ } else if (entity instanceof EntityEnderDragon) {
this.addEntity(entity, 160, 3, true);
} else if (entity instanceof EntityTNTPrimed) {
this.addEntity(entity, 160, 10, true);
@@ -61,6 +71,8 @@ public class EntityTracker {
this.addEntity(entity, 160, Integer.MAX_VALUE, false);
} else if (entity instanceof EntityExperienceOrb) {
this.addEntity(entity, 160, 20, true);
+ } else if (entity instanceof EntityEnderCrystal) {
+ this.addEntity(entity, 256, Integer.MAX_VALUE, false);
}
}
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
index bee641535e..53d676ede3 100644
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
@@ -60,7 +60,7 @@ public class EntityTrackerEntry {
}
++this.t;
- if (++this.l % this.c == 0 || this.tracker.ca) {
+ if (++this.l % this.c == 0 || this.tracker.cb) {
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);
@@ -70,8 +70,8 @@ public class EntityTrackerEntry {
int k1 = j - this.e;
int l1 = k - this.f;
Object object = null;
- boolean flag = Math.abs(i) >= 8 || Math.abs(j) >= 8 || Math.abs(k) >= 8;
- boolean flag1 = Math.abs(l - this.g) >= 8 || Math.abs(i1 - this.h) >= 8;
+ boolean flag = Math.abs(j1) >= 4 || Math.abs(k1) >= 4 || Math.abs(l1) >= 4;
+ boolean flag1 = Math.abs(l - this.g) >= 4 || Math.abs(i1 - this.h) >= 4;
if (j1 >= -128 && j1 < 128 && k1 >= -128 && k1 < 128 && l1 >= -128 && l1 < 128 && this.t <= 400) {
if (flag && flag1) {
@@ -126,27 +126,26 @@ public class EntityTrackerEntry {
}
}
- this.tracker.ca = false;
+ this.tracker.cb = false;
if (this.tracker.velocityChanged) {
// CraftBukkit start - create PlayerVelocity event
boolean cancelled = false;
- if(this.tracker instanceof EntityPlayer) {
+ if (this.tracker instanceof EntityPlayer) {
org.bukkit.entity.Player player = (org.bukkit.entity.Player) this.tracker.getBukkitEntity();
org.bukkit.util.Vector velocity = player.getVelocity();
org.bukkit.event.player.PlayerVelocityEvent event = new org.bukkit.event.player.PlayerVelocityEvent(player, velocity);
this.tracker.world.getServer().getPluginManager().callEvent(event);
- if(event.isCancelled()) {
+ if (event.isCancelled()) {
cancelled = true;
- }
- else if(!velocity.equals(event.getVelocity())) {
+ } else if (!velocity.equals(event.getVelocity())) {
player.setVelocity(velocity);
}
}
- if(!cancelled) {
+ if (!cancelled) {
this.b((Packet) (new Packet28EntityVelocity(this.tracker)));
}
// CraftBukkit end
@@ -235,6 +234,10 @@ public class EntityTrackerEntry {
}
private Packet b() {
+ if (this.tracker.dead) {
+ System.out.println("Fetching addPacket for removed entity");
+ }
+
if (this.tracker instanceof EntityItem) {
EntityItem entityitem = (EntityItem) this.tracker;
Packet21PickupSpawn packet21pickupspawn = new Packet21PickupSpawn(entityitem);
@@ -271,6 +274,8 @@ public class EntityTrackerEntry {
return new Packet23VehicleSpawn(this.tracker, 1);
} else if (this.tracker instanceof IAnimal) {
return new Packet24MobSpawn((EntityLiving) this.tracker);
+ } else if (this.tracker instanceof EntityEnderDragon) {
+ return new Packet24MobSpawn((EntityLiving) this.tracker);
} else if (this.tracker instanceof EntityFishingHook) {
return new Packet23VehicleSpawn(this.tracker, 90);
} else if (this.tracker instanceof EntityArrow) {
@@ -279,40 +284,73 @@ public class EntityTrackerEntry {
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) {
- EntityFireball entityfireball = (EntityFireball) this.tracker;
- // CraftBukkit start - added check for null shooter
- int shooter = ((EntityFireball) this.tracker).shooter != null ? ((EntityFireball) this.tracker).shooter.id : 1;
- Packet23VehicleSpawn packet23vehiclespawn = new Packet23VehicleSpawn(this.tracker, 63, shooter);
- // CraftBukkit end
-
- packet23vehiclespawn.e = (int) (entityfireball.dirX * 8000.0D);
- packet23vehiclespawn.f = (int) (entityfireball.dirY * 8000.0D);
- packet23vehiclespawn.g = (int) (entityfireball.dirZ * 8000.0D);
- return packet23vehiclespawn;
- } else if (this.tracker instanceof EntityEgg) {
- return new Packet23VehicleSpawn(this.tracker, 62);
- } else if (this.tracker instanceof EntityTNTPrimed) {
- return new Packet23VehicleSpawn(this.tracker, 50);
+ } else if (this.tracker instanceof EntityPotion) {
+ return new Packet23VehicleSpawn(this.tracker, 73, ((EntityPotion) this.tracker).f());
+ } else if (this.tracker instanceof EntityEnderPearl) {
+ return new Packet23VehicleSpawn(this.tracker, 65);
+ } else if (this.tracker instanceof EntityEnderSignal) {
+ return new Packet23VehicleSpawn(this.tracker, 72);
} else {
- if (this.tracker instanceof EntityFallingSand) {
- EntityFallingSand entityfallingsand = (EntityFallingSand) this.tracker;
+ Packet23VehicleSpawn packet23vehiclespawn;
- if (entityfallingsand.a == Block.SAND.id) {
- return new Packet23VehicleSpawn(this.tracker, 70);
+ if (this.tracker instanceof EntitySmallFireball) {
+ EntitySmallFireball entitysmallfireball = (EntitySmallFireball) this.tracker;
+
+ packet23vehiclespawn = null;
+ if (entitysmallfireball.shooter != null) {
+ packet23vehiclespawn = new Packet23VehicleSpawn(this.tracker, 64, entitysmallfireball.shooter.id);
+ } else {
+ packet23vehiclespawn = new Packet23VehicleSpawn(this.tracker, 64, 0);
}
- if (entityfallingsand.a == Block.GRAVEL.id) {
- return new Packet23VehicleSpawn(this.tracker, 71);
- }
- }
+ packet23vehiclespawn.e = (int) (entitysmallfireball.dirX * 8000.0D);
+ packet23vehiclespawn.f = (int) (entitysmallfireball.dirY * 8000.0D);
+ packet23vehiclespawn.g = (int) (entitysmallfireball.dirZ * 8000.0D);
+ return packet23vehiclespawn;
+ } else if (this.tracker instanceof EntityFireball) {
+ EntityFireball entityfireball = (EntityFireball) this.tracker;
- if (this.tracker instanceof EntityPainting) {
- return new Packet25EntityPainting((EntityPainting) this.tracker);
- } else if (this.tracker instanceof EntityExperienceOrb) {
- return new Packet26AddExpOrb((EntityExperienceOrb) this.tracker);
+ packet23vehiclespawn = null;
+ if (entityfireball.shooter != null) {
+ packet23vehiclespawn = new Packet23VehicleSpawn(this.tracker, 63, ((EntityFireball) this.tracker).shooter.id);
+ } else {
+ packet23vehiclespawn = new Packet23VehicleSpawn(this.tracker, 63, 0);
+ }
+
+ packet23vehiclespawn.e = (int) (entityfireball.dirX * 8000.0D);
+ packet23vehiclespawn.f = (int) (entityfireball.dirY * 8000.0D);
+ packet23vehiclespawn.g = (int) (entityfireball.dirZ * 8000.0D);
+ return packet23vehiclespawn;
+ } else if (this.tracker instanceof EntityEgg) {
+ return new Packet23VehicleSpawn(this.tracker, 62);
+ } else if (this.tracker instanceof EntityTNTPrimed) {
+ return new Packet23VehicleSpawn(this.tracker, 50);
+ } else if (this.tracker instanceof EntityEnderCrystal) {
+ return new Packet23VehicleSpawn(this.tracker, 51);
} else {
- throw new IllegalArgumentException("Don\'t know how to add " + this.tracker.getClass() + "!");
+ if (this.tracker instanceof EntityFallingSand) {
+ EntityFallingSand entityfallingsand = (EntityFallingSand) this.tracker;
+
+ if (entityfallingsand.a == Block.SAND.id) {
+ return new Packet23VehicleSpawn(this.tracker, 70);
+ }
+
+ if (entityfallingsand.a == Block.GRAVEL.id) {
+ return new Packet23VehicleSpawn(this.tracker, 71);
+ }
+
+ if (entityfallingsand.a == Block.DRAGON_EGG.id) {
+ return new Packet23VehicleSpawn(this.tracker, 74);
+ }
+ }
+
+ 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() + "!");
+ }
}
}
}
diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java
index 61136bc7ec..6ce6853aa6 100644
--- a/src/main/java/net/minecraft/server/EntityTypes.java
+++ b/src/main/java/net/minecraft/server/EntityTypes.java
@@ -86,9 +86,17 @@ public class EntityTypes {
static {
a(EntityItem.class, "Item", 1);
a(EntityExperienceOrb.class, "XPOrb", 2);
+ a(EntityPainting.class, "Painting", 9);
a(EntityArrow.class, "Arrow", 10);
a(EntitySnowball.class, "Snowball", 11);
- a(EntityPainting.class, "Painting", 9);
+ a(EntityFireball.class, "Fireball", 12);
+ a(EntitySmallFireball.class, "SmallFireball", 13);
+ a(EntityEnderPearl.class, "ThrownEnderpearl", 14);
+ a(EntityEnderSignal.class, "EyeOfEnderSignal", 15);
+ a(EntityTNTPrimed.class, "PrimedTnt", 20);
+ a(EntityFallingSand.class, "FallingSand", 21);
+ a(EntityMinecart.class, "Minecart", 40);
+ a(EntityBoat.class, "Boat", 41);
a(EntityLiving.class, "Mob", 48);
a(EntityMonster.class, "Monster", 49);
a(EntityCreeper.class, "Creeper", 50);
@@ -102,15 +110,18 @@ public class EntityTypes {
a(EntityEnderman.class, "Enderman", 58);
a(EntityCaveSpider.class, "CaveSpider", 59);
a(EntitySilverfish.class, "Silverfish", 60);
+ a(EntityBlaze.class, "Blaze", 61);
+ a(EntityLavaSlime.class, "LavaSlime", 62);
+ a(EntityEnderDragon.class, "EnderDragon", 63);
a(EntityPig.class, "Pig", 90);
a(EntitySheep.class, "Sheep", 91);
a(EntityCow.class, "Cow", 92);
a(EntityChicken.class, "Chicken", 93);
a(EntitySquid.class, "Squid", 94);
a(EntityWolf.class, "Wolf", 95);
- a(EntityTNTPrimed.class, "PrimedTnt", 20);
- a(EntityFallingSand.class, "FallingSand", 21);
- a(EntityMinecart.class, "Minecart", 40);
- a(EntityBoat.class, "Boat", 41);
+ a(EntityMushroomCow.class, "MushroomCow", 96);
+ a(EntitySnowman.class, "SnowMan", 97);
+ a(EntityVillager.class, "Villager", 120);
+ a(EntityEnderCrystal.class, "EnderCrystal", 200);
}
}
diff --git a/src/main/java/net/minecraft/server/EntityWeatherStorm.java b/src/main/java/net/minecraft/server/EntityWeatherStorm.java
index 6706e4f085..1080fcc00d 100644
--- a/src/main/java/net/minecraft/server/EntityWeatherStorm.java
+++ b/src/main/java/net/minecraft/server/EntityWeatherStorm.java
@@ -36,6 +36,7 @@ public class EntityWeatherStorm extends EntityWeather {
this.lifeTicks = 2;
this.a = this.random.nextLong();
this.c = this.random.nextInt(3) + 1;
+
// CraftBukkit
if (!isEffect && world.difficulty >= 2 && world.areChunksLoaded(MathHelper.floor(d0), MathHelper.floor(d1), MathHelper.floor(d2), 10)) {
int i = MathHelper.floor(d0);
@@ -72,8 +73,8 @@ public class EntityWeatherStorm extends EntityWeather {
}
}
- public void s_() {
- super.s_();
+ public void w_() {
+ super.w_();
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);
diff --git a/src/main/java/net/minecraft/server/EntityWolf.java b/src/main/java/net/minecraft/server/EntityWolf.java
index 2fa72eed5e..5be38edc76 100644
--- a/src/main/java/net/minecraft/server/EntityWolf.java
+++ b/src/main/java/net/minecraft/server/EntityWolf.java
@@ -26,18 +26,21 @@ public class EntityWolf extends EntityAnimal {
super(world);
this.texture = "/mob/wolf.png";
this.b(0.8F, 0.8F);
- this.aU = 1.1F;
- this.health = 8;
+ this.aY = 1.1F;
+ }
+
+ public int getMaxHealth() {
+ return this.isTamed() ? 20 : 8;
}
protected void b() {
super.b();
this.datawatcher.a(16, Byte.valueOf((byte) 0));
this.datawatcher.a(17, "");
- this.datawatcher.a(18, new Integer(this.health));
+ this.datawatcher.a(18, new Integer(this.getHealth()));
}
- protected boolean e_() {
+ protected boolean g_() {
return false;
}
@@ -54,8 +57,8 @@ public class EntityWolf extends EntityAnimal {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- this.setAngry(nbttagcompound.m("Angry"));
- this.setSitting(nbttagcompound.m("Sitting"));
+ this.setAngry(nbttagcompound.n("Angry"));
+ this.setSitting(nbttagcompound.n("Sitting"));
String s = nbttagcompound.getString("Owner");
if (s.length() > 0) {
@@ -65,44 +68,44 @@ public class EntityWolf extends EntityAnimal {
}
protected boolean d_() {
- return !this.isTamed();
+ return this.isAngry();
}
- protected String h() {
+ protected String c_() {
return this.isAngry() ? "mob.wolf.growl" : (this.random.nextInt(3) == 0 ? (this.isTamed() && this.datawatcher.getInt(18) < 10 ? "mob.wolf.whine" : "mob.wolf.panting") : "mob.wolf.bark");
}
- protected String i() {
+ protected String m() {
return "mob.wolf.hurt";
}
- protected String j() {
+ protected String n() {
return "mob.wolf.death";
}
- protected float l() {
+ protected float o() {
return 0.4F;
}
- protected int k() {
+ protected int e() {
return -1;
}
- protected void c_() {
- super.c_();
- if (!this.e && !this.B() && this.isTamed() && this.vehicle == null) {
+ protected void m_() {
+ super.m_();
+ if (!this.e && !this.D() && this.isTamed() && this.vehicle == null) {
EntityHuman entityhuman = this.world.a(this.getOwnerName());
if (entityhuman != null) {
- float f = entityhuman.g(this);
+ float f = entityhuman.h(this);
if (f > 5.0F) {
this.c(entityhuman, f);
}
- } else if (!this.ao()) {
+ } else if (!this.az()) {
this.setSitting(true);
}
- } else if (this.target == null && !this.B() && !this.isTamed() && this.world.random.nextInt(100) == 0) {
+ } else if (this.target == null && !this.D() && !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,20 +123,20 @@ public class EntityWolf extends EntityAnimal {
}
}
- if (this.ao()) {
+ if (this.az()) {
this.setSitting(false);
}
if (!this.world.isStatic) {
- this.datawatcher.watch(18, Integer.valueOf(this.health));
+ this.datawatcher.watch(18, Integer.valueOf(this.getHealth()));
}
}
- public void s() {
- super.s();
+ public void d() {
+ super.d();
this.a = false;
- if (this.ae() && !this.B() && !this.isAngry()) {
- Entity entity = this.af();
+ if (this.al() && !this.D() && !this.isAngry()) {
+ Entity entity = this.am();
if (entity instanceof EntityHuman) {
EntityHuman entityhuman = (EntityHuman) entity;
@@ -143,13 +146,13 @@ 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]).m();
+ this.a = ((ItemFood) Item.byId[itemstack.id]).p();
}
}
}
}
- if (!this.ai && this.g && !this.h && !this.B() && this.onGround) {
+ if (!this.aj && this.g && !this.h && !this.D() && this.onGround) {
this.h = true;
this.i = 0.0F;
this.j = 0.0F;
@@ -157,8 +160,8 @@ public class EntityWolf extends EntityAnimal {
}
}
- public void s_() {
- super.s_();
+ public void w_() {
+ super.w_();
this.c = this.b;
if (this.a) {
this.b += (1.0F - this.b) * 0.4F;
@@ -167,17 +170,17 @@ public class EntityWolf extends EntityAnimal {
}
if (this.a) {
- this.aV = 10;
+ this.aZ = 10;
}
- if (this.an()) {
+ if (this.ay()) {
this.g = true;
this.h = false;
this.i = 0.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.world.makeSound(this, "mob.wolf.shake", this.o(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
}
this.j = this.i;
@@ -203,12 +206,12 @@ public class EntityWolf extends EntityAnimal {
}
}
- public float t() {
+ public float x() {
return this.width * 0.8F;
}
- protected int u() {
- return this.isSitting() ? 20 : super.u();
+ protected int q_() {
+ return this.isSitting() ? 20 : super.q_();
}
private void c(Entity entity, float f) {
@@ -232,7 +235,7 @@ public class EntityWolf extends EntityAnimal {
}
}
- protected boolean v() {
+ protected boolean w() {
return this.isSitting() || this.h;
}
@@ -366,12 +369,12 @@ public class EntityWolf extends EntityAnimal {
this.setTamed(true);
this.setPathEntity((PathEntity) null);
this.setSitting(true);
- this.health = 20;
+ this.setHealth(20);
this.setOwnerName(entityhuman.name);
- this.b(true);
+ this.a(true);
this.world.a(this, (byte) 7);
} else {
- this.b(false);
+ this.a(false);
this.world.a(this, (byte) 6);
}
}
@@ -382,9 +385,9 @@ public class EntityWolf extends EntityAnimal {
if (itemstack != null && Item.byId[itemstack.id] instanceof ItemFood) {
ItemFood itemfood = (ItemFood) Item.byId[itemstack.id];
- if (itemfood.m() && this.datawatcher.getInt(18) < 20) {
+ if (itemfood.p() && this.datawatcher.getInt(18) < 20) {
--itemstack.count;
- this.c(itemfood.k(), RegainReason.EATING); // Craftbukkit
+ this.d(itemfood.n(), RegainReason.EATING); // Craftbukkit
if (itemstack.count <= 0) {
entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, (ItemStack) null);
}
@@ -396,7 +399,7 @@ public class EntityWolf extends EntityAnimal {
if (entityhuman.name.equalsIgnoreCase(this.getOwnerName())) {
if (!this.world.isStatic) {
this.setSitting(!this.isSitting());
- this.aS = false;
+ this.aW = false;
this.setPathEntity((PathEntity) null);
}
@@ -404,10 +407,10 @@ public class EntityWolf extends EntityAnimal {
}
}
- return false;
+ return super.b(entityhuman);
}
- void b(boolean flag) {
+ void a(boolean flag) {
String s = "heart";
if (!flag) {
@@ -423,7 +426,7 @@ public class EntityWolf extends EntityAnimal {
}
}
- public int m() {
+ public int p() {
return 8;
}
@@ -476,4 +479,8 @@ public class EntityWolf extends EntityAnimal {
this.datawatcher.watch(16, Byte.valueOf((byte) (b0 & -5)));
}
}
+
+ protected EntityAnimal createChild(EntityAnimal entityanimal) {
+ return new EntityWolf(this.world);
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java
index 92eb6d85ad..4a2f51364a 100644
--- a/src/main/java/net/minecraft/server/EntityZombie.java
+++ b/src/main/java/net/minecraft/server/EntityZombie.java
@@ -7,13 +7,21 @@ public class EntityZombie extends EntityMonster {
public EntityZombie(World world) {
super(world);
this.texture = "/mob/zombie.png";
- this.aU = 0.5F;
- this.damage = 5;
+ this.aY = 0.5F;
+ this.damage = 4;
}
- public void s() {
- if (this.world.d() && !this.world.isStatic) {
- float f = this.a_(1.0F);
+ public int getMaxHealth() {
+ return 20;
+ }
+
+ protected int O() {
+ return 2;
+ }
+
+ public void d() {
+ if (this.world.e() && !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
@@ -21,28 +29,32 @@ public class EntityZombie extends EntityMonster {
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
- this.fireTicks = 300;
+ this.j(8);
}
// CraftBukkit end
}
}
- super.s();
+ super.d();
}
- protected String h() {
+ protected String c_() {
return "mob.zombie";
}
- protected String i() {
+ protected String m() {
return "mob.zombiehurt";
}
- protected String j() {
+ protected String n() {
return "mob.zombiedeath";
}
- protected int k() {
+ protected int e() {
return Item.ROTTEN_FLESH.id;
}
+
+ public EnchantmentDamage t() {
+ return EnchantmentDamage.b;
+ }
}
diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java
index 8ebb573d87..491f937513 100644
--- a/src/main/java/net/minecraft/server/Explosion.java
+++ b/src/main/java/net/minecraft/server/Explosion.java
@@ -154,20 +154,6 @@ public class Explosion {
ArrayList arraylist = new ArrayList();
arraylist.addAll(this.blocks);
- if (this.a) {
- for (int l2 = arraylist.size() - 1; l2 >= 0; --l2) {
- ChunkPosition chunkposition = (ChunkPosition) arraylist.get(l2);
- int i3 = chunkposition.x;
- int j3 = chunkposition.y;
- int k3 = chunkposition.z;
- int l3 = this.world.getTypeId(i3, j3, k3);
- int i4 = this.world.getTypeId(i3, j3 - 1, k3);
-
- if (l3 == 0 && Block.o[i4] && this.h.nextInt(3) == 0) {
- this.world.setTypeId(i3, j3, k3, Block.FIRE.id);
- }
- }
- }
}
public void a(boolean flag) {
@@ -193,10 +179,10 @@ public class Explosion {
EntityExplodeEvent event = new EntityExplodeEvent(explode, location, blockList);
this.world.getServer().getPluginManager().callEvent(event);
-
+
arraylist.clear();
blocks.clear();
-
+
for (org.bukkit.block.Block block : event.blockList()) {
ChunkPosition coords = new ChunkPosition(block.getX(), block.getY(), block.getZ());
arraylist.add(coords);
@@ -209,13 +195,19 @@ public class Explosion {
}
// CraftBukkit end
- for (int i = arraylist.size() - 1; i >= 0; --i) {
- ChunkPosition chunkposition = (ChunkPosition) arraylist.get(i);
- int j = chunkposition.x;
- int k = chunkposition.y;
- int l = chunkposition.z;
- int i1 = this.world.getTypeId(j, k, l);
+ int i;
+ ChunkPosition chunkposition;
+ int j;
+ int k;
+ int l;
+ int i1;
+ for (i = arraylist.size() - 1; i >= 0; --i) {
+ chunkposition = (ChunkPosition) arraylist.get(i);
+ j = chunkposition.x;
+ k = chunkposition.y;
+ l = chunkposition.z;
+ i1 = this.world.getTypeId(j, k, l);
if (flag) {
double d0 = (double) ((float) j + this.world.random.nextFloat());
double d1 = (double) ((float) k + this.world.random.nextFloat());
@@ -241,10 +233,25 @@ public class Explosion {
// CraftBukkit - stop explosions from putting out fire
if (i1 > 0 && i1 != Block.FIRE.id) {
// CraftBukkit
- Block.byId[i1].dropNaturally(this.world, j, k, l, this.world.getData(j, k, l), event.getYield());
+ Block.byId[i1].dropNaturally(this.world, j, k, l, this.world.getData(j, k, l), event.getYield(), 0);
this.world.setTypeId(j, k, l, 0);
Block.byId[i1].a_(this.world, j, k, l);
}
}
+
+ if (this.a) {
+ for (i = arraylist.size() - 1; i >= 0; --i) {
+ chunkposition = (ChunkPosition) arraylist.get(i);
+ j = chunkposition.x;
+ k = chunkposition.y;
+ l = chunkposition.z;
+ i1 = this.world.getTypeId(j, k, l);
+ int j1 = this.world.getTypeId(j, k - 1, l);
+
+ if (i1 == 0 && Block.o[j1] && this.h.nextInt(3) == 0) {
+ this.world.setTypeId(j, k, l, Block.FIRE.id);
+ }
+ }
+ }
}
}
diff --git a/src/main/java/net/minecraft/server/FoodMetaData.java b/src/main/java/net/minecraft/server/FoodMetaData.java
index c07c921a2d..854b79cb55 100644
--- a/src/main/java/net/minecraft/server/FoodMetaData.java
+++ b/src/main/java/net/minecraft/server/FoodMetaData.java
@@ -23,7 +23,7 @@ public class FoodMetaData {
}
public void a(ItemFood itemfood) {
- this.a(itemfood.k(), itemfood.l());
+ this.a(itemfood.n(), itemfood.o());
}
public void a(EntityHuman entityhuman) {
@@ -46,17 +46,17 @@ public class FoodMetaData {
}
}
- if (this.foodLevel >= 18 && entityhuman.W()) {
+ if (this.foodLevel >= 18 && entityhuman.ab()) {
++this.foodTickTimer;
if (this.foodTickTimer >= 80) {
// CraftBukkit - added RegainReason.
- entityhuman.c(1, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.SATIATED);
+ entityhuman.d(1, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.SATIATED);
this.foodTickTimer = 0;
}
} else if (this.foodLevel <= 0) {
++this.foodTickTimer;
if (this.foodTickTimer >= 80) {
- if (entityhuman.health > 10 || i >= 3 || entityhuman.health > 1 && i >= 2) {
+ if (entityhuman.getHealth() > 10 || i >= 3 || entityhuman.getHealth() > 1 && i >= 2) {
// CraftBukkit start
EntityDamageEvent event = new EntityDamageEvent(entityhuman.getBukkitEntity(), EntityDamageEvent.DamageCause.STARVATION, 1);
entityhuman.world.getServer().getPluginManager().callEvent(event);
@@ -76,10 +76,10 @@ public class FoodMetaData {
public void a(NBTTagCompound nbttagcompound) {
if (nbttagcompound.hasKey("foodLevel")) {
- this.foodLevel = nbttagcompound.e("foodLevel");
- this.foodTickTimer = nbttagcompound.e("foodTickTimer");
- this.saturationLevel = nbttagcompound.g("foodSaturationLevel");
- this.exhaustionLevel = nbttagcompound.g("foodExhaustionLevel");
+ this.foodLevel = nbttagcompound.f("foodLevel");
+ this.foodTickTimer = nbttagcompound.f("foodTickTimer");
+ this.saturationLevel = nbttagcompound.h("foodSaturationLevel");
+ this.exhaustionLevel = nbttagcompound.h("foodExhaustionLevel");
}
}
diff --git a/src/main/java/net/minecraft/server/IInventory.java b/src/main/java/net/minecraft/server/IInventory.java
index 80a84b4d20..b94ab24aa5 100644
--- a/src/main/java/net/minecraft/server/IInventory.java
+++ b/src/main/java/net/minecraft/server/IInventory.java
@@ -18,9 +18,9 @@ public interface IInventory {
boolean a(EntityHuman entityhuman);
- void e();
+ void f();
- void t_();
+ void g();
public abstract ItemStack[] getContents(); // CraftBukkit
}
diff --git a/src/main/java/net/minecraft/server/InventoryCraftResult.java b/src/main/java/net/minecraft/server/InventoryCraftResult.java
index b506567701..154b603a46 100644
--- a/src/main/java/net/minecraft/server/InventoryCraftResult.java
+++ b/src/main/java/net/minecraft/server/InventoryCraftResult.java
@@ -49,7 +49,7 @@ public class InventoryCraftResult implements IInventory {
return true;
}
- public void e() {}
+ public void f() {}
- public void t_() {}
+ public void g() {}
}
diff --git a/src/main/java/net/minecraft/server/InventoryCrafting.java b/src/main/java/net/minecraft/server/InventoryCrafting.java
index a64f65a5bb..1ed97d7994 100644
--- a/src/main/java/net/minecraft/server/InventoryCrafting.java
+++ b/src/main/java/net/minecraft/server/InventoryCrafting.java
@@ -80,7 +80,7 @@ public class InventoryCrafting implements IInventory {
return true;
}
- public void e() {}
+ public void f() {}
- public void t_() {}
+ public void g() {}
}
diff --git a/src/main/java/net/minecraft/server/InventoryLargeChest.java b/src/main/java/net/minecraft/server/InventoryLargeChest.java
index 023f2751cc..5090563f77 100644
--- a/src/main/java/net/minecraft/server/InventoryLargeChest.java
+++ b/src/main/java/net/minecraft/server/InventoryLargeChest.java
@@ -67,13 +67,13 @@ public class InventoryLargeChest implements IInventory {
return this.b.a(entityhuman) && this.c.a(entityhuman);
}
- public void e() {
- this.b.e();
- this.c.e();
+ public void f() {
+ this.b.f();
+ this.c.f();
}
- public void t_() {
- this.b.t_();
- this.c.t_();
+ public void g() {
+ this.b.g();
+ this.c.g();
}
}
diff --git a/src/main/java/net/minecraft/server/InventoryPlayer.java b/src/main/java/net/minecraft/server/InventoryPlayer.java
index 27c5c3ff7d..ef395e3adc 100644
--- a/src/main/java/net/minecraft/server/InventoryPlayer.java
+++ b/src/main/java/net/minecraft/server/InventoryPlayer.java
@@ -27,7 +27,7 @@ public class InventoryPlayer implements IInventory {
return this.itemInHandIndex < 9 && this.itemInHandIndex >= 0 ? this.items[this.itemInHandIndex] : null;
}
- public static int g() {
+ public static int h() {
return 9;
}
@@ -80,41 +80,55 @@ public class InventoryPlayer implements IInventory {
private int e(ItemStack itemstack) {
int i = itemstack.id;
int j = itemstack.count;
- int k = this.firstPartial(itemstack);
+ int k;
- if (k < 0) {
+ if (itemstack.getMaxStackSize() == 1) {
k = this.m();
- }
-
- if (k < 0) {
- return j;
- } else {
- if (this.items[k] == null) {
- this.items[k] = new ItemStack(i, 0, itemstack.getData());
- }
-
- int l = j;
-
- if (j > this.items[k].getMaxStackSize() - this.items[k].count) {
- l = this.items[k].getMaxStackSize() - this.items[k].count;
- }
-
- if (l > this.getMaxStackSize() - this.items[k].count) {
- l = this.getMaxStackSize() - this.items[k].count;
- }
-
- if (l == 0) {
+ if (k < 0) {
return j;
} else {
- j -= l;
- this.items[k].count += l;
- this.items[k].b = 5;
+ if (this.items[k] == null) {
+ this.items[k] = ItemStack.b(itemstack);
+ }
+
+ return 0;
+ }
+ } else {
+ k = this.firstPartial(itemstack);
+ if (k < 0) {
+ k = this.m();
+ }
+
+ if (k < 0) {
return j;
+ } else {
+ if (this.items[k] == null) {
+ this.items[k] = new ItemStack(i, 0, itemstack.getData());
+ }
+
+ int l = j;
+
+ if (j > this.items[k].getMaxStackSize() - this.items[k].count) {
+ l = this.items[k].getMaxStackSize() - this.items[k].count;
+ }
+
+ if (l > this.getMaxStackSize() - this.items[k].count) {
+ l = this.getMaxStackSize() - this.items[k].count;
+ }
+
+ if (l == 0) {
+ return j;
+ } else {
+ j -= l;
+ this.items[k].count += l;
+ this.items[k].b = 5;
+ return j;
+ }
}
}
}
- public void h() {
+ public void i() {
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);
@@ -152,6 +166,9 @@ public class InventoryPlayer implements IInventory {
this.items[i].b = 5;
itemstack.count = 0;
return true;
+ } else if (this.d.abilities.canInstantlyBuild) {
+ itemstack.count = 0;
+ return true;
} else {
return false;
}
@@ -161,7 +178,12 @@ public class InventoryPlayer implements IInventory {
itemstack.count = this.e(itemstack);
} while (itemstack.count > 0 && itemstack.count < i);
- return itemstack.count < i;
+ if (itemstack.count == i && this.d.abilities.canInstantlyBuild) {
+ itemstack.count = 0;
+ return true;
+ } else {
+ return itemstack.count < i;
+ }
}
}
@@ -243,9 +265,9 @@ public class InventoryPlayer implements IInventory {
this.items = new ItemStack[36];
this.armor = new ItemStack[4];
- for (int i = 0; i < nbttaglist.c(); ++i) {
+ for (int i = 0; i < nbttaglist.d(); ++i) {
NBTTagCompound nbttagcompound = (NBTTagCompound) nbttaglist.a(i);
- int j = nbttagcompound.c("Slot") & 255;
+ int j = nbttagcompound.d("Slot") & 255;
ItemStack itemstack = ItemStack.a(nbttagcompound);
if (itemstack != null) {
@@ -299,33 +321,26 @@ public class InventoryPlayer implements IInventory {
}
}
- public int i() {
+ public int j() {
int i = 0;
- int j = 0;
- int k = 0;
- for (int l = 0; l < this.armor.length; ++l) {
- if (this.armor[l] != null && this.armor[l].getItem() instanceof ItemArmor) {
- int i1 = this.armor[l].i();
- int j1 = this.armor[l].g();
- int k1 = i1 - j1;
+ for (int j = 0; j < this.armor.length; ++j) {
+ if (this.armor[j] != null && this.armor[j].getItem() instanceof ItemArmor) {
+ int k = ((ItemArmor) this.armor[j].getItem()).b;
- j += k1;
- k += i1;
- int l1 = ((ItemArmor) this.armor[l].getItem()).bu;
-
- i += l1;
+ i += k;
}
}
- if (k == 0) {
- return 0;
- } else {
- return (i - 1) * j / k + 1;
- }
+ return i;
}
public void d(int i) {
+ i /= 4;
+ if (i < 1) {
+ i = 1;
+ }
+
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);
@@ -337,7 +352,7 @@ public class InventoryPlayer implements IInventory {
}
}
- public void j() {
+ public void k() {
int i;
for (i = 0; i < this.items.length; ++i) {
@@ -369,7 +384,7 @@ public class InventoryPlayer implements IInventory {
}
public boolean a(EntityHuman entityhuman) {
- return this.d.dead ? false : entityhuman.h(this.d) <= 64.0D;
+ return this.d.dead ? false : entityhuman.i(this.d) <= 64.0D;
}
public boolean c(ItemStack itemstack) {
@@ -390,7 +405,19 @@ public class InventoryPlayer implements IInventory {
return false;
}
- public void e() {}
+ public void f() {}
- public void t_() {}
+ public void g() {}
+
+ public void a(InventoryPlayer inventoryplayer) {
+ int i;
+
+ for (i = 0; i < this.items.length; ++i) {
+ this.items[i] = ItemStack.b(inventoryplayer.items[i]);
+ }
+
+ for (i = 0; i < this.armor.length; ++i) {
+ this.armor[i] = ItemStack.b(inventoryplayer.armor[i]);
+ }
+ }
}
diff --git a/src/main/java/net/minecraft/server/ItemBed.java b/src/main/java/net/minecraft/server/ItemBed.java
index f78467c01f..d0d284b906 100644
--- a/src/main/java/net/minecraft/server/ItemBed.java
+++ b/src/main/java/net/minecraft/server/ItemBed.java
@@ -40,7 +40,7 @@ public class ItemBed extends Item {
b0 = 1;
}
- if (entityhuman.c(i, j, k) && entityhuman.c(i + b0, j, k + b1)) {
+ if (entityhuman.d(i, j, k) && entityhuman.d(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
@@ -55,7 +55,10 @@ public class ItemBed extends Item {
}
// CraftBukkit end
- world.setTypeIdAndData(i + b0, j, k + b1, blockbed.id, i1 + 8);
+ if (world.getTypeId(i, j, k) == blockbed.id) {
+ world.setTypeIdAndData(i + b0, j, k + b1, blockbed.id, i1 + 8);
+ }
+
--itemstack.count;
return true;
} else {
diff --git a/src/main/java/net/minecraft/server/ItemBlock.java b/src/main/java/net/minecraft/server/ItemBlock.java
index 172e9ad6fc..6d8c20066f 100644
--- a/src/main/java/net/minecraft/server/ItemBlock.java
+++ b/src/main/java/net/minecraft/server/ItemBlock.java
@@ -13,7 +13,7 @@ public class ItemBlock extends Item {
public ItemBlock(int i) {
super(i);
this.id = i + 256;
- this.b(Block.byId[i + 256].a(2));
+ this.d(Block.byId[i + 256].a(2));
}
public int a() {
@@ -54,87 +54,84 @@ public class ItemBlock extends Item {
if (itemstack.count == 0) {
return false;
- } else if (!entityhuman.c(i, j, k)) {
+ } else if (!entityhuman.d(i, j, k)) {
return false;
- } else {
- 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];
+ } else if (j == world.height - 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);
+ // 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
-
- if (world.getTypeId(i, j, k) == this.id) {
- 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;
+ // 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
+
+ if (world.getTypeId(i, j, k) == this.id) {
+ 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(ItemStack itemstack) {
- return Block.byId[this.id].l();
+ return Block.byId[this.id].n();
}
public String b() {
- return Block.byId[this.id].l();
+ return Block.byId[this.id].n();
}
}
diff --git a/src/main/java/net/minecraft/server/ItemBoat.java b/src/main/java/net/minecraft/server/ItemBoat.java
index b84d6656d8..1bb9970410 100644
--- a/src/main/java/net/minecraft/server/ItemBoat.java
+++ b/src/main/java/net/minecraft/server/ItemBoat.java
@@ -1,5 +1,7 @@
package net.minecraft.server;
+import java.util.List;
+
// CraftBukkit start
import org.bukkit.craftbukkit.event.CraftEventFactory;
import org.bukkit.event.block.Action;
@@ -34,31 +36,55 @@ public class ItemBoat extends Item {
if (movingobjectposition == null) {
return itemstack;
} else {
- if (movingobjectposition.type == EnumMovingObjectType.TILE) {
- int i = movingobjectposition.b;
- int j = movingobjectposition.c;
- int k = movingobjectposition.d;
+ Vec3D vec3d2 = entityhuman.d(f);
+ boolean flag = false;
+ float f9 = 1.0F;
+ List list = world.b((Entity) entityhuman, entityhuman.boundingBox.a(vec3d2.a * d3, vec3d2.b * d3, vec3d2.c * d3).b((double) f9, (double) f9, (double) f9));
- if (!world.isStatic) {
- // CraftBukkit start - Boat placement
- PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(entityhuman, Action.RIGHT_CLICK_BLOCK, i, j, k, movingobjectposition.face, itemstack);
+ for (int i = 0; i < list.size(); ++i) {
+ Entity entity = (Entity) list.get(i);
- if (event.isCancelled()) {
- return itemstack;
+ if (entity.e_()) {
+ float f10 = entity.j_();
+ AxisAlignedBB axisalignedbb = entity.boundingBox.b((double) f10, (double) f10, (double) f10);
+
+ if (axisalignedbb.a(vec3d)) {
+ flag = true;
}
- // CraftBukkit end
-
- if (world.getTypeId(i, j, k) == Block.SNOW.id) {
- --j;
- }
-
- world.addEntity(new EntityBoat(world, (double) ((float) i + 0.5F), (double) ((float) j + 1.0F), (double) ((float) k + 0.5F)));
}
-
- --itemstack.count;
}
- return itemstack;
+ if (flag) {
+ return itemstack;
+ } else {
+ if (movingobjectposition.type == EnumMovingObjectType.TILE) {
+ int j = movingobjectposition.b;
+ int k = movingobjectposition.c;
+ int l = movingobjectposition.d;
+
+ if (!world.isStatic) {
+ // CraftBukkit start - Boat placement
+ PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(entityhuman, Action.RIGHT_CLICK_BLOCK, j, k, l, movingobjectposition.face, itemstack);
+
+ if (event.isCancelled()) {
+ return itemstack;
+ }
+ // CraftBukkit end
+
+ if (world.getTypeId(j, k, l) == Block.SNOW.id) {
+ --k;
+ }
+
+ world.addEntity(new EntityBoat(world, (double) ((float) j + 0.5F), (double) ((float) k + 1.0F), (double) ((float) l + 0.5F)));
+ }
+
+ if (!entityhuman.abilities.canInstantlyBuild) {
+ --itemstack.count;
+ }
+ }
+
+ return itemstack;
+ }
}
}
}
diff --git a/src/main/java/net/minecraft/server/ItemBucket.java b/src/main/java/net/minecraft/server/ItemBucket.java
index ee348ac941..2eb6104daa 100644
--- a/src/main/java/net/minecraft/server/ItemBucket.java
+++ b/src/main/java/net/minecraft/server/ItemBucket.java
@@ -20,21 +20,11 @@ public class ItemBucket extends Item {
public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) {
float f = 1.0F;
- float f1 = entityhuman.lastPitch + (entityhuman.pitch - entityhuman.lastPitch) * f;
- float f2 = entityhuman.lastYaw + (entityhuman.yaw - entityhuman.lastYaw) * f;
double d0 = entityhuman.lastX + (entityhuman.locX - entityhuman.lastX) * (double) f;
double d1 = entityhuman.lastY + (entityhuman.locY - entityhuman.lastY) * (double) f + 1.62D - (double) entityhuman.height;
double d2 = entityhuman.lastZ + (entityhuman.locZ - entityhuman.lastZ) * (double) f;
- Vec3D vec3d = Vec3D.create(d0, d1, d2);
- float f3 = MathHelper.cos(-f2 * 0.017453292F - 3.1415927F);
- float f4 = MathHelper.sin(-f2 * 0.017453292F - 3.1415927F);
- float f5 = -MathHelper.cos(-f1 * 0.017453292F);
- float f6 = MathHelper.sin(-f1 * 0.017453292F);
- float f7 = f4 * f5;
- float f8 = f3 * f5;
- double d3 = 5.0D;
- Vec3D vec3d1 = vec3d.add((double) f7 * d3, (double) f6 * d3, (double) f8 * d3);
- MovingObjectPosition movingobjectposition = world.rayTrace(vec3d, vec3d1, this.a == 0);
+ boolean flag = this.a == 0;
+ MovingObjectPosition movingobjectposition = this.a(world, entityhuman, flag);
if (movingobjectposition == null) {
return itemstack;
@@ -49,7 +39,7 @@ public class ItemBucket extends Item {
}
if (this.a == 0) {
- if (!entityhuman.c(i, j, k)) {
+ if (!entityhuman.d(i, j, k)) {
return itemstack;
}
@@ -61,6 +51,10 @@ public class ItemBucket extends Item {
return itemstack;
}
+ if (entityhuman.abilities.canInstantlyBuild) {
+ return itemstack;
+ }
+
CraftItemStack itemInHand = (CraftItemStack) event.getItemStack();
byte data = itemInHand.getData() == null ? (byte) 0 : itemInHand.getData().getData();
// CraftBukkit end
@@ -77,6 +71,10 @@ public class ItemBucket extends Item {
return itemstack;
}
+ if (entityhuman.abilities.canInstantlyBuild) {
+ return itemstack;
+ }
+
CraftItemStack itemInHand = (CraftItemStack) event.getItemStack();
byte data = itemInHand.getData() == null ? (byte) 0 : itemInHand.getData().getData();
// CraftBukkit end
@@ -125,7 +123,7 @@ public class ItemBucket extends Item {
++i;
}
- if (!entityhuman.c(i, j, k)) {
+ if (!entityhuman.d(i, j, k)) {
return itemstack;
}
diff --git a/src/main/java/net/minecraft/server/ItemDoor.java b/src/main/java/net/minecraft/server/ItemDoor.java
index 31940e2e5e..fc3dd9c99d 100644
--- a/src/main/java/net/minecraft/server/ItemDoor.java
+++ b/src/main/java/net/minecraft/server/ItemDoor.java
@@ -29,7 +29,7 @@ public class ItemDoor extends Item {
block = Block.IRON_DOOR_BLOCK;
}
- if (entityhuman.c(i, j, k) && entityhuman.c(i, j + 1, k)) {
+ if (entityhuman.d(i, j, k) && entityhuman.d(i, j + 1, k)) {
if (!block.canPlace(world, i, j, k)) {
return false;
} else {
@@ -39,9 +39,8 @@ public class ItemDoor extends Item {
if (a(world, i, j, k, i1, block, entityhuman)) {
--itemstack.count;
return true;
- } else {
- return false;
}
+ return false;
// CraftBukkit end
}
} else {
diff --git a/src/main/java/net/minecraft/server/ItemFishingRod.java b/src/main/java/net/minecraft/server/ItemFishingRod.java
index cf5715a466..33fa84bfeb 100644
--- a/src/main/java/net/minecraft/server/ItemFishingRod.java
+++ b/src/main/java/net/minecraft/server/ItemFishingRod.java
@@ -6,16 +6,16 @@ public class ItemFishingRod extends Item {
public ItemFishingRod(int i) {
super(i);
- this.d(64);
- this.c(1);
+ this.f(64);
+ this.e(1);
}
public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) {
if (entityhuman.hookedFish != null) {
- int i = entityhuman.hookedFish.i();
+ int i = entityhuman.hookedFish.j();
itemstack.damage(i, entityhuman);
- entityhuman.v();
+ entityhuman.r_();
} else {
// CraftBukkit start
PlayerFishEvent playerFishEvent = new PlayerFishEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), null,PlayerFishEvent.State.FISHING);
@@ -25,12 +25,13 @@ public class ItemFishingRod extends Item {
return itemstack;
}
// CraftBukkit end
- world.makeSound(entityhuman, "random.bow", 0.5F, 0.4F / (b.nextFloat() * 0.4F + 0.8F));
+
+ world.makeSound(entityhuman, "random.bow", 0.5F, 0.4F / (c.nextFloat() * 0.4F + 0.8F));
if (!world.isStatic) {
world.addEntity(new EntityFishingHook(world, entityhuman));
}
- entityhuman.v();
+ entityhuman.r_();
}
return itemstack;
diff --git a/src/main/java/net/minecraft/server/ItemFlintAndSteel.java b/src/main/java/net/minecraft/server/ItemFlintAndSteel.java
index 56646bbb17..1405b08c40 100644
--- a/src/main/java/net/minecraft/server/ItemFlintAndSteel.java
+++ b/src/main/java/net/minecraft/server/ItemFlintAndSteel.java
@@ -13,7 +13,7 @@ public class ItemFlintAndSteel extends Item {
public ItemFlintAndSteel(int i) {
super(i);
this.maxStackSize = 1;
- this.d(64);
+ this.f(64);
}
public boolean a(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l) {
@@ -43,7 +43,7 @@ public class ItemFlintAndSteel extends Item {
++i;
}
- if (!entityhuman.c(i, j, k)) {
+ if (!entityhuman.d(i, j, k)) {
return false;
} else {
int i1 = world.getTypeId(i, j, k);
@@ -64,7 +64,7 @@ public class ItemFlintAndSteel extends Item {
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.makeSound((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D, "fire.ignite", 1.0F, c.nextFloat() * 0.4F + 0.8F);
world.setTypeId(i, j, k, Block.FIRE.id);
// CraftBukkit start
diff --git a/src/main/java/net/minecraft/server/ItemFood.java b/src/main/java/net/minecraft/server/ItemFood.java
index de922f2c7d..755e13c805 100644
--- a/src/main/java/net/minecraft/server/ItemFood.java
+++ b/src/main/java/net/minecraft/server/ItemFood.java
@@ -5,21 +5,21 @@ import org.bukkit.event.entity.FoodLevelChangeEvent; // CraftBukkit
public class ItemFood extends Item {
public final int a;
- private final int bt;
- private final float bu;
- private final boolean bv;
- private boolean bw;
- private int bx;
- private int by;
- private int bz;
- private float bA;
+ private final int b;
+ private final float bR;
+ private final boolean bS;
+ private boolean bT;
+ private int bU;
+ private int bV;
+ private int bW;
+ private float bX;
public ItemFood(int i, int j, float f, boolean flag) {
super(i);
this.a = 32;
- this.bt = j;
- this.bv = flag;
- this.bu = f;
+ this.b = j;
+ this.bS = flag;
+ this.bR = f;
}
public ItemFood(int i, int j, boolean flag) {
@@ -31,16 +31,16 @@ public class ItemFood extends Item {
// CraftBukkit start
int oldFoodLevel = entityhuman.getFoodData().foodLevel;
- FoodLevelChangeEvent event = new FoodLevelChangeEvent(entityhuman.getBukkitEntity(), Math.min(this.k() + entityhuman.getFoodData().foodLevel, 20));
+ FoodLevelChangeEvent event = new FoodLevelChangeEvent(entityhuman.getBukkitEntity(), Math.min(this.n() + entityhuman.getFoodData().foodLevel, 20));
entityhuman.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
- entityhuman.getFoodData().a(event.getFoodLevel() - oldFoodLevel, this.l());
+ entityhuman.getFoodData().a(event.getFoodLevel() - oldFoodLevel, this.o());
}
// CraftBukkit end
- if (!world.isStatic && this.bx > 0 && world.random.nextFloat() < this.bA) {
- entityhuman.addEffect(new MobEffect(this.bx, this.by * 20, this.bz));
+ if (!world.isStatic && this.bU > 0 && world.random.nextFloat() < this.bX) {
+ entityhuman.addEffect(new MobEffect(this.bU, this.bV * 20, this.bW));
}
return itemstack;
@@ -50,40 +50,40 @@ public class ItemFood extends Item {
return 32;
}
- public EnumAnimation b(ItemStack itemstack) {
+ public EnumAnimation d(ItemStack itemstack) {
return EnumAnimation.b;
}
public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) {
- if (entityhuman.c(this.bw)) {
+ if (entityhuman.b(this.bT)) {
entityhuman.a(itemstack, this.c(itemstack));
}
return itemstack;
}
- public int k() {
- return this.bt;
+ public int n() {
+ return this.b;
}
- public float l() {
- return this.bu;
+ public float o() {
+ return this.bR;
}
- public boolean m() {
- return this.bv;
+ public boolean p() {
+ return this.bS;
}
public ItemFood a(int i, int j, int k, float f) {
- this.bx = i;
- this.by = j;
- this.bz = k;
- this.bA = f;
+ this.bU = i;
+ this.bV = j;
+ this.bW = k;
+ this.bX = f;
return this;
}
- public ItemFood n() {
- this.bw = true;
+ public ItemFood q() {
+ this.bT = true;
return this;
}
diff --git a/src/main/java/net/minecraft/server/ItemHoe.java b/src/main/java/net/minecraft/server/ItemHoe.java
index 318fcd75fc..6286cd9b37 100644
--- a/src/main/java/net/minecraft/server/ItemHoe.java
+++ b/src/main/java/net/minecraft/server/ItemHoe.java
@@ -11,11 +11,11 @@ public class ItemHoe extends Item {
public ItemHoe(int i, EnumToolMaterial enumtoolmaterial) {
super(i);
this.maxStackSize = 1;
- this.d(enumtoolmaterial.a());
+ this.f(enumtoolmaterial.a());
}
public boolean a(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l) {
- if (!entityhuman.c(i, j, k)) {
+ if (!entityhuman.d(i, j, k)) {
return false;
} else {
int i1 = world.getTypeId(i, j, k);
diff --git a/src/main/java/net/minecraft/server/ItemInWorldManager.java b/src/main/java/net/minecraft/server/ItemInWorldManager.java
index e88f63c34c..bc560e0915 100644
--- a/src/main/java/net/minecraft/server/ItemInWorldManager.java
+++ b/src/main/java/net/minecraft/server/ItemInWorldManager.java
@@ -215,17 +215,18 @@ public class ItemInWorldManager {
if (this.b()) {
((EntityPlayer) this.player).netServerHandler.sendPacket(new Packet53BlockChange(i, j, k, this.world));
} else {
- ItemStack itemstack = this.player.K();
+ ItemStack itemstack = this.player.P();
+ boolean flag1 = this.player.b(Block.byId[l]);
if (itemstack != null) {
itemstack.a(l, i, j, k, this.player);
if (itemstack.count == 0) {
itemstack.a(this.player);
- this.player.L();
+ this.player.Q();
}
}
- if (flag && this.player.b(Block.byId[l])) {
+ if (flag && flag1) {
Block.byId[l].a(this.world, this.player, i, j, k, i1);
}
}
diff --git a/src/main/java/net/minecraft/server/ItemMinecart.java b/src/main/java/net/minecraft/server/ItemMinecart.java
index 5e83b1ad98..dd73f3b597 100644
--- a/src/main/java/net/minecraft/server/ItemMinecart.java
+++ b/src/main/java/net/minecraft/server/ItemMinecart.java
@@ -19,7 +19,7 @@ public class ItemMinecart 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);
- if (BlockMinecartTrack.c(i1)) {
+ if (BlockMinecartTrack.d(i1)) {
if (!world.isStatic) {
// CraftBukkit start - Minecarts
PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(entityhuman, Action.RIGHT_CLICK_BLOCK, i, j, k, l, itemstack);
diff --git a/src/main/java/net/minecraft/server/ItemPainting.java b/src/main/java/net/minecraft/server/ItemPainting.java
index 5985a6b4d6..445f53e22f 100644
--- a/src/main/java/net/minecraft/server/ItemPainting.java
+++ b/src/main/java/net/minecraft/server/ItemPainting.java
@@ -32,12 +32,12 @@ public class ItemPainting extends Item {
b0 = 3;
}
- if (!entityhuman.c(i, j, k)) {
+ if (!entityhuman.d(i, j, k)) {
return false;
} else {
EntityPainting entitypainting = new EntityPainting(world, i, j, k, b0);
- if (entitypainting.i()) {
+ if (entitypainting.j()) {
if (!world.isStatic) {
// CraftBukkit start
Player who = (entityhuman == null) ? null : (Player) entityhuman.getBukkitEntity();
diff --git a/src/main/java/net/minecraft/server/ItemRedstone.java b/src/main/java/net/minecraft/server/ItemRedstone.java
index 7f22ce18c5..53f668d932 100644
--- a/src/main/java/net/minecraft/server/ItemRedstone.java
+++ b/src/main/java/net/minecraft/server/ItemRedstone.java
@@ -45,7 +45,7 @@ public class ItemRedstone extends Item {
}
}
- if (!entityhuman.c(i, j, k)) {
+ if (!entityhuman.d(i, j, k)) {
return false;
} else {
if (Block.REDSTONE_WIRE.canPlace(world, i, j, k)) {
diff --git a/src/main/java/net/minecraft/server/ItemReed.java b/src/main/java/net/minecraft/server/ItemReed.java
index b0bd521b2c..b5c6284902 100644
--- a/src/main/java/net/minecraft/server/ItemReed.java
+++ b/src/main/java/net/minecraft/server/ItemReed.java
@@ -47,7 +47,7 @@ public class ItemReed extends Item {
}
}
- if (!entityhuman.c(i, j, k)) {
+ if (!entityhuman.d(i, j, k)) {
return false;
} else if (itemstack.count == 0) {
return false;
diff --git a/src/main/java/net/minecraft/server/ItemSeeds.java b/src/main/java/net/minecraft/server/ItemSeeds.java
index 0fb19e917a..8033d6d0f6 100644
--- a/src/main/java/net/minecraft/server/ItemSeeds.java
+++ b/src/main/java/net/minecraft/server/ItemSeeds.java
@@ -9,19 +9,21 @@ import org.bukkit.event.block.BlockPlaceEvent;
public class ItemSeeds extends Item {
private int id;
+ private int b;
- public ItemSeeds(int i, int j) {
+ public ItemSeeds(int i, int j, int k) {
super(i);
this.id = j;
+ this.b = k;
}
public boolean a(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l) {
if (l != 1) {
return false;
- } else if (entityhuman.c(i, j, k) && entityhuman.c(i, j + 1, k)) {
+ } else if (entityhuman.d(i, j, k) && entityhuman.d(i, j + 1, k)) {
int i1 = world.getTypeId(i, j, k);
- if (i1 == Block.SOIL.id && world.isEmpty(i, j + 1, k)) {
+ if (i1 == this.b && world.isEmpty(i, j + 1, k)) {
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j + 1, k); // CraftBukkit
world.setTypeId(i, j + 1, k, this.id);
diff --git a/src/main/java/net/minecraft/server/ItemSign.java b/src/main/java/net/minecraft/server/ItemSign.java
index 7aeaaff6e4..fc603c11d9 100644
--- a/src/main/java/net/minecraft/server/ItemSign.java
+++ b/src/main/java/net/minecraft/server/ItemSign.java
@@ -41,7 +41,7 @@ public class ItemSign extends Item {
++i;
}
- if (!entityhuman.c(i, j, k)) {
+ if (!entityhuman.d(i, j, k)) {
return false;
} else if (!Block.SIGN_POST.canPlace(world, i, j, k)) {
return false;
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
index a624e7fc8b..fedb9d39e7 100644
--- a/src/main/java/net/minecraft/server/ItemStack.java
+++ b/src/main/java/net/minecraft/server/ItemStack.java
@@ -5,6 +5,7 @@ public final class ItemStack {
public int count;
public int b;
public int id;
+ public NBTTagCompound tag;
private int damage;
public ItemStack(Block block) {
@@ -50,8 +51,14 @@ public final class ItemStack {
}
public ItemStack a(int i) {
+ ItemStack itemstack = new ItemStack(this.id, i, this.damage);
+
+ if (this.tag != null) {
+ itemstack.tag = (NBTTagCompound) this.tag.b();
+ }
+
this.count -= i;
- return new ItemStack(this.id, i, this.damage);
+ return itemstack;
}
public Item getItem() {
@@ -84,13 +91,20 @@ public final class ItemStack {
nbttagcompound.a("id", (short) this.id);
nbttagcompound.a("Count", (byte) this.count);
nbttagcompound.a("Damage", (short) this.damage);
+ if (this.tag != null) {
+ nbttagcompound.a("tag", (NBTBase) this.tag);
+ }
+
return nbttagcompound;
}
public void c(NBTTagCompound nbttagcompound) {
- this.id = nbttagcompound.d("id");
- this.count = nbttagcompound.c("Count");
- this.damage = nbttagcompound.d("Damage");
+ this.id = nbttagcompound.e("id");
+ this.count = nbttagcompound.d("Count");
+ this.damage = nbttagcompound.e("Damage");
+ if (nbttagcompound.hasKey("tag")) {
+ this.tag = nbttagcompound.l("tag");
+ }
}
public int getMaxStackSize() {
@@ -106,7 +120,7 @@ public final class ItemStack {
}
public boolean usesData() {
- return Item.byId[this.id].d();
+ return Item.byId[this.id].e();
}
public boolean f() {
@@ -129,12 +143,21 @@ public final class ItemStack {
return Item.byId[this.id].getMaxDurability();
}
- public void damage(int i, Entity entity) {
+ public void damage(int i, EntityLiving entityliving) {
if (this.d()) {
+ if (i > 0 && entityliving instanceof EntityHuman) {
+ int j = EnchantmentManager.c(((EntityHuman) entityliving).inventory);
+
+ if (j > 0 && entityliving.world.random.nextInt(j + 1) > 0) {
+ return;
+ }
+ }
+
this.damage += i;
if (this.damage > this.i()) {
- if (entity instanceof EntityHuman) {
- ((EntityHuman) entity).a(StatisticList.F[this.id], 1);
+ entityliving.c(this);
+ if (entityliving instanceof EntityHuman) {
+ ((EntityHuman) entityliving).a(StatisticList.F[this.id], 1);
}
--this.count;
@@ -178,7 +201,16 @@ public final class ItemStack {
}
public ItemStack cloneItemStack() {
- return new ItemStack(this.id, this.count, this.damage);
+ ItemStack itemstack = new ItemStack(this.id, this.count, this.damage);
+
+ if (this.tag != null) {
+ itemstack.tag = (NBTTagCompound) this.tag.b();
+ if (!itemstack.tag.equals(this.tag)) {
+ return itemstack;
+ }
+ }
+
+ return itemstack;
}
public static boolean equals(ItemStack itemstack, ItemStack itemstack1) {
@@ -186,7 +218,7 @@ public final class ItemStack {
}
private boolean d(ItemStack itemstack) {
- return this.count != itemstack.count ? false : (this.id != itemstack.id ? false : this.damage == itemstack.damage);
+ return this.count != itemstack.count ? false : (this.id != itemstack.id ? false : (this.damage != itemstack.damage ? false : (this.tag == null && itemstack.tag != null ? false : this.tag == null || this.tag.equals(itemstack.tag))));
}
public boolean doMaterialsMatch(ItemStack itemstack) {
@@ -227,10 +259,55 @@ public final class ItemStack {
}
public EnumAnimation m() {
- return this.getItem().b(this);
+ return this.getItem().d(this);
}
public void a(World world, EntityHuman entityhuman, int i) {
this.getItem().a(this, world, entityhuman, i);
}
+
+ public boolean n() {
+ return this.tag != null;
+ }
+
+ public NBTTagCompound o() {
+ return this.tag;
+ }
+
+ public NBTTagList p() {
+ return this.tag == null ? null : (NBTTagList) this.tag.b("ench");
+ }
+
+ public void d(NBTTagCompound nbttagcompound) {
+ if (Item.byId[this.id].getMaxStackSize() != 1) {
+ throw new IllegalArgumentException("Cannot add tag data to a stackable item");
+ } else {
+ this.tag = nbttagcompound;
+ }
+ }
+
+ public boolean q() {
+ return !this.getItem().e(this) ? false : !this.r();
+ }
+
+ public void a(Enchantment enchantment, int i) {
+ if (this.tag == null) {
+ this.d(new NBTTagCompound());
+ }
+
+ if (!this.tag.hasKey("ench")) {
+ this.tag.a("ench", (NBTBase) (new NBTTagList("ench")));
+ }
+
+ NBTTagList nbttaglist = (NBTTagList) this.tag.b("ench");
+ NBTTagCompound nbttagcompound = new NBTTagCompound();
+
+ nbttagcompound.a("id", (short) enchantment.id);
+ nbttagcompound.a("lvl", (short) ((byte) i));
+ nbttaglist.a((NBTBase) nbttagcompound);
+ }
+
+ public boolean r() {
+ return this.tag != null && this.tag.hasKey("ench");
+ }
}
diff --git a/src/main/java/net/minecraft/server/ItemWorldMap.java b/src/main/java/net/minecraft/server/ItemWorldMap.java
index 8e7ac20440..558a18518f 100644
--- a/src/main/java/net/minecraft/server/ItemWorldMap.java
+++ b/src/main/java/net/minecraft/server/ItemWorldMap.java
@@ -9,7 +9,7 @@ public class ItemWorldMap extends ItemWorldMapBase {
protected ItemWorldMap(int i) {
super(i);
- this.c(1);
+ this.e(1);
}
public WorldMap a(ItemStack itemstack, World world) {
@@ -21,8 +21,8 @@ public class ItemWorldMap extends ItemWorldMapBase {
String s = "map_" + itemstack.getData();
worldmap = new WorldMap(s);
- worldmap.b = world.p().c();
- worldmap.c = world.p().e();
+ worldmap.b = world.r().c();
+ worldmap.c = world.r().e();
worldmap.e = 3;
worldmap.map = (byte) world.worldProvider.dimension;
worldmap.a();
@@ -105,18 +105,17 @@ 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.D == MaterialMapColor.b) {
+ } else if (k4 > 0 && j5 > 0 && Block.byId[j5].material.E == MaterialMapColor.b) {
flag1 = false;
}
if (!flag1) {
--k4;
- if (k4 <= 0) break; // CraftBukkit
j5 = chunk.getTypeId(l4 + k3, k4 - 1, j4 + l3);
}
- } while (!flag1);
+ } while (k4 > 0 && !flag1);
- if (j5 != 0 && Block.byId[j5].material.isLiquid()) {
+ if (k4 > 0 && j5 != 0 && Block.byId[j5].material.isLiquid()) {
i5 = k4 - 1;
boolean flag2 = false;
@@ -163,7 +162,7 @@ public class ItemWorldMap extends ItemWorldMapBase {
i5 = 0;
if (j4 > 0) {
- MaterialMapColor materialmapcolor = Block.byId[j4].material.D;
+ MaterialMapColor materialmapcolor = Block.byId[j4].material.E;
if (materialmapcolor == MaterialMapColor.n) {
d2 = (double) i4 * 0.1D + (double) (k1 + j2 & 1) * 0.2D;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 347262e874..f4c2fb5bc1 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -32,28 +32,34 @@ import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.PluginLoadOrder;
// CraftBukkit end
-public class MinecraftServer implements Runnable, ICommandListener {
+public class MinecraftServer implements Runnable, ICommandListener, IMinecraftServer {
public static Logger log = Logger.getLogger("Minecraft");
public static HashMap trackerList = new HashMap();
+ private String s;
+ private int t;
public NetworkListenThread networkListenThread;
public PropertyManager propertyManager;
// public WorldServer[] worldServer; // CraftBukkit - removed!
+ public long[] f = new long[100];
+ public long[][] g;
public ServerConfigurationManager serverConfigurationManager;
public ConsoleCommandHandler consoleCommandHandler; // CraftBukkit - made public
private boolean isRunning = true;
public boolean isStopped = false;
int ticks = 0;
- public String i;
- public int j;
- private List s = new ArrayList();
- private List t = Collections.synchronizedList(new ArrayList());
- // public EntityTracker[] tracker = new EntityTracker[2]; // CraftBukkit - removed!
+ public String k;
+ public int l;
+ private List w = new ArrayList();
+ private List x = Collections.synchronizedList(new ArrayList());
+ // public EntityTracker[] tracker = new EntityTracker[3]; // CraftBukkit - removed!
public boolean onlineMode;
public boolean spawnAnimals;
public boolean pvpMode;
public boolean allowFlight;
- public String p;
+ public String r;
+ private RemoteStatusListener y;
+ private RemoteControlListener z;
// CraftBukkit start
public List worlds = new ArrayList();
@@ -91,7 +97,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.8.1");
+ log.info("Starting minecraft server version 1.0.0");
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\"");
@@ -99,26 +105,24 @@ public class MinecraftServer implements Runnable, ICommandListener {
log.info("Loading properties");
this.propertyManager = new PropertyManager(this.options); // CraftBukkit - CLI argument support
- String s = this.propertyManager.getString("server-ip", "");
-
+ this.s = this.propertyManager.getString("server-ip", "");
this.onlineMode = this.propertyManager.getBoolean("online-mode", true);
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', '$');
+ this.r = this.propertyManager.getString("motd", "A Minecraft Server");
+ this.r.replace('\u00a7', '$');
InetAddress inetaddress = null;
- if (s.length() > 0) {
- inetaddress = InetAddress.getByName(s);
+ if (this.s.length() > 0) {
+ inetaddress = InetAddress.getByName(this.s);
}
- int i = this.propertyManager.getInt("server-port", 25565);
-
- log.info("Starting Minecraft server on " + (s.length() == 0 ? "*" : s) + ":" + i);
+ this.t = this.propertyManager.getInt("server-port", 25565);
+ log.info("Starting Minecraft server on " + (this.s.length() == 0 ? "*" : this.s) + ":" + this.t);
try {
- this.networkListenThread = new NetworkListenThread(this, inetaddress, i);
+ this.networkListenThread = new NetworkListenThread(this, inetaddress, this.t);
} catch (Throwable ioexception) { // CraftBukkit - IOException -> Throwable
log.warning("**** FAILED TO BIND TO PORT!");
log.log(Level.WARNING, "The exception was: " + ioexception.toString());
@@ -135,33 +139,53 @@ public class MinecraftServer implements Runnable, ICommandListener {
this.serverConfigurationManager = new ServerConfigurationManager(this);
// CraftBukkit - removed trackers
- long j = System.nanoTime();
- String s1 = this.propertyManager.getString("level-name", "world");
- String s2 = this.propertyManager.getString("level-seed", "");
- long k = (new Random()).nextLong();
+ long i = System.nanoTime();
+ String s = this.propertyManager.getString("level-name", "world");
+ String s1 = this.propertyManager.getString("level-seed", "");
+ long j = (new Random()).nextLong();
- if (s2.length() > 0) {
+ if (s1.length() > 0) {
try {
- k = Long.parseLong(s2);
+ long k = Long.parseLong(s1);
+
+ if (k != 0L) {
+ j = k;
+ }
} catch (NumberFormatException numberformatexception) {
- k = (long) s2.hashCode();
+ j = (long) s1.hashCode();
}
}
- log.info("Preparing level \"" + s1 + "\"");
- this.a(new WorldLoaderServer(new File(".")), s1, k);
+ log.info("Preparing level \"" + s + "\"");
+ this.a(new WorldLoaderServer(new File(".")), s, j);
// CraftBukkit start
- long elapsed = System.nanoTime() - j;
+ long elapsed = System.nanoTime() - i;
String time = String.format("%.3fs", elapsed / 10000000000.0D);
log.info("Done (" + time + ")! For help, type \"help\" or \"?\"");
+ // CratBukkit end
+ if (this.propertyManager.getBoolean("enable-query", false)) {
+ log.info("Starting GS4 status listener");
+ this.y = new RemoteStatusListener(this);
+ this.y.a();
+ }
+
+ if (this.propertyManager.getBoolean("enable-rcon", false)) {
+ log.info("Starting remote control listener");
+ this.z = new RemoteControlListener(this);
+ this.z.a();
+ }
+
+ // CraftBukkit start
if (this.propertyManager.properties.containsKey("spawn-protection")) {
log.info("'spawn-protection' in server.properties has been moved to 'settings.spawn-radius' in bukkit.yml. I will move your config for you.");
this.server.setSpawnRadius(this.propertyManager.getInt("spawn-protection", 16));
this.propertyManager.properties.remove("spawn-protection");
this.propertyManager.savePropertiesFile();
}
+ // CratBukkit end
+
return true;
}
@@ -171,21 +195,36 @@ public class MinecraftServer implements Runnable, ICommandListener {
convertable.convert(s, new ConvertProgressUpdater(this));
}
- // CraftBukkit - removed world array
+ // CraftBukkit - removed world and ticktime arrays
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) {
+ int worldCount = 2;
+
+ if (this.propertyManager.getBoolean("allow-nether", true)) {
+ worldCount++;
+ }
+
+ for (int k = 0; k < worldCount; ++k) {
WorldServer world;
- int dimension = k == 0 ? 0 : -1;
+ int dimension = 0;
+
+ if (k == 1) {
+ dimension = -1;
+ }
+
+ if (k == 2) {
+ dimension = 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);
+ WorldSettings settings = new WorldSettings(i, j, true, false);
if (k == 0) {
world = new WorldServer(this, new ServerNBTManager(server.getWorldContainer(), s, true), s, dimension, settings, org.bukkit.World.Environment.getEnvironment(dimension), gen); // CraftBukkit
@@ -231,7 +270,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
world.addIWorldAccess(new WorldManager(this, world));
world.difficulty = this.propertyManager.getInt("difficulty", 1);
world.setSpawnFlags(this.propertyManager.getBoolean("spawn-monsters", true), this.spawnAnimals);
- world.p().setGameType(j);
+ world.r().setGameType(j);
this.worlds.add(world);
this.serverConfigurationManager.setPlayerFileData(this.worlds.toArray(new WorldServer[0]));
}
@@ -261,13 +300,13 @@ public class MinecraftServer implements Runnable, ICommandListener {
int i2 = (short1 * 2 + 1) * (short1 * 2 + 1);
int j2 = (j1 + short1) * (short1 * 2 + 1) + k1 + 1;
- this.a("Preparing spawn area", j2 * 100 / i2);
+ this.b("Preparing spawn area", j2 * 100 / i2);
l = l1;
}
worldserver.chunkProviderServer.getChunkAt(chunkcoordinates.x + j1 >> 4, chunkcoordinates.z + k1 >> 4);
- while (worldserver.v() && this.isRunning) {
+ while (worldserver.x() && this.isRunning) {
;
}
}
@@ -281,18 +320,18 @@ public class MinecraftServer implements Runnable, ICommandListener {
}
// CraftBukkit end
- this.e();
+ this.t();
}
- private void a(String s, int i) {
- this.i = s;
- this.j = i;
+ private void b(String s, int i) {
+ this.k = s;
+ this.l = i;
log.info(s + ": " + i + "%");
}
- private void e() {
- this.i = null;
- this.j = 0;
+ private void t() {
+ this.k = null;
+ this.l = 0;
this.server.enablePlugins(PluginLoadOrder.POSTWORLD); // CraftBukkit
}
@@ -365,13 +404,13 @@ public class MinecraftServer implements Runnable, ICommandListener {
j += l;
i = k;
if (this.worlds.get(0).everyoneDeeplySleeping()) { // CraftBukkit
- this.h();
+ this.w();
j = 0L;
} else {
while (j > 50L) {
MinecraftServer.currentTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit
j -= 50L;
- this.h();
+ this.w();
}
}
}
@@ -411,25 +450,26 @@ public class MinecraftServer implements Runnable, ICommandListener {
}
}
- private void h() {
+ private void w() {
+ long i = System.nanoTime();
ArrayList arraylist = new ArrayList();
Iterator iterator = trackerList.keySet().iterator();
while (iterator.hasNext()) {
String s = (String) iterator.next();
- int i = ((Integer) trackerList.get(s)).intValue();
+ int j = ((Integer) trackerList.get(s)).intValue();
- if (i > 0) {
- trackerList.put(s, Integer.valueOf(i - 1));
+ if (j > 0) {
+ trackerList.put(s, Integer.valueOf(j - 1));
} else {
arraylist.add(s);
}
}
- int j;
+ int k;
- for (j = 0; j < arraylist.size(); ++j) {
- trackerList.remove(arraylist.get(j));
+ for (k = 0; k < arraylist.size(); ++k) {
+ trackerList.remove(arraylist.get(k));
}
AxisAlignedBB.a();
@@ -442,15 +482,16 @@ public class MinecraftServer implements Runnable, ICommandListener {
// Send timeupdates to everyone, it will get the right time from the world the player is in.
if (this.ticks % 20 == 0) {
- for (int i = 0; i < this.serverConfigurationManager.players.size(); ++i) {
- EntityPlayer entityplayer = (EntityPlayer) this.serverConfigurationManager.players.get(i);
+ for ( k = 0; k < this.serverConfigurationManager.players.size(); ++k) {
+ EntityPlayer entityplayer = (EntityPlayer) this.serverConfigurationManager.players.get(k);
entityplayer.netServerHandler.sendPacket(new Packet4UpdateTime(entityplayer.getPlayerTime())); // Add support for per player time
}
}
- for (j = 0; j < this.worlds.size(); ++j) {
- // if (j == 0 || this.propertyManager.getBoolean("allow-nether", true)) {
- WorldServer worldserver = this.worlds.get(j);
+ for (k = 0; k < this.worlds.size(); ++k) {
+ long l = System.nanoTime();
+ // if (k == 0 || this.propertyManager.getBoolean("allow-nether", true)) {
+ WorldServer worldserver = this.worlds.get(k);
/* Drop global timeupdates
if (this.ticks % 20 == 0) {
@@ -460,25 +501,28 @@ public class MinecraftServer implements Runnable, ICommandListener {
worldserver.doTick();
- while (worldserver.v()) {
- ;
+ while (true) {
+ if (!worldserver.x()) {
+ worldserver.tickEntities();
+ break;
+ }
}
-
- worldserver.tickEntities();
}
+
+ // this.g[k][this.ticks % 100] = System.nanoTime() - l; // CraftBukkit
// } // CraftBukkit
this.networkListenThread.a();
this.serverConfigurationManager.b();
// CraftBukkit start
- for (j = 0; j < this.worlds.size(); ++j) {
- this.worlds.get(j).tracker.updatePlayers();
+ for (k = 0; k < this.worlds.size(); ++k) {
+ this.worlds.get(k).tracker.updatePlayers();
}
// CraftBukkit end
- for (j = 0; j < this.s.size(); ++j) {
- ((IUpdatePlayerListBox) this.s.get(j)).a();
+ for (k = 0; k < this.w.size(); ++k) {
+ ((IUpdatePlayerListBox) this.w.get(k)).a();
}
try {
@@ -486,15 +530,17 @@ public class MinecraftServer implements Runnable, ICommandListener {
} catch (Exception exception) {
log.log(Level.WARNING, "Unexpected exception while parsing console command", exception);
}
+
+ this.f[this.ticks % 100] = System.nanoTime() - i;
}
public void issueCommand(String s, ICommandListener icommandlistener) {
- this.t.add(new ServerCommand(s, icommandlistener));
+ this.x.add(new ServerCommand(s, icommandlistener));
}
public void b() {
- while (this.t.size() > 0) {
- ServerCommand servercommand = (ServerCommand) this.t.remove(0);
+ while (this.x.size() > 0) {
+ ServerCommand servercommand = (ServerCommand) this.x.remove(0);
// CraftBukkit start - ServerCommand for preprocessing
ServerCommandEvent event = new ServerCommandEvent(this.console, servercommand.command);
@@ -508,7 +554,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
}
public void a(IUpdatePlayerListBox iupdateplayerlistbox) {
- this.s.add(iupdateplayerlistbox);
+ this.w.add(iupdateplayerlistbox);
}
public static void main(final OptionSet options) { // CraftBukkit - replaces main(String args[])
@@ -533,7 +579,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
log.info(s);
}
- public void c(String s) {
+ public void warning(String s) {
log.warning(s);
}
@@ -557,6 +603,94 @@ public class MinecraftServer implements Runnable, ICommandListener {
return this.getWorldServer(i).tracker; // CraftBukkit
}
+ public int getProperty(String s, int i) {
+ return this.propertyManager.getInt(s, i);
+ }
+
+ public String a(String s, String s1) {
+ return this.propertyManager.getString(s, s1);
+ }
+
+ public void a(String s, Object object) {
+ this.propertyManager.a(s, object);
+ }
+
+ public void c() {
+ this.propertyManager.savePropertiesFile();
+ }
+
+ public String getPropertiesFile() {
+ File file1 = this.propertyManager.c();
+
+ return file1 != null ? file1.getAbsolutePath() : "No settings file";
+ }
+
+ public String getMotd() {
+ return this.s;
+ }
+
+ public int getPort() {
+ return this.t;
+ }
+
+ public String getServerAddress() {
+ return this.r;
+ }
+
+ public String getVersion() {
+ return "1.0.0";
+ }
+
+ public int getPlayerCount() {
+ return this.serverConfigurationManager.j();
+ }
+
+ public int getMaxPlayers() {
+ return this.serverConfigurationManager.k();
+ }
+
+ public String[] getPlayers() {
+ return this.serverConfigurationManager.d();
+ }
+
+ public String getWorldName() {
+ return this.propertyManager.getString("level-name", "world");
+ }
+
+ public String getPlugins() {
+ return "";
+ }
+
+ public void o() {}
+
+ public String d(String s) {
+ RemoteControlCommandListener.a.a();
+ this.consoleCommandHandler.handle(new ServerCommand(s, RemoteControlCommandListener.a));
+ return RemoteControlCommandListener.a.b();
+ }
+
+ public boolean isDebugging() {
+ return false;
+ }
+
+ public void severe(String s) {
+ log.log(Level.SEVERE, s);
+ }
+
+ public void debug(String s) {
+ if (this.isDebugging()) {
+ log.log(Level.INFO, s);
+ }
+ }
+
+ public String[] q() {
+ return (String[]) this.serverConfigurationManager.f().toArray(new String[0]);
+ }
+
+ public String[] r() {
+ return (String[]) this.serverConfigurationManager.e().toArray(new String[0]);
+ }
+
public static boolean isRunning(MinecraftServer minecraftserver) {
return minecraftserver.isRunning;
}
diff --git a/src/main/java/net/minecraft/server/NetLoginHandler.java b/src/main/java/net/minecraft/server/NetLoginHandler.java
index e7d6d6e2d5..1b00ff40c2 100644
--- a/src/main/java/net/minecraft/server/NetLoginHandler.java
+++ b/src/main/java/net/minecraft/server/NetLoginHandler.java
@@ -20,7 +20,7 @@ public class NetLoginHandler extends NetHandler {
private int f = 0;
private String g = null;
private Packet1Login h = null;
- private String i = Long.toHexString(d.nextLong());
+ private String i = Long.toString(d.nextLong(), 16); // CraftBukkit -- Thanks Jens! :D
public NetLoginHandler(MinecraftServer minecraftserver, Socket socket, String s) {
this.server = minecraftserver;
@@ -69,8 +69,8 @@ public class NetLoginHandler extends NetHandler {
public void a(Packet1Login packet1login) {
this.g = packet1login.name;
- if (packet1login.a != 17) {
- if (packet1login.a > 17) {
+ if (packet1login.a != 22) {
+ if (packet1login.a > 22) {
this.disconnect("Outdated server!");
} else {
this.disconnect("Outdated client!");
@@ -90,31 +90,23 @@ public class NetLoginHandler extends NetHandler {
if (entityplayer != null) {
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);
+ // CraftBukkit - add world and location to 'logged in' message.
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().getGameType());
+ entityplayer.itemInWorldManager.b(worldserver.r().getGameType());
NetServerHandler netserverhandler = new NetServerHandler(this.server, this.networkManager, entityplayer);
- int i = entityplayer.id;
- long j = worldserver.getSeed();
- int k = entityplayer.itemInWorldManager.a();
- byte b0 = (byte) worldserver.worldProvider.dimension;
- byte b1 = (byte) worldserver.difficulty;
-
- worldserver.getClass();
// CraftBukkit start -- Don't send a higher than 60 MaxPlayer size, otherwise the PlayerInfo window won't render correctly.
- int maxPlayers = this.server.serverConfigurationManager.h();
+ int maxPlayers = this.server.serverConfigurationManager.k();
if (maxPlayers > 60) {
maxPlayers = 60;
}
- Packet1Login packet1login1 = new Packet1Login("", i, j, k, b0, b1, (byte) -128, (byte) maxPlayers);
+ netserverhandler.sendPacket(new Packet1Login("", entityplayer.id, worldserver.getSeed(), entityplayer.itemInWorldManager.a(), (byte) worldserver.worldProvider.dimension, (byte) worldserver.difficulty, (byte) worldserver.height, (byte) maxPlayers));
// CraftBukkit end
- 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
@@ -145,8 +137,8 @@ public class NetLoginHandler extends NetHandler {
if (this.networkManager.f() == null) return; // CraftBukkit - fix NPE when a client queries a server that is unable to handle it.
try {
// CraftBukkit start
- ServerListPingEvent pingEvent = CraftEventFactory.callServerListPingEvent(this.server.server, getSocket().getInetAddress(), this.server.p, this.server.serverConfigurationManager.g(), this.server.serverConfigurationManager.h());
- String s = pingEvent.getMotd() + "\u00A7" + this.server.serverConfigurationManager.g() + "\u00A7" + pingEvent.getMaxPlayers();
+ ServerListPingEvent pingEvent = CraftEventFactory.callServerListPingEvent(this.server.server, getSocket().getInetAddress(), this.server.r, this.server.serverConfigurationManager.j(), this.server.serverConfigurationManager.k());
+ String s = pingEvent.getMotd() + "\u00A7" + this.server.serverConfigurationManager.j() + "\u00A7" + pingEvent.getMaxPlayers();
// CraftBukkit end
this.networkManager.queue(new Packet255KickDisconnect(s));
diff --git a/src/main/java/net/minecraft/server/NetServerHandler.java b/src/main/java/net/minecraft/server/NetServerHandler.java
index d688b93c06..81b541bbf7 100644
--- a/src/main/java/net/minecraft/server/NetServerHandler.java
+++ b/src/main/java/net/minecraft/server/NetServerHandler.java
@@ -113,7 +113,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
s = event.getReason();
// CraftBukkit end
- this.player.A();
+ this.player.E();
this.sendPacket(new Packet255KickDisconnect(s));
this.networkManager.d();
@@ -136,244 +136,248 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension);
this.h = true;
- double d0;
+ if (!this.player.j) {
+ double d0;
- if (!this.checkMovement) {
- d0 = packet10flying.y - this.y;
- if (packet10flying.x == this.x && d0 * d0 < 0.01D && packet10flying.z == this.z) {
- this.checkMovement = true;
- }
- }
-
- // CraftBukkit start
- Player player = this.getPlayer();
- Location from = new Location(player.getWorld(), lastPosX, lastPosY, lastPosZ, lastYaw, lastPitch); // Get the Players previous Event location.
- Location to = player.getLocation().clone(); // Start off the To location as the Players current location.
-
- // If the packet contains movement information then we update the To location with the correct XYZ.
- if (packet10flying.h && !(packet10flying.h && packet10flying.y == -999.0D && packet10flying.stance == -999.0D)) {
- to.setX(packet10flying.x);
- to.setY(packet10flying.y);
- to.setZ(packet10flying.z);
- }
-
- // If the packet contains look information then we update the To location with the correct Yaw & Pitch.
- if (packet10flying.hasLook) {
- to.setYaw(packet10flying.yaw);
- to.setPitch(packet10flying.pitch);
- }
-
- // Prevent 40 event-calls for less than a single pixel of movement >.>
- double delta = Math.pow(this.lastPosX - to.getX(), 2) + Math.pow(this.lastPosY - to.getY(), 2) + Math.pow(this.lastPosZ - to.getZ(), 2);
- float deltaAngle = Math.abs(this.lastYaw - to.getYaw()) + Math.abs(this.lastPitch - to.getPitch());
-
- if ((delta > 1f / 256 || deltaAngle > 10f) && (this.checkMovement && !this.player.dead)) {
- this.lastPosX = to.getX();
- this.lastPosY = to.getY();
- this.lastPosZ = to.getZ();
- this.lastYaw = to.getYaw();
- this.lastPitch = to.getPitch();
-
- // Skip the first time we do this
- if (from.getX() != Double.MAX_VALUE) {
- PlayerMoveEvent event = new PlayerMoveEvent(player, from, to);
- this.server.getPluginManager().callEvent(event);
-
- // If the event is cancelled we move the player back to their old location.
- if (event.isCancelled()) {
- this.player.netServerHandler.sendPacket(new Packet13PlayerLookMove(from.getX(), from.getY() + 1.6200000047683716D, from.getY(), from.getZ(), from.getYaw(), from.getPitch(), false));
- return;
- }
-
- /* If a Plugin has changed the To destination then we teleport the Player
- there to avoid any 'Moved wrongly' or 'Moved too quickly' errors.
- We only do this if the Event was not cancelled. */
- if (!to.equals(event.getTo()) && !event.isCancelled()) {
- this.player.getBukkitEntity().teleport(event.getTo());
- return;
- }
-
- /* Check to see if the Players Location has some how changed during the call of the event.
- This can happen due to a plugin teleporting the player instead of using .setTo() */
- if (!from.equals(this.getPlayer().getLocation()) && this.justTeleported) {
- this.justTeleported = false;
- return;
- }
- }
- }
-
- if (Double.isNaN(packet10flying.x) || Double.isNaN(packet10flying.y) || Double.isNaN(packet10flying.z) || Double.isNaN(packet10flying.stance)) {
- player.teleport(player.getWorld().getSpawnLocation());
- System.err.println(player.getName() + " was caught trying to crash the server with an invalid position.");
- player.kickPlayer("Nope!");
- return;
- }
-
- if (this.checkMovement && !this.player.dead) {
- // CraftBukkit end
- double d1;
- double d2;
- double d3;
- double d4;
-
- if (this.player.vehicle != null) {
- float f = this.player.yaw;
- float f1 = this.player.pitch;
-
- this.player.vehicle.g_();
- d1 = this.player.locX;
- d2 = this.player.locY;
- d3 = this.player.locZ;
- double d5 = 0.0D;
-
- d4 = 0.0D;
- if (packet10flying.hasLook) {
- f = packet10flying.yaw;
- f1 = packet10flying.pitch;
- }
-
- if (packet10flying.h && packet10flying.y == -999.0D && packet10flying.stance == -999.0D) {
- d5 = packet10flying.x;
- d4 = packet10flying.z;
- }
-
- this.player.onGround = packet10flying.g;
- this.player.b(true);
- this.player.move(d5, 0.0D, d4);
- this.player.setLocation(d1, d2, d3, f, f1);
- this.player.motX = d5;
- this.player.motZ = d4;
- if (this.player.vehicle != null) {
- worldserver.vehicleEnteredWorld(this.player.vehicle, true);
- }
-
- if (this.player.vehicle != null) {
- this.player.vehicle.g_();
- }
-
- this.minecraftServer.serverConfigurationManager.d(this.player);
- this.x = this.player.locX;
- this.y = this.player.locY;
- this.z = this.player.locZ;
- worldserver.playerJoinedWorld(this.player);
- return;
- }
-
- if (this.player.isSleeping()) {
- this.player.b(true);
- this.player.setLocation(this.x, this.y, this.z, this.player.yaw, this.player.pitch);
- worldserver.playerJoinedWorld(this.player);
- return;
- }
-
- d0 = this.player.locY;
- this.x = this.player.locX;
- this.y = this.player.locY;
- this.z = this.player.locZ;
- d1 = this.player.locX;
- d2 = this.player.locY;
- d3 = this.player.locZ;
- float f2 = this.player.yaw;
- float f3 = this.player.pitch;
-
- if (packet10flying.h && packet10flying.y == -999.0D && packet10flying.stance == -999.0D) {
- packet10flying.h = false;
- }
-
- if (packet10flying.h) {
- d1 = packet10flying.x;
- d2 = packet10flying.y;
- d3 = packet10flying.z;
- d4 = packet10flying.stance - packet10flying.y;
- if (!this.player.isSleeping() && (d4 > 1.65D || d4 < 0.1D)) {
- this.disconnect("Illegal stance");
- a.warning(this.player.name + " had an illegal stance: " + d4);
- return;
- }
-
- if (Math.abs(packet10flying.x) > 3.2E7D || Math.abs(packet10flying.z) > 3.2E7D) {
- this.disconnect("Illegal position");
- return;
- }
- }
-
- if (packet10flying.hasLook) {
- f2 = packet10flying.yaw;
- f3 = packet10flying.pitch;
- }
-
- this.player.b(true);
- this.player.bH = 0.0F;
- this.player.setLocation(this.x, this.y, this.z, f2, f3);
if (!this.checkMovement) {
- return;
+ d0 = packet10flying.y - this.y;
+ if (packet10flying.x == this.x && d0 * d0 < 0.01D && packet10flying.z == this.z) {
+ this.checkMovement = true;
+ }
}
- d4 = d1 - this.player.locX;
- double d6 = d2 - this.player.locY;
- double d7 = d3 - this.player.locZ;
- double d8 = d4 * d4 + d6 * d6 + d7 * d7;
+ // CraftBukkit start
+ Player player = this.getPlayer();
+ Location from = new Location(player.getWorld(), lastPosX, lastPosY, lastPosZ, lastYaw, lastPitch); // Get the Players previous Event location.
+ Location to = player.getLocation().clone(); // Start off the To location as the Players current location.
- 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;
+ // If the packet contains movement information then we update the To location with the correct XYZ.
+ if (packet10flying.h && !(packet10flying.h && packet10flying.y == -999.0D && packet10flying.stance == -999.0D)) {
+ to.setX(packet10flying.x);
+ to.setY(packet10flying.y);
+ to.setZ(packet10flying.z);
}
- 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);
+ // If the packet contains look information then we update the To location with the correct Yaw & Pitch.
+ if (packet10flying.hasLook) {
+ to.setYaw(packet10flying.yaw);
+ to.setPitch(packet10flying.pitch);
}
- 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) {
- d6 = 0.0D;
- }
+ // Prevent 40 event-calls for less than a single pixel of movement >.>
+ double delta = Math.pow(this.lastPosX - to.getX(), 2) + Math.pow(this.lastPosY - to.getY(), 2) + Math.pow(this.lastPosZ - to.getZ(), 2);
+ float deltaAngle = Math.abs(this.lastYaw - to.getYaw()) + Math.abs(this.lastPitch - to.getPitch());
- d7 = d3 - this.player.locZ;
- d8 = d4 * d4 + d6 * d6 + d7 * d7;
- boolean flag1 = false;
+ if ((delta > 1f / 256 || deltaAngle > 10f) && (this.checkMovement && !this.player.dead)) {
+ this.lastPosX = to.getX();
+ this.lastPosY = to.getY();
+ this.lastPosZ = to.getZ();
+ this.lastYaw = to.getYaw();
+ this.lastPitch = to.getPitch();
- 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);
- System.out.println("Expected " + this.player.locX + ", " + this.player.locY + ", " + this.player.locZ);
- }
+ // Skip the first time we do this
+ if (from.getX() != Double.MAX_VALUE) {
+ PlayerMoveEvent event = new PlayerMoveEvent(player, from, to);
+ this.server.getPluginManager().callEvent(event);
- this.player.setLocation(d1, d2, d3, f2, f3);
- boolean flag2 = worldserver.getEntities(this.player, this.player.boundingBox.clone().shrink((double) f4, (double) f4, (double) f4)).size() == 0;
+ // If the event is cancelled we move the player back to their old location.
+ if (event.isCancelled()) {
+ this.player.netServerHandler.sendPacket(new Packet13PlayerLookMove(from.getX(), from.getY() + 1.6200000047683716D, from.getY(), from.getZ(), from.getYaw(), from.getPitch(), false));
+ return;
+ }
- if (flag && (flag1 || !flag2) && !this.player.isSleeping()) {
- this.a(this.x, this.y, this.z, f2, f3);
- return;
- }
+ /* If a Plugin has changed the To destination then we teleport the Player
+ there to avoid any 'Moved wrongly' or 'Moved too quickly' errors.
+ We only do this if the Event was not cancelled. */
+ if (!to.equals(event.getTo()) && !event.isCancelled()) {
+ this.player.getBukkitEntity().teleport(event.getTo());
+ return;
+ }
- AxisAlignedBB axisalignedbb = this.player.boundingBox.clone().b((double) f4, (double) f4, (double) f4).a(0.0D, -0.55D, 0.0D);
-
- if (!this.minecraftServer.allowFlight && !this.player.itemInWorldManager.b() && !worldserver.b(axisalignedbb)) {
- if (d6 >= -0.03125D) {
- ++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");
+ /* Check to see if the Players Location has some how changed during the call of the event.
+ This can happen due to a plugin teleporting the player instead of using .setTo() */
+ if (!from.equals(this.getPlayer().getLocation()) && this.justTeleported) {
+ this.justTeleported = false;
return;
}
}
- } else {
- this.g = 0;
}
- this.player.onGround = packet10flying.g;
- this.minecraftServer.serverConfigurationManager.d(this.player);
- if (this.player.itemInWorldManager.b()) return; // CraftBukkit - fixed fall distance accumulating while being in Creative mode.
- this.player.b(this.player.locY - d0, packet10flying.g);
+ if (Double.isNaN(packet10flying.x) || Double.isNaN(packet10flying.y) || Double.isNaN(packet10flying.z) || Double.isNaN(packet10flying.stance)) {
+ player.teleport(player.getWorld().getSpawnLocation());
+ System.err.println(player.getName() + " was caught trying to crash the server with an invalid position.");
+ player.kickPlayer("Nope!");
+ return;
+ }
+
+ if (this.checkMovement && !this.player.dead) {
+ // CraftBukkit end
+ double d1;
+ double d2;
+ double d3;
+ double d4;
+
+ if (this.player.vehicle != null) {
+ float f = this.player.yaw;
+ float f1 = this.player.pitch;
+
+ this.player.vehicle.i();
+ d1 = this.player.locX;
+ d2 = this.player.locY;
+ d3 = this.player.locZ;
+ double d5 = 0.0D;
+
+ d4 = 0.0D;
+ if (packet10flying.hasLook) {
+ f = packet10flying.yaw;
+ f1 = packet10flying.pitch;
+ }
+
+ if (packet10flying.h && packet10flying.y == -999.0D && packet10flying.stance == -999.0D) {
+ d5 = packet10flying.x;
+ d4 = packet10flying.z;
+ }
+
+ this.player.onGround = packet10flying.g;
+ this.player.a(true);
+ this.player.move(d5, 0.0D, d4);
+ this.player.setLocation(d1, d2, d3, f, f1);
+ this.player.motX = d5;
+ this.player.motZ = d4;
+ if (this.player.vehicle != null) {
+ worldserver.vehicleEnteredWorld(this.player.vehicle, true);
+ }
+
+ if (this.player.vehicle != null) {
+ this.player.vehicle.i();
+ }
+
+ this.minecraftServer.serverConfigurationManager.d(this.player);
+ this.x = this.player.locX;
+ this.y = this.player.locY;
+ this.z = this.player.locZ;
+ worldserver.playerJoinedWorld(this.player);
+ return;
+ }
+
+ if (this.player.isSleeping()) {
+ this.player.a(true);
+ this.player.setLocation(this.x, this.y, this.z, this.player.yaw, this.player.pitch);
+ worldserver.playerJoinedWorld(this.player);
+ return;
+ }
+
+ d0 = this.player.locY;
+ this.x = this.player.locX;
+ this.y = this.player.locY;
+ this.z = this.player.locZ;
+ d1 = this.player.locX;
+ d2 = this.player.locY;
+ d3 = this.player.locZ;
+ float f2 = this.player.yaw;
+ float f3 = this.player.pitch;
+
+ if (packet10flying.h && packet10flying.y == -999.0D && packet10flying.stance == -999.0D) {
+ packet10flying.h = false;
+ }
+
+ if (packet10flying.h) {
+ d1 = packet10flying.x;
+ d2 = packet10flying.y;
+ d3 = packet10flying.z;
+ d4 = packet10flying.stance - packet10flying.y;
+ if (!this.player.isSleeping() && (d4 > 1.65D || d4 < 0.1D)) {
+ this.disconnect("Illegal stance");
+ a.warning(this.player.name + " had an illegal stance: " + d4);
+ return;
+ }
+
+ if (Math.abs(packet10flying.x) > 3.2E7D || Math.abs(packet10flying.z) > 3.2E7D) {
+ this.disconnect("Illegal position");
+ return;
+ }
+ }
+
+ if (packet10flying.hasLook) {
+ f2 = packet10flying.yaw;
+ f3 = packet10flying.pitch;
+ }
+
+ this.player.a(true);
+ this.player.bL = 0.0F;
+ this.player.setLocation(this.x, this.y, this.z, f2, f3);
+ if (!this.checkMovement) {
+ return;
+ }
+
+ d4 = d1 - this.player.locX;
+ double d6 = d2 - this.player.locY;
+ double d7 = d3 - this.player.locZ;
+ double d8 = d4 * d4 + d6 * d6 + d7 * d7;
+
+ 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;
+ }
+
+ 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.c(0.2F);
+ }
+
+ this.player.move(d4, d6, d7);
+ this.player.onGround = packet10flying.g;
+ this.player.b(d4, d6, d7);
+ double d9 = d6;
+
+ d4 = d1 - this.player.locX;
+ d6 = d2 - this.player.locY;
+ if (d6 > -0.5D || d6 < 0.5D) {
+ d6 = 0.0D;
+ }
+
+ d7 = d3 - this.player.locZ;
+ d8 = d4 * d4 + d6 * d6 + d7 * d7;
+ boolean flag1 = false;
+
+ 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);
+ System.out.println("Expected " + this.player.locX + ", " + this.player.locY + ", " + this.player.locZ);
+ }
+
+ this.player.setLocation(d1, d2, d3, f2, f3);
+ boolean flag2 = worldserver.getEntities(this.player, this.player.boundingBox.clone().shrink((double) f4, (double) f4, (double) f4)).size() == 0;
+
+ if (flag && (flag1 || !flag2) && !this.player.isSleeping()) {
+ this.a(this.x, this.y, this.z, f2, f3);
+ return;
+ }
+
+ AxisAlignedBB axisalignedbb = this.player.boundingBox.clone().b((double) f4, (double) f4, (double) f4).a(0.0D, -0.55D, 0.0D);
+
+ if (!this.minecraftServer.allowFlight && !this.player.itemInWorldManager.b() && !worldserver.b(axisalignedbb)) {
+ if (d9 >= -0.03125D) {
+ ++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.g = 0;
+ }
+
+ this.player.onGround = packet10flying.g;
+ this.minecraftServer.serverConfigurationManager.d(this.player);
+ if (this.player.itemInWorldManager.b()) return; // CraftBukkit - fixed fall distance accumulating while being in Creative mode.
+ this.player.b(this.player.locY - d0, packet10flying.g);
+ }
}
}
@@ -447,9 +451,9 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
}
// CraftBukkit end
- this.player.J();
+ this.player.N();
} else if (packet14blockdig.e == 5) {
- this.player.E();
+ this.player.I();
} else {
boolean flag = worldserver.weirdIsOpCache = worldserver.dimension != 0 || this.minecraftServer.serverConfigurationManager.isOp(this.player.name); // CraftBukkit
boolean flag1 = false;
@@ -462,17 +466,13 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
flag1 = true;
}
- if (this.player.itemInWorldManager.b()) {
- flag1 = true; // CraftBukkit - false -> true
- }
-
int i = packet14blockdig.a;
int j = packet14blockdig.b;
int k = packet14blockdig.c;
if (flag1) {
double d0 = this.player.locX - ((double) i + 0.5D);
- double d1 = this.player.locY - ((double) j + 0.5D);
+ double d1 = this.player.locY - ((double) j + 0.5D) + 1.5D;
double d2 = this.player.locZ - ((double) k + 0.5D);
double d3 = d0 * d0 + d1 * d1 + d2 * d2;
@@ -629,13 +629,13 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
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);
+ Slot slot = this.player.activeContainer.a((IInventory) this.player.inventory, this.player.inventory.itemInHandIndex);
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()));
+ this.sendPacket(new Packet103SetSlot(this.player.activeContainer.windowId, slot.c, this.player.inventory.getItemInHand()));
}
}
@@ -671,7 +671,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
this.networkManager.queue(new Packet3Chat(line));
}
packet = null;
- } else if (packet.k == true) {
+ } else if (packet.l == true) {
// Reroute all low-priority packets through to compression thread.
ChunkCompressionThread.sendPacket(this.player, packet);
packet = null;
@@ -684,8 +684,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
// CraftBukkit start
if (this.player.dead) return;
- // Changed <= to <
- if (packet16blockitemswitch.itemInHandIndex >= 0 && packet16blockitemswitch.itemInHandIndex < InventoryPlayer.g()) {
+ if (packet16blockitemswitch.itemInHandIndex >= 0 && packet16blockitemswitch.itemInHandIndex < InventoryPlayer.h()) {
PlayerItemHeldEvent event = new PlayerItemHeldEvent(this.getPlayer(), this.player.inventory.itemInHandIndex, packet16blockitemswitch.itemInHandIndex);
this.server.getPluginManager().callEvent(event);
// CraftBukkit end
@@ -832,7 +831,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
if (event.isCancelled()) return;
// CraftBukkit end
- this.player.v();
+ this.player.r_();
}
}
@@ -895,7 +894,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension);
Entity entity = worldserver.getEntity(packet7useentity.target);
- if (entity != null && this.player.f(entity) && this.player.h(entity) < 36.0D) {
+ if (entity != null && this.player.g(entity) && this.player.i(entity) < 36.0D) {
ItemStack itemInHand = this.player.inventory.getItemInHand(); // CraftBukkit
if (packet7useentity.c == 0) {
// CraftBukkit start
@@ -906,14 +905,14 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
return;
}
// CraftBukkit end
- this.player.c(entity);
+ this.player.e(entity);
// CraftBukkit start - update the client if the item is an infinite one
if (itemInHand != null && itemInHand.count <= -1) {
this.player.updateInventory(this.player.activeContainer);
}
// CraftBukkit end
} else if (packet7useentity.c == 1) {
- this.player.d(entity);
+ this.player.f(entity);
// CraftBukkit start - update the client if the item is an infinite one
if (itemInHand != null && itemInHand.count <= -1) {
this.player.updateInventory(this.player.activeContainer);
@@ -924,17 +923,22 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
public void a(Packet9Respawn packet9respawn) {
- if (this.player.health <= 0) {
- this.player = this.minecraftServer.serverConfigurationManager.moveToWorld(this.player, 0);
+ if (this.player.j) {
+ this.player = this.minecraftServer.serverConfigurationManager.moveToWorld(this.player, 0, true);
+ } else {
+ if (this.player.getHealth() > 0) {
+ return;
+ }
- this.getPlayer().setHandle(this.player); // CraftBukkit
+ this.player = this.minecraftServer.serverConfigurationManager.moveToWorld(this.player, 0, false);
}
+ this.getPlayer().setHandle(this.player); // CraftBukkit
}
public void a(Packet101CloseWindow packet101closewindow) {
if (this.player.dead) return; // CraftBukkit
- this.player.z();
+ this.player.D();
}
public void a(Packet102WindowClick packet102windowclick) {
@@ -947,7 +951,7 @@ 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.y();
+ this.player.C();
this.player.h = false;
} else {
this.q.a(this.player.activeContainer.windowId, Short.valueOf(packet102windowclick.d));
@@ -964,22 +968,31 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
}
+ public void a(Packet108 packet108) {
+ if (this.player.activeContainer.windowId == packet108.a && this.player.activeContainer.c(this.player)) {
+ this.player.activeContainer.a((EntityHuman) this.player, packet108.b);
+ this.player.activeContainer.a();
+ }
+ }
+
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;
+ boolean flag = packet107setcreativeslot.a < 0;
+ ItemStack itemstack = packet107setcreativeslot.b;
+ boolean flag1 = packet107setcreativeslot.a >= 36 && packet107setcreativeslot.a < 36 + InventoryPlayer.h();
+ boolean flag2 = itemstack == null || itemstack.id < Item.byId.length && itemstack.id >= 0 && Item.byId[itemstack.id] != null;
+ boolean flag3 = itemstack == null || itemstack.getData() >= 0 && itemstack.getData() >= 0 && itemstack.count <= 64 && itemstack.count > 0;
- if (flag && flag1 && flag2) {
- if (packet107setcreativeslot.b <= 0) {
+ if (flag1 && flag2 && flag3) {
+ if (itemstack == null) {
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(packet107setcreativeslot.a, itemstack);
}
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));
+ } else if (flag && flag2 && flag3) {
+ this.player.b(itemstack);
}
}
}
@@ -1004,8 +1017,8 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
if (tileentity instanceof TileEntitySign) {
TileEntitySign tileentitysign = (TileEntitySign) tileentity;
- if (!tileentitysign.a()) {
- this.minecraftServer.c("Player " + this.player.name + " just tried to change non-editable sign");
+ if (!tileentitysign.c()) {
+ this.minecraftServer.warning("Player " + this.player.name + " just tried to change non-editable sign");
// CraftBukkit
this.sendPacket(new Packet130UpdateSign(packet130updatesign.x, packet130updatesign.y, packet130updatesign.z, tileentitysign.lines));
return;
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index f7b56f7429..f953dd5afd 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -79,7 +79,7 @@ public class NetworkManager {
synchronized (this.g) {
this.x += packet.a() + 1;
- if (packet.k) {
+ if (packet.l) {
this.lowPriorityQueue.add(packet);
} else {
this.highPriorityQueue.add(packet);
diff --git a/src/main/java/net/minecraft/server/Packet.java b/src/main/java/net/minecraft/server/Packet.java
index 06475164ba..3746fb0de7 100644
--- a/src/main/java/net/minecraft/server/Packet.java
+++ b/src/main/java/net/minecraft/server/Packet.java
@@ -11,38 +11,36 @@ import java.util.Set;
public abstract class Packet {
- private static EntityList a = new EntityList();
- private static Map b = new HashMap();
+ public static EntityList j = new EntityList();
+ private static Map a = new HashMap();
+ private static Set b = new HashSet();
private static Set c = new HashSet();
- private static Set d = new HashSet();
public final long timestamp = System.currentTimeMillis();
- public boolean k = false;
- private static EntityList e;
- private static int f;
+ public boolean l = false;
public Packet() {}
static void a(int i, boolean flag, boolean flag1, Class oclass) {
- if (a.b(i)) {
+ if (j.b(i)) {
throw new IllegalArgumentException("Duplicate packet id:" + i);
- } else if (b.containsKey(oclass)) {
+ } else if (a.containsKey(oclass)) {
throw new IllegalArgumentException("Duplicate packet class:" + oclass);
} else {
- a.a(i, oclass);
- b.put(oclass, Integer.valueOf(i));
+ j.a(i, oclass);
+ a.put(oclass, Integer.valueOf(i));
if (flag) {
- c.add(Integer.valueOf(i));
+ b.add(Integer.valueOf(i));
}
if (flag1) {
- d.add(Integer.valueOf(i));
+ c.add(Integer.valueOf(i));
}
}
}
public static Packet a(int i) {
try {
- Class oclass = (Class) a.a(i);
+ Class oclass = (Class) j.a(i);
return oclass == null ? null : (Packet) oclass.newInstance();
} catch (Exception exception) {
@@ -53,7 +51,7 @@ public abstract class Packet {
}
public final int b() {
- return ((Integer) b.get(this.getClass())).intValue();
+ return ((Integer) a.get(this.getClass())).intValue();
}
// CraftBukkit - throws IOException
@@ -69,7 +67,7 @@ public abstract class Packet {
return null;
}
- if (flag && !d.contains(Integer.valueOf(i)) || !flag && !c.contains(Integer.valueOf(i))) {
+ if (flag && !c.contains(Integer.valueOf(i)) || !flag && !b.contains(Integer.valueOf(i))) {
throw new IOException("Bad packet id " + i);
}
@@ -94,19 +92,7 @@ public abstract class Packet {
}
// CraftBukkit end
- PacketCounter packetcounter = (PacketCounter) e.a(i);
-
- if (packetcounter == null) {
- packetcounter = new PacketCounter((EmptyClass1) null);
- e.a(i, packetcounter);
- }
-
- packetcounter.a(packet.a());
- ++f;
- if (f % 1000 == 0) {
- ;
- }
-
+ PacketCounter.a(i, (long) packet.a());
return packet;
}
@@ -153,6 +139,60 @@ public abstract class Packet {
public abstract int a();
+ protected ItemStack b(DataInputStream datainputstream) throws IOException { // CraftBukkit
+ ItemStack itemstack = null;
+ short short1 = datainputstream.readShort();
+
+ if (short1 >= 0) {
+ byte b0 = datainputstream.readByte();
+ short short2 = datainputstream.readShort();
+
+ itemstack = new ItemStack(short1, b0, short2);
+ if (Item.byId[short1].g()) {
+ itemstack.tag = this.c(datainputstream);
+ }
+ }
+
+ return itemstack;
+ }
+
+ protected void a(ItemStack itemstack, DataOutputStream dataoutputstream) throws IOException { // CraftBukkit
+ if (itemstack == null) {
+ dataoutputstream.writeShort(-1);
+ } else {
+ dataoutputstream.writeShort(itemstack.id);
+ dataoutputstream.writeByte(itemstack.count);
+ dataoutputstream.writeShort(itemstack.getData());
+ if (itemstack.getItem().g()) {
+ this.a(itemstack.tag, dataoutputstream);
+ }
+ }
+ }
+
+ protected NBTTagCompound c(DataInputStream datainputstream) throws IOException { // CraftBukkit
+ short short1 = datainputstream.readShort();
+
+ if (short1 < 0) {
+ return null;
+ } else {
+ byte[] abyte = new byte[short1];
+
+ datainputstream.readFully(abyte);
+ return CompressedStreamTools.a(abyte);
+ }
+ }
+
+ protected void a(NBTTagCompound nbttagcompound, DataOutputStream dataoutputstream) throws IOException { // CraftBukkit
+ if (nbttagcompound == null) {
+ dataoutputstream.writeShort(-1);
+ } else {
+ byte[] abyte = CompressedStreamTools.a(nbttagcompound);
+
+ dataoutputstream.writeShort((short) abyte.length);
+ dataoutputstream.write(abyte);
+ }
+ }
+
static {
a(0, true, true, Packet0KeepAlive.class);
a(1, true, true, Packet1Login.class);
@@ -212,13 +252,12 @@ public abstract class Packet {
a(105, true, false, Packet105CraftProgressBar.class);
a(106, true, true, Packet106Transaction.class);
a(107, true, true, Packet107SetCreativeSlot.class);
+ a(108, false, true, Packet108.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 EntityList();
- f = 0;
}
}
diff --git a/src/main/java/net/minecraft/server/Packet51MapChunk.java b/src/main/java/net/minecraft/server/Packet51MapChunk.java
index 3bf163f621..5bfd2fe5f3 100644
--- a/src/main/java/net/minecraft/server/Packet51MapChunk.java
+++ b/src/main/java/net/minecraft/server/Packet51MapChunk.java
@@ -20,7 +20,7 @@ public class Packet51MapChunk extends Packet {
public byte[] rawData; // CraftBukkit
public Packet51MapChunk() {
- this.k = true;
+ this.l = true;
}
// CraftBukkit start
@@ -30,7 +30,7 @@ public class Packet51MapChunk extends Packet {
public Packet51MapChunk(int i, int j, int k, int l, int i1, int j1, byte[] data) {
// CraftBukkit end
- this.k = true;
+ this.l = true;
this.a = i;
this.b = j;
this.c = k;
diff --git a/src/main/java/net/minecraft/server/PacketCounter.java b/src/main/java/net/minecraft/server/PacketCounter.java
deleted file mode 100644
index 38239ab34b..0000000000
--- a/src/main/java/net/minecraft/server/PacketCounter.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package net.minecraft.server;
-
-class PacketCounter {
-
- private int a;
- private long b;
-
- private PacketCounter() {}
-
- public void a(int i) {
- ++this.a;
- this.b += (long) i;
- }
-
- PacketCounter(EmptyClass1 emptyclass1) {
- this();
- }
-}
diff --git a/src/main/java/net/minecraft/server/PlayerInstance.java b/src/main/java/net/minecraft/server/PlayerInstance.java
index 04dad1c0e6..c7cfcb541a 100644
--- a/src/main/java/net/minecraft/server/PlayerInstance.java
+++ b/src/main/java/net/minecraft/server/PlayerInstance.java
@@ -182,7 +182,7 @@ class PlayerInstance {
private void sendTileEntity(TileEntity tileentity) {
if (tileentity != null) {
- Packet packet = tileentity.l();
+ Packet packet = tileentity.k();
if (packet != null) {
this.sendAll(packet);
diff --git a/src/main/java/net/minecraft/server/PlayerNBTManager.java b/src/main/java/net/minecraft/server/PlayerNBTManager.java
index df762836e2..284ff88642 100644
--- a/src/main/java/net/minecraft/server/PlayerNBTManager.java
+++ b/src/main/java/net/minecraft/server/PlayerNBTManager.java
@@ -20,6 +20,7 @@ public class PlayerNBTManager implements PlayerFileData, IDataManager {
private final File c;
private final File d;
private final long e = System.currentTimeMillis();
+ private final String f;
private UUID uuid = null; // CraftBukkit
public PlayerNBTManager(File file1, String s, boolean flag) {
@@ -28,6 +29,7 @@ public class PlayerNBTManager implements PlayerFileData, IDataManager {
this.c = new File(this.b, "players");
this.d = new File(this.b, "data");
this.d.mkdirs();
+ this.f = s;
if (flag) {
this.c.mkdirs();
}
@@ -73,9 +75,14 @@ public class PlayerNBTManager implements PlayerFileData, IDataManager {
}
public IChunkLoader a(WorldProvider worldprovider) {
- if (worldprovider instanceof WorldProviderHell) {
- File file1 = new File(this.b, "DIM-1");
+ File file1;
+ if (worldprovider instanceof WorldProviderHell) {
+ file1 = new File(this.b, "DIM-1");
+ file1.mkdirs();
+ return new ChunkLoader(file1, true);
+ } else if (worldprovider instanceof WorldProviderSky) {
+ file1 = new File(this.b, "DIM1");
file1.mkdirs();
return new ChunkLoader(file1, true);
} else {
@@ -91,7 +98,7 @@ public class PlayerNBTManager implements PlayerFileData, IDataManager {
if (file1.exists()) {
try {
nbttagcompound = CompressedStreamTools.a((InputStream) (new FileInputStream(file1)));
- nbttagcompound1 = nbttagcompound.k("Data");
+ nbttagcompound1 = nbttagcompound.l("Data");
return new WorldData(nbttagcompound1);
} catch (Exception exception) {
exception.printStackTrace();
@@ -102,7 +109,7 @@ public class PlayerNBTManager implements PlayerFileData, IDataManager {
if (file1.exists()) {
try {
nbttagcompound = CompressedStreamTools.a((InputStream) (new FileInputStream(file1)));
- nbttagcompound1 = nbttagcompound.k("Data");
+ nbttagcompound1 = nbttagcompound.l("Data");
return new WorldData(nbttagcompound1);
} catch (Exception exception1) {
exception1.printStackTrace();
diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java
index 5d8c833c73..e7864ea09d 100644
--- a/src/main/java/net/minecraft/server/PortalTravelAgent.java
+++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java
@@ -14,9 +14,33 @@ public class PortalTravelAgent {
public PortalTravelAgent() {}
public void a(World world, Entity entity) {
- if (!this.b(world, entity)) {
- this.c(world, entity);
- this.b(world, entity);
+ if (world.worldProvider.dimension != 1) {
+ if (!this.b(world, entity)) {
+ this.c(world, entity);
+ this.b(world, entity);
+ }
+ } else {
+ int i = MathHelper.floor(entity.locX);
+ int j = MathHelper.floor(entity.locY) - 1;
+ int k = MathHelper.floor(entity.locZ);
+ byte b0 = 1;
+ byte b1 = 0;
+
+ for (int l = -2; l <= 2; ++l) {
+ for (int i1 = -2; i1 <= 2; ++i1) {
+ for (int j1 = -1; j1 < 3; ++j1) {
+ int k1 = i + i1 * b0 + l * b1;
+ int l1 = j + j1;
+ int i2 = k + i1 * b1 - l * b0;
+ boolean flag = j1 < 0;
+
+ world.setTypeId(k1, l1, i2, flag ? Block.OBSIDIAN.id : 0);
+ }
+ }
+ }
+
+ entity.setPositionRotation((double) i, (double) j, (double) k, entity.yaw, 0.0F);
+ entity.motX = entity.motY = entity.motZ = 0.0D;
}
}
@@ -37,9 +61,7 @@ public class PortalTravelAgent {
for (int k1 = i1 - short1; k1 <= i1 + short1; ++k1) {
double d3 = (double) k1 + 0.5D - entity.locZ;
- world.getClass();
-
- for (int l1 = 128 - 1; l1 >= 0; --l1) {
+ for (int l1 = world.height - 1; l1 >= 0; --l1) {
if (world.getTypeId(j1, l1, k1) == Block.PORTAL.id) {
while (world.getTypeId(j1, l1 - 1, k1) == Block.PORTAL.id) {
--l1;
@@ -121,10 +143,9 @@ public class PortalTravelAgent {
for (j2 = k - b0; j2 <= k + b0; ++j2) {
d2 = (double) j2 + 0.5D - entity.locZ;
- world.getClass();
label274:
- for (l2 = 128 - 1; l2 >= 0; --l2) {
+ for (l2 = world.height - 1; l2 >= 0; --l2) {
if (world.isEmpty(i2, l2, j2)) {
while (l2 > 0 && world.isEmpty(i2, l2 - 1, j2)) {
--l2;
@@ -173,10 +194,9 @@ public class PortalTravelAgent {
for (j2 = k - b0; j2 <= k + b0; ++j2) {
d2 = (double) j2 + 0.5D - entity.locZ;
- world.getClass();
label222:
- for (l2 = 128 - 1; l2 >= 0; --l2) {
+ for (l2 = world.height - 1; l2 >= 0; --l2) {
if (world.isEmpty(i2, l2, j2)) {
while (l2 > 0 && world.isEmpty(i2, l2 - 1, j2)) {
--l2;
@@ -237,8 +257,8 @@ public class PortalTravelAgent {
i1 = 70;
}
- if (i1 > 118) {
- i1 = 118;
+ if (i1 > world.height - 10) {
+ i1 = world.height - 10;
}
j5 = i1;
@@ -279,10 +299,8 @@ public class PortalTravelAgent {
i1 = 70;
}
- world.getClass();
- if (i1 > 128 - 10) {
- world.getClass();
- i1 = 128 - 10;
+ if (i1 > world.height - 10) {
+ i1 = world.height - 10;
}
j5 = i1;
diff --git a/src/main/java/net/minecraft/server/PropertyManager.java b/src/main/java/net/minecraft/server/PropertyManager.java
index 5108b1cf56..ae0feee231 100644
--- a/src/main/java/net/minecraft/server/PropertyManager.java
+++ b/src/main/java/net/minecraft/server/PropertyManager.java
@@ -60,6 +60,10 @@ public class PropertyManager {
}
}
+ public File c() {
+ return this.c;
+ }
+
public String getString(String s, String s1) {
if (!this.properties.containsKey(s)) {
s1 = this.getOverride(s, s1); // CraftBukkit
@@ -90,6 +94,10 @@ public class PropertyManager {
}
}
+ public void a(String s, Object object) {
+ this.properties.setProperty(s, "" + object);
+ }
+
public void setBoolean(String s, boolean flag) {
this.properties.setProperty(s, "" + flag);
this.savePropertiesFile();
diff --git a/src/main/java/net/minecraft/server/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/ServerConfigurationManager.java
index c87cba3d65..fb3ec79c11 100644
--- a/src/main/java/net/minecraft/server/ServerConfigurationManager.java
+++ b/src/main/java/net/minecraft/server/ServerConfigurationManager.java
@@ -31,7 +31,7 @@ public class ServerConfigurationManager {
public static Logger a = Logger.getLogger("Minecraft");
public List players = new ArrayList();
public MinecraftServer server; // CraftBukkit - private -> public
- // private PlayerManager[] d = new PlayerManager[2]; // CraftBukkit - removed
+ // private PlayerManager[] d = new PlayerManager[3]; // CraftBukkit - removed
public int maxPlayers; // CraftBukkit - private -> public
public Set banByName = new HashSet(); // CraftBukkit - private -> public
public Set banByIP = new HashSet(); // CraftBukkit - private -> public
@@ -64,19 +64,19 @@ public class ServerConfigurationManager {
// CraftBukkit - removed playermanagers
this.maxPlayers = minecraftserver.propertyManager.getInt("max-players", 20);
this.hasWhitelist = minecraftserver.propertyManager.getBoolean("white-list", false);
- this.i();
- this.k();
- this.m();
- this.o();
- this.j();
this.l();
this.n();
this.p();
+ this.r();
+ this.m();
+ this.o();
+ this.q();
+ this.s();
}
public void setPlayerFileData(WorldServer[] aworldserver) {
if (this.playerFileData != null) return; // CraftBukkit
- this.playerFileData = aworldserver[0].o().d();
+ this.playerFileData = aworldserver[0].q().d();
}
public void a(EntityPlayer entityplayer) {
@@ -216,7 +216,7 @@ public class ServerConfigurationManager {
}
// CraftBukkit start
- public EntityPlayer moveToWorld(EntityPlayer entityplayer, int i) {
+ public EntityPlayer moveToWorld(EntityPlayer entityplayer, int i, boolean flag) {
return this.moveToWorld(entityplayer, i, null);
}
@@ -279,7 +279,7 @@ public class ServerConfigurationManager {
// CraftBukkit start
byte actualDimension = (byte) (worldserver.getWorld().getEnvironment().getId());
- entityplayer1.netServerHandler.sendPacket(new Packet9Respawn(actualDimension, (byte) worldserver.difficulty, worldserver.getSeed(), 128, entityplayer1.itemInWorldManager.a()));
+ entityplayer1.netServerHandler.sendPacket(new Packet9Respawn(actualDimension, (byte) worldserver.difficulty, worldserver.getSeed(), worldserver.height, 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));
@@ -289,7 +289,7 @@ public class ServerConfigurationManager {
worldserver.addEntity(entityplayer1);
this.players.add(entityplayer1);
this.updateClient(entityplayer1); // CraftBukkit
- entityplayer1.w();
+ entityplayer1.A();
// CraftBukkit start - don't fire on respawn
if (fromWorld != location.getWorld()) {
org.bukkit.event.player.PlayerChangedWorldEvent event = new org.bukkit.event.player.PlayerChangedWorldEvent((Player) entityplayer1.getBukkitEntity(), fromWorld);
@@ -299,15 +299,14 @@ public class ServerConfigurationManager {
return entityplayer1;
}
- public void f(EntityPlayer entityplayer) {
+ public void a(EntityPlayer entityplayer, int i) {
// CraftBukkit start -- Replaced the standard handling of portals with a more customised method.
int dimension = entityplayer.dimension;
WorldServer fromWorld = this.server.getWorldServer(dimension);
WorldServer toWorld = null;
if (dimension < 10) {
- int toDimension = dimension == -1 ? 0 : -1;
for (WorldServer world : this.server.worlds) {
- if (world.dimension == toDimension) {
+ if (world.dimension == i) {
toWorld = world;
}
}
@@ -334,20 +333,19 @@ public class ServerConfigurationManager {
}
public void b() {
- int i;
+ if (++this.p > 200) {
+ this.p = 0;
+ }
/* CraftBukkit start -- remove updating of lag to players -- it spams way to much on big servers.
- if (this.p-- <= 0) {
- for (i = 0; i < this.players.size(); ++i) {
- EntityPlayer entityplayer = (EntityPlayer) this.players.get(i);
+ if (this.p < this.players.size()) {
+ EntityPlayer entityplayer = (EntityPlayer) this.players.get(this.p);
- this.sendAll(new Packet201PlayerInfo(entityplayer.name, true, entityplayer.i));
- }
- this.p = 200; // <-- this resetting of flushtime is missing! though whole code is commented out now :)
+ this.sendAll(new Packet201PlayerInfo(entityplayer.name, true, entityplayer.i));
}
*/
- for (i = 0; i < this.server.worlds.size(); ++i) {
+ for (int i = 0; i < this.server.worlds.size(); ++i) {
this.server.worlds.get(i).manager.flush();
// CraftBukkit end
}
@@ -389,17 +387,27 @@ public class ServerConfigurationManager {
return s;
}
+ public String[] d() {
+ String[] astring = new String[this.players.size()];
+
+ for (int i = 0; i < this.players.size(); ++i) {
+ astring[i] = ((EntityPlayer) this.players.get(i)).name;
+ }
+
+ return astring;
+ }
+
public void addUserBan(String s) {
this.banByName.add(s.toLowerCase());
- this.j();
+ this.m();
}
public void removeUserBan(String s) {
this.banByName.remove(s.toLowerCase());
- this.j();
+ this.m();
}
- private void i() {
+ private void l() {
try {
this.banByName.clear();
BufferedReader bufferedreader = new BufferedReader(new FileReader(this.j));
@@ -415,7 +423,7 @@ public class ServerConfigurationManager {
}
}
- private void j() {
+ private void m() {
try {
PrintWriter printwriter = new PrintWriter(new FileWriter(this.j, false));
Iterator iterator = this.banByName.iterator();
@@ -432,17 +440,25 @@ public class ServerConfigurationManager {
}
}
+ public Set e() {
+ return this.banByName;
+ }
+
+ public Set f() {
+ return this.banByIP;
+ }
+
public void addIpBan(String s) {
this.banByIP.add(s.toLowerCase());
- this.l();
+ this.o();
}
public void removeIpBan(String s) {
this.banByIP.remove(s.toLowerCase());
- this.l();
+ this.o();
}
- private void k() {
+ private void n() {
try {
this.banByIP.clear();
BufferedReader bufferedreader = new BufferedReader(new FileReader(this.k));
@@ -458,7 +474,7 @@ public class ServerConfigurationManager {
}
}
- private void l() {
+ private void o() {
try {
PrintWriter printwriter = new PrintWriter(new FileWriter(this.k, false));
Iterator iterator = this.banByIP.iterator();
@@ -477,7 +493,7 @@ public class ServerConfigurationManager {
public void addOp(String s) {
this.operators.add(s.toLowerCase());
- this.n();
+ this.q();
// Craftbukkit start
Player player = server.server.getPlayer(s);
@@ -489,7 +505,7 @@ public class ServerConfigurationManager {
public void removeOp(String s) {
this.operators.remove(s.toLowerCase());
- this.n();
+ this.q();
// Craftbukkit start
Player player = server.server.getPlayer(s);
@@ -499,7 +515,7 @@ public class ServerConfigurationManager {
// Craftbukkit end
}
- private void m() {
+ private void p() {
try {
this.operators.clear();
BufferedReader bufferedreader = new BufferedReader(new FileReader(this.l));
@@ -511,12 +527,11 @@ public class ServerConfigurationManager {
bufferedreader.close();
} catch (Exception exception) {
- // CraftBukkit - corrected text
- a.warning("Failed to load ops: " + exception);
+ a.warning("Failed to load operators list: " + exception);
}
}
- private void n() {
+ private void q() {
try {
PrintWriter printwriter = new PrintWriter(new FileWriter(this.l, false));
Iterator iterator = this.operators.iterator();
@@ -529,12 +544,11 @@ public class ServerConfigurationManager {
printwriter.close();
} catch (Exception exception) {
- // CraftBukkit - corrected text
- a.warning("Failed to save ops: " + exception);
+ a.warning("Failed to save operators list: " + exception);
}
}
- private void o() {
+ private void r() {
try {
this.whitelist.clear();
BufferedReader bufferedreader = new BufferedReader(new FileReader(this.m));
@@ -550,7 +564,7 @@ public class ServerConfigurationManager {
}
}
- private void p() {
+ private void s() {
try {
PrintWriter printwriter = new PrintWriter(new FileWriter(this.m, false));
Iterator iterator = this.whitelist.iterator();
@@ -649,12 +663,12 @@ public class ServerConfigurationManager {
public void addWhitelist(String s) {
this.whitelist.add(s);
- this.p();
+ this.s();
}
public void removeWhitelist(String s) {
this.whitelist.remove(s);
- this.p();
+ this.s();
}
public Set getWhitelisted() {
@@ -662,26 +676,26 @@ public class ServerConfigurationManager {
}
public void reloadWhitelist() {
- this.o();
+ this.r();
}
public void a(EntityPlayer entityplayer, WorldServer worldserver) {
entityplayer.netServerHandler.sendPacket(new Packet4UpdateTime(worldserver.getTime()));
- if (worldserver.u()) {
+ if (worldserver.w()) {
entityplayer.netServerHandler.sendPacket(new Packet70Bed(1, 0));
}
}
public void updateClient(EntityPlayer entityplayer) {
entityplayer.updateInventory(entityplayer.defaultContainer);
- entityplayer.B();
+ entityplayer.s_();
}
- public int g() {
+ public int j() {
return this.players.size();
}
- public int h() {
+ public int k() {
return this.maxPlayers;
}
}
diff --git a/src/main/java/net/minecraft/server/Slot.java b/src/main/java/net/minecraft/server/Slot.java
index 58849856f7..5b56279a13 100644
--- a/src/main/java/net/minecraft/server/Slot.java
+++ b/src/main/java/net/minecraft/server/Slot.java
@@ -4,19 +4,19 @@ public class Slot {
public final int index; // CraftBukkit - private -> public
public final IInventory inventory;
- public int b;
public int c;
public int d;
+ public int e;
public Slot(IInventory iinventory, int i, int j, int k) {
this.inventory = iinventory;
this.index = i;
- this.c = j;
- this.d = k;
+ this.d = j;
+ this.e = k;
}
- public void a(ItemStack itemstack) {
- this.c();
+ public void b(ItemStack itemstack) {
+ this.d();
}
public boolean isAllowed(ItemStack itemstack) {
@@ -27,20 +27,20 @@ public class Slot {
return this.inventory.getItem(this.index);
}
- public boolean b() {
+ public boolean c() {
return this.getItem() != null;
}
public void c(ItemStack itemstack) {
this.inventory.setItem(this.index, itemstack);
- this.c();
+ this.d();
}
- public void c() {
+ public void d() {
this.inventory.update();
}
- public int d() {
+ public int a() {
return this.inventory.getMaxStackSize();
}
diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
index 69234367cd..25369365fd 100644
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
@@ -1,28 +1,24 @@
package net.minecraft.server;
import java.util.Collection;
-import java.util.HashSet;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
-import java.util.Set;
// CraftBukkit
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
public final class SpawnerCreature {
- private static Set b = new HashSet();
+ private static HashMap b = new HashMap();
protected static final Class[] a = new Class[] { EntitySpider.class, EntityZombie.class, EntitySkeleton.class};
public SpawnerCreature() {}
protected static ChunkPosition a(World world, int i, int j) {
int k = i + world.random.nextInt(16);
- Random random = world.random;
-
- world.getClass();
- int l = random.nextInt(128);
+ int l = world.random.nextInt(world.height);
int i1 = j + world.random.nextInt(16);
return new ChunkPosition(k, l, i1);
@@ -46,7 +42,14 @@ public final class SpawnerCreature {
for (int l = -b0; l <= b0; ++l) {
for (int i1 = -b0; i1 <= b0; ++i1) {
- b.add(new ChunkCoordIntPair(l + k, i1 + j));
+ boolean flag2 = l == -b0 || l == b0 || i1 == -b0 || i1 == b0;
+ ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(l + k, i1 + j);
+
+ if (!flag2) {
+ b.put(chunkcoordintpair, Boolean.valueOf(false));
+ } else if (!b.containsKey(chunkcoordintpair)) {
+ b.put(chunkcoordintpair, Boolean.valueOf(true));
+ }
}
}
}
@@ -61,70 +64,87 @@ public final class SpawnerCreature {
EnumCreatureType enumcreaturetype = aenumcreaturetype[j1];
if ((!enumcreaturetype.d() || flag1) && (enumcreaturetype.d() || flag) && world.a(enumcreaturetype.a()) <= enumcreaturetype.b() * b.size() / 256) {
- Iterator iterator = b.iterator();
+ Iterator iterator = b.keySet().iterator();
- label91:
+ label108:
while (iterator.hasNext()) {
- ChunkCoordIntPair chunkcoordintpair = (ChunkCoordIntPair) iterator.next();
- BiomeBase biomebase = world.getWorldChunkManager().a(chunkcoordintpair);
- List list = biomebase.a(enumcreaturetype);
+ ChunkCoordIntPair chunkcoordintpair1 = (ChunkCoordIntPair) iterator.next();
- if (list != null && !list.isEmpty()) {
- BiomeMeta biomemeta = (BiomeMeta) WeightedRandom.a(world.random, (Collection) list);
- ChunkPosition chunkposition = a(world, chunkcoordintpair.x * 16, chunkcoordintpair.z * 16);
+ if (!((Boolean) b.get(chunkcoordintpair1)).booleanValue()) {
+ ChunkPosition chunkposition = a(world, chunkcoordintpair1.x * 16, chunkcoordintpair1.z * 16);
int k1 = chunkposition.x;
int l1 = chunkposition.y;
int i2 = chunkposition.z;
if (!world.e(k1, l1, i2) && world.getMaterial(k1, l1, i2) == enumcreaturetype.c()) {
int j2 = 0;
+ int k2 = 0;
- for (int k2 = 0; k2 < 3; ++k2) {
+ while (k2 < 3) {
int l2 = k1;
int i3 = l1;
int j3 = i2;
byte b1 = 6;
+ BiomeMeta biomemeta = null;
+ int k3 = 0;
- 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);
- if (a(enumcreaturetype, world, l2, i3, j3)) {
- float f = (float) l2 + 0.5F;
- float f1 = (float) i3;
- float f2 = (float) j3 + 0.5F;
+ while (true) {
+ if (k3 < 4) {
+ label101: {
+ 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);
+ 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;
- float f4 = f1 - (float) chunkcoordinates.y;
- float f5 = f2 - (float) chunkcoordinates.z;
- float f6 = f3 * f3 + f4 * f4 + f5 * f5;
+ if (world.a((double) f, (double) f1, (double) f2, 24.0D) == null) {
+ float f3 = f - (float) chunkcoordinates.x;
+ float f4 = f1 - (float) chunkcoordinates.y;
+ float f5 = f2 - (float) chunkcoordinates.z;
+ float f6 = f3 * f3 + f4 * f4 + f5 * f5;
- if (f6 >= 576.0F) {
- EntityLiving entityliving;
+ if (f6 >= 576.0F) {
+ if (biomemeta == null) {
+ biomemeta = world.a(enumcreaturetype, l2, i3, j3);
+ if (biomemeta == null) {
+ break label101;
+ }
+ }
- try {
- entityliving = (EntityLiving) biomemeta.a.getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
- } catch (Exception exception) {
- exception.printStackTrace();
- return i;
- }
+ EntityLiving entityliving;
- entityliving.setPositionRotation((double) f, (double) f1, (double) f2, world.random.nextFloat() * 360.0F, 0.0F);
- if (entityliving.d()) {
- ++j2;
- // CraftBukkit - added a reason for spawning this creature
- world.addEntity(entityliving, SpawnReason.NATURAL);
- a(entityliving, world, f, f1, f2);
- if (j2 >= entityliving.m()) {
- continue label91;
+ try {
+ entityliving = (EntityLiving) biomemeta.a.getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ return i;
+ }
+
+ entityliving.setPositionRotation((double) f, (double) f1, (double) f2, world.random.nextFloat() * 360.0F, 0.0F);
+ if (entityliving.g()) {
+ ++j2;
+ // CraftBukkit - added a reason for spawning this creature
+ world.addEntity(entityliving, SpawnReason.NATURAL);
+ a(entityliving, world, f, f1, f2);
+ if (j2 >= entityliving.p()) {
+ continue label108;
+ }
+ }
+
+ i += j2;
}
}
-
- i += j2;
}
+
+ ++k3;
+ continue;
}
}
+
+ ++k2;
+ break;
}
}
}
@@ -154,101 +174,6 @@ public final class SpawnerCreature {
}
}
- public static boolean a(World world, List list) {
- boolean flag = false;
- Pathfinder pathfinder = new Pathfinder(world);
- Iterator iterator = list.iterator();
-
- while (iterator.hasNext()) {
- EntityHuman entityhuman = (EntityHuman) iterator.next();
- if (entityhuman.fauxSleeping) continue; // CraftBukkit - Do not generate nightmares for humans ignoring sleep
- Class[] aclass = a;
-
- if (aclass != null && aclass.length != 0) {
- boolean flag1 = false;
-
- for (int i = 0; i < 20 && !flag1; ++i) {
- int j = MathHelper.floor(entityhuman.locX) + world.random.nextInt(32) - world.random.nextInt(32);
- int k = MathHelper.floor(entityhuman.locZ) + world.random.nextInt(32) - world.random.nextInt(32);
- int l = MathHelper.floor(entityhuman.locY) + world.random.nextInt(16) - world.random.nextInt(16);
-
- if (l < 1) {
- l = 1;
- } else {
- world.getClass();
- if (l > 128) {
- world.getClass();
- l = 128;
- }
- }
-
- int i1 = world.random.nextInt(aclass.length);
-
- int j1;
-
- for (j1 = l; j1 > 2 && !world.e(j, j1 - 1, k); --j1) {
- ;
- }
-
- while (!a(EnumCreatureType.MONSTER, world, j, j1, k) && j1 < l + 16) {
- world.getClass();
- if (j1 >= 128) {
- break;
- }
-
- ++j1;
- }
-
- 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;
-
- 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);
-
- 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 (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;
- }
- }
- }
- }
- }
- }
- }
- }
-
- 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);
diff --git a/src/main/java/net/minecraft/server/TileEntityChest.java b/src/main/java/net/minecraft/server/TileEntityChest.java
index bf16c5c28f..a81d7dd4de 100644
--- a/src/main/java/net/minecraft/server/TileEntityChest.java
+++ b/src/main/java/net/minecraft/server/TileEntityChest.java
@@ -11,7 +11,7 @@ public class TileEntityChest extends TileEntity implements IInventory {
public float f;
public float g;
public int h;
- private int q;
+ private int j;
// CraftBukkit start
public ItemStack[] getContents() {
@@ -67,13 +67,13 @@ public class TileEntityChest extends TileEntity implements IInventory {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- NBTTagList nbttaglist = nbttagcompound.l("Items");
+ NBTTagList nbttaglist = nbttagcompound.m("Items");
this.items = new ItemStack[this.getSize()];
- for (int i = 0; i < nbttaglist.c(); ++i) {
+ for (int i = 0; i < nbttaglist.d(); ++i) {
NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttaglist.a(i);
- int j = nbttagcompound1.c("Slot") & 255;
+ int j = nbttagcompound1.d("Slot") & 255;
if (j >= 0 && j < this.items.length) {
this.items[j] = ItemStack.a(nbttagcompound1);
@@ -107,8 +107,8 @@ public class TileEntityChest extends TileEntity implements IInventory {
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();
+ public void d() {
+ super.d();
this.a = false;
}
@@ -136,19 +136,19 @@ public class TileEntityChest extends TileEntity implements IInventory {
}
if (this.b != null) {
- this.b.g();
+ this.b.d();
}
if (this.e != null) {
- this.e.g();
+ this.e.d();
}
if (this.c != null) {
- this.c.g();
+ this.c.d();
}
if (this.d != null) {
- this.d.g();
+ this.d.d();
}
}
}
@@ -171,34 +171,36 @@ public class TileEntityChest extends TileEntity implements IInventory {
}
// CraftBukkit end
- public void h_() {
- super.h_();
+ public void l_() {
+ super.l_();
if (this.world == null) return; // CraftBukkit
this.h();
- if (++this.q % (20 * 4) == 0) { // CraftBukkit
+ if (++this.j % (20 * 4) == 0) { // CraftBukkit
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;
- }
+ double d1 = (double) this.x + 0.5D;
- if (this.c != null) {
+ d0 = (double) this.z + 0.5D;
+ if (this.e != 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.c != null) {
+ d1 += 0.5D;
+ }
+
+ this.world.makeSound(d1, (double) this.y + 0.5D, d0, "random.chestopen", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
}
if (this.h == 0 && this.f > 0.0F || this.h > 0 && this.f < 1.0F) {
+ float f1 = this.f;
+
if (this.h > 0) {
this.f += f;
} else {
@@ -209,21 +211,25 @@ public class TileEntityChest extends TileEntity implements IInventory {
this.f = 1.0F;
}
+ float f2 = 0.5F;
+
+ if (this.f < f2 && f1 >= f2 && this.b == null && this.d == null) {
+ d0 = (double) this.x + 0.5D;
+ double d2 = (double) this.z + 0.5D;
+
+ if (this.e != null) {
+ d2 += 0.5D;
+ }
+
+ if (this.c != null) {
+ d0 += 0.5D;
+ }
+
+ this.world.makeSound(d0, (double) this.y + 0.5D, d2, "random.chestclosed", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
+ }
+
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);
- }
}
}
}
@@ -234,20 +240,20 @@ public class TileEntityChest extends TileEntity implements IInventory {
}
}
- public void e() {
+ public void f() {
++this.h;
if (this.world == null) return; // CraftBukkit
this.world.playNote(this.x, this.y, this.z, 1, this.h);
}
- public void t_() {
+ public void g() {
--this.h;
if (this.world == null) return; // CraftBukkit
this.world.playNote(this.x, this.y, this.z, 1, this.h);
}
public void i() {
- this.g();
+ this.d();
this.h();
super.i();
}
diff --git a/src/main/java/net/minecraft/server/TileEntityDispenser.java b/src/main/java/net/minecraft/server/TileEntityDispenser.java
index 61ac3078c6..3748e0601c 100644
--- a/src/main/java/net/minecraft/server/TileEntityDispenser.java
+++ b/src/main/java/net/minecraft/server/TileEntityDispenser.java
@@ -62,7 +62,7 @@ public class TileEntityDispenser extends TileEntity implements IInventory {
return i;
}
- public ItemStack b() {
+ public ItemStack k_() {
int i = this.findDispenseSlot();
// CraftBukkit end
@@ -88,13 +88,13 @@ public class TileEntityDispenser extends TileEntity implements IInventory {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- NBTTagList nbttaglist = nbttagcompound.l("Items");
+ NBTTagList nbttaglist = nbttagcompound.m("Items");
this.items = new ItemStack[this.getSize()];
- for (int i = 0; i < nbttaglist.c(); ++i) {
+ for (int i = 0; i < nbttaglist.d(); ++i) {
NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttaglist.a(i);
- int j = nbttagcompound1.c("Slot") & 255;
+ int j = nbttagcompound1.d("Slot") & 255;
if (j >= 0 && j < this.items.length) {
this.items[j] = ItemStack.a(nbttagcompound1);
@@ -127,7 +127,7 @@ public class TileEntityDispenser extends TileEntity implements IInventory {
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 f() {}
- public void t_() {}
+ public void g() {}
}
diff --git a/src/main/java/net/minecraft/server/TileEntityFurnace.java b/src/main/java/net/minecraft/server/TileEntityFurnace.java
index f583e1d7e7..0eda7df81d 100644
--- a/src/main/java/net/minecraft/server/TileEntityFurnace.java
+++ b/src/main/java/net/minecraft/server/TileEntityFurnace.java
@@ -64,21 +64,21 @@ public class TileEntityFurnace extends TileEntity implements IInventory {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- NBTTagList nbttaglist = nbttagcompound.l("Items");
+ NBTTagList nbttaglist = nbttagcompound.m("Items");
this.items = new ItemStack[this.getSize()];
- for (int i = 0; i < nbttaglist.c(); ++i) {
+ for (int i = 0; i < nbttaglist.d(); ++i) {
NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttaglist.a(i);
- byte b0 = nbttagcompound1.c("Slot");
+ byte b0 = nbttagcompound1.d("Slot");
if (b0 >= 0 && b0 < this.items.length) {
this.items[b0] = ItemStack.a(nbttagcompound1);
}
}
- this.burnTime = nbttagcompound.d("BurnTime");
- this.cookTime = nbttagcompound.d("CookTime");
+ this.burnTime = nbttagcompound.e("BurnTime");
+ this.cookTime = nbttagcompound.e("CookTime");
this.ticksForCurrentFuel = this.fuelTime(this.items[1]);
}
@@ -109,7 +109,7 @@ public class TileEntityFurnace extends TileEntity implements IInventory {
return this.burnTime > 0;
}
- public void h_() {
+ public void l_() {
boolean flag = this.burnTime > 0;
boolean flag1 = false;
@@ -162,7 +162,7 @@ public class TileEntityFurnace extends TileEntity implements IInventory {
}
/* CraftBukkit start - moved up
- if (this.f() && this.process()) {
+ if (this.isBurning() && this.canBurn()) {
++this.cookTime;
if (this.cookTime == 200) {
this.cookTime = 0;
@@ -238,7 +238,7 @@ public class TileEntityFurnace extends TileEntity implements IInventory {
} else {
int i = itemstack.getItem().id;
- return i < 256 && Block.byId[i].material == Material.WOOD ? 300 : (i == Item.STICK.id ? 100 : (i == Item.COAL.id ? 1600 : (i == Item.LAVA_BUCKET.id ? 20000 : (i == Block.SAPLING.id ? 100 : 0))));
+ return i < 256 && Block.byId[i].material == Material.WOOD ? 300 : (i == Item.STICK.id ? 100 : (i == Item.COAL.id ? 1600 : (i == Item.LAVA_BUCKET.id ? 20000 : (i == Block.SAPLING.id ? 100 : (i == Item.BLAZE_ROD.id ? 2400 : 0)))));
}
}
@@ -246,7 +246,7 @@ public class TileEntityFurnace extends TileEntity implements IInventory {
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 f() {}
- public void t_() {}
+ public void g() {}
}
diff --git a/src/main/java/net/minecraft/server/TileEntityMobSpawner.java b/src/main/java/net/minecraft/server/TileEntityMobSpawner.java
index b98f60bc38..1cfb838f49 100644
--- a/src/main/java/net/minecraft/server/TileEntityMobSpawner.java
+++ b/src/main/java/net/minecraft/server/TileEntityMobSpawner.java
@@ -17,7 +17,7 @@ public class TileEntityMobSpawner extends TileEntity {
this.mobName = s;
}
- public boolean a() {
+ public boolean c() {
return this.world.a((double) this.x + 0.5D, (double) this.y + 0.5D, (double) this.z + 0.5D, 16.0D) != null;
}
@@ -37,9 +37,9 @@ public class TileEntityMobSpawner extends TileEntity {
}
// CraftBukkit end
- public void h_() {
+ public void l_() {
this.c = this.b;
- if (this.a()) {
+ if (this.c()) {
double d0 = (double) ((float) this.x + this.world.random.nextFloat());
double d1 = (double) ((float) this.y + this.world.random.nextFloat());
double d2 = (double) ((float) this.z + this.world.random.nextFloat());
@@ -53,7 +53,7 @@ public class TileEntityMobSpawner extends TileEntity {
if (!this.world.isStatic) {
if (this.spawnDelay == -1) {
- this.c();
+ this.e();
}
if (this.spawnDelay > 0) {
@@ -64,8 +64,7 @@ public class TileEntityMobSpawner extends TileEntity {
byte b0 = 4;
for (int i = 0; i < b0; ++i) {
- // CraftBukkit start
- Entity entityliving = EntityTypes.a(this.mobName, this.world);
+ Entity entityliving = EntityTypes.a(this.mobName, this.world); // CraftBukkit
if (entityliving == null) {
return;
@@ -74,7 +73,7 @@ public class TileEntityMobSpawner extends TileEntity {
int j = this.world.a(entityliving.getClass(), AxisAlignedBB.b((double) this.x, (double) this.y, (double) this.z, (double) (this.x + 1), (double) (this.y + 1), (double) (this.z + 1)).b(8.0D, 4.0D, 8.0D)).size();
if (j >= 6) {
- this.c();
+ this.e();
return;
}
@@ -84,39 +83,32 @@ public class TileEntityMobSpawner extends TileEntity {
double d5 = (double) this.z + (this.world.random.nextDouble() - this.world.random.nextDouble()) * 4.0D;
entityliving.setPositionRotation(d3, d4, d5, this.world.random.nextFloat() * 360.0F, 0.0F);
- if ((entityliving instanceof EntityLiving && ((EntityLiving)entityliving).d()) ||
+ // CraftBukkit start
+ if ((entityliving instanceof EntityLiving && ((EntityLiving) entityliving).g()) ||
(!(entityliving instanceof EntityLiving) && entityliving.world.containsEntity(entityliving.boundingBox) && entityliving.world.getEntities(entityliving, entityliving.boundingBox).size() == 0 && !entityliving.world.c(entityliving.boundingBox))) {
- // CraftBukkit end
- // CraftBukkit - added a reason for spawning this creature
this.world.addEntity(entityliving, SpawnReason.SPAWNER);
+ // CraftBukkit end
- for (int k = 0; k < 20; ++k) {
- d0 = (double) this.x + 0.5D + ((double) this.world.random.nextFloat() - 0.5D) * 2.0D;
- d1 = (double) this.y + 0.5D + ((double) this.world.random.nextFloat() - 0.5D) * 2.0D;
- d2 = (double) this.z + 0.5D + ((double) this.world.random.nextFloat() - 0.5D) * 2.0D;
- this.world.a("smoke", d0, d1, d2, 0.0D, 0.0D, 0.0D);
- this.world.a("flame", d0, d1, d2, 0.0D, 0.0D, 0.0D);
- }
-
- // entity.ab(); // CraftBukkit - client side code, and not available in entity
- this.c();
+ this.world.f(2004, this.x, this.y, this.z, 0);
+ // entityliving.ah(); // CraftBukkit -- only avail on clientside
+ this.e();
}
}
}
}
- super.h_();
+ super.l_();
}
}
- private void c() {
+ private void e() {
this.spawnDelay = 200 + this.world.random.nextInt(600);
}
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
this.mobName = nbttagcompound.getString("EntityId");
- this.spawnDelay = nbttagcompound.d("Delay");
+ this.spawnDelay = nbttagcompound.e("Delay");
}
public void b(NBTTagCompound nbttagcompound) {
diff --git a/src/main/java/net/minecraft/server/TileEntityPiston.java b/src/main/java/net/minecraft/server/TileEntityPiston.java
index cc8b12f011..7467f11f0e 100644
--- a/src/main/java/net/minecraft/server/TileEntityPiston.java
+++ b/src/main/java/net/minecraft/server/TileEntityPiston.java
@@ -25,7 +25,7 @@ public class TileEntityPiston extends TileEntity {
this.e = flag1;
}
- public int a() {
+ public int c() {
return this.a;
}
@@ -33,11 +33,11 @@ public class TileEntityPiston extends TileEntity {
return this.b;
}
- public boolean c() {
+ public boolean e() {
return this.d;
}
- public int d() {
+ public int f() {
return this.c;
}
@@ -56,7 +56,7 @@ public class TileEntityPiston extends TileEntity {
f = 1.0F - f;
}
- AxisAlignedBB axisalignedbb = Block.PISTON_MOVING.a(this.world, this.x, this.y, this.z, this.a, f, this.c);
+ AxisAlignedBB axisalignedbb = Block.PISTON_MOVING.b(this.world, this.x, this.y, this.z, this.a, f, this.c);
if (axisalignedbb != null) {
List list = this.world.b((Entity) null, axisalignedbb);
@@ -76,8 +76,8 @@ public class TileEntityPiston extends TileEntity {
}
}
- public void e() {
- if (this.g < 1.0F) {
+ public void g() {
+ if (this.g < 1.0F && this.world != null) {
this.g = this.f = 1.0F;
this.world.n(this.x, this.y, this.z);
this.i();
@@ -87,7 +87,7 @@ public class TileEntityPiston extends TileEntity {
}
}
- public void h_() {
+ public void l_() {
if (this.world == null) return; // CraftBukkit
this.g = this.f;
@@ -112,11 +112,11 @@ public class TileEntityPiston extends TileEntity {
public void a(NBTTagCompound nbttagcompound) {
super.a(nbttagcompound);
- this.a = nbttagcompound.e("blockId");
- this.b = nbttagcompound.e("blockData");
- this.c = nbttagcompound.e("facing");
- this.g = this.f = nbttagcompound.g("progress");
- this.d = nbttagcompound.m("extending");
+ this.a = nbttagcompound.f("blockId");
+ this.b = nbttagcompound.f("blockData");
+ this.c = nbttagcompound.f("facing");
+ this.g = this.f = nbttagcompound.h("progress");
+ this.d = nbttagcompound.n("extending");
}
public void b(NBTTagCompound nbttagcompound) {
diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java
index 2bc3f20222..ac62335f87 100644
--- a/src/main/java/net/minecraft/server/TileEntitySign.java
+++ b/src/main/java/net/minecraft/server/TileEntitySign.java
@@ -28,7 +28,7 @@ public class TileEntitySign extends TileEntity {
}
}
- public Packet l() {
+ public Packet k() {
String[] astring = new String[4];
for (int i = 0; i < 4; ++i) {
@@ -44,7 +44,7 @@ public class TileEntitySign extends TileEntity {
return new Packet130UpdateSign(this.x, this.y, this.z, astring);
}
- public boolean a() {
+ public boolean c() {
return this.isEditable;
}
}
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 1872cd946e..cebf2c1818 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -31,57 +31,54 @@ import org.bukkit.block.BlockState;
public class World implements IBlockAccess {
- public final int heightBits = 7;
- public final int heightBitsPlusFour = 11;
- public final int height = 128;
- public final int heightMinusOne = 127;
- public final int seaLevel = 63;
- public boolean f = false;
- public List entityList = new ArrayList();
- private List M = new ArrayList();
- private TreeSet N = new TreeSet();
- private Set O = new HashSet();
- public List h = new ArrayList();
- private List P = new ArrayList();
- private List Q = new ArrayList();
- public List players = new ArrayList();
- public List j = new ArrayList();
- private long R = 16777215L;
- public int k = 0;
- protected int l = (new Random()).nextInt();
- protected final int m = 1013904223;
+ public int heightBits = 7;
+ public int heightBitsPlusFour;
+ public int height;
+ public int heightMinusOne;
+ public int seaLevel;
+ public boolean f;
+ public List entityList;
+ private List J;
+ private TreeSet K;
+ private Set L;
+ public List h;
+ private List M;
+ private List N;
+ public List players;
+ public List j;
+ private long O;
+ public int k;
+ protected int l;
+ protected final int m;
protected float n;
protected float o;
protected float p;
protected float q;
- protected int r = 0;
- public int s = 0;
- public boolean suppressPhysics = false;
- private long S = System.currentTimeMillis();
- protected int u = 40;
+ protected int r;
+ public int s;
+ public boolean suppressPhysics;
+ private long P;
+ protected int u;
public int difficulty;
- public Random random = new Random();
- public boolean x = false;
+ public Random random;
+ public boolean x;
public WorldProvider worldProvider; // CraftBukkit - remove final
- protected List z = new ArrayList();
+ protected List z;
public IChunkProvider chunkProvider; // CraftBukkit - protected -> public
protected final IDataManager B;
public WorldData worldData; // CraftBukkit - protected -> public
public boolean isLoading;
- private boolean T;
+ private boolean Q;
public WorldMapCollection worldMaps;
- private ArrayList U = new ArrayList();
- private boolean V;
- public boolean allowMonsters = true; // CraftBukkit - private -> public
- public boolean allowAnimals = true; // CraftBukkit - private -> public
- private Set W = new HashSet();
- private int X;
+ private ArrayList R;
+ private boolean S;
+ public boolean allowMonsters; // CraftBukkit - private -> public
+ public boolean allowAnimals; // CraftBukkit - private -> public
+ private Set T;
+ private int U;
int[] H;
- private List Y;
+ private List V;
public boolean isStatic;
- public double J;
- public double K;
- public double L;
public WorldChunkManager getWorldChunkManager() {
return this.worldProvider.b;
@@ -119,9 +116,39 @@ public class World implements IBlockAccess {
this.world = new CraftWorld((WorldServer) this, gen, env);
// CraftBukkit end
- this.X = this.random.nextInt(12000);
+ this.heightBitsPlusFour = this.heightBits + 4;
+ this.height = 1 << this.heightBits;
+ this.heightMinusOne = this.height - 1;
+ this.seaLevel = this.height / 2 - 1;
+ this.f = false;
+ this.entityList = new ArrayList();
+ this.J = new ArrayList();
+ this.K = new TreeSet();
+ this.L = new HashSet();
+ this.h = new ArrayList();
+ this.M = new ArrayList();
+ this.N = new ArrayList();
+ this.players = new ArrayList();
+ this.j = new ArrayList();
+ this.O = 16777215L;
+ this.k = 0;
+ this.l = (new Random()).nextInt();
+ this.m = 1013904223;
+ this.r = 0;
+ this.s = 0;
+ this.suppressPhysics = false;
+ this.P = System.currentTimeMillis();
+ this.u = 40;
+ this.random = new Random();
+ this.x = false;
+ this.z = new ArrayList();
+ this.R = new ArrayList();
+ this.allowMonsters = true;
+ this.allowAnimals = true;
+ this.T = new HashSet();
+ this.U = this.random.nextInt(12000);
this.H = new int['\u8000'];
- this.Y = new ArrayList();
+ this.V = new ArrayList();
this.isStatic = false;
this.B = idatamanager;
this.worldMaps = new WorldMapCollection(idatamanager);
@@ -129,8 +156,8 @@ public class World implements IBlockAccess {
this.x = this.worldData == null;
if (worldprovider != null) {
this.worldProvider = worldprovider;
- } else if (this.worldData != null && this.worldData.h() == -1) {
- this.worldProvider = WorldProvider.byDimension(-1);
+ } else if (this.worldData != null && this.worldData.h() != 0) {
+ this.worldProvider = WorldProvider.byDimension(this.worldData.h());
} else {
this.worldProvider = WorldProvider.byDimension(0);
}
@@ -150,8 +177,8 @@ public class World implements IBlockAccess {
this.c();
}
- this.f();
- this.x();
+ this.g();
+ this.z();
this.getServer().addWorld(this.world); // CraftBukkit
}
@@ -169,8 +196,8 @@ public class World implements IBlockAccess {
Random random = new Random(this.getSeed());
ChunkPosition chunkposition = worldchunkmanager.a(0, 0, 256, list, random);
int i = 0;
- byte b0 = 64;
- int j = 0;
+ int j = this.height / 2;
+ int k = 0;
// CraftBukkit start
if (this.generator != null) {
@@ -191,31 +218,35 @@ public class World implements IBlockAccess {
if (chunkposition != null) {
i = chunkposition.x;
- j = chunkposition.z;
+ k = chunkposition.z;
} else {
System.out.println("Unable to find spawn biome");
}
- int k = 0;
+ int l = 0;
// CraftBukkit - use out own canSpawn
- while (!canSpawn(i, j)) {
+ while (!this.canSpawn(i, k)) {
i += random.nextInt(64) - random.nextInt(64);
- j += random.nextInt(64) - random.nextInt(64);
- ++k;
- if (k == 1000) {
+ k += random.nextInt(64) - random.nextInt(64);
+ ++l;
+ if (l == 1000) {
break;
}
}
- this.worldData.setSpawn(i, b0, j);
+ this.worldData.setSpawn(i, j, k);
this.isLoading = false;
}
+ public ChunkCoordinates d() {
+ return this.worldProvider.d();
+ }
+
public int a(int i, int j) {
int k;
- for (k = 63; !this.isEmpty(i, k + 1, j); ++k) {
+ for (k = this.seaLevel; !this.isEmpty(i, k + 1, j); ++k) {
;
}
@@ -228,7 +259,7 @@ public class World implements IBlockAccess {
iprogressupdate.a("Saving level");
}
- this.w();
+ this.y();
if (iprogressupdate != null) {
iprogressupdate.b("Saving chunks");
}
@@ -237,14 +268,14 @@ public class World implements IBlockAccess {
}
}
- private void w() {
- this.j();
+ private void y() {
+ this.l();
this.B.a(this.worldData, this.players);
this.worldMaps.a();
}
public int getTypeId(int i, int j, int k) {
- return i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000 ? (j < 0 ? 0 : (j >= 128 ? 0 : this.getChunkAt(i >> 4, k >> 4).getTypeId(i & 15, j, k & 15))) : 0;
+ return i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000 ? (j < 0 ? 0 : (j >= this.height ? 0 : this.getChunkAt(i >> 4, k >> 4).getTypeId(i & 15, j, k & 15))) : 0;
}
public boolean isEmpty(int i, int j, int k) {
@@ -252,7 +283,7 @@ public class World implements IBlockAccess {
}
public boolean isLoaded(int i, int j, int k) {
- return j >= 0 && j < 128 ? this.isChunkLoaded(i >> 4, k >> 4) : false;
+ return j >= 0 && j < this.height ? this.isChunkLoaded(i >> 4, k >> 4) : false;
}
public boolean areChunksLoaded(int i, int j, int k, int l) {
@@ -260,7 +291,7 @@ public class World implements IBlockAccess {
}
public boolean a(int i, int j, int k, int l, int i1, int j1) {
- if (i1 >= 0 && j < 128) {
+ if (i1 >= 0 && j < this.height) {
i >>= 4;
j >>= 4;
k >>= 4;
@@ -309,13 +340,13 @@ public class World implements IBlockAccess {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (j < 0) {
return false;
- } else if (j >= 128) {
+ } else if (j >= this.height) {
return false;
} else {
Chunk chunk = this.getChunkAt(i >> 4, k >> 4);
boolean flag = chunk.a(i & 15, j, k & 15, l, i1);
- this.p(i, j, k);
+ this.s(i, j, k);
return flag;
}
} else {
@@ -327,13 +358,13 @@ public class World implements IBlockAccess {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (j < 0) {
return false;
- } else if (j >= 128) {
+ } else if (j >= this.height) {
return false;
} else {
Chunk chunk = this.getChunkAt(i >> 4, k >> 4);
boolean flag = chunk.a(i & 15, j, k & 15, l);
- this.p(i, j, k);
+ this.s(i, j, k);
return flag;
}
} else {
@@ -351,7 +382,7 @@ public class World implements IBlockAccess {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (j < 0) {
return 0;
- } else if (j >= 128) {
+ } else if (j >= this.height) {
return 0;
} else {
Chunk chunk = this.getChunkAt(i >> 4, k >> 4);
@@ -381,15 +412,14 @@ public class World implements IBlockAccess {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (j < 0) {
return false;
- } else if (j >= 128) {
+ } else if (j >= this.height) {
return false;
} else {
Chunk chunk = this.getChunkAt(i >> 4, k >> 4);
i &= 15;
k &= 15;
- chunk.b(i, j, k, l);
- return true;
+ return chunk.b(i, j, k, l);
}
} else {
return false;
@@ -440,8 +470,10 @@ public class World implements IBlockAccess {
k = i1;
}
- for (i1 = k; i1 <= l; ++i1) {
- this.b(EnumSkyBlock.SKY, i, i1, j);
+ if (!this.worldProvider.e) {
+ for (i1 = k; i1 <= l; ++i1) {
+ this.b(EnumSkyBlock.SKY, i, i1, j);
+ }
}
this.b(i, k, j, i, l, j);
@@ -498,8 +530,8 @@ public class World implements IBlockAccess {
if (j < 0) {
return 0;
} else {
- if (j >= 128) {
- j = 127;
+ if (j >= this.height) {
+ j = this.height - 1;
}
return this.getChunkAt(i >> 4, k >> 4).c(i & 15, j, k & 15, 0);
@@ -545,8 +577,8 @@ public class World implements IBlockAccess {
if (j < 0) {
return 0;
} else {
- if (j >= 128) {
- j = 127;
+ if (j >= this.height) {
+ j = this.height - 1;
}
Chunk chunk = this.getChunkAt(i >> 4, k >> 4);
@@ -579,11 +611,11 @@ public class World implements IBlockAccess {
j = 0;
}
- if (j >= 128) {
- j = 127;
+ if (j >= this.height) {
+ j = this.height - 1;
}
- if (j >= 0 && j < 128 && i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
+ if (j >= 0 && j < this.height && i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
int l = i >> 4;
int i1 = k >> 4;
@@ -602,7 +634,7 @@ public class World implements IBlockAccess {
public void a(EnumSkyBlock enumskyblock, int i, int j, int k, int l) {
if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
if (j >= 0) {
- if (j < 128) {
+ if (j < this.height) {
if (this.isChunkLoaded(i >> 4, k >> 4)) {
Chunk chunk = this.getChunkAt(i >> 4, k >> 4);
@@ -621,7 +653,7 @@ public class World implements IBlockAccess {
return this.worldProvider.f[this.getLightLevel(i, j, k)];
}
- public boolean d() {
+ public boolean e() {
return this.k < 4;
}
@@ -911,10 +943,10 @@ public class World implements IBlockAccess {
this.everyoneSleeping();
}
- int i = entity.bW;
- int j = entity.bY;
+ int i = entity.bX;
+ int j = entity.bZ;
- if (entity.bV && this.isChunkLoaded(i, j)) {
+ if (entity.bW && this.isChunkLoaded(i, j)) {
this.getChunkAt(i, j).b(entity);
}
@@ -927,7 +959,7 @@ public class World implements IBlockAccess {
}
public List getEntities(Entity entity, AxisAlignedBB axisalignedbb) {
- this.U.clear();
+ this.R.clear();
int i = MathHelper.floor(axisalignedbb.a);
int j = MathHelper.floor(axisalignedbb.d + 1.0D);
int k = MathHelper.floor(axisalignedbb.b);
@@ -937,12 +969,12 @@ public class World implements IBlockAccess {
for (int k1 = i; k1 < j; ++k1) {
for (int l1 = i1; l1 < j1; ++l1) {
- if (this.isLoaded(k1, 64, l1)) {
+ if (this.isLoaded(k1, this.height / 2, l1)) {
for (int i2 = k - 1; i2 < l; ++i2) {
Block block = Block.byId[this.getTypeId(k1, i2, l1)];
if (block != null) {
- block.a(this, k1, i2, l1, axisalignedbb, this.U);
+ block.a(this, k1, i2, l1, axisalignedbb, this.R);
}
}
}
@@ -953,19 +985,19 @@ public class World implements IBlockAccess {
List list = this.b(entity, axisalignedbb.b(d0, d0, d0));
for (int j2 = 0; j2 < list.size(); ++j2) {
- AxisAlignedBB axisalignedbb1 = ((Entity) list.get(j2)).f();
+ AxisAlignedBB axisalignedbb1 = ((Entity) list.get(j2)).h_();
if (axisalignedbb1 != null && axisalignedbb1.a(axisalignedbb)) {
- this.U.add(axisalignedbb1);
+ this.R.add(axisalignedbb1);
}
- axisalignedbb1 = entity.b((Entity) list.get(j2));
+ axisalignedbb1 = entity.a_((Entity) list.get(j2));
if (axisalignedbb1 != null && axisalignedbb1.a(axisalignedbb)) {
- this.U.add(axisalignedbb1);
+ this.R.add(axisalignedbb1);
}
}
- return this.U;
+ return this.R;
}
public int a(float f) {
@@ -988,7 +1020,7 @@ public class World implements IBlockAccess {
}
public float b(float f) {
- return this.worldProvider.a(this.worldData.f(), f) + (float) (this.J + (this.K - this.J) * (double) f);
+ return this.worldProvider.a(this.worldData.f(), f);
}
public int e(int i, int j) {
@@ -997,7 +1029,7 @@ public class World implements IBlockAccess {
public int f(int i, int j) {
Chunk chunk = this.getChunkAtWorldCoords(i, j);
- int k = 127;
+ int k = this.height - 1;
i &= 15;
@@ -1030,15 +1062,31 @@ public class World implements IBlockAccess {
nextticklistentry.a((long) i1 + this.worldData.f());
}
- if (!this.O.contains(nextticklistentry)) {
- this.O.add(nextticklistentry);
- this.N.add(nextticklistentry);
+ if (!this.L.contains(nextticklistentry)) {
+ this.L.add(nextticklistentry);
+ this.K.add(nextticklistentry);
}
}
}
}
+ public void d(int i, int j, int k, int l, int i1) {
+ NextTickListEntry nextticklistentry = new NextTickListEntry(i, j, k, l);
+
+ if (l > 0) {
+ nextticklistentry.a((long) i1 + this.worldData.f());
+ }
+
+ if (!this.L.contains(nextticklistentry)) {
+ this.L.add(nextticklistentry);
+ this.K.add(nextticklistentry);
+ }
+ }
+
public void tickEntities() {
+ MethodProfiler.a("entities");
+ MethodProfiler.a("global");
+
int i;
Entity entity;
@@ -1049,31 +1097,33 @@ public class World implements IBlockAccess {
continue;
}
// CraftBukkit end
- entity.s_();
+ entity.w_();
if (entity.dead) {
this.j.remove(i--);
}
}
- this.entityList.removeAll(this.M);
+ MethodProfiler.b("remove");
+ this.entityList.removeAll(this.J);
int j;
int k;
- for (i = 0; i < this.M.size(); ++i) {
- entity = (Entity) this.M.get(i);
- j = entity.bW;
- k = entity.bY;
- if (entity.bV && this.isChunkLoaded(j, k)) {
+ for (i = 0; i < this.J.size(); ++i) {
+ entity = (Entity) this.J.get(i);
+ j = entity.bX;
+ k = entity.bZ;
+ if (entity.bW && this.isChunkLoaded(j, k)) {
this.getChunkAt(j, k).b(entity);
}
}
- for (i = 0; i < this.M.size(); ++i) {
- this.d((Entity) this.M.get(i));
+ for (i = 0; i < this.J.size(); ++i) {
+ this.d((Entity) this.J.get(i));
}
- this.M.clear();
+ this.J.clear();
+ MethodProfiler.b("regular");
for (i = 0; i < this.entityList.size(); ++i) {
entity = (Entity) this.entityList.get(i);
@@ -1090,29 +1140,33 @@ public class World implements IBlockAccess {
this.playerJoinedWorld(entity);
}
+ MethodProfiler.a("remove");
if (entity.dead) {
- j = entity.bW;
- k = entity.bY;
- if (entity.bV && this.isChunkLoaded(j, k)) {
+ j = entity.bX;
+ k = entity.bZ;
+ if (entity.bW && this.isChunkLoaded(j, k)) {
this.getChunkAt(j, k).b(entity);
}
this.entityList.remove(i--);
this.d(entity);
}
+
+ MethodProfiler.a();
}
- this.V = true;
+ MethodProfiler.b("tileEntities");
+ this.S = true;
Iterator iterator = this.h.iterator();
while (iterator.hasNext()) {
TileEntity tileentity = (TileEntity) iterator.next();
- if (!tileentity.m() && tileentity.world != null) {
- tileentity.h_();
+ if (!tileentity.l() && tileentity.world != null && this.isLoaded(tileentity.x, tileentity.y, tileentity.z)) {
+ tileentity.l_();
}
- if (tileentity.m()) {
+ if (tileentity.l()) {
iterator.remove();
if (this.isChunkLoaded(tileentity.x >> 4, tileentity.z >> 4)) {
Chunk chunk = this.getChunkAt(tileentity.x >> 4, tileentity.z >> 4);
@@ -1124,19 +1178,20 @@ public class World implements IBlockAccess {
}
}
- this.V = false;
- if (!this.Q.isEmpty()) {
- this.h.removeAll(this.Q);
- this.Q.clear();
+ this.S = false;
+ if (!this.N.isEmpty()) {
+ this.h.removeAll(this.N);
+ this.N.clear();
}
- if (!this.P.isEmpty()) {
- Iterator iterator1 = this.P.iterator();
+ MethodProfiler.b("pendingTileEntities");
+ if (!this.M.isEmpty()) {
+ Iterator iterator1 = this.M.iterator();
while (iterator1.hasNext()) {
TileEntity tileentity1 = (TileEntity) iterator1.next();
- if (!tileentity1.m()) {
+ if (!tileentity1.l()) {
// CraftBukkit - order matters, moved down
/* if (!this.h.contains(tileentity1)) {
this.h.add(tileentity1);
@@ -1159,13 +1214,16 @@ public class World implements IBlockAccess {
}
}
- this.P.clear();
+ this.M.clear();
}
+
+ MethodProfiler.a();
+ MethodProfiler.a();
}
public void a(Collection collection) {
- if (this.V) {
- this.P.addAll(collection);
+ if (this.S) {
+ this.M.addAll(collection);
} else {
this.h.addAll(collection);
}
@@ -1180,30 +1238,31 @@ public class World implements IBlockAccess {
int j = MathHelper.floor(entity.locZ);
byte b0 = 32;
- if (!flag || this.a(i - b0, 0, j - b0, i + b0, 128, j + b0)) {
- entity.bE = entity.locX;
- entity.bF = entity.locY;
- entity.bG = entity.locZ;
+ if (!flag || this.a(i - b0, 0, j - b0, i + b0, this.height, j + b0)) {
+ entity.bI = entity.locX;
+ entity.bJ = entity.locY;
+ entity.bK = entity.locZ;
entity.lastYaw = entity.yaw;
entity.lastPitch = entity.pitch;
- if (flag && entity.bV) {
+ if (flag && entity.bW) {
if (entity.vehicle != null) {
- entity.I();
+ entity.M();
} else {
- entity.s_();
+ entity.w_();
}
}
+ MethodProfiler.a("chunkCheck");
if (Double.isNaN(entity.locX) || Double.isInfinite(entity.locX)) {
- entity.locX = entity.bE;
+ entity.locX = entity.bI;
}
if (Double.isNaN(entity.locY) || Double.isInfinite(entity.locY)) {
- entity.locY = entity.bF;
+ entity.locY = entity.bJ;
}
if (Double.isNaN(entity.locZ) || Double.isInfinite(entity.locZ)) {
- entity.locZ = entity.bG;
+ entity.locZ = entity.bK;
}
if (Double.isNaN((double) entity.pitch) || Double.isInfinite((double) entity.pitch)) {
@@ -1218,20 +1277,21 @@ public class World implements IBlockAccess {
int l = MathHelper.floor(entity.locY / 16.0D);
int i1 = MathHelper.floor(entity.locZ / 16.0D);
- if (!entity.bV || entity.bW != k || entity.bX != l || entity.bY != i1) {
- if (entity.bV && this.isChunkLoaded(entity.bW, entity.bY)) {
- this.getChunkAt(entity.bW, entity.bY).a(entity, entity.bX);
+ if (!entity.bW || entity.bX != k || entity.bY != l || entity.bZ != i1) {
+ if (entity.bW && this.isChunkLoaded(entity.bX, entity.bZ)) {
+ this.getChunkAt(entity.bX, entity.bZ).a(entity, entity.bY);
}
if (this.isChunkLoaded(k, i1)) {
- entity.bV = true;
+ entity.bW = true;
this.getChunkAt(k, i1).a(entity);
} else {
- entity.bV = false;
+ entity.bW = false;
}
}
- if (flag && entity.bV && entity.passenger != null) {
+ MethodProfiler.a();
+ if (flag && entity.bW && entity.passenger != null) {
if (!entity.passenger.dead && entity.passenger.vehicle == entity) {
this.playerJoinedWorld(entity.passenger);
} else {
@@ -1248,7 +1308,7 @@ public class World implements IBlockAccess {
for (int i = 0; i < list.size(); ++i) {
Entity entity = (Entity) list.get(i);
- if (!entity.dead && entity.aY) {
+ if (!entity.dead && entity.bc) {
return false;
}
}
@@ -1371,7 +1431,7 @@ public class World implements IBlockAccess {
Block block = Block.byId[this.getTypeId(k1, l1, i2)];
if (block != null && block.material == material) {
- double d0 = (double) ((float) (l1 + 1) - BlockFluids.c(this.getData(k1, l1, i2)));
+ double d0 = (double) ((float) (l1 + 1) - BlockFluids.d(this.getData(k1, l1, i2)));
if ((double) l >= d0) {
flag = true;
@@ -1523,16 +1583,35 @@ public class World implements IBlockAccess {
public TileEntity getTileEntity(int i, int j, int k) {
Chunk chunk = this.getChunkAt(i >> 4, k >> 4);
- return chunk != null ? chunk.d(i & 15, j, k & 15) : null;
+ if (chunk == null) {
+ return null;
+ } else {
+ TileEntity tileentity = chunk.d(i & 15, j, k & 15);
+
+ if (tileentity == null) {
+ Iterator iterator = this.M.iterator();
+
+ while (iterator.hasNext()) {
+ TileEntity tileentity1 = (TileEntity) iterator.next();
+
+ if (!tileentity1.l() && tileentity1.x == i && tileentity1.y == j && tileentity1.z == k) {
+ tileentity = tileentity1;
+ break;
+ }
+ }
+ }
+
+ return tileentity;
+ }
}
public void setTileEntity(int i, int j, int k, TileEntity tileentity) {
- if (tileentity != null && !tileentity.m()) {
- if (this.V) {
+ if (tileentity != null && !tileentity.l()) {
+ if (this.S) {
tileentity.x = i;
tileentity.y = j;
tileentity.z = k;
- this.P.add(tileentity);
+ this.M.add(tileentity);
} else {
// CraftBukkit - order matters, moved down
// this.h.add(tileentity);
@@ -1549,10 +1628,12 @@ public class World implements IBlockAccess {
public void n(int i, int j, int k) {
TileEntity tileentity = this.getTileEntity(i, j, k);
- if (tileentity != null && this.V) {
+ if (tileentity != null && this.S) {
tileentity.i();
+ this.M.remove(tileentity);
} else {
if (tileentity != null) {
+ this.M.remove(tileentity);
this.h.remove(tileentity);
}
@@ -1565,7 +1646,7 @@ public class World implements IBlockAccess {
}
public void a(TileEntity tileentity) {
- this.Q.add(tileentity);
+ this.N.add(tileentity);
}
public boolean o(int i, int j, int k) {
@@ -1580,7 +1661,23 @@ public class World implements IBlockAccess {
return block == null ? false : block.material.j() && block.b();
}
- public void f() {
+ public boolean b(int i, int j, int k, boolean flag) {
+ if (i >= -30000000 && k >= -30000000 && i < 30000000 && k < 30000000) {
+ Chunk chunk = this.chunkProvider.getOrCreateChunk(i >> 4, k >> 4);
+
+ if (chunk != null && !chunk.isEmpty()) {
+ Block block = Block.byId[this.getTypeId(i, j, k)];
+
+ return block == null ? false : block.material.j() && block.b();
+ } else {
+ return flag;
+ }
+ } else {
+ return flag;
+ }
+ }
+
+ public void g() {
int i = this.a(1.0F);
if (i != this.k) {
@@ -1594,33 +1691,35 @@ public class World implements IBlockAccess {
}
public void doTick() {
- this.J = this.K;
- this.K += this.L;
- this.L *= 0.98D;
+ if (this.r().isHardcore() && this.difficulty < 3) {
+ this.difficulty = 3;
+ }
+
this.getWorldChunkManager().b();
- this.h();
+ this.i();
long i;
if (this.everyoneDeeplySleeping()) {
boolean flag = false;
if (this.allowMonsters && this.difficulty >= 1) {
- flag = SpawnerCreature.a(this, this.players);
+ ;
}
if (!flag) {
i = this.worldData.f() + 24000L;
this.worldData.a(i - i % 24000L);
- this.r();
+ this.t();
}
}
+ MethodProfiler.a("mobSpawner");
// CraftBukkit start - Only call spawner if we have players online and the world allows for mobs or animals
if ((this.allowMonsters || this.allowAnimals) && (this instanceof WorldServer && this.getServer().getHandle().players.size() > 0)) {
SpawnerCreature.spawnEntities(this, this.allowMonsters, this.allowAnimals && this.worldData.f() % 400L == 0L);
}
// CraftBukkit end
-
+ MethodProfiler.b("chunkSource");
this.chunkProvider.unloadChunks();
int j = this.a(1.0F);
@@ -1630,15 +1729,19 @@ public class World implements IBlockAccess {
i = this.worldData.f() + 1L;
if (i % (long) this.u == 0L) {
+ MethodProfiler.b("save");
this.save(false, (IProgressUpdate) null);
}
this.worldData.a(i);
+ MethodProfiler.b("tickPending");
this.a(false);
- this.i();
+ MethodProfiler.b("tickTiles");
+ this.k();
+ MethodProfiler.a();
}
- private void x() {
+ private void z() {
if (this.worldData.hasStorm()) {
this.o = 1.0F;
if (this.worldData.isThundering()) {
@@ -1647,7 +1750,7 @@ public class World implements IBlockAccess {
}
}
- protected void h() {
+ protected void i() {
if (!this.worldProvider.e) {
if (this.r > 0) {
--this.r;
@@ -1730,7 +1833,7 @@ public class World implements IBlockAccess {
}
}
- private void y() {
+ private void A() {
// CraftBukkit start
WeatherChangeEvent weather = new WeatherChangeEvent(this.getWorld(), false);
this.getServer().getPluginManager().callEvent(weather);
@@ -1748,154 +1851,218 @@ public class World implements IBlockAccess {
// CraftBukkit end
}
- protected void i() {
- this.W.clear();
+ public void j() {
+ this.worldData.setWeatherDuration(1);
+ }
+
+ protected void k() {
+ this.T.clear();
+ MethodProfiler.a("buildList");
int i;
int j;
- int k;
- int l;
- for (int i1 = 0; i1 < this.players.size(); ++i1) {
- EntityHuman entityhuman = (EntityHuman) this.players.get(i1);
+ for (i = 0; i < this.players.size(); ++i) {
+ EntityHuman entityhuman = (EntityHuman) this.players.get(i);
+ int k = MathHelper.floor(entityhuman.locX / 16.0D);
+ int l = MathHelper.floor(entityhuman.locZ / 16.0D);
+ byte b0 = 7;
- i = MathHelper.floor(entityhuman.locX / 16.0D);
- j = MathHelper.floor(entityhuman.locZ / 16.0D);
- byte b0 = 9;
-
- for (k = -b0; k <= b0; ++k) {
- for (l = -b0; l <= b0; ++l) {
- this.W.add(new ChunkCoordIntPair(k + i, l + j));
+ for (j = -b0; j <= b0; ++j) {
+ for (int i1 = -b0; i1 <= b0; ++i1) {
+ this.T.add(new ChunkCoordIntPair(j + k, i1 + l));
}
}
}
- if (this.X > 0) {
- --this.X;
+ if (this.U > 0) {
+ --this.U;
}
- Iterator iterator = this.W.iterator();
+ i = 0;
+ int j1 = 0;
+
+ MethodProfiler.a();
+ Iterator iterator = this.T.iterator();
while (iterator.hasNext()) {
ChunkCoordIntPair chunkcoordintpair = (ChunkCoordIntPair) iterator.next();
+ int k1 = chunkcoordintpair.x * 16;
- i = chunkcoordintpair.x * 16;
j = chunkcoordintpair.z * 16;
+ MethodProfiler.a("getChunk");
Chunk chunk = this.getChunkAt(chunkcoordintpair.x, chunkcoordintpair.z);
- chunk.h();
- int j1;
- int k1;
+ MethodProfiler.b("tickChunk");
+ chunk.i();
+ MethodProfiler.b("moodSound");
int l1;
+ int i2;
+ int j2;
+ int k2;
+ int l2;
- if (this.X == 0) {
+ if (this.U == 0) {
this.l = this.l * 3 + 1013904223;
- k = this.l >> 2;
- l = k & 15;
- j1 = k >> 8 & 15;
- k1 = k >> 16 & 127;
- l1 = chunk.getTypeId(l, k1, j1);
- l += i;
- j1 += j;
- if (l1 == 0 && this.k(l, k1, j1) <= this.random.nextInt(8) && this.a(EnumSkyBlock.SKY, l, k1, j1) <= 0) {
- EntityHuman entityhuman1 = this.a((double) l + 0.5D, (double) k1 + 0.5D, (double) j1 + 0.5D, 8.0D);
+ l1 = this.l >> 2;
+ i2 = l1 & 15;
+ j2 = l1 >> 8 & 15;
+ k2 = l1 >> 16 & this.heightMinusOne;
+ l2 = chunk.getTypeId(i2, k2, j2);
+ i2 += k1;
+ j2 += j;
+ if (l2 == 0 && this.k(i2, k2, j2) <= this.random.nextInt(8) && this.a(EnumSkyBlock.SKY, i2, k2, j2) <= 0) {
+ EntityHuman entityhuman1 = this.a((double) i2 + 0.5D, (double) k2 + 0.5D, (double) j2 + 0.5D, 8.0D);
- if (entityhuman1 != null && entityhuman1.e((double) l + 0.5D, (double) k1 + 0.5D, (double) j1 + 0.5D) > 4.0D) {
- this.makeSound((double) l + 0.5D, (double) k1 + 0.5D, (double) j1 + 0.5D, "ambient.cave.cave", 0.7F, 0.8F + this.random.nextFloat() * 0.2F);
- this.X = this.random.nextInt(12000) + 6000;
+ if (entityhuman1 != null && entityhuman1.e((double) i2 + 0.5D, (double) k2 + 0.5D, (double) j2 + 0.5D) > 4.0D) {
+ this.makeSound((double) i2 + 0.5D, (double) k2 + 0.5D, (double) j2 + 0.5D, "ambient.cave.cave", 0.7F, 0.8F + this.random.nextFloat() * 0.2F);
+ this.U = this.random.nextInt(12000) + 6000;
}
}
}
- if (this.random.nextInt(100000) == 0 && this.u() && this.t()) {
+ MethodProfiler.b("thunder");
+ if (this.random.nextInt(100000) == 0 && this.w() && this.v()) {
this.l = this.l * 3 + 1013904223;
- k = this.l >> 2;
- l = i + (k & 15);
- j1 = j + (k >> 8 & 15);
- k1 = this.e(l, j1);
- if (this.s(l, k1, j1)) {
- this.strikeLightning(new EntityWeatherStorm(this, (double) l, (double) k1, (double) j1));
+ l1 = this.l >> 2;
+ i2 = k1 + (l1 & 15);
+ j2 = j + (l1 >> 8 & 15);
+ k2 = this.e(i2, j2);
+ if (this.v(i2, k2, j2)) {
+ this.strikeLightning(new EntityWeatherStorm(this, (double) i2, (double) k2, (double) j2));
this.r = 2;
}
}
- int i2;
+ MethodProfiler.b("iceandsnow");
+ this.l = this.l * 3 + 1013904223;
+ l1 = this.l >> 2;
+ i2 = l1 & 15;
+ j2 = l1 >> 8 & 15;
+ k2 = this.e(i2 + k1, j2 + j);
+ if (this.q(i2 + k1, k2 - 1, j2 + j)) {
+ // CraftBukkit start
+ BlockState blockState = this.getWorld().getBlockAt(i2 + k1, k2 - 1, j2 + j).getState();
+ blockState.setTypeId(Block.ICE.id);
- if (this.random.nextInt(16) == 0) {
+ BlockFormEvent iceBlockForm = new BlockFormEvent(blockState.getBlock(), blockState);
+ this.getServer().getPluginManager().callEvent(iceBlockForm);
+ if (!iceBlockForm.isCancelled()) {
+ blockState.update(true);
+ }
+ // CraftBukkit end
+ }
+
+ if (this.w() && this.r(i2 + k1, k2, j2 + j)) {
+ // CraftBukkit start
+ BlockState blockState = this.getWorld().getBlockAt(i2 + k1, k2, j2 + j).getState();
+ blockState.setTypeId(Block.SNOW.id);
+
+ BlockFormEvent snow = new BlockFormEvent(blockState.getBlock(), blockState);
+ this.getServer().getPluginManager().callEvent(snow);
+ if (!snow.isCancelled()) {
+ blockState.update(true);
+ }
+ // CraftBukkit end
+ }
+
+ MethodProfiler.b("checkLight");
+ this.s(k1 + this.random.nextInt(16), this.random.nextInt(this.height), j + this.random.nextInt(16));
+ MethodProfiler.b("tickTiles");
+
+ for (l1 = 0; l1 < 20; ++l1) {
this.l = this.l * 3 + 1013904223;
- k = this.l >> 2;
- l = k & 15;
- j1 = k >> 8 & 15;
- k1 = this.e(l + i, j1 + j);
- if (this.getWorldChunkManager().getBiome(l + i, j1 + j).b() && k1 >= 0 && k1 < 128 && chunk.a(EnumSkyBlock.BLOCK, l, k1, j1) < 10) {
- l1 = chunk.getTypeId(l, k1 - 1, j1);
- i2 = chunk.getTypeId(l, k1, j1);
- if (this.u() && i2 == 0 && Block.SNOW.canPlace(this, l + i, k1, j1 + j) && l1 != 0 && l1 != Block.ICE.id && Block.byId[l1].material.isSolid()) {
- // CraftBukkit start
- BlockState blockState = this.getWorld().getBlockAt(l + i, k1, j1 + j).getState();
- blockState.setTypeId(Block.SNOW.id);
+ i2 = this.l >> 2;
+ j2 = i2 & 15;
+ k2 = i2 >> 8 & 15;
+ l2 = i2 >> 16 & this.heightMinusOne;
+ int i3 = chunk.b[j2 << this.heightBitsPlusFour | k2 << this.heightBits | l2] & 255;
- BlockFormEvent snow = new BlockFormEvent(blockState.getBlock(), blockState);
- this.getServer().getPluginManager().callEvent(snow);
- if (!snow.isCancelled()) {
- blockState.update(true);
- }
- // CraftBukkit end
- }
-
- if (l1 == Block.STATIONARY_WATER.id && chunk.getData(l, k1 - 1, j1) == 0) {
- boolean flag = true;
-
- if (flag && this.getMaterial(l + i - 1, k1 - 1, j1 + j) != Material.WATER) {
- flag = false;
- }
-
- if (flag && this.getMaterial(l + i + 1, k1 - 1, j1 + j) != Material.WATER) {
- flag = false;
- }
-
- if (flag && this.getMaterial(l + i, k1 - 1, j1 + j - 1) != Material.WATER) {
- flag = false;
- }
-
- if (flag && this.getMaterial(l + i, k1 - 1, j1 + j + 1) != Material.WATER) {
- flag = false;
- }
-
- if (!flag) {
- // CraftBukkit start
- BlockState blockState = this.getWorld().getBlockAt(l + i, k1 - 1, j1 + j).getState();
- blockState.setTypeId(Block.ICE.id);
-
- BlockFormEvent iceBlockForm = new BlockFormEvent(blockState.getBlock(), blockState);
- this.getServer().getPluginManager().callEvent(iceBlockForm);
- if (!iceBlockForm.isCancelled()) {
- blockState.update(true);
- }
- // CraftBukkit end
- }
- }
+ ++j1;
+ if (Block.n[i3]) {
+ ++i;
+ Block.byId[i3].a(this, j2 + k1, l2, k2 + j, this.random);
}
}
- this.p(i + this.random.nextInt(16), this.random.nextInt(128), j + this.random.nextInt(16));
-
- for (k = 0; k < 80; ++k) {
- this.l = this.l * 3 + 1013904223;
- l = this.l >> 2;
- j1 = l & 15;
- k1 = l >> 8 & 15;
- l1 = l >> 16 & 127;
- i2 = chunk.b[j1 << 11 | k1 << 7 | l1] & 255;
- if (Block.n[i2]) {
- Block.byId[i2].a(this, j1 + i, l1, k1 + j, this.random);
- }
- }
+ MethodProfiler.a();
}
}
- public void p(int i, int j, int k) {
- this.b(EnumSkyBlock.SKY, i, j, k);
+ public boolean p(int i, int j, int k) {
+ return this.c(i, j, k, false);
+ }
+
+ public boolean q(int i, int j, int k) {
+ return this.c(i, j, k, true);
+ }
+
+ public boolean c(int i, int j, int k, boolean flag) {
+ float f = this.getWorldChunkManager().a(i, j, k);
+
+ if (f > 0.15F) {
+ return false;
+ } else {
+ if (j >= 0 && j < this.height && this.a(EnumSkyBlock.BLOCK, i, j, k) < 10) {
+ int l = this.getTypeId(i, j, k);
+
+ if ((l == Block.STATIONARY_WATER.id || l == Block.WATER.id) && this.getData(i, j, k) == 0) {
+ if (!flag) {
+ return true;
+ }
+
+ boolean flag1 = true;
+
+ if (flag1 && this.getMaterial(i - 1, j, k) != Material.WATER) {
+ flag1 = false;
+ }
+
+ if (flag1 && this.getMaterial(i + 1, j, k) != Material.WATER) {
+ flag1 = false;
+ }
+
+ if (flag1 && this.getMaterial(i, j, k - 1) != Material.WATER) {
+ flag1 = false;
+ }
+
+ if (flag1 && this.getMaterial(i, j, k + 1) != Material.WATER) {
+ flag1 = false;
+ }
+
+ if (!flag1) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+ }
+
+ public boolean r(int i, int j, int k) {
+ float f = this.getWorldChunkManager().a(i, j, k);
+
+ if (f > 0.15F) {
+ return false;
+ } else {
+ if (j >= 0 && j < this.height && this.a(EnumSkyBlock.BLOCK, i, j, k) < 10) {
+ int l = this.getTypeId(i, j - 1, k);
+ int i1 = this.getTypeId(i, j, k);
+
+ if (i1 == 0 && Block.SNOW.canPlace(this, i, j, k) && l != 0 && l != Block.ICE.id && Block.byId[l].material.isSolid()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+
+ public void s(int i, int j, int k) {
+ if (!this.worldProvider.e) {
+ this.b(EnumSkyBlock.SKY, i, j, k);
+ }
+
this.b(EnumSkyBlock.BLOCK, i, j, k);
}
@@ -2008,7 +2175,6 @@ public class World implements IBlockAccess {
l2 = this.a(enumskyblock, k1, l1, i2);
if (l2 == k2) {
this.a(enumskyblock, k1, l1, i2, 0);
- --k2;
if (k2 > 0) {
i3 = k1 - i;
k3 = l1 - j;
@@ -2033,8 +2199,14 @@ public class World implements IBlockAccess {
int l4 = i2 + (l3 / 2 + 2) % 3 / 2 * i4;
l2 = this.a(enumskyblock, j4, k4, l4);
- if (l2 == k2) {
- this.H[i1++] = j4 - i + 32 + (k4 - j + 32 << 6) + (l4 - k + 32 << 12) + (k2 << 18);
+ int i5 = Block.q[this.getTypeId(j4, k4, l4)];
+
+ if (i5 == 0) {
+ i5 = 1;
+ }
+
+ if (l2 == k2 - i5) {
+ this.H[i1++] = j4 - i + 32 + (k4 - j + 32 << 6) + (l4 - k + 32 << 12) + (k2 - i5 << 18);
}
}
}
@@ -2047,12 +2219,12 @@ public class World implements IBlockAccess {
while (l < i1) {
j1 = this.H[l++];
- int i5 = (j1 & 63) - 32 + i;
+ int j5 = (j1 & 63) - 32 + i;
j2 = (j1 >> 6 & 63) - 32 + j;
k1 = (j1 >> 12 & 63) - 32 + k;
- l1 = this.a(enumskyblock, i5, j2, k1);
- i2 = this.getTypeId(i5, j2, k1);
+ l1 = this.a(enumskyblock, j5, j2, k1);
+ i2 = this.getTypeId(j5, j2, k1);
k2 = Block.q[i2];
if (k2 == 0) {
k2 = 1;
@@ -2061,15 +2233,15 @@ public class World implements IBlockAccess {
boolean flag2 = false;
if (enumskyblock == EnumSkyBlock.SKY) {
- l2 = this.d(l1, i5, j2, k1, i2, k2);
+ l2 = this.d(l1, j5, j2, k1, i2, k2);
} else {
- l2 = this.e(l1, i5, j2, k1, i2, k2);
+ l2 = this.e(l1, j5, j2, k1, i2, k2);
}
if (l2 != l1) {
- this.a(enumskyblock, i5, j2, k1, l2);
+ this.a(enumskyblock, j5, j2, k1, l2);
if (l2 > l1) {
- i3 = i5 - i;
+ i3 = j5 - i;
k3 = j2 - j;
j3 = k1 - k;
if (i3 < 0) {
@@ -2085,28 +2257,28 @@ public class World implements IBlockAccess {
}
if (i3 + k3 + j3 < 17 && i1 < this.H.length - 6) {
- if (this.a(enumskyblock, i5 - 1, j2, k1) < l2) {
- this.H[i1++] = i5 - 1 - i + 32 + (j2 - j + 32 << 6) + (k1 - k + 32 << 12);
+ if (this.a(enumskyblock, j5 - 1, j2, k1) < l2) {
+ this.H[i1++] = j5 - 1 - i + 32 + (j2 - j + 32 << 6) + (k1 - k + 32 << 12);
}
- if (this.a(enumskyblock, i5 + 1, j2, k1) < l2) {
- this.H[i1++] = i5 + 1 - i + 32 + (j2 - j + 32 << 6) + (k1 - k + 32 << 12);
+ if (this.a(enumskyblock, j5 + 1, j2, k1) < l2) {
+ this.H[i1++] = j5 + 1 - i + 32 + (j2 - j + 32 << 6) + (k1 - k + 32 << 12);
}
- if (this.a(enumskyblock, i5, j2 - 1, k1) < l2) {
- this.H[i1++] = i5 - i + 32 + (j2 - 1 - j + 32 << 6) + (k1 - k + 32 << 12);
+ if (this.a(enumskyblock, j5, j2 - 1, k1) < l2) {
+ this.H[i1++] = j5 - i + 32 + (j2 - 1 - j + 32 << 6) + (k1 - k + 32 << 12);
}
- if (this.a(enumskyblock, i5, j2 + 1, k1) < l2) {
- this.H[i1++] = i5 - i + 32 + (j2 + 1 - j + 32 << 6) + (k1 - k + 32 << 12);
+ if (this.a(enumskyblock, j5, j2 + 1, k1) < l2) {
+ this.H[i1++] = j5 - i + 32 + (j2 + 1 - j + 32 << 6) + (k1 - k + 32 << 12);
}
- if (this.a(enumskyblock, i5, j2, k1 - 1) < l2) {
- this.H[i1++] = i5 - i + 32 + (j2 - j + 32 << 6) + (k1 - 1 - k + 32 << 12);
+ if (this.a(enumskyblock, j5, j2, k1 - 1) < l2) {
+ this.H[i1++] = j5 - i + 32 + (j2 - j + 32 << 6) + (k1 - 1 - k + 32 << 12);
}
- if (this.a(enumskyblock, i5, j2, k1 + 1) < l2) {
- this.H[i1++] = i5 - i + 32 + (j2 - j + 32 << 6) + (k1 + 1 - k + 32 << 12);
+ if (this.a(enumskyblock, j5, j2, k1 + 1) < l2) {
+ this.H[i1++] = j5 - i + 32 + (j2 - j + 32 << 6) + (k1 + 1 - k + 32 << 12);
}
}
}
@@ -2116,9 +2288,9 @@ public class World implements IBlockAccess {
}
public boolean a(boolean flag) {
- int i = this.N.size();
+ int i = this.K.size();
- if (i != this.O.size()) {
+ if (i != this.L.size()) {
throw new IllegalStateException("TickNextTick list out of synch");
} else {
if (i > 1000) {
@@ -2126,14 +2298,14 @@ public class World implements IBlockAccess {
}
for (int j = 0; j < i; ++j) {
- NextTickListEntry nextticklistentry = (NextTickListEntry) this.N.first();
+ NextTickListEntry nextticklistentry = (NextTickListEntry) this.K.first();
if (!flag && nextticklistentry.e > this.worldData.f()) {
break;
}
- this.N.remove(nextticklistentry);
- this.O.remove(nextticklistentry);
+ this.K.remove(nextticklistentry);
+ this.L.remove(nextticklistentry);
byte b0 = 8;
if (this.a(nextticklistentry.a - b0, nextticklistentry.b - b0, nextticklistentry.c - b0, nextticklistentry.a + b0, nextticklistentry.b + b0, nextticklistentry.c + b0)) {
@@ -2145,12 +2317,41 @@ public class World implements IBlockAccess {
}
}
- return this.N.size() != 0;
+ return this.K.size() != 0;
}
}
+ public List a(Chunk chunk, boolean flag) {
+ ArrayList arraylist = null;
+ ChunkCoordIntPair chunkcoordintpair = chunk.j();
+ int i = chunkcoordintpair.x << 4;
+ int j = i + 16;
+ int k = chunkcoordintpair.z << 4;
+ int l = k + 16;
+ Iterator iterator = this.L.iterator();
+
+ while (iterator.hasNext()) {
+ NextTickListEntry nextticklistentry = (NextTickListEntry) iterator.next();
+
+ if (nextticklistentry.a >= i && nextticklistentry.a < j && nextticklistentry.c >= k && nextticklistentry.c < l) {
+ if (flag) {
+ this.K.remove(nextticklistentry);
+ iterator.remove();
+ }
+
+ if (arraylist == null) {
+ arraylist = new ArrayList();
+ }
+
+ arraylist.add(nextticklistentry);
+ }
+ }
+
+ return arraylist;
+ }
+
public List b(Entity entity, AxisAlignedBB axisalignedbb) {
- this.Y.clear();
+ this.V.clear();
int i = MathHelper.floor((axisalignedbb.a - 2.0D) / 16.0D);
int j = MathHelper.floor((axisalignedbb.d + 2.0D) / 16.0D);
int k = MathHelper.floor((axisalignedbb.c - 2.0D) / 16.0D);
@@ -2159,12 +2360,12 @@ public class World implements IBlockAccess {
for (int i1 = i; i1 <= j; ++i1) {
for (int j1 = k; j1 <= l; ++j1) {
if (this.isChunkLoaded(i1, j1)) {
- this.getChunkAt(i1, j1).a(entity, axisalignedbb, this.Y);
+ this.getChunkAt(i1, j1).a(entity, axisalignedbb, this.V);
}
}
}
- return this.Y;
+ return this.V;
}
public List a(Class oclass, AxisAlignedBB axisalignedbb) {
@@ -2226,7 +2427,7 @@ public class World implements IBlockAccess {
}
public void b(List list) {
- this.M.addAll(list);
+ this.J.addAll(list);
}
public boolean a(int i, int j, int k, int l, boolean flag, int i1) {
@@ -2260,6 +2461,7 @@ public class World implements IBlockAccess {
}
public PathEntity findPath(Entity entity, Entity entity1, float f) {
+ MethodProfiler.a("pathfind");
int i = MathHelper.floor(entity.locX);
int j = MathHelper.floor(entity.locY);
int k = MathHelper.floor(entity.locZ);
@@ -2271,11 +2473,14 @@ public class World implements IBlockAccess {
int i2 = j + l;
int j2 = k + l;
ChunkCache chunkcache = new ChunkCache(this, i1, j1, k1, l1, i2, j2);
+ PathEntity pathentity = (new Pathfinder(chunkcache)).a(entity, entity1, f);
- return (new Pathfinder(chunkcache)).a(entity, entity1, f);
+ MethodProfiler.a();
+ return pathentity;
}
public PathEntity a(Entity entity, int i, int j, int k, float f) {
+ MethodProfiler.a("pathfind");
int l = MathHelper.floor(entity.locX);
int i1 = MathHelper.floor(entity.locY);
int j1 = MathHelper.floor(entity.locZ);
@@ -2287,8 +2492,10 @@ public class World implements IBlockAccess {
int l2 = i1 + k1;
int i3 = j1 + k1;
ChunkCache chunkcache = new ChunkCache(this, l1, i2, j2, k2, l2, i3);
+ PathEntity pathentity = (new Pathfinder(chunkcache)).a(entity, i, j, k, f);
- return (new Pathfinder(chunkcache)).a(entity, i, j, k, f);
+ MethodProfiler.a();
+ return pathentity;
}
public boolean isBlockFacePowered(int i, int j, int k, int l) {
@@ -2341,6 +2548,30 @@ public class World implements IBlockAccess {
return entityhuman;
}
+ public EntityHuman b(Entity entity, double d0) {
+ return this.b(entity.locX, entity.locY, entity.locZ, d0);
+ }
+
+ public EntityHuman b(double d0, double d1, double d2, double d3) {
+ double d4 = -1.0D;
+ EntityHuman entityhuman = null;
+
+ for (int i = 0; i < this.players.size(); ++i) {
+ EntityHuman entityhuman1 = (EntityHuman) this.players.get(i);
+
+ if (!entityhuman1.abilities.isInvulnerable) {
+ double d5 = entityhuman1.e(d0, d1, d2);
+
+ if ((d3 < 0.0D || d5 < d3 * d3) && (d4 == -1.0D || d5 < d4)) {
+ d4 = d5;
+ entityhuman = entityhuman1;
+ }
+ }
+ }
+
+ return entityhuman;
+ }
+
public EntityHuman a(String s) {
for (int i = 0; i < this.players.size(); ++i) {
if (s.equals(((EntityHuman) this.players.get(i)).name)) {
@@ -2365,8 +2596,8 @@ public class World implements IBlockAccess {
l2 = 0;
}
- if (i3 > 128) {
- i3 = 128;
+ if (i3 > this.height) {
+ i3 = this.height;
}
for (int j3 = k1; j3 <= i2; ++j3) {
@@ -2400,7 +2631,7 @@ public class World implements IBlockAccess {
return abyte;
}
- public void j() {
+ public void l() {
this.B.b();
}
@@ -2413,7 +2644,7 @@ public class World implements IBlockAccess {
NextTickListEntry nextticklistentry;
- for (Iterator iterator = this.O.iterator(); iterator.hasNext(); nextticklistentry.e += j) {
+ for (Iterator iterator = this.L.iterator(); iterator.hasNext(); nextticklistentry.e += j) {
nextticklistentry = (NextTickListEntry) iterator.next();
}
@@ -2438,7 +2669,7 @@ public class World implements IBlockAccess {
public void a(Entity entity, byte b0) {}
- public IChunkProvider n() {
+ public IChunkProvider p() {
return this.chunkProvider;
}
@@ -2450,16 +2681,16 @@ public class World implements IBlockAccess {
}
}
- public IDataManager o() {
+ public IDataManager q() {
return this.B;
}
- public WorldData p() {
+ public WorldData r() {
return this.worldData;
}
public void everyoneSleeping() {
- this.T = !this.players.isEmpty();
+ this.Q = !this.players.isEmpty();
Iterator iterator = this.players.iterator();
while (iterator.hasNext()) {
@@ -2467,7 +2698,7 @@ public class World implements IBlockAccess {
// CraftBukkit
if (!entityhuman.isSleeping() && !entityhuman.fauxSleeping) {
- this.T = false;
+ this.Q = false;
break;
}
}
@@ -2483,8 +2714,8 @@ public class World implements IBlockAccess {
}
// CraftBukkit end
- protected void r() {
- this.T = false;
+ protected void t() {
+ this.Q = false;
Iterator iterator = this.players.iterator();
while (iterator.hasNext()) {
@@ -2495,11 +2726,11 @@ public class World implements IBlockAccess {
}
}
- this.y();
+ this.A();
}
public boolean everyoneDeeplySleeping() {
- if (this.T && !this.isStatic) {
+ if (this.Q && !this.isStatic) {
Iterator iterator = this.players.iterator();
// CraftBukkit - This allows us to assume that some people are in bed but not really, allowing time to pass in spite of AFKers
@@ -2535,16 +2766,16 @@ public class World implements IBlockAccess {
return this.n + (this.o - this.n) * f;
}
- public boolean t() {
+ public boolean v() {
return (double) this.c(1.0F) > 0.9D;
}
- public boolean u() {
+ public boolean w() {
return (double) this.d(1.0F) > 0.2D;
}
- public boolean s(int i, int j, int k) {
- if (!this.u()) {
+ public boolean v(int i, int j, int k) {
+ if (!this.w()) {
return false;
} else if (!this.isChunkLoaded(i, j, k)) {
return false;
@@ -2569,7 +2800,7 @@ public class World implements IBlockAccess {
return this.worldMaps.a(s);
}
- public void e(int i, int j, int k, int l, int i1) {
+ public void f(int i, int j, int k, int l, int i1) {
this.a((EntityHuman) null, i, j, k, l, i1);
}
@@ -2579,19 +2810,29 @@ public class World implements IBlockAccess {
}
}
- public Random t(int i, int j, int k) {
- long l = (long) i * 341873128712L + (long) j * 132897987541L + this.p().getSeed() + (long) k;
+ public Random w(int i, int j, int k) {
+ long l = (long) i * 341873128712L + (long) j * 132897987541L + this.r().getSeed() + (long) k;
this.random.setSeed(l);
return this.random;
}
- public boolean v() {
+ public boolean x() {
return false;
}
public void a(EnumSkyBlock enumskyblock, int i, int j, int k, int l, int i1, int j1) {}
+ public BiomeMeta a(EnumCreatureType enumcreaturetype, int i, int j, int k) {
+ List list = this.p().a(enumcreaturetype, i, j, k);
+
+ return list != null && !list.isEmpty() ? (BiomeMeta) WeightedRandom.a(this.random, (Collection) list) : null;
+ }
+
+ public ChunkPosition b(String s, int i, int j, int k) {
+ return this.p().a(this, s, i, j, k);
+ }
+
// CraftBukkit start
public UUID getUUID() {
return this.B.getUUID();
diff --git a/src/main/java/net/minecraft/server/WorldData.java b/src/main/java/net/minecraft/server/WorldData.java
index c824df211f..c6b2e03a99 100644
--- a/src/main/java/net/minecraft/server/WorldData.java
+++ b/src/main/java/net/minecraft/server/WorldData.java
@@ -21,39 +21,42 @@ public class WorldData {
private int thunderTicks;
private int gameType;
private boolean useMapFeatures;
+ private boolean hardcore = false;
public WorldData(NBTTagCompound nbttagcompound) {
this.seed = nbttagcompound.getLong("RandomSeed");
- this.gameType = nbttagcompound.e("GameType");
+ this.gameType = nbttagcompound.f("GameType");
if (nbttagcompound.hasKey("MapFeatures")) {
- this.useMapFeatures = nbttagcompound.m("MapFeatures");
+ this.useMapFeatures = nbttagcompound.n("MapFeatures");
} else {
this.useMapFeatures = true;
}
- this.spawnX = nbttagcompound.e("SpawnX");
- this.spawnY = nbttagcompound.e("SpawnY");
- this.spawnZ = nbttagcompound.e("SpawnZ");
+ this.spawnX = nbttagcompound.f("SpawnX");
+ this.spawnY = nbttagcompound.f("SpawnY");
+ this.spawnZ = nbttagcompound.f("SpawnZ");
this.time = nbttagcompound.getLong("Time");
this.lastPlayed = nbttagcompound.getLong("LastPlayed");
this.sizeOnDisk = nbttagcompound.getLong("SizeOnDisk");
this.name = nbttagcompound.getString("LevelName");
- this.version = nbttagcompound.e("version");
- this.rainTicks = nbttagcompound.e("rainTime");
- this.isRaining = nbttagcompound.m("raining");
- this.thunderTicks = nbttagcompound.e("thunderTime");
- this.isThundering = nbttagcompound.m("thundering");
+ this.version = nbttagcompound.f("version");
+ this.rainTicks = nbttagcompound.f("rainTime");
+ this.isRaining = nbttagcompound.n("raining");
+ this.thunderTicks = nbttagcompound.f("thunderTime");
+ this.isThundering = nbttagcompound.n("thundering");
+ this.hardcore = nbttagcompound.n("hardcore");
if (nbttagcompound.hasKey("Player")) {
- this.playerData = nbttagcompound.k("Player");
- this.dimension = this.playerData.e("Dimension");
+ this.playerData = nbttagcompound.l("Player");
+ this.dimension = this.playerData.f("Dimension");
}
}
public WorldData(WorldSettings worldsettings, String s) {
this.seed = worldsettings.a();
this.gameType = worldsettings.b();
- this.useMapFeatures = worldsettings.c();
+ this.useMapFeatures = worldsettings.d();
this.name = s;
+ this.hardcore = worldsettings.c();
}
public WorldData(WorldData worlddata) {
@@ -74,6 +77,7 @@ public class WorldData {
this.isRaining = worlddata.isRaining;
this.thunderTicks = worlddata.thunderTicks;
this.isThundering = worlddata.isThundering;
+ this.hardcore = worlddata.hardcore;
}
public NBTTagCompound a() {
@@ -117,6 +121,7 @@ public class WorldData {
nbttagcompound.a("raining", this.isRaining);
nbttagcompound.a("thunderTime", this.thunderTicks);
nbttagcompound.a("thundering", this.isThundering);
+ nbttagcompound.a("hardcore", this.hardcore);
if (nbttagcompound1 != null) {
nbttagcompound.a("Player", nbttagcompound1);
}
@@ -219,4 +224,8 @@ public class WorldData {
public void setGameType(int i) {
this.gameType = i;
}
+
+ public boolean isHardcore() {
+ return this.hardcore;
+ }
}
diff --git a/src/main/java/net/minecraft/server/WorldGenBigTree.java b/src/main/java/net/minecraft/server/WorldGenBigTree.java
index 372d605992..17ad929495 100644
--- a/src/main/java/net/minecraft/server/WorldGenBigTree.java
+++ b/src/main/java/net/minecraft/server/WorldGenBigTree.java
@@ -22,7 +22,9 @@ public class WorldGenBigTree extends WorldGenerator {
int n = 4;
int[][] o;
- public WorldGenBigTree() {}
+ public WorldGenBigTree(boolean flag) {
+ super(flag);
+ }
void a() {
this.f = (int) ((double) this.e * this.g);
@@ -119,7 +121,7 @@ public class WorldGenBigTree extends WorldGenerator {
if (l1 != 0 && l1 != 18) {
++k1;
} else {
- this.c.setRawTypeId(aint1[0], aint1[1], aint1[2], l);
+ this.a(this.c, aint1[0], aint1[1], aint1[2], l, 0);
++k1;
}
}
@@ -195,7 +197,7 @@ public class WorldGenBigTree extends WorldGenerator {
aint3[b1] = MathHelper.floor((double) (aint[b1] + j) + 0.5D);
aint3[b2] = MathHelper.floor((double) aint[b2] + (double) j * d0 + 0.5D);
aint3[b3] = MathHelper.floor((double) aint[b3] + (double) j * d1 + 0.5D);
- this.c.setRawTypeId(aint3[0], aint3[1], aint3[2], i);
+ this.a(this.c, aint3[0], aint3[1], aint3[2], i, 0);
}
}
}
diff --git a/src/main/java/net/minecraft/server/WorldGenForest.java b/src/main/java/net/minecraft/server/WorldGenForest.java
index 319fea483d..5903c9064e 100644
--- a/src/main/java/net/minecraft/server/WorldGenForest.java
+++ b/src/main/java/net/minecraft/server/WorldGenForest.java
@@ -6,7 +6,9 @@ import org.bukkit.BlockChangeDelegate; // CraftBukkit
public class WorldGenForest extends WorldGenerator {
- public WorldGenForest() {}
+ public WorldGenForest(boolean flag) {
+ super(flag);
+ }
public boolean a(World world, Random random, int i, int j, int k) {
// CraftBukkit start
@@ -22,89 +24,77 @@ public class WorldGenForest extends WorldGenerator {
int l = random.nextInt(3) + 5;
boolean flag = true;
- if (j >= 1) {
- int k1000 = j + l + 1;
+ if (j >= 1 && j + l + 1 <= world.getHeight()) { // CraftBukkit
+ int i1;
+ int j1;
+ int k1;
+ int l1;
- world.getClass();
- if (k1000 <= 128) {
- int j1;
- int k1;
- int l1;
- int i2;
+ for (i1 = j; i1 <= j + 1 + l; ++i1) {
+ byte b0 = 1;
- for (j1 = j; j1 <= j + 1 + l; ++j1) {
- byte b0 = 1;
+ if (i1 == j) {
+ b0 = 0;
+ }
- if (j1 == j) {
- b0 = 0;
- }
+ if (i1 >= j + 1 + l - 2) {
+ b0 = 2;
+ }
- 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;
- }
+ for (j1 = i - b0; j1 <= i + b0 && flag; ++j1) {
+ for (k1 = k - b0; k1 <= k + b0 && flag; ++k1) {
+ if (i1 >= 0 && i1 < world.getHeight()) { // CraftBukkit
+ l1 = world.getTypeId(j1, i1, k1);
+ if (l1 != 0 && l1 != Block.LEAVES.id) {
+ flag = false;
}
-
+ } else {
flag = false;
}
}
}
+ }
- if (!flag) {
- return false;
- }
+ if (!flag) {
+ return false;
+ } else {
+ i1 = world.getTypeId(i, j - 1, k);
+ if ((i1 == Block.GRASS.id || i1 == Block.DIRT.id) && j < world.getHeight() - l - 1) { // CraftBukkit
+ world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
- 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);
+ int i2;
- int j2;
+ for (i2 = j - 3 + l; i2 <= j + l; ++i2) {
+ j1 = i2 - (j + l);
+ k1 = 1 - j1 / 2;
- for (j2 = j - 3 + l; j2 <= j + l; ++j2) {
- k1 = j2 - (j + l);
- l1 = 1 - k1 / 2;
+ for (l1 = i - k1; l1 <= i + k1; ++l1) {
+ int j2 = l1 - i;
- for (i2 = i - l1; i2 <= i + l1; ++i2) {
- int k2 = i2 - i;
+ for (int k2 = k - k1; k2 <= k + k1; ++k2) {
+ int l2 = k2 - k;
- 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);
- }
+ if ((Math.abs(j2) != k1 || Math.abs(l2) != k1 || random.nextInt(2) != 0 && j1 != 0) && !Block.o[world.getTypeId(l1, i2, k2)]) {
+ this.a(world, l1, i2, k2, Block.LEAVES.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;
}
+
+ for (i2 = 0; i2 < l; ++i2) {
+ j1 = world.getTypeId(i, j + i2, k);
+ if (j1 == 0 || j1 == Block.LEAVES.id) {
+ this.a(world, i, j + i2, k, Block.LOG.id, 2);
+ }
+ }
+
+ return true;
+ } else {
+ return false;
}
-
- return false;
}
+ } else {
+ return false;
}
-
- return false;
}
}
diff --git a/src/main/java/net/minecraft/server/WorldGenTaiga1.java b/src/main/java/net/minecraft/server/WorldGenTaiga1.java
index 7901593300..237bc99daa 100644
--- a/src/main/java/net/minecraft/server/WorldGenTaiga1.java
+++ b/src/main/java/net/minecraft/server/WorldGenTaiga1.java
@@ -25,90 +25,78 @@ public class WorldGenTaiga1 extends WorldGenerator {
int k1 = 1 + random.nextInt(j1 + 1);
boolean flag = true;
- if (j >= 1) {
- int l1 = j + l + 1;
+ if (j >= 1 && j + l + 1 <= world.getHeight()) { // CraftBukkit
+ int l1;
+ int i2;
+ int j2;
+ int k2;
+ int l2;
- world.getClass();
- if (l1 <= 128) {
- int i2;
- int j2;
- int k2;
- int l2;
- int i3;
+ for (l1 = j; l1 <= j + 1 + l && flag; ++l1) {
+ boolean flag1 = true;
- for (i2 = j; i2 <= j + 1 + l && flag; ++i2) {
- boolean flag1 = true;
+ if (l1 - j < i1) {
+ l2 = 0;
+ } else {
+ l2 = k1;
+ }
- 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;
- }
+ for (i2 = i - l2; i2 <= i + l2 && flag; ++i2) {
+ for (j2 = k - l2; j2 <= k + l2 && flag; ++j2) {
+ if (l1 >= 0 && l1 < world.getHeight()) { // CraftBukkit
+ k2 = world.getTypeId(i2, l1, j2);
+ if (k2 != 0 && k2 != Block.LEAVES.id) {
+ flag = false;
}
-
+ } else {
flag = false;
}
}
}
+ }
- if (!flag) {
- return false;
- }
+ if (!flag) {
+ return false;
+ } else {
+ l1 = world.getTypeId(i, j - 1, k);
+ if ((l1 == Block.GRASS.id || l1 == Block.DIRT.id) && j < world.getHeight() - l - 1) { // CraftBukkit
+ world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
+ l2 = 0;
- 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 (i2 = j + l; i2 >= j + i1; --i2) {
+ for (j2 = i - l2; j2 <= i + l2; ++j2) {
+ k2 = j2 - i;
- for (j2 = j + l; j2 >= j + i1; --j2) {
- for (k2 = i - i3; k2 <= i + i3; ++k2) {
- l2 = k2 - i;
+ for (int i3 = k - l2; i3 <= k + l2; ++i3) {
+ int j3 = i3 - k;
- 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 ((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);
}
}
-
- if (i3 >= 1 && j2 == j + i1 + 1) {
- --i3;
- } else if (i3 < k1) {
- ++i3;
- }
}
- 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);
- }
+ if (l2 >= 1 && i2 == j + i1 + 1) {
+ --l2;
+ } else if (l2 < k1) {
+ ++l2;
}
-
- return true;
}
+
+ 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;
+ } else {
+ return false;
}
-
- return false;
}
+ } else {
+ return false;
}
-
- return false;
}
}
diff --git a/src/main/java/net/minecraft/server/WorldGenTaiga2.java b/src/main/java/net/minecraft/server/WorldGenTaiga2.java
index 6194736855..b6cf455579 100644
--- a/src/main/java/net/minecraft/server/WorldGenTaiga2.java
+++ b/src/main/java/net/minecraft/server/WorldGenTaiga2.java
@@ -6,7 +6,9 @@ import org.bukkit.BlockChangeDelegate; // CraftBukkit
public class WorldGenTaiga2 extends WorldGenerator {
- public WorldGenTaiga2() {}
+ public WorldGenTaiga2(boolean flag) {
+ super(flag);
+ }
public boolean a(World world, Random random, int i, int j, int k) {
// CraftBukkit start
@@ -25,103 +27,91 @@ public class WorldGenTaiga2 extends WorldGenerator {
int k1 = 2 + random.nextInt(2);
boolean flag = true;
- if (j >= 1) {
- int l1 = j + l + 1;
+ if (j >= 1 && j + l + 1 <= world.getHeight()) { // CraftBukkit
+ int l1;
+ int i2;
+ int j2;
+ int k2;
- world.getClass();
- if (l1 <= 128) {
- int i2;
- int j2;
- int k2;
- int l2;
+ for (l1 = j; l1 <= j + 1 + l && flag; ++l1) {
+ boolean flag1 = true;
- for (i2 = j; i2 <= j + 1 + l && flag; ++i2) {
- boolean flag1 = true;
+ if (l1 - j < i1) {
+ k2 = 0;
+ } else {
+ k2 = k1;
+ }
- 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;
- }
+ for (i2 = i - k2; i2 <= i + k2 && flag; ++i2) {
+ for (int l2 = k - k2; l2 <= k + k2 && flag; ++l2) {
+ if (l1 >= 0 && l1 < world.getHeight()) { // CraftBukkit
+ j2 = world.getTypeId(i2, l1, l2);
+ if (j2 != 0 && j2 != Block.LEAVES.id) {
+ flag = false;
}
-
+ } else {
flag = false;
}
}
}
+ }
- if (!flag) {
+ if (!flag) {
+ return false;
+ } else {
+ l1 = world.getTypeId(i, j - 1, k);
+ if ((l1 == Block.GRASS.id || l1 == Block.DIRT.id) && j < world.getHeight() - l - 1) { // CraftBukkit
+ 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)]) {
+ this.a(world, 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) {
+ this.a(world, i, j + j3, k, Block.LOG.id, 1);
+ }
+ }
+
+ return true;
+ } else {
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;
}
}
diff --git a/src/main/java/net/minecraft/server/WorldGenTrees.java b/src/main/java/net/minecraft/server/WorldGenTrees.java
index 021560fc33..15450e410f 100644
--- a/src/main/java/net/minecraft/server/WorldGenTrees.java
+++ b/src/main/java/net/minecraft/server/WorldGenTrees.java
@@ -6,7 +6,9 @@ import org.bukkit.BlockChangeDelegate; // CraftBukkit
public class WorldGenTrees extends WorldGenerator {
- public WorldGenTrees() {}
+ public WorldGenTrees(boolean flag) {
+ super(flag);
+ }
public boolean a(World world, Random random, int i, int j, int k) {
// CraftBukkit start
@@ -22,89 +24,77 @@ public class WorldGenTrees extends WorldGenerator {
int l = random.nextInt(3) + 4;
boolean flag = true;
- if (j >= 1) {
- int k1000 = j + l + 1;
+ if (j >= 1 && j + l + 1 <= world.getHeight()) { // CraftBukkit
+ int i1;
+ int j1;
+ int k1;
+ int l1;
- world.getClass();
- if (k1000 <= 128) {
- int j1;
- int k1;
- int l1;
- int i2;
+ for (i1 = j; i1 <= j + 1 + l; ++i1) {
+ byte b0 = 1;
- for (j1 = j; j1 <= j + 1 + l; ++j1) {
- byte b0 = 1;
+ if (i1 == j) {
+ b0 = 0;
+ }
- if (j1 == j) {
- b0 = 0;
- }
+ if (i1 >= j + 1 + l - 2) {
+ b0 = 2;
+ }
- 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;
- }
+ for (j1 = i - b0; j1 <= i + b0 && flag; ++j1) {
+ for (k1 = k - b0; k1 <= k + b0 && flag; ++k1) {
+ if (i1 >= 0 && i1 < world.getHeight()) { // CraftBukkit
+ l1 = world.getTypeId(j1, i1, k1);
+ if (l1 != 0 && l1 != Block.LEAVES.id) {
+ flag = false;
}
-
+ } else {
flag = false;
}
}
}
+ }
- if (!flag) {
- return false;
- }
+ if (!flag) {
+ return false;
+ } else {
+ i1 = world.getTypeId(i, j - 1, k);
+ if ((i1 == Block.GRASS.id || i1 == Block.DIRT.id) && j < world.getHeight() - l - 1) { // CraftBukkit
+ world.setRawTypeId(i, j - 1, k, Block.DIRT.id);
- 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);
+ int i2;
- int j2;
+ for (i2 = j - 3 + l; i2 <= j + l; ++i2) {
+ j1 = i2 - (j + l);
+ k1 = 1 - j1 / 2;
- for (j2 = j - 3 + l; j2 <= j + l; ++j2) {
- k1 = j2 - (j + l);
- l1 = 1 - k1 / 2;
+ for (l1 = i - k1; l1 <= i + k1; ++l1) {
+ int j2 = l1 - i;
- for (i2 = i - l1; i2 <= i + l1; ++i2) {
- int k2 = i2 - i;
+ for (int k2 = k - k1; k2 <= k + k1; ++k2) {
+ int l2 = k2 - k;
- 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);
- }
+ if ((Math.abs(j2) != k1 || Math.abs(l2) != k1 || random.nextInt(2) != 0 && j1 != 0) && !Block.o[world.getTypeId(l1, i2, k2)]) {
+ this.a(world, l1, i2, k2, Block.LEAVES.id, 0);
}
}
}
-
- 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;
}
+
+ for (i2 = 0; i2 < l; ++i2) {
+ j1 = world.getTypeId(i, j + i2, k);
+ if (j1 == 0 || j1 == Block.LEAVES.id) {
+ this.a(world, i, j + i2, k, Block.LOG.id, 0);
+ }
+ }
+
+ return true;
+ } else {
+ return false;
}
-
- return false;
}
+ } else {
+ return false;
}
-
- return false;
}
}
diff --git a/src/main/java/net/minecraft/server/WorldGenerator.java b/src/main/java/net/minecraft/server/WorldGenerator.java
new file mode 100644
index 0000000000..7ed5f7e804
--- /dev/null
+++ b/src/main/java/net/minecraft/server/WorldGenerator.java
@@ -0,0 +1,31 @@
+package net.minecraft.server;
+
+import java.util.Random;
+
+import org.bukkit.BlockChangeDelegate; // CraftBukkit
+
+public abstract class WorldGenerator {
+
+ private final boolean a;
+
+ public WorldGenerator() {
+ this.a = false;
+ }
+
+ public WorldGenerator(boolean flag) {
+ this.a = flag;
+ }
+
+ public abstract boolean a(World world, Random random, int i, int j, int k);
+
+ public void a(double d0, double d1, double d2) {}
+
+ // CraftBukkit -- change signature
+ protected void a(BlockChangeDelegate world, int i, int j, int k, int l, int i1) {
+ if (this.a) {
+ ((World) world).setTypeIdAndData(i, j, k, l, i1); // CraftBukkit -- force-cast to world to get it working
+ } else {
+ world.setRawTypeIdAndData(i, j, k, l, i1);
+ }
+ }
+}
diff --git a/src/main/java/net/minecraft/server/WorldMap.java b/src/main/java/net/minecraft/server/WorldMap.java
index 4e93ed3a27..344f954aad 100644
--- a/src/main/java/net/minecraft/server/WorldMap.java
+++ b/src/main/java/net/minecraft/server/WorldMap.java
@@ -42,7 +42,7 @@ public class WorldMap extends WorldMapBase {
public void a(NBTTagCompound nbttagcompound) {
// CraftBukkit start
- byte dimension = nbttagcompound.c("dimension");
+ byte dimension = nbttagcompound.d("dimension");
if (dimension >= 10) {
long least = nbttagcompound.getLong("UUIDLeast");
@@ -65,9 +65,9 @@ public class WorldMap extends WorldMapBase {
this.map = dimension;
// CraftBukkit end
- this.b = nbttagcompound.e("xCenter");
- this.c = nbttagcompound.e("zCenter");
- this.e = nbttagcompound.c("scale");
+ this.b = nbttagcompound.f("xCenter");
+ this.c = nbttagcompound.f("zCenter");
+ this.e = nbttagcompound.d("scale");
if (this.e < 0) {
this.e = 0;
}
@@ -76,13 +76,13 @@ public class WorldMap extends WorldMapBase {
this.e = 4;
}
- short short1 = nbttagcompound.d("width");
- short short2 = nbttagcompound.d("height");
+ short short1 = nbttagcompound.e("width");
+ short short2 = nbttagcompound.e("height");
if (short1 == 128 && short2 == 128) {
- this.f = nbttagcompound.j("colors");
+ this.f = nbttagcompound.k("colors");
} else {
- byte[] abyte = nbttagcompound.j("colors");
+ byte[] abyte = nbttagcompound.k("colors");
this.f = new byte[16384];
int i = (128 - short1) / 2;
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index add4647d4a..66b1cb3878 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -20,7 +20,7 @@ public class WorldServer extends World implements BlockChangeDelegate {
public boolean weirdIsOpCache = false;
public boolean savingDisabled;
public final MinecraftServer server; // CraftBukkit - private -> public final
- private EntityList Q = new EntityList();
+ private EntityList N = new EntityList();
// CraftBukkit start - change signature
public WorldServer(MinecraftServer minecraftserver, IDataManager idatamanager, String s, int i, WorldSettings worldsettings, org.bukkit.World.Environment env, ChunkGenerator gen) {
@@ -159,16 +159,30 @@ public class WorldServer extends World implements BlockChangeDelegate {
protected void c(Entity entity) {
super.c(entity);
- this.Q.a(entity.id, entity);
+ this.N.a(entity.id, entity);
+ Entity[] aentity = entity.aG();
+
+ if (aentity != null) {
+ for (int i = 0; i < aentity.length; ++i) {
+ this.N.a(aentity[i].id, aentity[i]);
+ }
+ }
}
protected void d(Entity entity) {
super.d(entity);
- this.Q.d(entity.id);
+ this.N.d(entity.id);
+ Entity[] aentity = entity.aG();
+
+ if (aentity != null) {
+ for (int i = 0; i < aentity.length; ++i) {
+ this.N.d(aentity[i].id);
+ }
+ }
}
public Entity getEntity(int i) {
- return (Entity) this.Q.a(i);
+ return (Entity) this.N.a(i);
}
public boolean strikeLightning(Entity entity) {
@@ -224,11 +238,11 @@ public class WorldServer extends World implements BlockChangeDelegate {
this.B.e();
}
- protected void h() {
- boolean flag = this.u();
+ protected void i() {
+ boolean flag = this.w();
- super.h();
- if (flag != this.u()) {
+ super.i();
+ if (flag != this.w()) {
// CraftBukkit start - only sending weather packets to those affected
for (int i = 0; i < this.players.size(); ++i) {
if (((EntityPlayer) this.players.get(i)).world == this) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 8b2c93e225..cfa8009026 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -82,7 +82,6 @@ import org.yaml.snakeyaml.error.MarkedYAMLException;
public final class CraftServer implements Server {
private final String serverName = "Craftbukkit";
private final String serverVersion;
- private final String protocolVersion = "1.8.1";
private final String bukkitVersion = Versioning.getBukkitVersion();
private final ServicesManager servicesManager = new SimpleServicesManager();
private final BukkitScheduler scheduler = new CraftScheduler(this);
@@ -105,7 +104,7 @@ public final class CraftServer implements Server {
this.serverVersion = CraftServer.class.getPackage().getImplementationVersion();
Bukkit.setServer(this);
-
+
if (!Main.useConsole) {
getLogger().info("Console input is disabled due to --noconsole command argument");
}
@@ -114,17 +113,17 @@ public final class CraftServer implements Server {
configuration.options().copyDefaults(true);
configuration.setDefaults(YamlConfiguration.loadConfiguration(getClass().getClassLoader().getResourceAsStream("configurations/bukkit.yml")));
saveConfig();
-
+
loadPlugins();
enablePlugins(PluginLoadOrder.STARTUP);
ChunkCompressionThread.startThread();
}
-
+
private File getConfigFile() {
return (File)console.options.valueOf("bukkit-settings");
}
-
+
private void saveConfig() {
try {
configuration.save(getConfigFile());
@@ -195,9 +194,9 @@ public final class CraftServer implements Server {
}
public String getVersion() {
- return serverVersion + " (MC: " + protocolVersion + ")";
+ return serverVersion + " (MC: " + console.getVersion() + ")";
}
-
+
public String getBukkitVersion() {
return bukkitVersion;
}
@@ -471,7 +470,7 @@ public final class CraftServer implements Server {
@Override
public String toString() {
- return "CraftServer{" + "serverName=" + serverName + ",serverVersion=" + serverVersion + ",protocolVersion=" + protocolVersion + '}';
+ return "CraftServer{" + "serverName=" + serverName + ",serverVersion=" + serverVersion + ",minecraftVersion=" + console.getVersion() + '}';
}
public World createWorld(String name, World.Environment environment) {
@@ -519,7 +518,8 @@ public final class CraftServer implements Server {
}
int dimension = 10 + console.worlds.size();
- WorldServer internal = new WorldServer(console, new ServerNBTManager(getWorldContainer(), name, true), name, dimension, new WorldSettings(creator.seed(), getDefaultGameMode().getValue(), true), creator.environment(), generator);
+ boolean hardcore = false;
+ WorldServer internal = new WorldServer(console, new ServerNBTManager(getWorldContainer(), name, true), name, dimension, new WorldSettings(creator.seed(), getDefaultGameMode().getValue(), true, hardcore), creator.environment(), generator);
if (!(worlds.containsKey(name.toLowerCase()))) {
return null;
@@ -908,7 +908,7 @@ public final class CraftServer implements Server {
}
}
}
-
+
public File getWorldContainer() {
return new File(configuration.getString("settings.world-container", "."));
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index a8ce667a5d..c02697b76e 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -353,16 +353,16 @@ public class CraftWorld implements World {
public boolean generateTree(Location loc, TreeType type, BlockChangeDelegate delegate) {
switch (type) {
case BIG_TREE:
- return new WorldGenBigTree().generate(delegate, rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
+ return new WorldGenBigTree(false).generate(delegate, rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
case BIRCH:
- return new WorldGenForest().generate(delegate, rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
+ return new WorldGenForest(false).generate(delegate, rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
case REDWOOD:
- return new WorldGenTaiga2().generate(delegate, rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
+ return new WorldGenTaiga2(false).generate(delegate, rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
case TALL_REDWOOD:
return new WorldGenTaiga1().generate(delegate, rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
case TREE:
default:
- return new WorldGenTrees().generate(delegate, rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
+ return new WorldGenTrees(false).generate(delegate, rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
}
}
@@ -677,8 +677,12 @@ public class CraftWorld implements World {
}
}
- @SuppressWarnings("unchecked")
public T spawn(Location location, Class clazz) throws IllegalArgumentException {
+ return spawn(location, clazz, SpawnReason.CUSTOM);
+ }
+
+ @SuppressWarnings("unchecked")
+ public T spawn(Location location, Class clazz, SpawnReason reason) throws IllegalArgumentException {
if (location == null || clazz == null) {
throw new IllegalArgumentException("Location or entity class cannot be null");
}
@@ -694,19 +698,26 @@ public class CraftWorld implements World {
// order is important for some of these
if (Boat.class.isAssignableFrom(clazz)) {
entity = new EntityBoat(world, x, y, z);
- } else if (Egg.class.isAssignableFrom(clazz)) {
- entity = new EntityEgg(world, x, y, z);
} else if (FallingSand.class.isAssignableFrom(clazz)) {
entity = new EntityFallingSand(world, x, y, z, 0, 0);
} else if (Fireball.class.isAssignableFrom(clazz)) {
- entity = new EntityFireball(world);
+ if (SmallFireball.class.isAssignableFrom(clazz)) {
+ entity = new EntitySmallFireball(world);
+ } else {
+ entity = new EntityFireball(world);
+ }
((EntityFireball) entity).setPositionRotation(x, y, z, yaw, pitch);
Vector direction = location.getDirection().multiply(10);
((EntityFireball) entity).setDirection(direction.getX(), direction.getY(), direction.getZ());
- } else if (Snowball.class.isAssignableFrom(clazz)) {
- entity = new EntitySnowball(world, x, y, z);
+ } else if (Projectile.class.isAssignableFrom(clazz)) {
+ if (Snowball.class.isAssignableFrom(clazz)) {
+ entity = new EntitySnowball(world, x, y, z);
+ } else if (Egg.class.isAssignableFrom(clazz)) {
+ entity = new EntityEgg(world, x, y, z);
+ } else if (EnderPearl.class.isAssignableFrom(clazz)) {
+ entity = new EntityEnderPearl(world, x, y, z);
+ }
} else if (Minecart.class.isAssignableFrom(clazz)) {
-
if (PoweredMinecart.class.isAssignableFrom(clazz)) {
entity = new EntityMinecart(world, x, y, z, CraftMinecart.Type.PoweredMinecart.getId());
} else if (StorageMinecart.class.isAssignableFrom(clazz)) {
@@ -714,16 +725,22 @@ public class CraftWorld implements World {
} else {
entity = new EntityMinecart(world, x, y, z, CraftMinecart.Type.Minecart.getId());
}
-
} else if (Arrow.class.isAssignableFrom(clazz)) {
entity = new EntityArrow(world);
entity.setPositionRotation(x, y, z, 0, 0);
+ } else if (EnderSignal.class.isAssignableFrom(clazz)) {
+ entity = new EntityEnderSignal(world, x, y, z);
} else if (LivingEntity.class.isAssignableFrom(clazz)) {
-
if (Chicken.class.isAssignableFrom(clazz)) {
entity = new EntityChicken(world);
} else if (Cow.class.isAssignableFrom(clazz)) {
- entity = new EntityCow(world);
+ if (MushroomCow.class.isAssignableFrom(clazz)) {
+ entity = new EntityMushroomCow(world);
+ } else {
+ entity = new EntityCow(world);
+ }
+ } else if (Snowman.class.isAssignableFrom(clazz)) {
+ entity = new EntitySnowman(world);
} else if (Creeper.class.isAssignableFrom(clazz)) {
entity = new EntityCreeper(world);
} else if (Ghast.class.isAssignableFrom(clazz)) {
@@ -739,13 +756,11 @@ public class CraftWorld implements World {
} else if (Slime.class.isAssignableFrom(clazz)) {
entity = new EntitySlime(world);
} else if (Spider.class.isAssignableFrom(clazz)) {
-
if (CaveSpider.class.isAssignableFrom(clazz)) {
entity = new EntityCaveSpider(world);
} else {
entity = new EntitySpider(world);
}
-
} else if (Squid.class.isAssignableFrom(clazz)) {
entity = new EntitySquid(world);
} else if (Wolf.class.isAssignableFrom(clazz)) {
@@ -758,12 +773,19 @@ public class CraftWorld implements World {
entity = new EntitySilverfish(world);
} else if (Enderman.class.isAssignableFrom(clazz)) {
entity = new EntityEnderman(world);
+ } else if (Blaze.class.isAssignableFrom(clazz)) {
+ entity = new EntityBlaze(world);
+ } else if (Villager.class.isAssignableFrom(clazz)) {
+ entity = new EntityVillager(world);
+ } else if (ComplexLivingEntity.class.isAssignableFrom(clazz)) {
+ if (EnderDragon.class.isAssignableFrom(clazz)) {
+ entity = new EntityEnderDragon(world);
+ }
}
if (entity != null) {
entity.setLocation(x, y, z, pitch, yaw);
}
-
} else if (Painting.class.isAssignableFrom(clazz)) {
Block block = getBlockAt(location);
BlockFace face = BlockFace.SELF;
@@ -778,22 +800,22 @@ public class CraftWorld implements World {
}
int dir;
switch(face) {
- case EAST:
- default:
- dir = 0;
- break;
- case NORTH:
- dir = 1;
- break;
- case WEST:
- dir = 2;
- break;
- case SOUTH:
- dir = 3;;
- break;
+ case EAST:
+ default:
+ dir = 0;
+ break;
+ case NORTH:
+ dir = 1;
+ break;
+ case WEST:
+ dir = 2;
+ break;
+ case SOUTH:
+ dir = 3;;
+ break;
}
entity = new EntityPainting(world, (int) x, (int) y, (int) z, dir);
- if (!((EntityPainting)entity).i()) {
+ if (!((EntityPainting) entity).j()) {
entity = null;
}
} else if (TNTPrimed.class.isAssignableFrom(clazz)) {
@@ -812,7 +834,7 @@ public class CraftWorld implements World {
}
if (entity != null) {
- world.addEntity(entity);
+ world.addEntity(entity, reason);
return (T) entity.getBukkitEntity();
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java
new file mode 100644
index 0000000000..94e03c5bcf
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java
@@ -0,0 +1,11 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.EntityMonster;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.Blaze;
+
+public class CraftBlaze extends CraftMonster implements Blaze {
+ public CraftBlaze(CraftServer server, EntityMonster entity) {
+ super(server, entity);
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexLivingEntity.java
new file mode 100644
index 0000000000..a0c8d7e7d4
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexLivingEntity.java
@@ -0,0 +1,17 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.EntityComplex;
+import net.minecraft.server.EntityLiving;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.ComplexLivingEntity;
+
+public abstract class CraftComplexLivingEntity extends CraftLivingEntity implements ComplexLivingEntity {
+ public CraftComplexLivingEntity(CraftServer server, EntityLiving entity) {
+ super(server, entity);
+ }
+
+ @Override
+ public EntityComplex getHandle() {
+ return (EntityComplex)super.getHandle();
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java
new file mode 100644
index 0000000000..fc5264b5af
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java
@@ -0,0 +1,22 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.Entity;
+import net.minecraft.server.EntityComplexPart;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.ComplexEntityPart;
+import org.bukkit.entity.ComplexLivingEntity;
+
+public class CraftComplexPart extends CraftEntity implements ComplexEntityPart {
+ public CraftComplexPart(CraftServer server, Entity entity) {
+ super(server, entity);
+ }
+
+ public ComplexLivingEntity getParent() {
+ return (ComplexLivingEntity)getHandle().a.getBukkitEntity();
+ }
+
+ @Override
+ public EntityComplexPart getHandle() {
+ return (EntityComplexPart)super.getHandle();
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java
index 215a8f2b75..2af6781663 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java
@@ -1,14 +1,10 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityEgg;
-import net.minecraft.server.EntityLiving;
-
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.Egg;
-import org.bukkit.entity.LivingEntity;
-
-public class CraftEgg extends AbstractProjectile implements Egg {
+public class CraftEgg extends CraftProjectile implements Egg {
public CraftEgg(CraftServer server, EntityEgg entity) {
super(server, entity);
}
@@ -17,19 +13,4 @@ public class CraftEgg extends AbstractProjectile implements Egg {
public String toString() {
return "CraftEgg";
}
-
- public LivingEntity getShooter() {
- if (((EntityEgg) getHandle()).thrower != null) {
- return (LivingEntity) ((EntityEgg) getHandle()).thrower.getBukkitEntity();
- }
-
- return null;
-
- }
-
- public void setShooter(LivingEntity shooter) {
- if (shooter instanceof CraftLivingEntity) {
- ((EntityEgg) getHandle()).thrower = (EntityLiving) ((CraftLivingEntity) shooter).entity;
- }
- }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java
new file mode 100644
index 0000000000..320d17dd99
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.entity;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSet.Builder;
+import java.util.Set;
+import net.minecraft.server.EntityComplexPart;
+import net.minecraft.server.EntityEnderDragon;
+import net.minecraft.server.EntityLiving;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.ComplexEntityPart;
+import org.bukkit.entity.EnderDragon;
+
+public class CraftEnderDragon extends CraftComplexLivingEntity implements EnderDragon {
+ public CraftEnderDragon(CraftServer server, EntityLiving entity) {
+ super(server, entity);
+ }
+
+ public Set getParts() {
+ Builder builder = ImmutableSet.builder();
+
+ for (EntityComplexPart part : getHandle().f) {
+ builder.add((ComplexEntityPart)part.getBukkitEntity());
+ }
+
+ return builder.build();
+ }
+
+ @Override
+ public EntityEnderDragon getHandle() {
+ return (EntityEnderDragon)super.getHandle();
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java
new file mode 100644
index 0000000000..10d77a2cd2
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java
@@ -0,0 +1,17 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.Entity;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.EnderDragon;
+import org.bukkit.entity.EnderDragonPart;
+
+public class CraftEnderDragonPart extends CraftComplexPart implements EnderDragonPart {
+ public CraftEnderDragonPart(CraftServer server, Entity entity) {
+ super(server, entity);
+ }
+
+ @Override
+ public EnderDragon getParent() {
+ return (EnderDragon)super.getParent();
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java
new file mode 100644
index 0000000000..4b42c10203
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java
@@ -0,0 +1,16 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.Entity;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.EnderPearl;
+
+public class CraftEnderPearl extends CraftProjectile implements EnderPearl {
+ public CraftEnderPearl(CraftServer server, Entity entity) {
+ super(server, entity);
+ }
+
+ @Override
+ public String toString() {
+ return "CraftEnderPearl";
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java
new file mode 100644
index 0000000000..6627dd0663
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java
@@ -0,0 +1,16 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.Entity;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.EnderSignal;
+
+public class CraftEnderSignal extends CraftEntity implements EnderSignal {
+ public CraftEnderSignal(CraftServer server, Entity entity) {
+ super(server, entity);
+ }
+
+ @Override
+ public String toString() {
+ return "CraftEnderSignal";
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 0651ed600d..9827d97f9f 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -41,7 +41,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
// Animals
if (entity instanceof EntityAnimal) {
if (entity instanceof EntityChicken) { return new CraftChicken(server, (EntityChicken) entity); }
- else if (entity instanceof EntityCow) { return new CraftCow(server, (EntityCow) entity); }
+ else if (entity instanceof EntityCow) {
+ if (entity instanceof EntityMushroomCow) { return new CraftMushroomCow(server, (EntityMushroomCow) entity); }
+ else { return new CraftCow(server, (EntityCow) entity); }
+ }
else if (entity instanceof EntityPig) { return new CraftPig(server, (EntityPig) entity); }
else if (entity instanceof EntityWolf) { return new CraftWolf(server, (EntityWolf) entity); }
else if (entity instanceof EntitySheep) { return new CraftSheep(server, (EntitySheep) entity); }
@@ -58,6 +61,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
else if (entity instanceof EntitySilverfish) { return new CraftSilverfish(server, (EntitySilverfish) entity); }
else if (entity instanceof EntityGiantZombie) { return new CraftGiant(server, (EntityGiantZombie) entity); }
else if (entity instanceof EntitySkeleton) { return new CraftSkeleton(server, (EntitySkeleton) entity); }
+ else if (entity instanceof EntityBlaze) { return new CraftBlaze(server, (EntityBlaze) entity); }
else if (entity instanceof EntitySpider) {
if (entity instanceof EntityCaveSpider) { return new CraftCaveSpider(server, (EntityCaveSpider) entity); }
else { return new CraftSpider(server, (EntitySpider) entity); }
@@ -70,6 +74,8 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
if (entity instanceof EntitySquid) { return new CraftSquid(server, (EntitySquid) entity); }
else { return new CraftWaterMob(server, (EntityWaterAnimal) entity); }
}
+ else if (entity instanceof EntitySnowman) { return new CraftSnowman(server, (EntityCreature) entity); }
+ else if (entity instanceof EntityVillager) { return new CraftVillager(server, (EntityVillager) entity); }
else { return new CraftCreature(server, (EntityCreature) entity); }
}
// Slimes are a special (and broken) case
@@ -79,14 +85,31 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
if (entity instanceof EntityGhast) { return new CraftGhast(server, (EntityGhast) entity); }
else { return new CraftFlying(server, (EntityFlying) entity); }
}
+ else if (entity instanceof EntityComplex) {
+ if (entity instanceof EntityEnderDragon) { return new CraftEnderDragon(server, (EntityEnderDragon) entity); }
+ }
else { return new CraftLivingEntity(server, (EntityLiving) entity); }
}
+ else if (entity instanceof EntityComplexPart) {
+ EntityComplexPart part = (EntityComplexPart)entity;
+ if (part.a instanceof EntityEnderDragon) { return new CraftEnderDragonPart(server, (EntityComplexPart)entity); }
+ else { return new CraftComplexPart(server, (EntityComplexPart) entity); }
+ }
else if (entity instanceof EntityExperienceOrb) { return new CraftExperienceOrb(server, (EntityExperienceOrb) entity); }
else if (entity instanceof EntityArrow) { return new CraftArrow(server, (EntityArrow) entity); }
else if (entity instanceof EntityBoat) { return new CraftBoat(server, (EntityBoat) entity); }
- else if (entity instanceof EntityEgg) { return new CraftEgg(server, (EntityEgg) entity); }
+ else if (entity instanceof EntityProjectile) {
+ if (entity instanceof EntityEgg) { return new CraftEgg(server, (EntityEgg) entity); }
+ else if (entity instanceof EntitySnowball) { return new CraftSnowball(server, (EntitySnowball) entity); }
+ else if (entity instanceof EntityPotion) { return new CraftThrownPotion(server, (EntityPotion) entity); }
+ else if (entity instanceof EntityEnderPearl) { return new CraftEnderPearl(server, (EntityEnderPearl) entity); }
+ }
else if (entity instanceof EntityFallingSand) { return new CraftFallingSand(server, (EntityFallingSand) entity); }
- else if (entity instanceof EntityFireball) { return new CraftFireball(server, (EntityFireball) entity); }
+ else if (entity instanceof EntityFireball) {
+ if (entity instanceof EntitySmallFireball) { return new CraftSmallFireball(server, (EntitySmallFireball) entity); }
+ else { return new CraftFireball(server, (EntityFireball) entity); }
+ }
+ else if (entity instanceof EntityEnderSignal) { return new CraftEnderSignal(server, (EntityEnderSignal) entity); }
else if (entity instanceof EntityFishingHook) { return new CraftFish(server, (EntityFishingHook) entity); }
else if (entity instanceof EntityItem) { return new CraftItem(server, (EntityItem) entity); }
else if (entity instanceof EntityWeather) {
@@ -107,9 +130,9 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
}
else if (entity instanceof EntityPainting) { return new CraftPainting(server, (EntityPainting) entity); }
- else if (entity instanceof EntitySnowball) { return new CraftSnowball(server, (EntitySnowball) entity); }
else if (entity instanceof EntityTNTPrimed) { return new CraftTNTPrimed(server, (EntityTNTPrimed) entity); }
- else throw new IllegalArgumentException("Unknown entity");
+
+ throw new IllegalArgumentException("Unknown entity");
}
public Location getLocation() {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
index 63e1d1b959..6d7d3f2100 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -32,19 +32,23 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
}
public int getHealth() {
- return getHandle().health;
+ return getHandle().getHealth();
}
public void setHealth(int health) {
- if ((health < 0) || (health > 200)) {
- throw new IllegalArgumentException("Health must be between 0 and 200");
+ if ((health < 0) || (health > getMaxHealth())) {
+ throw new IllegalArgumentException("Health must be between 0 and " + getMaxHealth());
}
if (entity instanceof EntityPlayer && health == 0) {
((EntityPlayer) entity).die(DamageSource.GENERIC);
}
- getHandle().health = health;
+ getHandle().setHealth(health);
+ }
+
+ public int getMaxHealth() {
+ return getHandle().getMaxHealth();
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
index 35ba962b43..8381aeae9d 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
@@ -34,11 +34,11 @@ public class CraftMinecart extends CraftVehicle implements Minecart {
}
public void setDamage(int damage) {
- minecart.damage = damage;
+ minecart.setDamage(damage);
}
public int getDamage() {
- return minecart.damage;
+ return minecart.getDamage();
}
public double getMaxSpeed() {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java
new file mode 100644
index 0000000000..2a076f2976
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java
@@ -0,0 +1,11 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.EntityCow;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.MushroomCow;
+
+public class CraftMushroomCow extends CraftCow implements MushroomCow {
+ public CraftMushroomCow(CraftServer server, EntityCow entity) {
+ super(server, entity);
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
index 763a284f90..9a37c5ff18 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
@@ -40,12 +40,12 @@ public class CraftPainting extends CraftEntity implements Painting {
}
public boolean setArt(Art art, boolean force) {
- EntityPainting painting = getHandle();
+ EntityPainting painting = this.getHandle();
EnumArt oldArt = painting.e;
EnumArt newArt = CraftArt.BukkitToNotch(art);
painting.e = newArt;
painting.b(painting.a);
- if(!force && !painting.i()) {
+ if (!force && !painting.j()) {
// Revert painting since it doesn't fit
painting.e = oldArt;
painting.b(painting.a);
@@ -70,7 +70,7 @@ public class CraftPainting extends CraftEntity implements Painting {
painting.b = block.getX();
painting.c = block.getY();
painting.d = block.getZ();
- switch(face) {
+ switch (face) {
case EAST:
default:
getHandle().b(0);
@@ -85,7 +85,7 @@ public class CraftPainting extends CraftEntity implements Painting {
getHandle().b(3);
break;
}
- if(!force && !painting.i()) {
+ if (!force && !painting.j()) {
// Revert painting since it doesn't fit
painting.b = x;
painting.c = y;
@@ -98,7 +98,7 @@ public class CraftPainting extends CraftEntity implements Painting {
}
public BlockFace getFacing() {
- switch(getHandle().a) {
+ switch (this.getHandle().a) {
case 0:
default:
return BlockFace.EAST;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 305d72a76e..c6bb18bd1b 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -489,7 +489,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
public int getLevel() {
- return getHandle().expLevel;
+ return (int)getHandle().expLevel;
}
public void setLevel(int level) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java
new file mode 100644
index 0000000000..240b9e9466
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java
@@ -0,0 +1,32 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.EntityLiving;
+import net.minecraft.server.EntityProjectile;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Projectile;
+
+public abstract class CraftProjectile extends AbstractProjectile implements Projectile {
+ public CraftProjectile(CraftServer server, net.minecraft.server.Entity entity) {
+ super(server, entity);
+ }
+
+ public LivingEntity getShooter() {
+ if (getHandle().shooter instanceof EntityLiving) {
+ return (LivingEntity)getHandle().shooter.getBukkitEntity();
+ }
+
+ return null;
+ }
+
+ public void setShooter(LivingEntity shooter) {
+ if (shooter instanceof CraftLivingEntity) {
+ getHandle().shooter = (EntityLiving)((CraftLivingEntity)shooter).entity;
+ }
+ }
+
+ @Override
+ public EntityProjectile getHandle() {
+ return (EntityProjectile)entity;
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java
new file mode 100644
index 0000000000..4677502435
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java
@@ -0,0 +1,12 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.EntityFireball;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.SmallFireball;
+
+public class CraftSmallFireball extends CraftFireball implements SmallFireball {
+ public CraftSmallFireball(CraftServer server, EntityFireball entity) {
+ super(server, entity);
+ }
+
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java
index 4120ac400b..cb52b2dc6f 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java
@@ -1,13 +1,10 @@
package org.bukkit.craftbukkit.entity;
-import net.minecraft.server.EntityLiving;
import net.minecraft.server.EntitySnowball;
-
import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Snowball;
-public class CraftSnowball extends AbstractProjectile implements Snowball {
+public class CraftSnowball extends CraftProjectile implements Snowball {
public CraftSnowball(CraftServer server, EntitySnowball entity) {
super(server, entity);
}
@@ -16,18 +13,4 @@ public class CraftSnowball extends AbstractProjectile implements Snowball {
public String toString() {
return "CraftSnowball";
}
-
- public LivingEntity getShooter() {
- if (((EntitySnowball) getHandle()).shooter != null) {
- return (LivingEntity) ((EntitySnowball) getHandle()).shooter.getBukkitEntity();
- }
-
- return null;
- }
-
- public void setShooter(LivingEntity shooter) {
- if (shooter instanceof CraftLivingEntity) {
- ((EntitySnowball) getHandle()).shooter = (EntityLiving) ((CraftLivingEntity) shooter).entity;
- }
- }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
new file mode 100644
index 0000000000..acfc05215c
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
@@ -0,0 +1,11 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.EntityCreature;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.Snowman;
+
+public class CraftSnowman extends CraftCreature implements Snowman {
+ public CraftSnowman(CraftServer server, EntityCreature entity) {
+ super(server, entity);
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
new file mode 100644
index 0000000000..3faf054160
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
@@ -0,0 +1,16 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.Entity;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.ThrownPotion;
+
+public class CraftThrownPotion extends CraftProjectile implements ThrownPotion {
+ public CraftThrownPotion(CraftServer server, Entity entity) {
+ super(server, entity);
+ }
+
+ @Override
+ public String toString() {
+ return "CraftThrownPotion";
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
new file mode 100644
index 0000000000..541bee77ab
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
@@ -0,0 +1,17 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.EntityCreature;
+import net.minecraft.server.EntityVillager;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.Villager;
+
+public class CraftVillager extends CraftCreature implements Villager {
+ public CraftVillager(CraftServer server, EntityCreature entity) {
+ super(server, entity);
+ }
+
+ @Override
+ public EntityVillager getHandle() {
+ return (EntityVillager)super.getHandle();
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java b/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java
index 573710fdd8..1f47e189e4 100644
--- a/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java
+++ b/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java
@@ -2,10 +2,16 @@ package org.bukkit.craftbukkit.generator;
import java.util.List;
import java.util.Random;
+import net.minecraft.server.BiomeBase;
import net.minecraft.server.Chunk;
+import net.minecraft.server.ChunkCoordIntPair;
+import net.minecraft.server.ChunkPosition;
+import net.minecraft.server.EnumCreatureType;
import net.minecraft.server.IChunkProvider;
import net.minecraft.server.IProgressUpdate;
import net.minecraft.server.World;
+import net.minecraft.server.WorldChunkManager;
+import net.minecraft.server.WorldGenStronghold;
import net.minecraft.server.WorldServer;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
@@ -14,6 +20,7 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
private final ChunkGenerator generator;
private final WorldServer world;
private final Random random;
+ private final WorldGenStronghold strongholdGen = new WorldGenStronghold();
public CustomChunkGenerator(World world, long seed, ChunkGenerator generator) {
this.world = (WorldServer) world;
@@ -61,11 +68,29 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
return getOrCreateChunk(x, z);
}
+ @Override
public boolean canSpawn(org.bukkit.World world, int x, int z) {
return generator.canSpawn(world, x, z);
}
+ @Override
public List getDefaultPopulators(org.bukkit.World world) {
return generator.getDefaultPopulators(world);
}
+
+ public List a(EnumCreatureType type, int x, int y, int z) {
+ WorldChunkManager worldchunkmanager = world.getWorldChunkManager();
+
+ if (worldchunkmanager == null) {
+ return null;
+ } else {
+ BiomeBase biomebase = worldchunkmanager.a(new ChunkCoordIntPair(x >> 4, z >> 4));
+
+ return biomebase == null ? null : biomebase.a(type);
+ }
+ }
+
+ public ChunkPosition a(World world, String type, int x, int y, int z) {
+ return "Stronghold".equals(type) && this.strongholdGen != null ? this.strongholdGen.a(world, x, y, z) : null;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java b/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java
index c67e546bed..ffbb37de03 100644
--- a/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java
+++ b/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java
@@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import net.minecraft.server.Chunk;
+import net.minecraft.server.ChunkPosition;
+import net.minecraft.server.EnumCreatureType;
import net.minecraft.server.IChunkProvider;
import net.minecraft.server.IProgressUpdate;
import net.minecraft.server.World;
@@ -56,4 +58,12 @@ public class NormalChunkGenerator extends InternalChunkGenerator {
public boolean canSave() {
return provider.canSave();
}
+
+ public List a(EnumCreatureType ect, int i, int i1, int i2) {
+ return provider.a(ect, i, i1, i2);
+ }
+
+ public ChunkPosition a(World world, String string, int i, int i1, int i2) {
+ return provider.a(world, string, i, i1, i2);
+ }
}