Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-16 03:20:07 +01:00
e886d8118e
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing
96 Zeilen
4.8 KiB
Diff
96 Zeilen
4.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <spottedleaf@spottedleaf.dev>
|
|
Date: Fri, 24 Jul 2020 15:56:05 -0700
|
|
Subject: [PATCH] Fix some rails connecting improperly
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockMinecartDetector.java b/src/main/java/net/minecraft/server/BlockMinecartDetector.java
|
|
index 9681e08edf34f17806819115336874b574b880bc..77fde30769860828b6f16eefb186962c140beaae 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockMinecartDetector.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockMinecartDetector.java
|
|
@@ -51,6 +51,7 @@ public class BlockMinecartDetector extends BlockMinecartTrackAbstract {
|
|
|
|
private void a(World world, BlockPosition blockposition, IBlockData iblockdata) {
|
|
if (this.canPlace(iblockdata, world, blockposition)) {
|
|
+ if (iblockdata.getBlock() != this) { return; } // Paper - not our block, don't do anything
|
|
boolean flag = (Boolean) iblockdata.get(BlockMinecartDetector.POWERED);
|
|
boolean flag1 = false;
|
|
List<EntityMinecartAbstract> list = this.a(world, blockposition, EntityMinecartAbstract.class, (Predicate) null);
|
|
diff --git a/src/main/java/net/minecraft/server/BlockMinecartTrackAbstract.java b/src/main/java/net/minecraft/server/BlockMinecartTrackAbstract.java
|
|
index 5609eeec9a7991167b57b724fa3279d3e8bf6b94..0de3fa45487e996b79d1031c9ee4b0728cfe1bcf 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockMinecartTrackAbstract.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockMinecartTrackAbstract.java
|
|
@@ -46,6 +46,7 @@ public abstract class BlockMinecartTrackAbstract extends Block {
|
|
iblockdata = this.a(world, blockposition, iblockdata, true);
|
|
if (this.c) {
|
|
iblockdata.doPhysics(world, blockposition, this, blockposition, flag);
|
|
+ iblockdata = world.getType(blockposition); // Paper - don't desync, update again
|
|
}
|
|
|
|
return iblockdata;
|
|
diff --git a/src/main/java/net/minecraft/server/MinecartTrackLogic.java b/src/main/java/net/minecraft/server/MinecartTrackLogic.java
|
|
index 10bc2165159514d484e73a3acd08ca5929be72f2..e0be3a425aae51e1aced8eb6d8a5e84fc9315e3a 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecartTrackLogic.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecartTrackLogic.java
|
|
@@ -7,13 +7,19 @@ import javax.annotation.Nullable;
|
|
|
|
public class MinecartTrackLogic {
|
|
|
|
- private final World a;
|
|
- private final BlockPosition b;
|
|
+ private final World a; public final World getWorld() { return this.a; } // Paper - OBFHELPER
|
|
+ private final BlockPosition b; public final BlockPosition getPos() { return this.b; } // Paper - OBFHELPER
|
|
private final BlockMinecartTrackAbstract c;
|
|
- private IBlockData d;
|
|
+ private IBlockData d; public final IBlockData getRailState() { return this.d; } // Paper - OBFHELPER
|
|
private final boolean e;
|
|
private final List<BlockPosition> f = Lists.newArrayList();
|
|
|
|
+ // Paper start - prevent desync
|
|
+ public boolean isValid() {
|
|
+ return this.getWorld().getType(this.getPos()).getBlock() == this.getRailState().getBlock();
|
|
+ }
|
|
+ // Paper end - prevent desync
|
|
+
|
|
public MinecartTrackLogic(World world, BlockPosition blockposition, IBlockData iblockdata) {
|
|
this.a = world;
|
|
this.b = blockposition;
|
|
@@ -148,6 +154,11 @@ public class MinecartTrackLogic {
|
|
}
|
|
|
|
private void c(MinecartTrackLogic minecarttracklogic) {
|
|
+ // Paper start - prevent desync
|
|
+ if (!this.isValid() || !minecarttracklogic.isValid()) {
|
|
+ return;
|
|
+ }
|
|
+ // Paper end - prevent desync
|
|
this.f.add(minecarttracklogic.b);
|
|
BlockPosition blockposition = this.b.north();
|
|
BlockPosition blockposition1 = this.b.south();
|
|
@@ -342,11 +353,16 @@ public class MinecartTrackLogic {
|
|
this.d = (IBlockData) this.d.set(this.c.d(), blockpropertytrackposition1);
|
|
if (flag1 || this.a.getType(this.b) != this.d) {
|
|
this.a.setTypeAndData(this.b, this.d, 3);
|
|
+ // Paper start - prevent desync
|
|
+ if (!this.isValid()) {
|
|
+ return this;
|
|
+ }
|
|
+ // Paper end - prevent desync
|
|
|
|
for (int i = 0; i < this.f.size(); ++i) {
|
|
MinecartTrackLogic minecarttracklogic = this.b((BlockPosition) this.f.get(i));
|
|
|
|
- if (minecarttracklogic != null) {
|
|
+ if (minecarttracklogic != null && minecarttracklogic.isValid()) { // Paper - prevent desync
|
|
minecarttracklogic.d();
|
|
if (minecarttracklogic.b(this)) {
|
|
minecarttracklogic.c(this);
|
|
@@ -359,6 +375,6 @@ public class MinecartTrackLogic {
|
|
}
|
|
|
|
public IBlockData c() {
|
|
- return this.d;
|
|
+ return this.getWorld().getType(this.getPos()); // Paper - prevent desync
|
|
}
|
|
}
|