Fix Piston retract with Block on Region Floor and Piston above #271
@ -144,7 +144,7 @@ public class Region {
|
||||
}
|
||||
|
||||
public boolean inRegion(Block block){
|
||||
return in2dRegion(block) && block.getY() >= minY - 1 && block.getY() < maxY;
|
||||
return in2dRegion(block) && minY <= block.getY() && block.getY() < maxY;
|
||||
|
||||
}
|
||||
|
||||
public interface TriConsumer<T, V, U>{
|
||||
|
@ -39,9 +39,8 @@ public class PistonListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void handlePistonExtend(BlockPistonExtendEvent e){
|
||||
BlockFace b = e.getDirection().getOppositeFace();
|
||||
for(Block block : e.getBlocks()){
|
||||
if(!Config.BlueExtendRegion.inRegion(block.getRelative(b)) && !Config.RedExtendRegion.inRegion(block.getRelative(b))){
|
||||
if(!Config.BlueExtendRegion.inRegion(block) && !Config.RedExtendRegion.inRegion(block)){
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@ -50,9 +49,8 @@ public class PistonListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void handlePistonRetract(BlockPistonRetractEvent e){
|
||||
BlockFace b = e.getDirection().getOppositeFace();
|
||||
for(Block block : e.getBlocks()){
|
||||
if(!Config.BlueExtendRegion.inRegion(block.getRelative(b)) && !Config.RedExtendRegion.inRegion(block.getRelative(b))) {
|
||||
if(!Config.BlueExtendRegion.inRegion(block) && !Config.RedExtendRegion.inRegion(block)) {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Das ist schlicht inkorrekt. Am Region-System hängen nicht nur Pistons dran, das verursacht hier nur unvorhergesehene Probleme. Was ist überhaupt das Problem?
Also erstmal wird diese Methode nur an genau 2 Stellen gecalled, welche im PistonRetrace und Expand sind und niergends sonst, laut Intelij. Somit ist dies absolut richtig. Und inRegion sollte nicht gucken, ob es unter minY liegt und unter maxY das ist schlicht einfach für inRegion falsch!
Derzeit wird die Methode nur beim Piston gecallt, ist jedoch nicht einfach nur dafür gedacht. Bitte lese dir nochmal exakt den code durch, diese Methode prüft nicht ob es unter minY ist. Das ist schlicht die falsche Stelle für den Fix. Diese Methode ist so richtig, der Fix macht im Gegensatz die Methode kaputt. Die kaputte Methode ist hierbei der Listener und nicht inRegion.
Aber ist es so falsch dann
minY <= block.getY()
logisch umzudrehen und zu gucken obblock.getY() >= minY - 1
ist. Das dürfte bis auf der-1
sich genau gleich verhalten. Du hast einfach den code was das angeht etwas komisch geschrieben. und mein fix war auch eigentlichminY < block.getY()
jedoch hat der laut Zeanon nicht getan.Und wie soll man laut dir dann bitte das ganze im Listener beheben, wenn dieser diese Methode verwendet?
Das -1 ist ein one-off FEHLER. Hast du dir mal angeschaut, was für Blockpositionen da überhaupt vom Pistonlistener überprüft werden?
Irgendwelche relative Block positions. Jedoch weiterhin ist das umdrehen der If abfrage, keine logische Änderung, sondern eine, womit besser zu lesen ist, was dort passiert. Dies sollte trotzdem irgendwie behoben werden, weil man so Blöcke aus der Ebene über dem Boden nicht wegziehen kann nach oben.
Ja, der Fehler sollte behoben werden, inRegion ist jedoch die falsche Stelle, weil da nix kaputt ist. Die irgendwelchen relativen Blockpositions sind schätzungsweise mehrere (Slime oder etc. sei Dank). Und ich finde min <= x < max besser zu lesen als x >= min und x < max, aber das ist wohl Geschmacksfrage und keine technische.
Gut und wie willst du diese Sache dann beheben?
Erstmal anschauen, welche "irgendwelchen" relativen Blockpositions da rauskommen, und anschauen, ob das ein generelles Problem ist, oder nur nach unten positionierten Pistons mit Eigenschaft xy passiert.
ok. ich weiß nur nicht, da ich nicht so ganz im FightSystem drin bin ob ich das so gut schaffe.
Wenn du Region gefunden hast, wirst du auch den PistonListener finden, und der ist ein für sich abgeschlossenes Modul.
HABS GEFUNDEN