mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-12 06:58:11 +02:00
It appears to cause visual glitching issues with certain TNT entities fired from cannons. TileEntity tick capping has already been removed for some time, Entity tick capping removal is new to this patch.
146 lines
7.9 KiB
Diff
146 lines
7.9 KiB
Diff
From a6bb5db33f564cae6404a869426d4e741aec5b99 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.4.1.windows.1
|
|
|