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 7b055a37be werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -37,7 +37,7 @@ public class ArrowStopper extends BasicListener {
private BukkitTask task;
private static final Vector NULL_VECTOR = new Vector(0, 0, 0);
private static final BlockFace[] BLOCK_FACES = {BlockFace.UP, BlockFace.DOWN, BlockFace.EAST, BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH};
Veraltet
Review

Statt der (aufwändigen) Verwaltung von LAST_LOCATIONS wäre es wsl. eleganter, mit entity.getVelocity() / 20 zu arbeiten. Das dürfte einiges an Verwaltungsaufwand sparen. Man könnte dann wsl. in run auch mit world.getEntitiesWithClass() arbeiten.

Statt der (aufwändigen) Verwaltung von LAST_LOCATIONS wäre es wsl. eleganter, mit entity.getVelocity() / 20 zu arbeiten. Das dürfte einiges an Verwaltungsaufwand sparen. Man könnte dann wsl. in run auch mit world.getEntitiesWithClass() arbeiten.
Veraltet
Review

?, entity.getVelocity() gibt einen Vektor zurück, welchen man nicht einfach durch 20 teilen kann

?, entity.getVelocity() gibt einen Vektor zurück, welchen man nicht einfach durch 20 teilen kann
Veraltet
Review

.divide?

.divide?
Veraltet
Review

braucht einen Vektor

braucht einen Vektor
Veraltet
Review

Du brauchst ja sowieso nur die einzelnen Komponenten, also teile doch einfach die durch 20....

Du brauchst ja sowieso nur die einzelnen Komponenten, also teile doch einfach die durch 20....
public ArrowStopper() {
super(Config.TechhiderActive ? EnumSet.of(FightState.RUNNING) : EnumSet.noneOf(FightState.class));
}
@ -74,28 +74,20 @@ public class ArrowStopper extends BasicListener {
private boolean checkBlocks(Block start, Block end) {
Block cursor = start;
while (cursor.getY() != end.getY()) {
boolean negativ = cursor.getY() - end.getY() < 0;
BlockFace face = negativ?BlockFace.UP:BlockFace.DOWN;
while (!cursor.getLocation().equals(end.getLocation())) {
BlockFace nearest = BlockFace.SELF;
double nearestDistance = cursor.getLocation().distance(end.getLocation());
for (BlockFace face : BLOCK_FACES) {
Veraltet
Review

Das kannst du nicht Asynchron machen (es dauert 50ms+, bis du einen Chunk für Blockabfragen bekommst), das produziert hier nur Threads.

Das kannst du nicht Asynchron machen (es dauert 50ms+, bis du einen Chunk für Blockabfragen bekommst), das produziert hier nur Threads.
Block relative = cursor.getRelative(face);
double distance = relative.getLocation().distance(end.getLocation());
if(distance < nearestDistance) {
Review

Ok, wenn ich jetzt richtig verstanden habe, was diese Funktion macht, dann tut sie linear zwischen den Blöcken interpolieren? Ich meine, das ist zwar nicht die korrekte Minecraft-Berechnungsreihenfolge, soll mir aber auch recht sein.

Ok, wenn ich jetzt richtig verstanden habe, was diese Funktion macht, dann tut sie linear zwischen den Blöcken interpolieren? Ich meine, das ist zwar nicht die korrekte Minecraft-Berechnungsreihenfolge, soll mir aber auch recht sein.
nearestDistance = distance;
nearest = face;
}
}
cursor = cursor.getRelative(nearest);
if(checkBlock(cursor))
return true;
cursor = cursor.getRelative(face);
}
while (cursor.getX() != end.getX()) {
boolean negativ = cursor.getX() - end.getX() < 0;
BlockFace face = negativ?BlockFace.EAST:BlockFace.WEST;
if(checkBlock(cursor))
return true;
cursor = cursor.getRelative(face);
}
while (cursor.getZ() != end.getZ()) {
boolean negativ = cursor.getZ() - end.getZ() < 0;
BlockFace face = negativ?BlockFace.SOUTH:BlockFace.NORTH;
if(checkBlock(cursor))
return true;
cursor = cursor.getRelative(face);
}
return false;