geforkt von Mirrors/Paper
8022d678b3
Thanks to Byteflux for all the PRs you see below bringing 1.8 PaperSpigot that much closer to feature parity with it's 1.7 branch
146 Zeilen
7.9 KiB
Diff
146 Zeilen
7.9 KiB
Diff
From e798133865d1748942c87c62b7025570ddde9f1f Mon Sep 17 00:00:00 2001
|
|
From: Byteflux <byte@byteflux.net>
|
|
Date: Fri, 17 Apr 2015 02:26:14 -0700
|
|
Subject: [PATCH] Add FallingBlock source location API
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockDragonEgg.java b/src/main/java/net/minecraft/server/BlockDragonEgg.java
|
|
index de7ac6f..76a6272 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockDragonEgg.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockDragonEgg.java
|
|
@@ -28,7 +28,10 @@ public class BlockDragonEgg extends Block {
|
|
byte b0 = 32;
|
|
|
|
if (!BlockFalling.instaFall && world.areChunksLoadedBetween(blockposition.a(-b0, -b0, -b0), blockposition.a(b0, b0, b0))) {
|
|
- world.addEntity(new EntityFallingBlock(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), this.getBlockData()));
|
|
+ // PaperSpigot start - Add FallingBlock source location API
|
|
+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F));
|
|
+ world.addEntity(new EntityFallingBlock(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), this.getBlockData()));
|
|
+ // PaperSpigot end
|
|
} else {
|
|
world.setAir(blockposition);
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockFalling.java b/src/main/java/net/minecraft/server/BlockFalling.java
|
|
index 29f8554..1d952b8 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockFalling.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockFalling.java
|
|
@@ -36,7 +36,10 @@ public class BlockFalling extends Block {
|
|
|
|
if (!BlockFalling.instaFall && world.areChunksLoadedBetween(blockposition.a(-b0, -b0, -b0), blockposition.a(b0, b0, b0))) {
|
|
if (!world.isClientSide) {
|
|
- EntityFallingBlock entityfallingblock = new EntityFallingBlock(world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, world.getType(blockposition));
|
|
+ // PaperSpigot start - Add FallingBlock source location API
|
|
+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F));
|
|
+ EntityFallingBlock entityfallingblock = new EntityFallingBlock(loc, world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, world.getType(blockposition));
|
|
+ // PaperSpigot end
|
|
|
|
this.a(entityfallingblock);
|
|
world.addEntity(entityfallingblock);
|
|
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
|
index 5931e1d..44219cd 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
|
@@ -16,13 +16,22 @@ public class EntityFallingBlock extends Entity {
|
|
private int fallHurtMax = 40;
|
|
private float fallHurtAmount = 2.0F;
|
|
public NBTTagCompound tileEntityData;
|
|
+ public org.bukkit.Location sourceLoc; // PaperSpigot
|
|
|
|
+ // PaperSpigot start - Add FallingBlock source location API
|
|
public EntityFallingBlock(World world) {
|
|
+ this(null, world);
|
|
+ }
|
|
+
|
|
+ public EntityFallingBlock(org.bukkit.Location loc, World world) {
|
|
super(world);
|
|
+ sourceLoc = loc;
|
|
}
|
|
|
|
- public EntityFallingBlock(World world, double d0, double d1, double d2, IBlockData iblockdata) {
|
|
+ public EntityFallingBlock(org.bukkit.Location loc, World world, double d0, double d1, double d2, IBlockData iblockdata) {
|
|
super(world);
|
|
+ sourceLoc = loc;
|
|
+ // PaperSpigot end
|
|
this.block = iblockdata;
|
|
this.k = true;
|
|
this.setSize(0.98F, 0.98F);
|
|
@@ -197,7 +206,13 @@ public class EntityFallingBlock extends Entity {
|
|
if (this.tileEntityData != null) {
|
|
nbttagcompound.set("TileEntityData", this.tileEntityData);
|
|
}
|
|
-
|
|
+ // PaperSpigot start - Add FallingBlock source location API
|
|
+ if (sourceLoc != null) {
|
|
+ nbttagcompound.setInt("SourceLoc_x", sourceLoc.getBlockX());
|
|
+ nbttagcompound.setInt("SourceLoc_y", sourceLoc.getBlockY());
|
|
+ nbttagcompound.setInt("SourceLoc_z", sourceLoc.getBlockZ());
|
|
+ }
|
|
+ // PaperSpigot end
|
|
}
|
|
|
|
protected void a(NBTTagCompound nbttagcompound) {
|
|
@@ -233,7 +248,14 @@ public class EntityFallingBlock extends Entity {
|
|
if (block == null || block.getMaterial() == Material.AIR) {
|
|
this.block = Blocks.SAND.getBlockData();
|
|
}
|
|
-
|
|
+ // PaperSpigot start - Add FallingBlock source location API
|
|
+ if (nbttagcompound.hasKey("SourceLoc_x")) {
|
|
+ int srcX = nbttagcompound.getInt("SourceLoc_x");
|
|
+ int srcY = nbttagcompound.getInt("SourceLoc_y");
|
|
+ int srcZ = nbttagcompound.getInt("SourceLoc_z");
|
|
+ sourceLoc = new org.bukkit.Location(world.getWorld(), srcX, srcY, srcZ);
|
|
+ }
|
|
+ // PaperSpigot end
|
|
}
|
|
|
|
public void a(boolean flag) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index 6b5800e..f479b50 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -888,7 +888,10 @@ public class CraftWorld implements World {
|
|
double y = location.getBlockY() + 0.5;
|
|
double z = location.getBlockZ() + 0.5;
|
|
|
|
- EntityFallingBlock entity = new EntityFallingBlock(world, x, y, z, net.minecraft.server.Block.getById(material.getId()).fromLegacyData(data));
|
|
+ // PaperSpigot start - Add FallingBlock source location API
|
|
+ location = location.clone();
|
|
+ EntityFallingBlock entity = new EntityFallingBlock(location, world, x, y, z, net.minecraft.server.Block.getById(material.getId()).fromLegacyData(data));
|
|
+ // PaperSpigot end
|
|
entity.ticksLived = 1;
|
|
|
|
world.addEntity(entity, SpawnReason.CUSTOM);
|
|
@@ -923,8 +926,10 @@ public class CraftWorld implements World {
|
|
IBlockData blockData = world.getType(new BlockPosition(x, y, z));
|
|
int type = CraftMagicNumbers.getId(blockData.getBlock());
|
|
int data = blockData.getBlock().toLegacyData(blockData);
|
|
-
|
|
- entity = new EntityFallingBlock(world, x + 0.5, y + 0.5, z + 0.5, net.minecraft.server.Block.getById(type).fromLegacyData(data));
|
|
+ // PaperSpigot start - Add FallingBlock source location API
|
|
+ location = location.clone();
|
|
+ entity = new EntityFallingBlock(location, world, x + 0.5, y + 0.5, z + 0.5, net.minecraft.server.Block.getById(type).fromLegacyData(data));
|
|
+ // PaperSpigot end
|
|
} else if (Projectile.class.isAssignableFrom(clazz)) {
|
|
if (Snowball.class.isAssignableFrom(clazz)) {
|
|
entity = new EntitySnowball(world, x, y, z);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java
|
|
index 788f26b..f2dfedd 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java
|
|
@@ -47,4 +47,11 @@ public class CraftFallingSand extends CraftEntity implements FallingSand {
|
|
public void setDropItem(boolean drop) {
|
|
getHandle().dropItem = drop;
|
|
}
|
|
+
|
|
+ // PaperSpigot start - Add FallingBlock source location API
|
|
+ @Override
|
|
+ public org.bukkit.Location getSourceLoc() {
|
|
+ return getHandle().sourceLoc;
|
|
+ }
|
|
+ // PaperSpigot end
|
|
}
|
|
--
|
|
2.3.5
|
|
|