package jk_5.nailed.server.map.gamerule; import jk_5.nailed.api.gamerule.*; import javax.annotation.Nonnull; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * No description given * * @author jk-5 */ public class WrappedEditableGameRules implements EditableGameRules { private final Map<GameRuleKey<?>, EditableGameRule<?>> gameRuleMap = new HashMap<GameRuleKey<?>, EditableGameRule<?>>(); public WrappedEditableGameRules(GameRules wrapped) { //noinspection unchecked for(GameRule<Object> rule : (Collection<GameRule<Object>>) wrapped.list()){ EditableGameRule<Object> newRule = new DefaultEditableGameRule<Object>(rule.getKey()); newRule.setValue(rule.getValue()); gameRuleMap.put(rule.getKey(), newRule); } } @Nonnull @Override public <T> EditableGameRule<T> get(@Nonnull GameRuleKey<T> key) { //noinspection unchecked EditableGameRule<T> rule = (EditableGameRule<T>) gameRuleMap.get(key); if(rule == null){ rule = new DefaultEditableGameRule<T>(key); } return rule; } @Nonnull @Override public Collection<EditableGameRule<?>> list() { return Collections.unmodifiableCollection(gameRuleMap.values()); } @Override public String toString() { return "WrappedEditableGameRules{" + "gameRuleMap=" + gameRuleMap + '}'; } }