2020-07-17 18:05:50 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
2020-08-03 18:48:42 +02:00
|
|
|
From: JellySquid <jellysquid+atwork@protonmail.com>
|
2020-06-27 19:00:18 +02:00
|
|
|
Date: Mon, 11 May 2020 22:56:27 +0200
|
|
|
|
Subject: [PATCH] lithium MixinLandPathNodeMaker
|
|
|
|
|
2020-08-03 21:25:54 +02:00
|
|
|
Original code by JellySquid, licensed under GNU Lesser General Public License v3.0
|
2020-08-06 23:02:30 +02:00
|
|
|
you can find the original code on https://github.com/jellysquid3/lithium-fabric/tree/1.16.x/fabric (Yarn mappings)
|
2020-06-27 19:00:18 +02:00
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java
|
2020-08-13 17:53:32 +02:00
|
|
|
index 9caf6598f8a267ce057e863a32ee29fa5fdb0641..56da391b4d415630b881cccbaa50507eb2c23cc0 100644
|
2020-06-27 19:00:18 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/PathfinderNormal.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/PathfinderNormal.java
|
2020-08-13 17:53:32 +02:00
|
|
|
@@ -7,9 +7,15 @@ import it.unimi.dsi.fastutil.objects.Object2BooleanOpenHashMap;
|
|
|
|
import java.util.EnumSet;
|
|
|
|
import java.util.Iterator;
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
+import it.unimi.dsi.fastutil.objects.Reference2ReferenceMap; // Yatopia
|
|
|
|
+import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; // Yatopia
|
2020-06-27 19:00:18 +02:00
|
|
|
|
|
|
|
public class PathfinderNormal extends PathfinderAbstract {
|
|
|
|
|
2020-08-13 17:53:32 +02:00
|
|
|
+ // Yatopia start - this is not thread safe!
|
|
|
|
+ private static final Reference2ReferenceMap<IBlockData, PathType> commonTypes = new Reference2ReferenceOpenHashMap<>();
|
|
|
|
+ // Yatopia end
|
2020-08-03 18:48:42 +02:00
|
|
|
+
|
2020-06-27 19:00:18 +02:00
|
|
|
protected float j;
|
|
|
|
private final Long2ObjectMap<PathType> k = new Long2ObjectOpenHashMap();
|
|
|
|
private final Object2BooleanMap<AxisAlignedBB> l = new Object2BooleanOpenHashMap();
|
2020-08-13 17:53:32 +02:00
|
|
|
@@ -490,9 +496,22 @@ public class PathfinderNormal extends PathfinderAbstract {
|
2020-06-27 19:00:18 +02:00
|
|
|
protected static PathType b(IBlockAccess iblockaccess, BlockPosition blockposition) {
|
|
|
|
IBlockData iblockdata = iblockaccess.getTypeIfLoaded(blockposition); // Paper
|
|
|
|
if (iblockdata == null) return PathType.BLOCKED; // Paper
|
|
|
|
- Block block = iblockdata.getBlock();
|
|
|
|
- Material material = iblockdata.getMaterial();
|
2020-08-13 17:53:32 +02:00
|
|
|
+ // Yatopia start - replaced logic
|
|
|
|
+ //Block block = iblockdata.getBlock();
|
|
|
|
+ //Material material = iblockdata.getMaterial();
|
|
|
|
+ if (iblockdata.isAir()) return PathType.OPEN;
|
2020-06-27 19:00:18 +02:00
|
|
|
+ PathType type = commonTypes.get(iblockdata);
|
|
|
|
+ if (type == null) {
|
2020-08-13 17:53:32 +02:00
|
|
|
+ commonTypes.put(iblockdata, type = getPathType(iblockdata));
|
2020-06-27 19:00:18 +02:00
|
|
|
+ }
|
2020-08-13 17:53:32 +02:00
|
|
|
|
2020-06-27 19:00:18 +02:00
|
|
|
+ if (type == PathType.OPEN) {
|
|
|
|
+ if (!iblockdata.a(iblockaccess, blockposition, PathMode.LAND)) {
|
|
|
|
+ return PathType.BLOCKED;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
2020-08-13 17:53:32 +02:00
|
|
|
+ /*
|
|
|
|
if (iblockdata.isAir()) {
|
|
|
|
return PathType.OPEN;
|
|
|
|
} else if (!iblockdata.a((Tag) TagsBlock.TRAPDOORS) && !iblockdata.a(Blocks.LILY_PAD)) {
|
|
|
|
@@ -512,7 +531,38 @@ public class PathfinderNormal extends PathfinderAbstract {
|
|
|
|
} else {
|
|
|
|
return PathType.TRAPDOOR;
|
|
|
|
}
|
|
|
|
+ */
|
2020-06-27 19:00:18 +02:00
|
|
|
+ return type;
|
2020-08-13 17:53:32 +02:00
|
|
|
+ // Yatopia end
|
2020-06-27 19:00:18 +02:00
|
|
|
+ }
|
|
|
|
+
|
2020-08-13 17:53:32 +02:00
|
|
|
+ // Yatopia start
|
|
|
|
+ private static PathType getPathType(IBlockData iblockdata) {
|
|
|
|
+ Block block = iblockdata.getBlock();
|
2020-06-27 19:00:18 +02:00
|
|
|
+ if (!block.a(TagsBlock.TRAPDOORS) && block != Blocks.LILY_PAD) {
|
|
|
|
+ if (block == Blocks.FIRE) {
|
|
|
|
+ return PathType.DAMAGE_FIRE;
|
|
|
|
+ } else if (block == Blocks.CACTUS) {
|
2020-08-13 17:53:32 +02:00
|
|
|
+ return PathType.DAMAGE_CACTUS;
|
|
|
|
+ } else if (iblockdata.a(Blocks.SWEET_BERRY_BUSH)) {
|
|
|
|
+ return PathType.DAMAGE_OTHER;
|
|
|
|
+ } else if (iblockdata.a(Blocks.HONEY_BLOCK)) {
|
|
|
|
+ return PathType.STICKY_HONEY;
|
|
|
|
+ } else if (iblockdata.a(Blocks.COCOA)) {
|
|
|
|
+ return PathType.COCOA;
|
|
|
|
+ } else {
|
|
|
|
+ Fluid fluid = iblockdata.getFluid(); // Tuinity - remove another get type call
|
|
|
|
+
|
|
|
|
+ if (fluid.a(TagsFluid.WATER)) return PathType.WATER;
|
|
|
|
+ if (fluid.a(TagsFluid.LAVA)) return PathType.LAVA;
|
2020-06-27 19:00:18 +02:00
|
|
|
+
|
2020-08-13 17:53:32 +02:00
|
|
|
+ return PathType.OPEN;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ return PathType.TRAPDOOR;
|
|
|
|
+ }
|
|
|
|
}
|
|
|
|
+ // Yatopia end
|
|
|
|
|
|
|
|
private static boolean a(IBlockData iblockdata) {
|
|
|
|
return iblockdata.a((Tag) TagsBlock.FIRE) || iblockdata.a(Blocks.LAVA) || iblockdata.a(Blocks.MAGMA_BLOCK) || BlockCampfire.g(iblockdata);
|