From 61080134fd0142838bfdc292940910194f04fd89 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Sat, 22 Feb 2020 00:46:37 +0000 Subject: [PATCH] Add wildcard support for item/block configs --- .../java/electroblob/wizardry/Settings.java | 18 +++++++++++++++++- .../electroblob/wizardry/spell/Divination.java | 4 ++-- .../wizardry/spell/ImbueWeapon.java | 5 +++-- .../wizardry/spell/PocketFurnace.java | 6 ++---- .../wizardry/util/WizardryUtilities.java | 4 ++-- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/main/java/electroblob/wizardry/Settings.java b/src/main/java/electroblob/wizardry/Settings.java index cccf75db..bfc1db4e 100644 --- a/src/main/java/electroblob/wizardry/Settings.java +++ b/src/main/java/electroblob/wizardry/Settings.java @@ -6,8 +6,10 @@ import electroblob.wizardry.spell.Spell; import electroblob.wizardry.util.AllyDesignationSystem.FriendlyFire; import electroblob.wizardry.util.MagicDamage; import electroblob.wizardry.util.MagicDamage.DamageType; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityList; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.translation.I18n; import net.minecraftforge.common.config.ConfigCategory; @@ -16,6 +18,7 @@ import net.minecraftforge.common.config.Property; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; import org.apache.commons.lang3.tuple.Pair; import java.io.File; @@ -1106,10 +1109,23 @@ public final class Settings { meta = Short.parseShort(itemArgs[itemArgs.length-1]); item = String.join(":", Arrays.copyOfRange(itemArgs, 0, itemArgs.length-1)); }catch(NumberFormatException e){ // If no metadata is specified - meta = 0; + meta = OreDictionary.WILDCARD_VALUE; item = string; } return Pair.of(new ResourceLocation(item), meta); } + + public static boolean containsMetaBlock(Pair[] array, IBlockState block){ + return containsMetaThing(array, block.getBlock().getRegistryName(), (short)block.getBlock().getMetaFromState(block)); + } + + public static boolean containsMetaItem(Pair[] array, ItemStack stack){ + return containsMetaThing(array, stack.getItem().getRegistryName(), (short)stack.getMetadata()); + } + + public static boolean containsMetaThing(Pair[] array, ResourceLocation id, short metadata){ + return Arrays.asList(array).contains(Pair.of(id, metadata)) || Arrays.asList(array).contains(Pair.of(id, OreDictionary.WILDCARD_VALUE)); + } + } diff --git a/src/main/java/electroblob/wizardry/spell/Divination.java b/src/main/java/electroblob/wizardry/spell/Divination.java index 066726a2..61d6a6f2 100644 --- a/src/main/java/electroblob/wizardry/spell/Divination.java +++ b/src/main/java/electroblob/wizardry/spell/Divination.java @@ -1,5 +1,6 @@ package electroblob.wizardry.spell; +import electroblob.wizardry.Settings; import electroblob.wizardry.Wizardry; import electroblob.wizardry.block.BlockCrystalOre; import electroblob.wizardry.registry.WizardryItems; @@ -71,8 +72,7 @@ public class Divination extends Spell { return !(block instanceof BlockOre || block instanceof BlockRedstoneOre || block instanceof BlockCrystalOre - || Arrays.asList(Wizardry.settings.divinationOreWhitelist) - .contains(Pair.of(block.getRegistryName(), (short)block.getMetaFromState(world.getBlockState(b))))); + || Settings.containsMetaBlock(Wizardry.settings.divinationOreWhitelist, world.getBlockState(b))); }); Strength strength = Strength.NOTHING; diff --git a/src/main/java/electroblob/wizardry/spell/ImbueWeapon.java b/src/main/java/electroblob/wizardry/spell/ImbueWeapon.java index fbdeffb8..631b9222 100644 --- a/src/main/java/electroblob/wizardry/spell/ImbueWeapon.java +++ b/src/main/java/electroblob/wizardry/spell/ImbueWeapon.java @@ -1,5 +1,6 @@ package electroblob.wizardry.spell; +import electroblob.wizardry.Settings; import electroblob.wizardry.Wizardry; import electroblob.wizardry.constants.Constants; import electroblob.wizardry.data.WizardData; @@ -82,12 +83,12 @@ public class ImbueWeapon extends Spell { /** Returns true if the given item counts as a sword, i.e. it extends {@link ItemSword} or is in the whitelist. */ public static boolean isSword(ItemStack stack){ - return stack.getItem() instanceof ItemSword || Arrays.asList(Wizardry.settings.swordItemWhitelist).contains(Pair.of(stack.getItem().getRegistryName(), (short)stack.getMetadata())); + return stack.getItem() instanceof ItemSword || Settings.containsMetaItem(Wizardry.settings.swordItemWhitelist, stack); } /** Returns true if the given item counts as a bow, i.e. it extends {@link ItemBow} or is in the whitelist. */ public static boolean isBow(ItemStack stack){ - return stack.getItem() instanceof ItemBow || Arrays.asList(Wizardry.settings.bowItemWhitelist).contains(Pair.of(stack.getItem().getRegistryName(), (short)stack.getMetadata())); + return stack.getItem() instanceof ItemBow || Settings.containsMetaItem(Wizardry.settings.bowItemWhitelist, stack); } } diff --git a/src/main/java/electroblob/wizardry/spell/PocketFurnace.java b/src/main/java/electroblob/wizardry/spell/PocketFurnace.java index c617b3af..29a2bdb8 100644 --- a/src/main/java/electroblob/wizardry/spell/PocketFurnace.java +++ b/src/main/java/electroblob/wizardry/spell/PocketFurnace.java @@ -1,5 +1,6 @@ package electroblob.wizardry.spell; +import electroblob.wizardry.Settings; import electroblob.wizardry.Wizardry; import electroblob.wizardry.util.SpellModifiers; import electroblob.wizardry.util.WizardryUtilities; @@ -9,9 +10,6 @@ import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.util.EnumHand; import net.minecraft.util.EnumParticleTypes; import net.minecraft.world.World; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.Arrays; public class PocketFurnace extends Spell { @@ -40,7 +38,7 @@ public class PocketFurnace extends Spell { if(!result.isEmpty() && !(stack.getItem() instanceof ItemTool) && !(stack.getItem() instanceof ItemSword) && !(stack.getItem() instanceof ItemArmor) - && !Arrays.asList(Wizardry.settings.pocketFurnaceItemBlacklist).contains(Pair.of(stack.getItem().getRegistryName(), (short)stack.getMetadata()))){ + && !Settings.containsMetaItem(Wizardry.settings.pocketFurnaceItemBlacklist, stack)){ if(stack.getCount() <= usesLeft){ ItemStack stack2 = new ItemStack(result.getItem(), stack.getCount(), result.getItemDamage()); diff --git a/src/main/java/electroblob/wizardry/util/WizardryUtilities.java b/src/main/java/electroblob/wizardry/util/WizardryUtilities.java index fa0342ff..0717ad9a 100644 --- a/src/main/java/electroblob/wizardry/util/WizardryUtilities.java +++ b/src/main/java/electroblob/wizardry/util/WizardryUtilities.java @@ -1,6 +1,7 @@ package electroblob.wizardry.util; import electroblob.wizardry.CommonProxy; +import electroblob.wizardry.Settings; import electroblob.wizardry.Wizardry; import electroblob.wizardry.data.WizardData; import electroblob.wizardry.entity.living.ISpellCaster; @@ -32,7 +33,6 @@ import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; -import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nullable; import java.util.*; @@ -302,7 +302,7 @@ public final class WizardryUtilities { Block block = world.getBlockState(pos).getBlock(); return block instanceof BlockLog || block instanceof BlockCactus || block.isLeaves(world.getBlockState(pos), world, pos) || block.isFoliage(world, pos) - || Arrays.asList(Wizardry.settings.treeBlocks).contains(Pair.of(block.getRegistryName(), block.getMetaFromState(world.getBlockState(pos)))); + || Settings.containsMetaBlock(Wizardry.settings.treeBlocks, world.getBlockState(pos)); } /**