Add Set<?> serializer + fix some errors

This commit is contained in:
nossr50 2019-06-14 13:49:01 -07:00
parent ffa35d0179
commit 8eba1dda1f
11 changed files with 135 additions and 55 deletions

View File

@ -69,6 +69,7 @@ import org.bukkit.Material;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
/**
* The Config Manager handles initializing, loading, and unloading registers for all configs that mcMMO uses
@ -261,14 +262,12 @@ public final class ConfigManager {
customSerializers = TypeSerializers.getDefaultSerializers().newChild();
mcMMO.p.getLogger().info("Registering custom type serializers for Configurate...");
customSerializers.registerType(new TypeToken<PrimarySkillType>() {
}, new CustomEnumValueSerializer());
customSerializers.registerType(new TypeToken<Material>() {
}, new CustomEnumValueSerializer());
customSerializers.registerType(new TypeToken<PartyFeature>() {
}, new CustomEnumValueSerializer());
customSerializers.registerType(new TypeToken<FormulaType>() {
}, new CustomEnumValueSerializer());
customSerializers.registerType(new TypeToken<PrimarySkillType>() {}, new CustomEnumValueSerializer());
customSerializers.registerType(new TypeToken<Material>() {}, new CustomEnumValueSerializer());
customSerializers.registerType(new TypeToken<PartyFeature>() {}, new CustomEnumValueSerializer());
customSerializers.registerType(new TypeToken<FormulaType>() {}, new CustomEnumValueSerializer());
customSerializers.registerType(new TypeToken<Set<?>>() {}, new SetSerializer());
customSerializers.registerType(TypeToken.of(Repairable.class), new RepairableSerializer());
customSerializers.registerType(TypeToken.of(Salvageable.class), new SalvageableSerializer());
customSerializers.registerType(TypeToken.of(MinecraftMaterialWrapper.class), new MinecraftMaterialWrapperSerializer());

View File

@ -303,16 +303,6 @@ public class MainConfig extends ConfigValidated {
return getBooleanValue(DOUBLE_DROPS, StringUtils.getCapitalized(skill.toString()), StringUtils.getPrettyItemString(material).replace(" ", "_"));
}
/* Acrobatics */
public boolean getDodgeLightningDisabled() {
return getBooleanValue(SKILLS, ACROBATICS, PREVENT + DODGE + LIGHTNING);
}
/* Alchemy */
public boolean getEnabledForHoppers() {
return getBooleanValue(SKILLS, ALCHEMY, ENABLED + FOR_HOPPERS);
}
public boolean getPreventHopperTransferIngredients() {
return getBooleanValue(SKILLS, ALCHEMY, PREVENT_HOPPER_TRANSFER_INGREDIENTS);
}
@ -321,10 +311,6 @@ public class MainConfig extends ConfigValidated {
return getBooleanValue(SKILLS, ALCHEMY, PREVENT_HOPPER_TRANSFER_BOTTLES);
}
public boolean getUnarmedItemsAsUnarmed() {
return getBooleanValue(SKILLS, UNARMED, ITEMS + AS + UNARMED);
}
/* Taming */
public Material getTamingCOTWMaterial(EntityType type) {
return Material.matchMaterial(getStringValue(SKILLS, TAMING, CALL_OF_THE_WILD1, StringUtils.getPrettyEntityTypeString(type), ITEM + MATERIAL));
@ -350,26 +336,4 @@ public class MainConfig extends ConfigValidated {
return getDoubleValue(SKILLS, TAMING, CALL_OF_THE_WILD1, RANGE);
}
/* Woodcutting */
public boolean getWoodcuttingDoubleDropsEnabled(BlockData material) {
return getBooleanValue(DOUBLE_DROPS, WOODCUTTING, StringUtils.getFriendlyConfigBlockDataString(material));
}
public boolean getTreeFellerSoundsEnabled() {
return getBooleanValue(SKILLS, WOODCUTTING, TREE_FELLER + SOUNDS);
}
/* AFK Leveling */
public boolean getHerbalismPreventAFK() {
return getBooleanValue(SKILLS, HERBALISM, PREVENT_AFK + LEVELING);
}
/* PVP & PVE Settings */
public boolean getPVPEnabled(PrimarySkillType skill) {
return getBooleanValue(SKILLS, StringUtils.getCapitalized(skill.toString()), ENABLED + FOR_PVP);
}
public boolean getPVEEnabled(PrimarySkillType skill) {
return getBooleanValue(SKILLS, StringUtils.getCapitalized(skill.toString()), ENABLED + FOR_PVE);
}
}

View File

@ -0,0 +1,63 @@
package com.gmail.nossr50.config.hocon.serializers;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import com.google.common.reflect.TypeToken;
import ninja.leaping.configurate.ConfigurationNode;
import ninja.leaping.configurate.objectmapping.ObjectMappingException;
import ninja.leaping.configurate.objectmapping.serialize.TypeSerializer;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.lang.reflect.ParameterizedType;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SetSerializer implements TypeSerializer<Set<?>> {
@Nullable
@Override
public Set<?> deserialize(@NonNull TypeToken<?> type, @NonNull ConfigurationNode value) throws ObjectMappingException {
if (!(type.getType() instanceof ParameterizedType)) {
throw new ObjectMappingException("Raw types are not supported for collections");
}
TypeToken<?> entryType = type.resolveType(Set.class.getTypeParameters()[0]);
TypeSerializer entrySerial = value.getOptions().getSerializers().get(entryType);
if (entrySerial == null) {
throw new ObjectMappingException("No applicable type serializer for type " + entryType);
}
if (value.hasListChildren()) {
List<? extends ConfigurationNode> values = value.getChildrenList();
Set<Object> ret = new HashSet<>(values.size());
for (ConfigurationNode ent : values) {
ret.add(entrySerial.deserialize(entryType, ent));
}
return ret;
} else {
Object unwrappedVal = value.getValue();
if (unwrappedVal != null) {
return Sets.newHashSet(deserialize(entryType, value));
}
}
return new HashSet<>();
}
@Override
public void serialize(@NonNull TypeToken<?> type, @Nullable Set<?> obj, @NonNull ConfigurationNode value) throws ObjectMappingException {
if (!(type.getType() instanceof ParameterizedType)) {
throw new ObjectMappingException("Raw types are not supported for collections");
}
TypeToken<?> entryType = type.resolveType(Set.class.getTypeParameters()[0]);
TypeSerializer entrySerial = value.getOptions().getSerializers().get(entryType);
if (entrySerial == null) {
throw new ObjectMappingException("No applicable type serializer for type " + entryType);
}
value.setValue(ImmutableList.of());
for (Object ent : obj) {
entrySerial.serialize(entryType, ent, value.getAppendedNode());
}
}
}

View File

@ -1,8 +1,60 @@
package com.gmail.nossr50.config.hocon.skills.herbalism;
import ninja.leaping.configurate.objectmapping.Setting;
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
import java.util.HashSet;
@ConfigSerializable
public class ConfigHerbalism {
private static final HashSet<String> DEFAULT_BONUS_DROPS;
static {
DEFAULT_BONUS_DROPS = new HashSet<>();
DEFAULT_BONUS_DROPS.add("minecraft:beetroots");
DEFAULT_BONUS_DROPS.add("minecraft:beetroot");
DEFAULT_BONUS_DROPS.add("minecraft:brown_mushroom");
DEFAULT_BONUS_DROPS.add("minecraft:cactus");
DEFAULT_BONUS_DROPS.add("minecraft:carrots");
DEFAULT_BONUS_DROPS.add("minecraft:carrot");
DEFAULT_BONUS_DROPS.add("minecraft:cocoa");
DEFAULT_BONUS_DROPS.add("minecraft:cocoa_beans");
DEFAULT_BONUS_DROPS.add("minecraft:wheat");
DEFAULT_BONUS_DROPS.add("minecraft:melon");
DEFAULT_BONUS_DROPS.add("minecraft:melon_slice");
DEFAULT_BONUS_DROPS.add("minecraft:potatoes");
DEFAULT_BONUS_DROPS.add("minecraft:potato");
DEFAULT_BONUS_DROPS.add("minecraft:pumpkin");
DEFAULT_BONUS_DROPS.add("minecraft:red_mushroom");
DEFAULT_BONUS_DROPS.add("minecraft:sugar_cane");
DEFAULT_BONUS_DROPS.add("minecraft:vine");
DEFAULT_BONUS_DROPS.add("minecraft:lily_pad");
DEFAULT_BONUS_DROPS.add("minecraft:red_tulip");
DEFAULT_BONUS_DROPS.add("minecraft:white_tulip");
DEFAULT_BONUS_DROPS.add("minecraft:pink_tulip");
DEFAULT_BONUS_DROPS.add("minecraft:orange_tulip");
DEFAULT_BONUS_DROPS.add("minecraft:dandelion");
DEFAULT_BONUS_DROPS.add("minecraft:poppy");
DEFAULT_BONUS_DROPS.add("minecraft:blue_orchid");
DEFAULT_BONUS_DROPS.add("minecraft:allium");
DEFAULT_BONUS_DROPS.add("minecraft:azure_bluet");
DEFAULT_BONUS_DROPS.add("minecraft:oxeye_daisy");
DEFAULT_BONUS_DROPS.add("minecraft:sunflower");
DEFAULT_BONUS_DROPS.add("minecraft:lilac");
DEFAULT_BONUS_DROPS.add("minecraft:rose_bush");
DEFAULT_BONUS_DROPS.add("minecraft:peony");
}
@Setting(value = "Bonus-Drops", comment = "The list of whitelisted bonus drops." +
"\nInclude both the source block and drops that can be doubled" +
"\nHerbalism and other gathering skills offer a chance to get extra drops when harvesting the block.")
private HashSet<String> herbalismDoubleDropWhiteList = DEFAULT_BONUS_DROPS;
public HashSet<String> getBonusDrops() {
return herbalismDoubleDropWhiteList;
}
}

View File

@ -4,16 +4,17 @@ import ninja.leaping.configurate.objectmapping.Setting;
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
import java.util.ArrayList;
import java.util.HashSet;
import static org.bukkit.Material.*;
@ConfigSerializable
public class ConfigMining {
private static final ArrayList<String> DEFAULT_BONUS_DROPS;
private static final HashSet<String> DEFAULT_BONUS_DROPS;
static {
DEFAULT_BONUS_DROPS = new ArrayList<>();
DEFAULT_BONUS_DROPS = new HashSet<>();
DEFAULT_BONUS_DROPS.add(ANDESITE.getKey().toString());
DEFAULT_BONUS_DROPS.add(DIORITE.getKey().toString());
@ -46,7 +47,7 @@ public class ConfigMining {
@Setting(value = "Z-Bonus-Drops", comment = "Bonus drops will be allowed for these blocks." +
"\nUse Minecraft friendly names for entries, not Bukkit material names.")
private ArrayList<String> bonusDrops = DEFAULT_BONUS_DROPS;
private HashSet<String> bonusDrops = DEFAULT_BONUS_DROPS;
@Setting(value = "Sub-Skills")
private ConfigMiningSubskills miningSubskills = new ConfigMiningSubskills();
@ -63,7 +64,7 @@ public class ConfigMining {
return getBlastMining().getDetonators();
}
public ArrayList<String> getBonusDrops() {
public HashSet<String> getBonusDrops() {
return bonusDrops;
}

View File

@ -1,7 +1,9 @@
package com.gmail.nossr50.config.hocon.skills.unarmed;
import ninja.leaping.configurate.objectmapping.Setting;
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
@ConfigSerializable
public class ConfigUnarmedDisarm {
private static final boolean PREVENT_ITEM_THEFT = false;

View File

@ -3,6 +3,7 @@ package com.gmail.nossr50.core;
import com.gmail.nossr50.mcMMO;
import org.bukkit.Material;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
@ -42,7 +43,7 @@ public class BonusDropManager {
*
* @param materials target material list
*/
public void addToWhitelistByNameID(List<String> materials) {
public void addToWhitelistByNameID(Collection<String> materials) {
for (String material : materials) {
Material m = Material.matchMaterial(material);
if (m == null) {

View File

@ -115,7 +115,7 @@ public class DynamicSettingsManager {
*/
public void registerBonusDrops() {
bonusDropManager.addToWhitelistByNameID(mcMMO.getConfigManager().getConfigMining().getBonusDrops());
// bonusDropManager.addToWhitelistByNameID(mcMMO.getConfigManager().getConfigHerbalism().getBonusDrops());
bonusDropManager.addToWhitelistByNameID(mcMMO.getConfigManager().getConfigHerbalism().getBonusDrops());
// bonusDropManager.addToWhitelistByNameID(mcMMO.getConfigManager().getConfigWoodcutting().getBonusDrops());
}

View File

@ -485,9 +485,7 @@ public class BlockListener implements Listener {
*
* We don't need to check permissions here because they've already been checked for the ability to even activate.
*/
if (mcMMOPlayer.getAbilityMode(SuperAbilityType.TREE_FELLER) && BlockUtils.isLog(blockState) && MainConfig.getInstance().getTreeFellerSoundsEnabled()) {
SoundManager.sendSound(player, blockState.getLocation(), SoundType.FIZZ);
}
SoundManager.sendSound(player, blockState.getLocation(), SoundType.FIZZ);
}
private Player getPlayerFromFurnace(Block furnaceBlock) {

View File

@ -93,7 +93,7 @@ public class MiningManager extends SkillManager {
}
//if ((mcMMO.getModManager().isCustomMiningBlock(blockState) && !mcMMO.getModManager().getBlock(blockState).isDoubleDropEnabled()) || !MainConfig.getInstance().getDoubleDropsEnabled(skill, material)) {
if (!MainConfig.getInstance().getDoubleDropsEnabled(skill, blockState.getType()))
if (!mcMMO.getDynamicSettingsManager().getBonusDropManager().isBonusDropWhitelisted(blockState.getType()))
return;
boolean silkTouch = player.getInventory().getItemInMainHand().containsEnchantment(Enchantment.SILK_TOUCH);

View File

@ -57,7 +57,7 @@ public final class Woodcutting {
Misc.dropItems(Misc.getBlockCenter(blockState), blockState.getBlock().getDrops());
}
else {*/
if (MainConfig.getInstance().getWoodcuttingDoubleDropsEnabled(blockState.getBlockData())) {
if (mcMMO.getDynamicSettingsManager().getBonusDropManager().isBonusDropWhitelisted(blockState.getType())) {
Misc.dropItems(Misc.getBlockCenter(blockState), blockState.getBlock().getDrops());
}
//}