SteamWar/SpigotCore
Archiviert
13
0

Add click callback for REntityServer #227

Zusammengeführt
Lixfel hat 9 Commits von REntityCallback nach master 2023-02-05 19:18:53 +01:00 zusammengeführt
Nur Änderungen aus Commit c02d7c2c7d werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -35,6 +35,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Consumer;
@ -49,7 +50,7 @@ public class REntityServer implements Listener {
private static final Reflection.FieldAccessor<Integer> useEntityTarget = Reflection.getField(useEntity, int.class, 0);
private static final Reflection.FieldAccessor<Integer> useEntityAction = Reflection.getField(useEntity, int.class, 1);
Lixfel markierte diese Unterhaltung als gelöst
Review

Entweder ConcurrentHashMap oder synchronized-Blöcke (ansonsten werden ConcurrentModificationExceptions fliegen)

Entweder ConcurrentHashMap oder synchronized-Blöcke (ansonsten werden ConcurrentModificationExceptions fliegen)
private final HashMap<Integer, REntity> entityMap = new HashMap<>();
private final ConcurrentHashMap<Integer, REntity> entityMap = new ConcurrentHashMap<>();
private final HashMap<Long, HashSet<REntity>> entities = new HashMap<>();
private final HashMap<Long, Set<Player>> players = new HashMap<>();
private final HashMap<Player, Location> lastLocation = new HashMap<>();
@ -60,26 +61,23 @@ public class REntityServer implements Listener {
private BiFunction<Player, Object, Object> filter = (player, packet) -> {
if (callback == null) return packet;
int target = useEntityTarget.get(packet);
Lixfel markierte diese Unterhaltung als gelöst
Review

statt containsKey...get direkt ein get und dann ein Null-Check bitte.

statt containsKey...get direkt ein get und dann ein Null-Check bitte.
if (!entityMap.containsKey(target)) return packet;
REntity entity = entityMap.get(target);
int action = useEntityAction.get(packet);
if (action == 2) action = 0;
int finalAction = action;
if (entity == null) return packet;
Lixfel markierte diese Unterhaltung als gelöst
Review

Du könntest schon hier direkt mit trinary eine EntityAction draus machen (und dir dann das if und final sparen)

Du könntest schon hier direkt mit trinary eine EntityAction draus machen (und dir dann das if und final sparen)
EntityAction action = useEntityAction.get(packet) == 1 ? EntityAction.ATTACK : EntityAction.INTERACT;
Bukkit.getScheduler().runTask(Core.getInstance(), () -> {
callback.onAction(player, entity, finalAction == 0 ? EntityAction.INTERACT : EntityAction.ATTACK);
callback.onAction(player, entity, action);
});
Lixfel markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Bitte direkt runTask draus machen.

Bitte direkt runTask draus machen.
return null;
};
public REntityServer() {
Core.getInstance().getServer().getPluginManager().registerEvents(this, Core.getInstance());
TinyProtocol.instance.addFilter(useEntity, filter);
}
public void setCallback(EntityActionListener callback) {
Lixfel markierte diese Unterhaltung als gelöst
Review

Ich würde das erst machen, wenn das erste mal das Callback gesetzt wird (null-Check)

Ich würde das erst machen, wenn das erste mal das Callback gesetzt wird (null-Check)
this.callback = callback;
TinyProtocol.instance.addFilter(useEntity, filter);
}
public void addPlayer(Player player) {