Arrows Stopping in Techhider Blocks #208
@ -57,9 +57,11 @@ public class ArrowStopper implements StateDependent {
|
||||
for (Entity entity : arrows) {
|
||||
if(entity.getTicksLived() > Config.ArrowTechhiderCollision)
|
||||
|
||||
continue;
|
||||
Lixfel
hat
Wenn man so häufig e.getKey() verwendet (weiter unten ja auch noch), ist es einfach wesentlich besser lesbar, wenn man das dann einfach mal als temporäre extravariable deklariert. Wenn man so häufig e.getKey() verwendet (weiter unten ja auch noch), ist es einfach wesentlich besser lesbar, wenn man das dann einfach mal als temporäre extravariable deklariert.
|
||||
if(((AbstractArrow) entity).isInBlock())
|
||||
Lixfel
hat
Das dürfte glaube ich nicht den Wert aus dem Set entfernen, sondern nur die Entity aus der Welt. LAST_LOCATION wird damit immer weiter zugemüllt. Das dürfte glaube ich nicht den Wert aus dem Set entfernen, sondern nur die Entity aus der Welt. LAST_LOCATION wird damit immer weiter zugemüllt.
|
||||
continue;
|
||||
Lixfel
hat
Bitte reduziere mal deine Map-Operationen. Optimierungsidee: Du machst LAST_LOCATION.remove(), und wenn du null bekommst, nimmst du deine EyeLocation, 1,5 Mapoperationen weniger. Bitte reduziere mal deine Map-Operationen. Optimierungsidee: Du machst LAST_LOCATION.remove(), und wenn du null bekommst, nimmst du deine EyeLocation, 1,5 Mapoperationen weniger.
|
||||
if(!LAST_LOCATION.containsKey(entity))
|
||||
LAST_LOCATION.put(entity, ((Player) ((AbstractArrow) entity).getShooter()).getEyeLocation());
|
||||
int distance = (int) Math.ceil(entity.getLocation().toVector().distance(LAST_LOCATION.get(entity).toVector()));
|
||||
int distance = (int) Math.ceil(entity.getLocation().toVector().distance(LAST_LOCATION.get(entity).toVector()) * 1.414213562);
|
||||
Lixfel
hat
Ich glaube, replace() wäre hier die angebrachtere Operation Ich glaube, replace() wäre hier die angebrachtere Operation
|
||||
try {
|
||||
checkBlock(entity.getFacing().getOppositeFace(), entity.getLocation().getBlock(), distance, entity.getLocation().getBlockY() - LAST_LOCATION.get(entity).getBlockY());
|
||||
} catch (TechHiddenBlock techHiddenBlock) {
|
||||
@ -103,13 +105,13 @@ public class ArrowStopper implements StateDependent {
|
||||
Bukkit.getOnlinePlayers().forEach(player -> player.sendBlockChange(block.getLocation(), Material.RED_STAINED_GLASS.createBlockData()));
|
||||
if(Config.HiddenBlocks.contains(blockToId(block)))
|
||||
throw new TechHiddenBlock();
|
||||
if(i != Math.abs(lastdown))
|
||||
checkBlock(face, block.getRelative(face), i - 1, lastdown);
|
||||
if(lastdown != 0) {
|
||||
boolean negativ = lastdown < 0;
|
||||
BlockFace toFace = negativ?BlockFace.UP:BlockFace.DOWN;
|
||||
checkBlock(face, block.getRelative(toFace), i, lastdown + (negativ?1:-1));
|
||||
checkBlock(face, block.getRelative(toFace), i - 1, lastdown + (negativ?1:-1));
|
||||
}
|
||||
if(i != 0 && Math.abs(lastdown) < i)
|
||||
checkBlock(face, block.getRelative(face), i - 1, lastdown);
|
||||
}
|
||||
|
||||
private class TechHiddenBlock extends Throwable {}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Hätte es gerne, dass du zur kognitiven Komplexitätsreduktion einfach am Ende prüfst (beim derzeitigen else), wie lange die Entity schon gelebt hat, und sie dann ggf. einfach nicht mehr einfügst.
Bitte auch noch "tote" Arrows/ stillstehende Arrows rauswerfen.