Add wildcard support for item/block configs

This commit is contained in:
Electroblob77
2020-02-22 00:46:37 +00:00
parent 563bed3b25
commit 61080134fd
5 changed files with 26 additions and 11 deletions
@@ -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<ResourceLocation, Short>[] array, IBlockState block){
return containsMetaThing(array, block.getBlock().getRegistryName(), (short)block.getBlock().getMetaFromState(block));
}
public static boolean containsMetaItem(Pair<ResourceLocation, Short>[] array, ItemStack stack){
return containsMetaThing(array, stack.getItem().getRegistryName(), (short)stack.getMetadata());
}
public static boolean containsMetaThing(Pair<ResourceLocation, Short>[] array, ResourceLocation id, short metadata){
return Arrays.asList(array).contains(Pair.of(id, metadata)) || Arrays.asList(array).contains(Pair.of(id, OreDictionary.WILDCARD_VALUE));
}
}
@@ -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;
@@ -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);
}
}
@@ -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());
@@ -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));
}
/**