2017-01-20 12:21:44 +01:00
|
|
|
From 7136c91dd498d1b5e956f2fdf7c53b7abfc1b924 Mon Sep 17 00:00:00 2001
|
2016-05-23 03:26:15 +02:00
|
|
|
From: Zach Brown <zach.brown@destroystokyo.com>
|
|
|
|
Date: Sun, 22 May 2016 20:20:55 -0500
|
|
|
|
Subject: [PATCH] Optional old TNT cannon behaviors
|
|
|
|
|
|
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
2017-01-06 22:45:59 +01:00
|
|
|
index 4d6a309..2a4d1da 100644
|
2016-05-23 03:26:15 +02:00
|
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -333,4 +333,12 @@ public class PaperWorldConfig {
|
2016-05-23 03:26:15 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+
|
|
|
|
+ public boolean oldCannonBehaviors;
|
|
|
|
+ private void oldCannonBehaviors() {
|
|
|
|
+ oldCannonBehaviors = getBoolean("enable-old-tnt-cannon-behaviors", false);
|
|
|
|
+ if (oldCannonBehaviors) {
|
|
|
|
+ log("Old Cannon Behaviors: This feature may not be working entirely properly at the moment");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockDiodeAbstract.java b/src/main/java/net/minecraft/server/BlockDiodeAbstract.java
|
2017-01-06 22:45:59 +01:00
|
|
|
index 59ee13d..40c9f18 100644
|
2016-05-23 03:26:15 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/BlockDiodeAbstract.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/BlockDiodeAbstract.java
|
|
|
|
@@ -76,6 +76,17 @@ public abstract class BlockDiodeAbstract extends BlockFacingHorizontal {
|
|
|
|
} else {
|
|
|
|
this.b(world, blockposition, iblockdata, 0);
|
|
|
|
world.setAir(blockposition);
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ if (world.paperConfig.oldCannonBehaviors) {
|
2016-11-17 03:23:38 +01:00
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.EAST), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.WEST), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.SOUTH), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.NORTH), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.DOWN), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.UP), this, false);
|
2016-05-23 03:26:15 +02:00
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
EnumDirection[] aenumdirection = EnumDirection.values();
|
|
|
|
int i = aenumdirection.length;
|
|
|
|
|
|
|
|
@@ -173,6 +184,17 @@ public abstract class BlockDiodeAbstract extends BlockFacingHorizontal {
|
|
|
|
|
|
|
|
public void postBreak(World world, BlockPosition blockposition, IBlockData iblockdata) {
|
|
|
|
if (this.d) {
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ if (world.paperConfig.oldCannonBehaviors) {
|
2016-11-17 03:23:38 +01:00
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.EAST), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.WEST), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.NORTH), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.SOUTH), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.DOWN), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.UP), this, false);
|
2016-05-23 03:26:15 +02:00
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
EnumDirection[] aenumdirection = EnumDirection.values();
|
|
|
|
int i = aenumdirection.length;
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
2017-01-06 22:45:59 +01:00
|
|
|
index c7e095a..7412362 100644
|
2016-05-23 03:26:15 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -52,6 +52,12 @@ public class BlockRedstoneTorch extends BlockTorch {
|
2016-05-23 03:26:15 +02:00
|
|
|
|
|
|
|
public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) {
|
|
|
|
if (this.isOn) {
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ if (world.paperConfig.oldCannonBehaviors) {
|
|
|
|
+ this.shiftPositions(world, blockposition);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
EnumDirection[] aenumdirection = EnumDirection.values();
|
|
|
|
int i = aenumdirection.length;
|
|
|
|
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -66,6 +72,12 @@ public class BlockRedstoneTorch extends BlockTorch {
|
2016-05-23 03:26:15 +02:00
|
|
|
|
|
|
|
public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) {
|
|
|
|
if (this.isOn) {
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ if (world.paperConfig.oldCannonBehaviors) {
|
|
|
|
+ this.shiftPositions(world, blockposition);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
EnumDirection[] aenumdirection = EnumDirection.values();
|
|
|
|
int i = aenumdirection.length;
|
|
|
|
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -78,6 +90,17 @@ public class BlockRedstoneTorch extends BlockTorch {
|
2016-05-23 03:26:15 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ private void shiftPositions(World world, BlockPosition blockposition) {
|
2016-11-17 03:23:38 +01:00
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.DOWN), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.UP), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.WEST), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.EAST), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.SOUTH), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.NORTH), this, false);
|
2016-05-23 03:26:15 +02:00
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
+
|
|
|
|
public int b(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition, EnumDirection enumdirection) {
|
|
|
|
return this.isOn && iblockdata.get(BlockRedstoneTorch.FACING) != enumdirection ? 15 : 0;
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockRedstoneWire.java b/src/main/java/net/minecraft/server/BlockRedstoneWire.java
|
2017-01-06 22:45:59 +01:00
|
|
|
index 5a0f026..20b9465 100644
|
2016-05-23 03:26:15 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/BlockRedstoneWire.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/BlockRedstoneWire.java
|
|
|
|
@@ -20,7 +20,7 @@ public class BlockRedstoneWire extends Block {
|
|
|
|
public static final BlockStateInteger POWER = BlockStateInteger.of("power", 0, 15);
|
|
|
|
protected static final AxisAlignedBB[] f = new AxisAlignedBB[] { new AxisAlignedBB(0.1875D, 0.0D, 0.1875D, 0.8125D, 0.0625D, 0.8125D), new AxisAlignedBB(0.1875D, 0.0D, 0.1875D, 0.8125D, 0.0625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.1875D, 0.8125D, 0.0625D, 0.8125D), new AxisAlignedBB(0.0D, 0.0D, 0.1875D, 0.8125D, 0.0625D, 1.0D), new AxisAlignedBB(0.1875D, 0.0D, 0.0D, 0.8125D, 0.0625D, 0.8125D), new AxisAlignedBB(0.1875D, 0.0D, 0.0D, 0.8125D, 0.0625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.8125D, 0.0625D, 0.8125D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.8125D, 0.0625D, 1.0D), new AxisAlignedBB(0.1875D, 0.0D, 0.1875D, 1.0D, 0.0625D, 0.8125D), new AxisAlignedBB(0.1875D, 0.0D, 0.1875D, 1.0D, 0.0625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.1875D, 1.0D, 0.0625D, 0.8125D), new AxisAlignedBB(0.0D, 0.0D, 0.1875D, 1.0D, 0.0625D, 1.0D), new AxisAlignedBB(0.1875D, 0.0D, 0.0D, 1.0D, 0.0625D, 0.8125D), new AxisAlignedBB(0.1875D, 0.0D, 0.0D, 1.0D, 0.0625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.0625D, 0.8125D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.0625D, 1.0D)};
|
|
|
|
private boolean g = true;
|
|
|
|
- private final Set<BlockPosition> B = Sets.newHashSet();
|
|
|
|
+ private final Set<BlockPosition> B = Sets.newHashSet(); private final Set<BlockPosition> blocksToUpdate = B; // Paper - OBFHELPER
|
|
|
|
|
|
|
|
public BlockRedstoneWire() {
|
|
|
|
super(Material.ORIENTABLE);
|
|
|
|
@@ -186,6 +186,19 @@ public class BlockRedstoneWire extends Block {
|
|
|
|
}
|
|
|
|
|
|
|
|
this.B.add(blockposition);
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ if (world.paperConfig.oldCannonBehaviors) {
|
|
|
|
+ this.blocksToUpdate.add(blockposition.shift(EnumDirection.WEST));
|
|
|
|
+ this.blocksToUpdate.add(blockposition.shift(EnumDirection.EAST));
|
|
|
|
+ this.blocksToUpdate.add(blockposition.shift(EnumDirection.DOWN));
|
|
|
|
+ this.blocksToUpdate.add(blockposition.shift(EnumDirection.UP));
|
|
|
|
+ this.blocksToUpdate.add(blockposition.shift(EnumDirection.NORTH));
|
|
|
|
+ this.blocksToUpdate.add(blockposition.shift(EnumDirection.SOUTH));
|
|
|
|
+ return iblockdata;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
+
|
|
|
|
+
|
|
|
|
EnumDirection[] aenumdirection = EnumDirection.values();
|
|
|
|
int i1 = aenumdirection.length;
|
|
|
|
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -202,6 +215,16 @@ public class BlockRedstoneWire extends Block {
|
2016-05-23 03:26:15 +02:00
|
|
|
private void b(World world, BlockPosition blockposition) {
|
|
|
|
if (world.getType(blockposition).getBlock() == this) {
|
2016-11-17 03:23:38 +01:00
|
|
|
world.applyPhysics(blockposition, this, false);
|
2016-05-23 03:26:15 +02:00
|
|
|
+ if (world.paperConfig.oldCannonBehaviors) {
|
2016-11-17 03:23:38 +01:00
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.WEST), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.EAST), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.NORTH), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.SOUTH), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.DOWN), this, false);
|
|
|
|
+ world.applyPhysics(blockposition.shift(EnumDirection.UP), this, false);
|
2016-05-23 03:26:15 +02:00
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
EnumDirection[] aenumdirection = EnumDirection.values();
|
|
|
|
int i = aenumdirection.length;
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockTNT.java b/src/main/java/net/minecraft/server/BlockTNT.java
|
2017-01-06 22:45:59 +01:00
|
|
|
index 6b6aa89..5cec416 100644
|
2016-05-23 03:26:15 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/BlockTNT.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/BlockTNT.java
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -29,7 +29,11 @@ public class BlockTNT extends Block {
|
2016-05-23 03:26:15 +02:00
|
|
|
|
|
|
|
public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) {
|
|
|
|
if (!world.isClientSide) {
|
|
|
|
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource());
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ double y = blockposition.getY();
|
|
|
|
+ if (!world.paperConfig.oldCannonBehaviors) y += 0.5;
|
|
|
|
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource());
|
|
|
|
+ // Paper end
|
|
|
|
|
|
|
|
entitytntprimed.setFuseTicks((short) (world.random.nextInt(entitytntprimed.getFuseTicks() / 4) + entitytntprimed.getFuseTicks() / 8));
|
|
|
|
world.addEntity(entitytntprimed);
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -43,7 +47,11 @@ public class BlockTNT extends Block {
|
2016-05-23 03:26:15 +02:00
|
|
|
public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving) {
|
|
|
|
if (!world.isClientSide) {
|
|
|
|
if (((Boolean) iblockdata.get(BlockTNT.EXPLODE)).booleanValue()) {
|
|
|
|
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), entityliving);
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ double y = blockposition.getY();
|
|
|
|
+ if (!world.paperConfig.oldCannonBehaviors) y += 0.5;
|
|
|
|
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), entityliving);
|
|
|
|
+ // Paper end
|
|
|
|
|
|
|
|
world.addEntity(entitytntprimed);
|
2016-11-17 03:23:38 +01:00
|
|
|
world.a((EntityHuman) null, entitytntprimed.locX, entitytntprimed.locY, entitytntprimed.locZ, SoundEffects.gV, SoundCategory.BLOCKS, 1.0F, 1.0F);
|
2016-05-23 03:26:15 +02:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/DispenserRegistry.java b/src/main/java/net/minecraft/server/DispenserRegistry.java
|
2017-01-06 22:45:59 +01:00
|
|
|
index dbfb8ab..537408a 100644
|
2016-05-23 03:26:15 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/DispenserRegistry.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/DispenserRegistry.java
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -481,7 +481,11 @@ public class DispenserRegistry {
|
2016-05-23 03:26:15 +02:00
|
|
|
org.bukkit.block.Block block = world.getWorld().getBlockAt(isourceblock.getBlockPosition().getX(), isourceblock.getBlockPosition().getY(), isourceblock.getBlockPosition().getZ());
|
|
|
|
CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack1);
|
|
|
|
|
|
|
|
- BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector((double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D));
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ double y = blockposition.getY();
|
|
|
|
+ if (!world.paperConfig.oldCannonBehaviors) y += 0.5;
|
|
|
|
+ BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector((double) blockposition.getX() + 0.5D, y, (double) blockposition.getZ() + 0.5D));
|
|
|
|
+ // Paper end
|
|
|
|
if (!BlockDispenser.eventFired) {
|
|
|
|
world.getServer().getPluginManager().callEvent(event);
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
2017-01-20 12:21:44 +01:00
|
|
|
index 340c24b..b2234d9 100644
|
2016-05-23 03:26:15 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
2016-12-21 18:21:40 +01:00
|
|
|
@@ -1041,6 +1041,12 @@ public abstract class Entity implements ICommandListener {
|
2016-05-23 03:26:15 +02:00
|
|
|
}
|
|
|
|
|
2016-06-09 05:57:14 +02:00
|
|
|
public boolean ak() {
|
2016-05-23 03:26:15 +02:00
|
|
|
+ // Paper start - OBFHELPER
|
|
|
|
+ return this.doWaterMovement();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public boolean doWaterMovement() {
|
|
|
|
+ // Paper end
|
2016-06-09 05:57:14 +02:00
|
|
|
if (this.bB() instanceof EntityBoat) {
|
2016-05-23 03:26:15 +02:00
|
|
|
this.inWater = false;
|
|
|
|
} else if (this.world.a(this.getBoundingBox().grow(0.0D, -0.4000000059604645D, 0.0D).shrink(0.001D), Material.WATER, this)) {
|
2016-12-21 18:21:40 +01:00
|
|
|
@@ -1244,6 +1250,12 @@ public abstract class Entity implements ICommandListener {
|
2016-05-23 03:26:15 +02:00
|
|
|
}
|
|
|
|
|
2016-11-17 03:23:38 +01:00
|
|
|
public double e(double d0, double d1, double d2) {
|
2016-05-23 03:26:15 +02:00
|
|
|
+ // Paper start - OBFHELPER
|
|
|
|
+ return this.getDistance(d0, d1, d2);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public double getDistance(double d0, double d1, double d2) {
|
|
|
|
+ // Paper end
|
|
|
|
double d3 = this.locX - d0;
|
|
|
|
double d4 = this.locY - d1;
|
|
|
|
double d5 = this.locZ - d2;
|
2016-12-21 18:21:40 +01:00
|
|
|
@@ -1298,6 +1310,11 @@ public abstract class Entity implements ICommandListener {
|
2016-05-23 03:26:15 +02:00
|
|
|
}
|
|
|
|
|
2016-11-17 03:23:38 +01:00
|
|
|
public void f(double d0, double d1, double d2) {
|
2016-05-23 03:26:15 +02:00
|
|
|
+ // Paper start - OBFHELPER
|
|
|
|
+ this.addVelocity(d0, d1, d2);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void addVelocity(double d0, double d1, double d2) {
|
|
|
|
this.motX += d0;
|
|
|
|
this.motY += d1;
|
|
|
|
this.motZ += d2;
|
2017-01-20 12:21:44 +01:00
|
|
|
@@ -2456,6 +2473,12 @@ public abstract class Entity implements ICommandListener {
|
2016-05-23 03:26:15 +02:00
|
|
|
}
|
|
|
|
|
2016-06-09 05:57:14 +02:00
|
|
|
public boolean bg() {
|
2016-05-23 03:26:15 +02:00
|
|
|
+ // Paper start - OBFHELPER
|
|
|
|
+ return this.pushedByWater();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public boolean pushedByWater() {
|
|
|
|
+ // Paper end
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
2017-01-06 22:45:59 +01:00
|
|
|
index 307a44c..bb01929 100644
|
2016-05-23 03:26:15 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -280,4 +280,19 @@ public class EntityFallingBlock extends Entity {
|
2016-06-09 05:57:14 +02:00
|
|
|
public boolean bu() {
|
2016-05-23 03:26:15 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
+
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ @Override
|
|
|
|
+ public double getDistance(double d0, double d1, double d2) {
|
|
|
|
+ if (!world.paperConfig.oldCannonBehaviors) return super.getDistance(d0, d1, d2);
|
|
|
|
+
|
|
|
|
+ double newX = this.locX - d0;
|
|
|
|
+ double newY = this.locY + this.getHeadHeight() - d1;
|
|
|
|
+ double newZ = this.locZ - d2;
|
|
|
|
+
|
|
|
|
+ return (double) MathHelper.sqrt(newX * newX + newY * newY + newZ * newZ);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // Paper end
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
2017-01-06 22:45:59 +01:00
|
|
|
index 25e471d..e796ade 100644
|
2016-05-23 03:26:15 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -32,6 +32,7 @@ public class EntityTNTPrimed extends Entity {
|
2016-05-23 03:26:15 +02:00
|
|
|
this.lastY = d1;
|
|
|
|
this.lastZ = d2;
|
|
|
|
this.source = entityliving;
|
|
|
|
+ if (world.paperConfig.oldCannonBehaviors) this.motX = this.motZ = 0.0F; // Paper - Old TNT cannon behaviors
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void i() {
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -124,7 +125,7 @@ public class EntityTNTPrimed extends Entity {
|
2016-05-23 03:26:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public float getHeadHeight() {
|
|
|
|
- return 0.0F;
|
2016-07-20 01:48:08 +02:00
|
|
|
+ return world.paperConfig.oldCannonBehaviors ? this.length / 16F : 0.0F; // Paper - Old TNT cannon behaviors
|
2016-05-23 03:26:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void setFuseTicks(int i) {
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -146,4 +147,58 @@ public class EntityTNTPrimed extends Entity {
|
2016-05-23 03:26:15 +02:00
|
|
|
public int getFuseTicks() {
|
|
|
|
return this.c;
|
|
|
|
}
|
|
|
|
+
|
|
|
|
+ // Paper start - Old TNT cannon behaviors
|
|
|
|
+ @Override
|
|
|
|
+ public double getDistance(double d0, double d1, double d2) {
|
|
|
|
+ if (!world.paperConfig.oldCannonBehaviors) return super.getDistance(d0, d1, d2);
|
|
|
|
+
|
|
|
|
+ double newX = this.locX - d0;
|
|
|
|
+ double newY = this.locY + this.getHeadHeight() - d1;
|
|
|
|
+ double newZ = this.locZ - d2;
|
|
|
|
+
|
|
|
|
+ return (double) MathHelper.sqrt(newX * newX + newY * newY + newZ * newZ);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean pushedByWater() {
|
|
|
|
+ return !world.paperConfig.oldCannonBehaviors && super.pushedByWater();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Author: Jedediah Smith <jedediah@silencegreys.com>
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public boolean doWaterMovement() {
|
|
|
|
+ if (!world.paperConfig.oldCannonBehaviors) return super.doWaterMovement();
|
|
|
|
+
|
|
|
|
+ // Preserve velocity while calling the super method
|
|
|
|
+ double oldMotX = this.motX;
|
|
|
|
+ double oldMotY = this.motY;
|
|
|
|
+ double oldMotZ = this.motZ;
|
|
|
|
+
|
|
|
|
+ super.doWaterMovement();
|
|
|
|
+
|
|
|
|
+ this.motX = oldMotX;
|
|
|
|
+ this.motY = oldMotY;
|
|
|
|
+ this.motZ = oldMotZ;
|
|
|
|
+
|
|
|
|
+ if (this.inWater) {
|
|
|
|
+ // Send position and velocity updates to nearby players on every tick while the TNT is in water.
|
|
|
|
+ // This does pretty well at keeping their clients in sync with the server.
|
|
|
|
+ EntityTrackerEntry ete = ((WorldServer) this.getWorld()).getTracker().trackedEntities.get(this.getId());
|
|
|
|
+ if (ete != null) {
|
|
|
|
+ PacketPlayOutEntityVelocity velocityPacket = new PacketPlayOutEntityVelocity(this);
|
|
|
|
+ PacketPlayOutEntityTeleport positionPacket = new PacketPlayOutEntityTeleport(this);
|
|
|
|
+
|
|
|
|
+ ete.trackedPlayers.stream().filter(viewer -> (viewer.locX - this.locX) * (viewer.locY - this.locY) * (viewer.locZ - this.locZ) < 16 * 16).forEach(viewer -> {
|
|
|
|
+ viewer.playerConnection.sendPacket(velocityPacket);
|
|
|
|
+ viewer.playerConnection.sendPacket(positionPacket);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return this.inWater;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java
|
2017-01-06 22:45:59 +01:00
|
|
|
index d7bc6a0..f2785d8 100644
|
2016-05-23 03:26:15 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/Explosion.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/Explosion.java
|
2016-11-17 03:23:38 +01:00
|
|
|
@@ -149,9 +149,15 @@ public class Explosion {
|
2016-05-23 03:26:15 +02:00
|
|
|
d14 = entity instanceof EntityHuman && world.paperConfig.disableExplosionKnockback ? 0 : EnchantmentProtection.a((EntityLiving) entity, d13); // Paper - Disable explosion knockback
|
|
|
|
}
|
|
|
|
|
|
|
|
- entity.motX += d8 * d14;
|
|
|
|
- entity.motY += d9 * d14;
|
|
|
|
- entity.motZ += d10 * d14;
|
|
|
|
+ // Paper start - Fix cannons
|
|
|
|
+ /*
|
|
|
|
+ entity.motX += d8 * d14;
|
|
|
|
+ entity.motY += d9 * d14;
|
|
|
|
+ entity.motZ += d10 * d14;
|
|
|
|
+ */
|
|
|
|
+ // This impulse method sets the dirty flag, so clients will get an immediate velocity update
|
|
|
|
+ entity.addVelocity(d8 * d14, d9 * d14, d10 * d14);
|
|
|
|
+ // Paper end
|
|
|
|
if (entity instanceof EntityHuman) {
|
|
|
|
EntityHuman entityhuman = (EntityHuman) entity;
|
|
|
|
|
|
|
|
--
|
2017-01-06 22:45:59 +01:00
|
|
|
2.9.3
|
2016-05-23 03:26:15 +02:00
|
|
|
|