mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-18 12:48:53 +01:00
da9d110d5b
This patch does not appear to be doing anything useful, and may hide errors. Currently, the save logic does not run through this path either so it did not do anything. Additionally, properly implement support for handling RegionFileSizeException in Moonrise.
50 lines
2.8 KiB
Diff
50 lines
2.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Zach Brown <zach.brown@destroystokyo.com>
|
|
Date: Sun, 22 May 2016 20:20:55 -0500
|
|
Subject: [PATCH] Optional TNT doesn't move in water
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
|
|
index 3d489fdc14b3e29bab63f330d5edbbc1d354382a..45c224198135e48f94dc72312c805bf451bf7b0e 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
|
|
@@ -135,6 +135,27 @@ public class PrimedTnt extends Entity implements TraceableEntity {
|
|
}
|
|
}
|
|
|
|
+ // Paper start - Option to prevent TNT from moving in water
|
|
+ if (!this.isRemoved() && this.wasTouchingWater && this.level().paperConfig().fixes.preventTntFromMovingInWater) {
|
|
+ /*
|
|
+ * Author: Jedediah Smith <jedediah@silencegreys.com>
|
|
+ */
|
|
+ // 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.
|
|
+ net.minecraft.server.level.ChunkMap.TrackedEntity ete = ((net.minecraft.server.level.ServerLevel) this.level()).getChunkSource().chunkMap.entityMap.get(this.getId());
|
|
+ if (ete != null) {
|
|
+ net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket velocityPacket = new net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket(this);
|
|
+ net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket positionPacket = net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket.teleport(this.getId(), net.minecraft.world.entity.PositionMoveRotation.of(this), java.util.Set.of(), this.onGround);
|
|
+
|
|
+ ete.seenBy.stream()
|
|
+ .filter(viewer -> (viewer.getPlayer().getX() - this.getX()) * (viewer.getPlayer().getY() - this.getY()) * (viewer.getPlayer().getZ() - this.getZ()) < 16 * 16)
|
|
+ .forEach(viewer -> {
|
|
+ viewer.send(velocityPacket);
|
|
+ viewer.send(positionPacket);
|
|
+ });
|
|
+ }
|
|
+ }
|
|
+ // Paper end - Option to prevent TNT from moving in water
|
|
}
|
|
|
|
private void explode() {
|
|
@@ -221,4 +242,11 @@ public class PrimedTnt extends Entity implements TraceableEntity {
|
|
public final boolean hurtServer(ServerLevel world, DamageSource source, float amount) {
|
|
return false;
|
|
}
|
|
+
|
|
+ // Paper start - Option to prevent TNT from moving in water
|
|
+ @Override
|
|
+ public boolean isPushedByFluid() {
|
|
+ return !level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid();
|
|
+ }
|
|
+ // Paper end - Option to prevent TNT from moving in water
|
|
}
|