Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
Ursprung
776dd84668
Commit
f63d529b55
@ -33,13 +33,15 @@ import org.bukkit.block.PistonMoveReaction;
|
|||||||
import org.bukkit.block.TileState;
|
import org.bukkit.block.TileState;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.block.data.type.Piston;
|
import org.bukkit.block.data.type.Piston;
|
||||||
import org.bukkit.block.data.type.PistonHead;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
@Linked(LinkageType.LISTENER)
|
@Linked(LinkageType.LISTENER)
|
||||||
@ -71,7 +73,7 @@ public class PistonCalculator implements Listener {
|
|||||||
if (facing != direction) calcOrigin = origin.getRelative(facing, 3);
|
if (facing != direction) calcOrigin = origin.getRelative(facing, 3);
|
||||||
|
|
||||||
List<Block> toCalc = new LinkedList<>();
|
List<Block> toCalc = new LinkedList<>();
|
||||||
calcDirection(origin, calcOrigin, facing != direction ? origin.getRelative(facing) : null, facing, direction, blockSet, toCalc, unmovable);
|
calcDirection(origin, null, calcOrigin, facing != direction ? origin.getRelative(facing) : null, facing, direction, blockSet, toCalc, unmovable);
|
||||||
|
|
||||||
while (!toCalc.isEmpty()) {
|
while (!toCalc.isEmpty()) {
|
||||||
Block current = toCalc.remove(0);
|
Block current = toCalc.remove(0);
|
||||||
@ -87,7 +89,7 @@ public class PistonCalculator implements Listener {
|
|||||||
if (!isPiston(block) && (block.getPistonMoveReaction() == PistonMoveReaction.BLOCK || block.getPistonMoveReaction() == PistonMoveReaction.IGNORE || block.getPistonMoveReaction() == PistonMoveReaction.PUSH_ONLY || block.getState() instanceof TileState)) continue;
|
if (!isPiston(block) && (block.getPistonMoveReaction() == PistonMoveReaction.BLOCK || block.getPistonMoveReaction() == PistonMoveReaction.IGNORE || block.getPistonMoveReaction() == PistonMoveReaction.PUSH_ONLY || block.getState() instanceof TileState)) continue;
|
||||||
if (block.getType() != oppositeType) {
|
if (block.getType() != oppositeType) {
|
||||||
if (!blockSet.contains(block)) toCalc.add(block);
|
if (!blockSet.contains(block)) toCalc.add(block);
|
||||||
calcDirection(null, block, null, facing, direction, blockSet, toCalc, unmovable);
|
calcDirection(null, origin, block, null, facing, direction, blockSet, toCalc, unmovable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,7 +99,7 @@ public class PistonCalculator implements Listener {
|
|||||||
return new CalculationResult(blockSet.size(), blockSet.size() > 12, unmovable.get());
|
return new CalculationResult(blockSet.size(), blockSet.size() > 12, unmovable.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void calcDirection(Block origin, Block calcOrigin, Block ignore, BlockFace facing, BlockFace direction, Set<Block> blockSet, List<Block> toCalc, AtomicBoolean unmovable) {
|
private void calcDirection(Block origin, Block blockOrigin, Block calcOrigin, Block ignore, BlockFace facing, BlockFace direction, Set<Block> blockSet, List<Block> toCalc, AtomicBoolean unmovable) {
|
||||||
for (int i = 1; i < 13; i++) {
|
for (int i = 1; i < 13; i++) {
|
||||||
Block block = calcOrigin.getRelative(direction, i);
|
Block block = calcOrigin.getRelative(direction, i);
|
||||||
if (block.equals(ignore)) return;
|
if (block.equals(ignore)) return;
|
||||||
@ -107,6 +109,10 @@ public class PistonCalculator implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (block.getType().isAir()) return;
|
if (block.getType().isAir()) return;
|
||||||
|
if (facing == direction && block.equals(blockOrigin)) {
|
||||||
|
unmovable.set(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (facing != direction && (block.equals(origin) || block.getRelative(facing.getOppositeFace()).equals(origin))) return;
|
if (facing != direction && (block.equals(origin) || block.getRelative(facing.getOppositeFace()).equals(origin))) return;
|
||||||
if (!blockSet.contains(block)) toCalc.add(block);
|
if (!blockSet.contains(block)) toCalc.add(block);
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren