/*******************************************************************************
* Copyright (C) 2014 Travis Ralston (turt2live)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package com.turt2live.antishare.bukkit.groups;
import com.turt2live.antishare.ASGameMode;
import com.turt2live.antishare.bukkit.lists.*;
import com.turt2live.antishare.bukkit.util.BukkitUtils;
import com.turt2live.antishare.configuration.Configuration;
import com.turt2live.antishare.configuration.groups.Group;
import com.turt2live.antishare.engine.list.RejectionList;
import com.turt2live.antishare.engine.list.TrackedTypeList;
import com.turt2live.antishare.object.ABlock;
import com.turt2live.antishare.object.AEntity;
import com.turt2live.antishare.object.Rejectable;
import java.util.ArrayList;
import java.util.List;
/**
* Bukkit group
*
* @author turt2live
*/
public class BukkitGroup extends Group {
/**
* Creates a new group from the configuration and manager supplied
*
* @param configuration the configuration to be used, cannot be null
*/
public BukkitGroup(Configuration configuration) {
super(configuration);
}
@Override
public TrackedTypeList<ABlock> getBlockTrackedList(ASGameMode gameMode) {
return getBlockTrackedList(gameMode, super.configuration);
}
@Override
public TrackedTypeList<AEntity> getEntityTrackedList(ASGameMode gameMode) {
return getEntityTrackedList(gameMode, super.configuration);
}
@Override
public <T extends Rejectable> RejectionList<T> getRejectionList(RejectionList.ListType type) {
return getRejectionList(type, super.configuration);
}
static TrackedTypeList<ABlock> getBlockTrackedList(ASGameMode gameMode, Configuration configuration) {
if (gameMode == null) throw new IllegalArgumentException("gamemode cannot be null");
List<String> strings = configuration.getStringList("blocks." + gameMode.name().toLowerCase(), new ArrayList<String>());
BukkitList<ABlock> blocks = new BukkitList<>();
new PopulatorBlockList<ABlock>().populateList(blocks, strings);
return blocks;
}
static TrackedTypeList<AEntity> getEntityTrackedList(ASGameMode gameMode, Configuration configuration) {
if (gameMode == null) throw new IllegalArgumentException("gamemode cannot be null");
List<String> strings = configuration.getStringList("entities." + gameMode.name().toLowerCase(), new ArrayList<String>());
BukkitList<AEntity> entities = new BukkitList<>();
new PopulatorEntityList<AEntity>().populateList(entities, strings);
return entities;
}
static <T extends Rejectable> RejectionList<T> getRejectionList(RejectionList.ListType type, Configuration configuration) {
if (type == null) throw new IllegalArgumentException("list type cannot be null");
String configKey = BukkitUtils.getStringName(type);
if (configKey == null)
throw new NullPointerException("Yell at turt2live to add this: " + type.name());
List<String> strings = configuration.getStringList("lists." + configKey, new ArrayList<String>());
Populator<T> populator = null;
// Determine derived type
switch (type) {
case ENTITY_BREAK:
case ENTITY_INTERACT:
case ENTITY_PLACE:
case ENTITY_ATTACK:
populator = new PopulatorEntityList<>();
break;
case BLOCK_PLACE:
case BLOCK_BREAK:
case INTERACTION:
populator = new PopulatorBlockList<>();
break;
case ITEM_PICKUP:
case ITEM_USE:
case ITEM_DROP:
case DEATH:
populator = new PopulatorItemList<>();
break;
case MOB_CREATE:
break;
case COMMANDS:
populator = new PopulatorCommandList<>();
break;
default:
populator = null;
break;
}
if (populator == null)
throw new NullPointerException("List not implemented: " + type.name());
BukkitList<T> list = new BukkitList<>(type);
populator.populateList(list, strings);
return list;
}
}