Fix fallingblocks getting stuck on fences
Dieser Commit ist enthalten in:
Ursprung
e4e87d78ae
Commit
96a263cddf
@ -0,0 +1,89 @@
|
|||||||
|
From a96203f8a887b86b0717f8c24bbb4d5ee3821c21 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Martin Panzer <postremus1996@googlemail.com>
|
||||||
|
Date: Fri, 3 Jun 2016 23:13:39 +0200
|
||||||
|
Subject: [PATCH] Fix FallingBlocks being stuck on fences
|
||||||
|
|
||||||
|
Fallingblocks would previously only check if directly beneath them a block exists. They also
|
||||||
|
hover on top of the 1.5 block tall hitbox of fences during these check. This
|
||||||
|
resulted in them always thinking they would be on air.
|
||||||
|
|
||||||
|
We now first check, if if we are already on the ground.
|
||||||
|
if not, we check if the falling block is inside of the hitbox of the block at y - 1.
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/BlockFalling.java b/src/main/java/net/minecraft/server/BlockFalling.java
|
||||||
|
index e770063..1824587 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/BlockFalling.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/BlockFalling.java
|
||||||
|
@@ -71,5 +71,11 @@ public class BlockFalling extends Block {
|
||||||
|
return block == Blocks.FIRE || material == Material.AIR || material == Material.WATER || material == Material.LAVA;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Paper start - OBFHELPER
|
||||||
|
+ public static boolean canMoveThrough(IBlockData blockdata) {
|
||||||
|
+ return BlockFalling.i(blockdata);
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
+
|
||||||
|
public void a_(World world, BlockPosition blockposition) {}
|
||||||
|
}
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||||
|
index a5d8f02..c0f0b07 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||||
|
@@ -2,7 +2,9 @@ package net.minecraft.server;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
+import java.util.Arrays;
|
||||||
|
import java.util.Iterator;
|
||||||
|
+import java.util.List;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
|
||||||
|
@@ -95,10 +97,9 @@ public class EntityFallingBlock extends Entity {
|
||||||
|
blockposition = new BlockPosition(this);
|
||||||
|
if (this.onGround) {
|
||||||
|
IBlockData iblockdata = this.world.getType(blockposition);
|
||||||
|
-
|
||||||
|
- if (BlockFalling.i(this.world.getType(new BlockPosition(this.locX, this.locY - 0.009999999776482582D, this.locZ)))) {
|
||||||
|
+ if (!isOnGround()) {
|
||||||
|
this.onGround = false;
|
||||||
|
- // return; // CraftBukkit
|
||||||
|
+ return; // Paper
|
||||||
|
}
|
||||||
|
|
||||||
|
this.motX *= 0.699999988079071D;
|
||||||
|
@@ -155,6 +156,30 @@ public class EntityFallingBlock extends Entity {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Paper start
|
||||||
|
+ private boolean isOnGround() {
|
||||||
|
+ BlockPosition where = new BlockPosition(this.locX, this.locY - 0.009999999776482582D, this.locZ);
|
||||||
|
+
|
||||||
|
+ if (!BlockFalling.canMoveThrough(this.world.getType(where))) {
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ IBlockData blockData = this.world.getType(where.down());
|
||||||
|
+ if (BlockFalling.canMoveThrough(blockData)) {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ List<AxisAlignedBB> list = new ArrayList<>();
|
||||||
|
+ addCollisions(blockData, getWorld(), where, this.getBoundingBox(), list, this);
|
||||||
|
+ return list.size() > 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // OBFHELPER
|
||||||
|
+ private void addCollisions(IBlockData blockData, World world, BlockPosition where, AxisAlignedBB collider, List<AxisAlignedBB> list, Entity entity) {
|
||||||
|
+ blockData.a(world, where, collider, list, entity);
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
+
|
||||||
|
public void e(float f, float f1) {
|
||||||
|
Block block = this.block.getBlock();
|
||||||
|
|
||||||
|
--
|
||||||
|
1.9.1
|
||||||
|
|
In neuem Issue referenzieren
Einen Benutzer sperren