package com.comphenix.xp.lookup; import java.util.HashSet; import java.util.Set; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import com.comphenix.xp.Action; public class PlayerTree extends ActionTree<PlayerQuery> implements Multipliable<PlayerTree> { // DON'T CARE fields are marked with NULL protected Parameter<String> names; protected Parameter<String> groups; protected Parameter<DamageCause> deathCause; protected Parameter<Boolean> murder; // For cloning protected PlayerTree(PlayerTree other, double newMultiplier) { super(other, newMultiplier); if (other == null) throw new IllegalArgumentException("other"); this.names = other.names; this.groups = other.groups; this.deathCause = other.deathCause; this.murder = other.murder; } public PlayerTree(double multiplier) { super(multiplier); this.names = new Parameter<String>(); this.groups = new Parameter<String>(); this.deathCause = new Parameter<DamageCause>(); this.murder = new Parameter<Boolean>(); } @Override protected Integer putFromParameters(PlayerQuery source, Integer id) { int paramCount = 0; if (source.hasNames()) { names.put(source.getNames(), id); paramCount++; } if (source.hasGroups()) { groups.put(source.getGroups(), id); paramCount++; } if (source.hasDeathCause()) { deathCause.put(source.getDeathCause(), id); paramCount++; } if (source.hasMurder()) { murder.put(source.getMurder(), id); paramCount++; } return paramCount; } @Override protected Set<Integer> getFromParameters(PlayerQuery source) { Set<Integer> candidates = new HashSet<Integer>(flatten.keySet()); if (source.hasNames()) { names.retain(candidates, source.getNames()); } if (source.hasGroups()) { groups.retain(candidates, source.getGroups()); } if (source.hasDeathCause()) { deathCause.retain(candidates, source.getDeathCause()); } if (source.hasMurder()) { murder.retain(candidates, source.getMurder()); } return candidates; } @Override protected void putAllParameters(SearchTree<PlayerQuery, Action> source, Integer offset) { PlayerTree tree = (PlayerTree) source; names.putAll(tree.names, offset); groups.putAll(tree.groups, offset); deathCause.putAll(tree.deathCause, offset); murder.putAll(tree.murder, offset); } @Override public PlayerTree withMultiplier(double newMultiplier) { return new PlayerTree(this, newMultiplier); } }