geforkt von Mirrors/Paper
adadf16548
I'm not sure it was really helping, and now suspecting it might be causing issues Movement sucks
96 Zeilen
4.7 KiB
Diff
96 Zeilen
4.7 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 06926c4ae1100c5848206b2c45d51e87f273416d..b8e91fca957c8a39c9fbf4f87c089c4ce710c8e0 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockMinecartDetector.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockMinecartDetector.java
|
|
@@ -50,6 +50,7 @@ public class BlockMinecartDetector extends BlockMinecartTrackAbstract {
|
|
}
|
|
|
|
private void a(World world, BlockPosition blockposition, IBlockData iblockdata) {
|
|
+ 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 d91b1b41aa2e3d3a12ebc52d19358032124135fb..a540b3e226b985f22daf1a69bf4e8cb578ab1476 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
|
|
}
|
|
}
|