SteamWar/FightSystem
Archiviert
13
1

Arrows Stopping in Techhider Blocks #208

Manuell gemergt
Lixfel hat 17 Commits von arrow-in-techhider nach master 2021-01-02 09:20:42 +01:00 zusammengeführt
Nur Änderungen aus Commit 5eedf7bf50 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -26,7 +26,6 @@ import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependent; import de.steamwar.fightsystem.states.StateDependent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.entity.AbstractArrow; import org.bukkit.entity.AbstractArrow;
@ -52,18 +51,14 @@ public class ArrowStopper implements StateDependent {
if(arrows.isEmpty()) if(arrows.isEmpty())
return; return;
for (Entity entity : arrows) { for (Entity entity : arrows) {
if(entity.getTicksLived() > Config.ArrowTechhiderCollision){ if(entity.getTicksLived() > Config.ArrowTechhiderCollision ||
LAST_LOCATION.remove(entity); ((AbstractArrow) entity).isInBlock()){
Veraltet
Review

Landen arrows wirklich in Blöcken?

Landen arrows wirklich in Blöcken?
continue;
}
if(((AbstractArrow) entity).isInBlock()) {
LAST_LOCATION.remove(entity); LAST_LOCATION.remove(entity);
Veraltet
Review

Auch wenn die arrows Empty sind, sollten die Pfeile aus der LAST_LOCATION entfernt werden (also mehr oder weniger der normale Programmfluss genommen werden), oder?

Auch wenn die arrows Empty sind, sollten die Pfeile aus der LAST_LOCATION entfernt werden (also mehr oder weniger der normale Programmfluss genommen werden), oder?
continue; continue;
} }
Veraltet
Review

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.

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.
Veraltet
Review

Bitte auch noch "tote" Arrows/ stillstehende Arrows rauswerfen.

Bitte auch noch "tote" Arrows/ stillstehende Arrows rauswerfen.
if(!LAST_LOCATION.containsKey(entity)) if(!LAST_LOCATION.containsKey(entity))
Veraltet
Review

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.
LAST_LOCATION.put(entity, ((Player) ((AbstractArrow) entity).getShooter()).getEyeLocation()); LAST_LOCATION.put(entity, ((Player) ((AbstractArrow) entity).getShooter()).getEyeLocation());
Veraltet
Review

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.
Location last = LAST_LOCATION.get(entity); Location last = LAST_LOCATION.remove(entity);
Veraltet
Review

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.
LAST_LOCATION.remove(entity);
if(checkBlocks(entity.getLocation().getBlock(), last.getBlock())) if(checkBlocks(entity.getLocation().getBlock(), last.getBlock()))
entity.remove(); entity.remove();
else else
Veraltet
Review

Ich glaube, replace() wäre hier die angebrachtere Operation

Ich glaube, replace() wäre hier die angebrachtere Operation
@ -78,7 +73,7 @@ public class ArrowStopper implements StateDependent {
@Override @Override
Veraltet
Review

Eine solche Funktionalität sollte bereits mit dem Techhider bzw. RecordSystem enthalten sein, wenn würde ich diese generalisieren.

Eine solche Funktionalität sollte bereits mit dem Techhider bzw. RecordSystem enthalten sein, wenn würde ich diese generalisieren.
public void enable() { public void enable() {
task = Bukkit.getScheduler().runTaskTimerAsynchronously(FightSystem.getPlugin(), this::run, 1, 0); task = Bukkit.getScheduler().runTaskTimerAsynchronously(FightSystem.getPlugin(), this::run, 1, 1);
} }
Veraltet
Review

Spieler heben keine Pfeile auf (ist unterbunden)

Spieler heben keine Pfeile auf (ist unterbunden)
@Override @Override