mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-20 15:39:37 +00:00
Merge branch 'ver/1.21.4' into dev/random-tick
This commit is contained in:
@@ -3,7 +3,7 @@ From: hayanesuru <hayanesuru@outlook.jp>
|
|||||||
Date: Wed, 4 Jun 2025 20:54:32 +0900
|
Date: Wed, 4 Jun 2025 20:54:32 +0900
|
||||||
Subject: [PATCH] preload mob spawning position
|
Subject: [PATCH] preload mob spawning position
|
||||||
|
|
||||||
No need
|
Removed since Leaf 1.21.4, No need
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java
|
diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java
|
||||||
index 458b17dca84c87591b030679c5aac6259c0f8308..c69922ac2b831d8af35c9e98a34825e6b8a268da 100644
|
index 458b17dca84c87591b030679c5aac6259c0f8308..c69922ac2b831d8af35c9e98a34825e6b8a268da 100644
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com>
|
|||||||
Date: Tue, 9 Nov 2077 00:00:00 +0800
|
Date: Tue, 9 Nov 2077 00:00:00 +0800
|
||||||
Subject: [PATCH] Lithium: equipment tracking
|
Subject: [PATCH] Lithium: equipment tracking
|
||||||
|
|
||||||
|
TODO: needs to fix issues related to Piglins lose the crossbow animation
|
||||||
|
original report is in discord.
|
||||||
|
|
||||||
Should have special treatment to ArmorStand, since Paper introduced the configurable
|
Should have special treatment to ArmorStand, since Paper introduced the configurable
|
||||||
ArmorStand no-tick, and still gives it ability to update equipment changes.
|
ArmorStand no-tick, and still gives it ability to update equipment changes.
|
||||||
Thus added a bypass condition in LivingEntity#collectEquipmentChanges, always send
|
Thus added a bypass condition in LivingEntity#collectEquipmentChanges, always send
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com>
|
|||||||
Date: Tue, 9 Nov 2077 00:00:00 +0800
|
Date: Tue, 9 Nov 2077 00:00:00 +0800
|
||||||
Subject: [PATCH] Use UUID for cure reputation
|
Subject: [PATCH] Use UUID for cure reputation
|
||||||
|
|
||||||
|
Related MC issue: https://bugs.mojang.com/browse/MC/issues/MC-247647
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java
|
diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java
|
||||||
index d4b6c93f9f0e109be300164c4fd9167aba2d951c..138e62965a4e532972e51c16b429e050bb147788 100644
|
index d4b6c93f9f0e109be300164c4fd9167aba2d951c..138e62965a4e532972e51c16b429e050bb147788 100644
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Cache potential behaviors in Brain
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/ai/Brain.java b/net/minecraft/world/entity/ai/Brain.java
|
diff --git a/net/minecraft/world/entity/ai/Brain.java b/net/minecraft/world/entity/ai/Brain.java
|
||||||
index b143cd6d5636dc61458a864cd548c886d14cd30c..954aa416877fd8838fd88d84096918455baa5641 100644
|
index 636a945ce2a91b8bf73b790e0e9e412368b3fe71..27fc18000987d6f962df8a9e441eb2e3d28bf213 100644
|
||||||
--- a/net/minecraft/world/entity/ai/Brain.java
|
--- a/net/minecraft/world/entity/ai/Brain.java
|
||||||
+++ b/net/minecraft/world/entity/ai/Brain.java
|
+++ b/net/minecraft/world/entity/ai/Brain.java
|
||||||
@@ -60,6 +60,7 @@ public class Brain<E extends LivingEntity> {
|
@@ -60,6 +60,7 @@ public class Brain<E extends LivingEntity> {
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Use ActivationList on runningBehaviors
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/ai/Brain.java b/net/minecraft/world/entity/ai/Brain.java
|
diff --git a/net/minecraft/world/entity/ai/Brain.java b/net/minecraft/world/entity/ai/Brain.java
|
||||||
index 954aa416877fd8838fd88d84096918455baa5641..3749808c5392f351b2383dd8d8cf8d884519804e 100644
|
index 27fc18000987d6f962df8a9e441eb2e3d28bf213..205d7f583ad9415bd2411c3b13726c6e7d90ff83 100644
|
||||||
--- a/net/minecraft/world/entity/ai/Brain.java
|
--- a/net/minecraft/world/entity/ai/Brain.java
|
||||||
+++ b/net/minecraft/world/entity/ai/Brain.java
|
+++ b/net/minecraft/world/entity/ai/Brain.java
|
||||||
@@ -61,6 +61,7 @@ public class Brain<E extends LivingEntity> {
|
@@ -61,6 +61,7 @@ public class Brain<E extends LivingEntity> {
|
||||||
@@ -32,7 +32,8 @@ public class AsyncPlayerDataSaving {
|
|||||||
new ThreadPoolExecutor.DiscardPolicy()
|
new ThreadPoolExecutor.DiscardPolicy()
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStateException();
|
// Temp no-op
|
||||||
|
//throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ public class AsyncPathProcessor {
|
|||||||
getRejectedPolicy()
|
getRejectedPolicy()
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStateException();
|
// Temp no-op
|
||||||
|
//throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,8 @@ public class MultithreadedTracker {
|
|||||||
getRejectedPolicy()
|
getRejectedPolicy()
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStateException();
|
// Temp no-op
|
||||||
|
//throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ public class LeafConfig {
|
|||||||
Command.broadcastCommandMessage(sender, Component.text(success, NamedTextColor.GREEN));
|
Command.broadcastCommandMessage(sender, Component.text(success, NamedTextColor.GREEN));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Command.broadcastCommandMessage(sender, Component.text("Failed to reload config. See error in console!", NamedTextColor.RED));
|
Command.broadcastCommandMessage(sender, Component.text("Failed to reload config. See error in console!", NamedTextColor.RED));
|
||||||
LOGGER.error(e);
|
LOGGER.error("Failed to reload config!", e);
|
||||||
}
|
}
|
||||||
}, Util.ioPool());
|
}, Util.ioPool());
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ public class LeafConfig {
|
|||||||
|
|
||||||
LOGGER.info("Successfully loaded config in {}ms.", (System.nanoTime() - begin) / 1_000_000);
|
LOGGER.info("Successfully loaded config in {}ms.", (System.nanoTime() - begin) / 1_000_000);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LeafConfig.LOGGER.error("Failed to load config modules!", e);
|
LOGGER.error("Failed to load config modules!", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ public class LeafConfig {
|
|||||||
|
|
||||||
private static void loadConfig(boolean init) throws Exception {
|
private static void loadConfig(boolean init) throws Exception {
|
||||||
// Create config folder
|
// Create config folder
|
||||||
createDirectory(LeafConfig.I_CONFIG_FOLDER);
|
createDirectory(I_CONFIG_FOLDER);
|
||||||
|
|
||||||
leafGlobalConfig = new LeafGlobalConfig(init);
|
leafGlobalConfig = new LeafGlobalConfig(init);
|
||||||
|
|
||||||
|
|||||||
@@ -62,14 +62,14 @@ public class OptimizedPoweredRails {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean findPoweredRailSignalFaster(PoweredRailBlock self, Level world, BlockPos pos,
|
private static boolean findPoweredRailSignalFaster(PoweredRailBlock self, Level level, BlockPos pos,
|
||||||
boolean bl, int distance, RailShape shape,
|
boolean searchForward, int distance, RailShape shape,
|
||||||
Object2BooleanOpenHashMap<BlockPos> checkedPos) {
|
Object2BooleanOpenHashMap<BlockPos> checkedPos) {
|
||||||
BlockState blockState = world.getBlockState(pos);
|
BlockState blockState = level.getBlockState(pos);
|
||||||
boolean speedCheck = checkedPos.containsKey(pos) && checkedPos.getBoolean(pos);
|
boolean speedCheck = checkedPos.containsKey(pos) && checkedPos.getBoolean(pos);
|
||||||
if (speedCheck) {
|
if (speedCheck) {
|
||||||
return world.hasNeighborSignal(pos) ||
|
return level.hasNeighborSignal(pos) ||
|
||||||
findPoweredRailSignalFaster(self, world, pos, blockState, bl, distance + 1, checkedPos);
|
findPoweredRailSignalFaster(self, level, pos, blockState, searchForward, distance + 1, checkedPos);
|
||||||
} else {
|
} else {
|
||||||
if (blockState.is(self)) {
|
if (blockState.is(self)) {
|
||||||
RailShape railShape = blockState.getValue(SHAPE);
|
RailShape railShape = blockState.getValue(SHAPE);
|
||||||
@@ -84,8 +84,8 @@ public class OptimizedPoweredRails {
|
|||||||
)) {
|
)) {
|
||||||
return false;
|
return false;
|
||||||
} else if (blockState.getValue(POWERED)) {
|
} else if (blockState.getValue(POWERED)) {
|
||||||
return world.hasNeighborSignal(pos) ||
|
return level.hasNeighborSignal(pos) ||
|
||||||
findPoweredRailSignalFaster(self, world, pos, blockState, bl, distance + 1, checkedPos);
|
findPoweredRailSignalFaster(self, level, pos, blockState, searchForward, distance + 1, checkedPos);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -95,200 +95,200 @@ public class OptimizedPoweredRails {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean findPoweredRailSignalFaster(PoweredRailBlock self, Level level,
|
private static boolean findPoweredRailSignalFaster(PoweredRailBlock self, Level level,
|
||||||
BlockPos pos, BlockState state, boolean bl, int distance,
|
BlockPos pos, BlockState state, boolean searchForward, int distance,
|
||||||
Object2BooleanOpenHashMap<BlockPos> checkedPos) {
|
Object2BooleanOpenHashMap<BlockPos> checkedPos) {
|
||||||
if (distance >= RAIL_POWER_LIMIT - 1) return false;
|
if (distance >= RAIL_POWER_LIMIT - 1) return false;
|
||||||
int i = pos.getX();
|
int x = pos.getX();
|
||||||
int j = pos.getY();
|
int y = pos.getY();
|
||||||
int k = pos.getZ();
|
int z = pos.getZ();
|
||||||
boolean bl2 = true;
|
boolean flag = true;
|
||||||
RailShape railShape = state.getValue(SHAPE);
|
RailShape railShape = state.getValue(SHAPE);
|
||||||
switch (railShape.ordinal()) {
|
switch (railShape.ordinal()) {
|
||||||
case 0 -> {
|
case 0 -> {
|
||||||
if (bl) ++k;
|
if (searchForward) ++z;
|
||||||
else --k;
|
else --z;
|
||||||
}
|
}
|
||||||
case 1 -> {
|
case 1 -> {
|
||||||
if (bl) --i;
|
if (searchForward) --x;
|
||||||
else ++i;
|
else ++x;
|
||||||
}
|
}
|
||||||
case 2 -> {
|
case 2 -> {
|
||||||
if (bl) {
|
if (searchForward) {
|
||||||
--i;
|
--x;
|
||||||
} else {
|
} else {
|
||||||
++i;
|
++x;
|
||||||
++j;
|
++y;
|
||||||
bl2 = false;
|
flag = false;
|
||||||
}
|
}
|
||||||
railShape = RailShape.EAST_WEST;
|
railShape = RailShape.EAST_WEST;
|
||||||
}
|
}
|
||||||
case 3 -> {
|
case 3 -> {
|
||||||
if (bl) {
|
if (searchForward) {
|
||||||
--i;
|
--x;
|
||||||
++j;
|
++y;
|
||||||
bl2 = false;
|
flag = false;
|
||||||
} else {
|
} else {
|
||||||
++i;
|
++x;
|
||||||
}
|
}
|
||||||
railShape = RailShape.EAST_WEST;
|
railShape = RailShape.EAST_WEST;
|
||||||
}
|
}
|
||||||
case 4 -> {
|
case 4 -> {
|
||||||
if (bl) {
|
if (searchForward) {
|
||||||
++k;
|
++z;
|
||||||
} else {
|
} else {
|
||||||
--k;
|
--z;
|
||||||
++j;
|
++y;
|
||||||
bl2 = false;
|
flag = false;
|
||||||
}
|
}
|
||||||
railShape = RailShape.NORTH_SOUTH;
|
railShape = RailShape.NORTH_SOUTH;
|
||||||
}
|
}
|
||||||
case 5 -> {
|
case 5 -> {
|
||||||
if (bl) {
|
if (searchForward) {
|
||||||
++k;
|
++z;
|
||||||
++j;
|
++y;
|
||||||
bl2 = false;
|
flag = false;
|
||||||
} else {
|
} else {
|
||||||
--k;
|
--z;
|
||||||
}
|
}
|
||||||
railShape = RailShape.NORTH_SOUTH;
|
railShape = RailShape.NORTH_SOUTH;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return findPoweredRailSignalFaster(
|
return findPoweredRailSignalFaster(
|
||||||
self, level, new BlockPos(i, j, k),
|
self, level, new BlockPos(x, y, z),
|
||||||
bl, distance, railShape, checkedPos
|
searchForward, distance, railShape, checkedPos
|
||||||
) ||
|
) ||
|
||||||
(bl2 && findPoweredRailSignalFaster(
|
(flag && findPoweredRailSignalFaster(
|
||||||
self, level, new BlockPos(i, j - 1, k),
|
self, level, new BlockPos(x, y - 1, z),
|
||||||
bl, distance, railShape, checkedPos
|
searchForward, distance, railShape, checkedPos
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void powerLane(PoweredRailBlock self, Level world, BlockPos pos,
|
private static void powerLane(PoweredRailBlock self, Level level, BlockPos pos,
|
||||||
BlockState mainState, RailShape railShape) {
|
BlockState mainState, RailShape railShape) {
|
||||||
world.setBlock(pos, mainState.setValue(POWERED, true), UPDATE_FORCE_PLACE);
|
level.setBlock(pos, mainState.setValue(POWERED, true), UPDATE_FORCE_PLACE);
|
||||||
Object2BooleanOpenHashMap<BlockPos> checkedPos = CHECKED_POS_POOL;
|
Object2BooleanOpenHashMap<BlockPos> checkedPos = CHECKED_POS_POOL;
|
||||||
checkedPos.clear();
|
checkedPos.clear();
|
||||||
checkedPos.put(pos, true);
|
checkedPos.put(pos, true);
|
||||||
int[] count = new int[2];
|
int[] count = new int[2];
|
||||||
if (railShape == RailShape.NORTH_SOUTH) { // Order: +z, -z
|
if (railShape == RailShape.NORTH_SOUTH) { // Order: +z, -z
|
||||||
for (int i = 0; i < NORTH_SOUTH_DIR.length; ++i) {
|
for (int i = 0; i < NORTH_SOUTH_DIR.length; ++i) {
|
||||||
setRailPositionsPower(self, world, pos, checkedPos, count, i, NORTH_SOUTH_DIR[i]);
|
setRailPositionsPower(self, level, pos, checkedPos, count, i, NORTH_SOUTH_DIR[i]);
|
||||||
}
|
}
|
||||||
updateRails(self, false, world, pos, mainState, count);
|
updateRails(self, false, level, pos, mainState, count);
|
||||||
} else if (railShape == RailShape.EAST_WEST) { // Order: -x, +x
|
} else if (railShape == RailShape.EAST_WEST) { // Order: -x, +x
|
||||||
for (int i = 0; i < EAST_WEST_DIR.length; ++i) {
|
for (int i = 0; i < EAST_WEST_DIR.length; ++i) {
|
||||||
setRailPositionsPower(self, world, pos, checkedPos, count, i, EAST_WEST_DIR[i]);
|
setRailPositionsPower(self, level, pos, checkedPos, count, i, EAST_WEST_DIR[i]);
|
||||||
}
|
}
|
||||||
updateRails(self, true, world, pos, mainState, count);
|
updateRails(self, true, level, pos, mainState, count);
|
||||||
}
|
}
|
||||||
checkedPos.clear();
|
checkedPos.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void dePowerLane(PoweredRailBlock self, Level world, BlockPos pos,
|
private static void dePowerLane(PoweredRailBlock self, Level level, BlockPos pos,
|
||||||
BlockState mainState, RailShape railShape) {
|
BlockState mainState, RailShape railShape) {
|
||||||
world.setBlock(pos, mainState.setValue(POWERED, false), UPDATE_FORCE_PLACE);
|
level.setBlock(pos, mainState.setValue(POWERED, false), UPDATE_FORCE_PLACE);
|
||||||
int[] count = new int[2];
|
int[] count = new int[2];
|
||||||
if (railShape == RailShape.NORTH_SOUTH) { // Order: +z, -z
|
if (railShape == RailShape.NORTH_SOUTH) { // Order: +z, -z
|
||||||
for (int i = 0; i < NORTH_SOUTH_DIR.length; ++i) {
|
for (int i = 0; i < NORTH_SOUTH_DIR.length; ++i) {
|
||||||
setRailPositionsDePower(self, world, pos, count, i, NORTH_SOUTH_DIR[i]);
|
setRailPositionsDePower(self, level, pos, count, i, NORTH_SOUTH_DIR[i]);
|
||||||
}
|
}
|
||||||
updateRails(self, false, world, pos, mainState, count);
|
updateRails(self, false, level, pos, mainState, count);
|
||||||
} else if (railShape == RailShape.EAST_WEST) { // Order: -x, +x
|
} else if (railShape == RailShape.EAST_WEST) { // Order: -x, +x
|
||||||
for (int i = 0; i < EAST_WEST_DIR.length; ++i) {
|
for (int i = 0; i < EAST_WEST_DIR.length; ++i) {
|
||||||
setRailPositionsDePower(self, world, pos, count, i, EAST_WEST_DIR[i]);
|
setRailPositionsDePower(self, level, pos, count, i, EAST_WEST_DIR[i]);
|
||||||
}
|
}
|
||||||
updateRails(self, true, world, pos, mainState, count);
|
updateRails(self, true, level, pos, mainState, count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setRailPositionsPower(PoweredRailBlock self, Level world, BlockPos pos,
|
private static void setRailPositionsPower(PoweredRailBlock self, Level level, BlockPos pos,
|
||||||
Object2BooleanOpenHashMap<BlockPos> checkedPos, int[] count, int i, Direction dir) {
|
Object2BooleanOpenHashMap<BlockPos> checkedPos, int[] count, int i, Direction dir) {
|
||||||
for (int z = 1; z < RAIL_POWER_LIMIT; z++) {
|
for (int z = 1; z < RAIL_POWER_LIMIT; z++) {
|
||||||
BlockPos newPos = pos.relative(dir, z);
|
BlockPos newPos = pos.relative(dir, z);
|
||||||
BlockState state = world.getBlockState(newPos);
|
BlockState state = level.getBlockState(newPos);
|
||||||
if (checkedPos.containsKey(newPos)) {
|
if (checkedPos.containsKey(newPos)) {
|
||||||
if (!checkedPos.getBoolean(newPos))
|
if (!checkedPos.getBoolean(newPos))
|
||||||
break;
|
break;
|
||||||
count[i]++;
|
count[i]++;
|
||||||
} else if (!state.is(self) || state.getValue(POWERED) || !(world.hasNeighborSignal(newPos) ||
|
} else if (!state.is(self) || state.getValue(POWERED) || !(level.hasNeighborSignal(newPos) ||
|
||||||
findPoweredRailSignalFaster(self, world, newPos, state, true, 0, checkedPos) ||
|
findPoweredRailSignalFaster(self, level, newPos, state, true, 0, checkedPos) ||
|
||||||
findPoweredRailSignalFaster(self, world, newPos, state, false, 0, checkedPos))) {
|
findPoweredRailSignalFaster(self, level, newPos, state, false, 0, checkedPos))) {
|
||||||
checkedPos.put(newPos, false);
|
checkedPos.put(newPos, false);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
checkedPos.put(newPos, true);
|
checkedPos.put(newPos, true);
|
||||||
if (!state.getValue(POWERED)) {
|
if (!state.getValue(POWERED)) {
|
||||||
world.setBlock(newPos, state.setValue(POWERED, true), UPDATE_FORCE_PLACE);
|
level.setBlock(newPos, state.setValue(POWERED, true), UPDATE_FORCE_PLACE);
|
||||||
}
|
}
|
||||||
count[i]++;
|
count[i]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setRailPositionsDePower(PoweredRailBlock self, Level world, BlockPos pos,
|
private static void setRailPositionsDePower(PoweredRailBlock self, Level level, BlockPos pos,
|
||||||
int[] count, int i, Direction dir) {
|
int[] count, int i, Direction dir) {
|
||||||
Object2BooleanOpenHashMap<BlockPos> checkedPos = CHECKED_POS_POOL;
|
Object2BooleanOpenHashMap<BlockPos> checkedPos = CHECKED_POS_POOL;
|
||||||
checkedPos.clear();
|
checkedPos.clear();
|
||||||
for (int z = 1; z < RAIL_POWER_LIMIT; z++) {
|
for (int z = 1; z < RAIL_POWER_LIMIT; z++) {
|
||||||
BlockPos newPos = pos.relative(dir, z);
|
BlockPos newPos = pos.relative(dir, z);
|
||||||
BlockState state = world.getBlockState(newPos);
|
BlockState state = level.getBlockState(newPos);
|
||||||
if (!state.is(self) || !state.getValue(POWERED) || world.hasNeighborSignal(newPos) ||
|
if (!state.is(self) || !state.getValue(POWERED) || level.hasNeighborSignal(newPos) ||
|
||||||
findPoweredRailSignalFaster(self, world, newPos, state, true, 0, checkedPos) ||
|
findPoweredRailSignalFaster(self, level, newPos, state, true, 0, checkedPos) ||
|
||||||
findPoweredRailSignalFaster(self, world, newPos, state, false, 0, checkedPos))
|
findPoweredRailSignalFaster(self, level, newPos, state, false, 0, checkedPos))
|
||||||
break;
|
break;
|
||||||
if (state.getValue(POWERED)) {
|
if (state.getValue(POWERED)) {
|
||||||
world.setBlock(newPos, state.setValue(POWERED, false), UPDATE_FORCE_PLACE);
|
level.setBlock(newPos, state.setValue(POWERED, false), UPDATE_FORCE_PLACE);
|
||||||
}
|
}
|
||||||
count[i]++;
|
count[i]++;
|
||||||
}
|
}
|
||||||
checkedPos.clear();
|
checkedPos.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void shapeUpdateEnd(PoweredRailBlock self, Level world, BlockPos pos, BlockState mainState,
|
private static void shapeUpdateEnd(PoweredRailBlock self, Level level, BlockPos pos, BlockState mainState,
|
||||||
int endPos, Direction direction, int currentPos, BlockPos blockPos) {
|
int endPos, Direction direction, int currentPos, BlockPos blockPos) {
|
||||||
if (currentPos == endPos) {
|
if (currentPos == endPos) {
|
||||||
BlockPos newPos = pos.relative(direction, currentPos + 1);
|
BlockPos newPos = pos.relative(direction, currentPos + 1);
|
||||||
giveShapeUpdate(world, mainState, newPos, pos, direction);
|
giveShapeUpdate(level, mainState, newPos, pos, direction);
|
||||||
BlockState state = world.getBlockState(blockPos);
|
BlockState state = level.getBlockState(blockPos);
|
||||||
if (state.is(self) && state.getValue(SHAPE).isSlope()) giveShapeUpdate(world, mainState, newPos.above(), pos, direction);
|
if (state.is(self) && state.getValue(SHAPE).isSlope()) giveShapeUpdate(level, mainState, newPos.above(), pos, direction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void neighborUpdateEnd(PoweredRailBlock self, Level world, BlockPos pos, int endPos,
|
private static void neighborUpdateEnd(PoweredRailBlock self, Level level, BlockPos pos, int endPos,
|
||||||
Direction direction, Block block, int currentPos, BlockPos blockPos) {
|
Direction direction, Block block, int currentPos, BlockPos blockPos) {
|
||||||
if (currentPos == endPos) {
|
if (currentPos == endPos) {
|
||||||
BlockPos newPos = pos.relative(direction, currentPos + 1);
|
BlockPos newPos = pos.relative(direction, currentPos + 1);
|
||||||
world.neighborChanged(newPos, block, null);
|
level.neighborChanged(newPos, block, null);
|
||||||
BlockState state = world.getBlockState(blockPos);
|
BlockState state = level.getBlockState(blockPos);
|
||||||
if (state.is(self) && state.getValue(SHAPE).isSlope()) world.neighborChanged(newPos.above(), block, null);
|
if (state.is(self) && state.getValue(SHAPE).isSlope()) level.neighborChanged(newPos.above(), block, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void updateRailsSectionEastWestShape(PoweredRailBlock self, Level world, BlockPos pos,
|
private static void updateRailsSectionEastWestShape(PoweredRailBlock self, Level level, BlockPos pos,
|
||||||
int c, BlockState mainState, Direction dir,
|
int c, BlockState mainState, Direction dir,
|
||||||
int[] count, int countAmt) {
|
int[] count, int countAmt) {
|
||||||
BlockPos pos1 = pos.relative(dir, c);
|
BlockPos pos1 = pos.relative(dir, c);
|
||||||
if (c == 0 && count[1] == 0) giveShapeUpdate(world, mainState, pos1.relative(dir.getOpposite()), pos, dir.getOpposite());
|
if (c == 0 && count[1] == 0) giveShapeUpdate(level, mainState, pos1.relative(dir.getOpposite()), pos, dir.getOpposite());
|
||||||
shapeUpdateEnd(self, world, pos, mainState, countAmt, dir, c, pos1);
|
shapeUpdateEnd(self, level, pos, mainState, countAmt, dir, c, pos1);
|
||||||
giveShapeUpdate(world, mainState, pos1.below(), pos, Direction.DOWN);
|
giveShapeUpdate(level, mainState, pos1.below(), pos, Direction.DOWN);
|
||||||
giveShapeUpdate(world, mainState, pos1.above(), pos, Direction.UP);
|
giveShapeUpdate(level, mainState, pos1.above(), pos, Direction.UP);
|
||||||
giveShapeUpdate(world, mainState, pos1.north(), pos, Direction.NORTH);
|
giveShapeUpdate(level, mainState, pos1.north(), pos, Direction.NORTH);
|
||||||
giveShapeUpdate(world, mainState, pos1.south(), pos, Direction.SOUTH);
|
giveShapeUpdate(level, mainState, pos1.south(), pos, Direction.SOUTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void updateRailsSectionNorthSouthShape(PoweredRailBlock self, Level world, BlockPos pos,
|
private static void updateRailsSectionNorthSouthShape(PoweredRailBlock self, Level level, BlockPos pos,
|
||||||
int c, BlockState mainState, Direction dir,
|
int c, BlockState mainState, Direction dir,
|
||||||
int[] count, int countAmt) {
|
int[] count, int countAmt) {
|
||||||
BlockPos pos1 = pos.relative(dir, c);
|
BlockPos pos1 = pos.relative(dir, c);
|
||||||
giveShapeUpdate(world, mainState, pos1.west(), pos, Direction.WEST);
|
giveShapeUpdate(level, mainState, pos1.west(), pos, Direction.WEST);
|
||||||
giveShapeUpdate(world, mainState, pos1.east(), pos, Direction.EAST);
|
giveShapeUpdate(level, mainState, pos1.east(), pos, Direction.EAST);
|
||||||
giveShapeUpdate(world, mainState, pos1.below(), pos, Direction.DOWN);
|
giveShapeUpdate(level, mainState, pos1.below(), pos, Direction.DOWN);
|
||||||
giveShapeUpdate(world, mainState, pos1.above(), pos, Direction.UP);
|
giveShapeUpdate(level, mainState, pos1.above(), pos, Direction.UP);
|
||||||
shapeUpdateEnd(self, world, pos, mainState, countAmt, dir, c, pos1);
|
shapeUpdateEnd(self, level, pos, mainState, countAmt, dir, c, pos1);
|
||||||
if (c == 0 && count[1] == 0) giveShapeUpdate(world, mainState, pos1.relative(dir.getOpposite()), pos, dir.getOpposite());
|
if (c == 0 && count[1] == 0) giveShapeUpdate(level, mainState, pos1.relative(dir.getOpposite()), pos, dir.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void updateRails(PoweredRailBlock self, boolean eastWest, Level world,
|
private static void updateRails(PoweredRailBlock self, boolean eastWest, Level level,
|
||||||
BlockPos pos, BlockState mainState, int[] count) {
|
BlockPos pos, BlockState mainState, int[] count) {
|
||||||
if (eastWest) {
|
if (eastWest) {
|
||||||
for (int i = 0; i < EAST_WEST_DIR.length; ++i) {
|
for (int i = 0; i < EAST_WEST_DIR.length; ++i) {
|
||||||
@@ -298,21 +298,21 @@ public class OptimizedPoweredRails {
|
|||||||
Block block = mainState.getBlock();
|
Block block = mainState.getBlock();
|
||||||
for (int c = countAmt; c >= i; c--) {
|
for (int c = countAmt; c >= i; c--) {
|
||||||
BlockPos p = pos.relative(dir, c);
|
BlockPos p = pos.relative(dir, c);
|
||||||
if (c == 0 && count[1] == 0) world.neighborChanged(p.relative(dir.getOpposite()), block, null);
|
if (c == 0 && count[1] == 0) level.neighborChanged(p.relative(dir.getOpposite()), block, null);
|
||||||
neighborUpdateEnd(self, world, pos, countAmt, dir, block, c, p);
|
neighborUpdateEnd(self, level, pos, countAmt, dir, block, c, p);
|
||||||
world.neighborChanged(p.below(), block, null);
|
level.neighborChanged(p.below(), block, null);
|
||||||
world.neighborChanged(p.above(), block, null);
|
level.neighborChanged(p.above(), block, null);
|
||||||
world.neighborChanged(p.north(), block, null);
|
level.neighborChanged(p.north(), block, null);
|
||||||
world.neighborChanged(p.south(), block, null);
|
level.neighborChanged(p.south(), block, null);
|
||||||
BlockPos pos2 = pos.relative(dir, c).below();
|
BlockPos pos2 = pos.relative(dir, c).below();
|
||||||
world.neighborChanged(pos2.below(), block, null);
|
level.neighborChanged(pos2.below(), block, null);
|
||||||
world.neighborChanged(pos2.north(), block, null);
|
level.neighborChanged(pos2.north(), block, null);
|
||||||
world.neighborChanged(pos2.south(), block, null);
|
level.neighborChanged(pos2.south(), block, null);
|
||||||
if (c == countAmt) world.neighborChanged(pos.relative(dir, c + 1).below(), block, null);
|
if (c == countAmt) level.neighborChanged(pos.relative(dir, c + 1).below(), block, null);
|
||||||
if (c == 0 && count[1] == 0) world.neighborChanged(p.relative(dir.getOpposite()).below(), block, null);
|
if (c == 0 && count[1] == 0) level.neighborChanged(p.relative(dir.getOpposite()).below(), block, null);
|
||||||
}
|
}
|
||||||
for (int c = countAmt; c >= i; c--)
|
for (int c = countAmt; c >= i; c--)
|
||||||
updateRailsSectionEastWestShape(self, world, pos, c, mainState, dir, count, countAmt);
|
updateRailsSectionEastWestShape(self, level, pos, c, mainState, dir, count, countAmt);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < NORTH_SOUTH_DIR.length; ++i) {
|
for (int i = 0; i < NORTH_SOUTH_DIR.length; ++i) {
|
||||||
@@ -322,21 +322,21 @@ public class OptimizedPoweredRails {
|
|||||||
Block block = mainState.getBlock();
|
Block block = mainState.getBlock();
|
||||||
for (int c = countAmt; c >= i; c--) {
|
for (int c = countAmt; c >= i; c--) {
|
||||||
BlockPos p = pos.relative(dir, c);
|
BlockPos p = pos.relative(dir, c);
|
||||||
world.neighborChanged(p.west(), block, null);
|
level.neighborChanged(p.west(), block, null);
|
||||||
world.neighborChanged(p.east(), block, null);
|
level.neighborChanged(p.east(), block, null);
|
||||||
world.neighborChanged(p.below(), block, null);
|
level.neighborChanged(p.below(), block, null);
|
||||||
world.neighborChanged(p.above(), block, null);
|
level.neighborChanged(p.above(), block, null);
|
||||||
neighborUpdateEnd(self, world, pos, countAmt, dir, block, c, p);
|
neighborUpdateEnd(self, level, pos, countAmt, dir, block, c, p);
|
||||||
if (c == 0 && count[1] == 0) world.neighborChanged(p.relative(dir.getOpposite()), block, null);
|
if (c == 0 && count[1] == 0) level.neighborChanged(p.relative(dir.getOpposite()), block, null);
|
||||||
BlockPos pos2 = pos.relative(dir, c).below();
|
BlockPos pos2 = pos.relative(dir, c).below();
|
||||||
world.neighborChanged(pos2.west(), block, null);
|
level.neighborChanged(pos2.west(), block, null);
|
||||||
world.neighborChanged(pos2.east(), block, null);
|
level.neighborChanged(pos2.east(), block, null);
|
||||||
world.neighborChanged(pos2.below(), block, null);
|
level.neighborChanged(pos2.below(), block, null);
|
||||||
if (c == countAmt) world.neighborChanged(pos.relative(dir, c + 1).below(), block, null);
|
if (c == countAmt) level.neighborChanged(pos.relative(dir, c + 1).below(), block, null);
|
||||||
if (c == 0 && count[1] == 0) world.neighborChanged(p.relative(dir.getOpposite()).below(), block, null);
|
if (c == 0 && count[1] == 0) level.neighborChanged(p.relative(dir.getOpposite()).below(), block, null);
|
||||||
}
|
}
|
||||||
for (int c = countAmt; c >= i; c--)
|
for (int c = countAmt; c >= i; c--)
|
||||||
updateRailsSectionNorthSouthShape(self, world, pos, c, mainState, dir, count, countAmt);
|
updateRailsSectionNorthSouthShape(self, level, pos, c, mainState, dir, count, countAmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user