Add wildcard support for item/block configs
This commit is contained in:
@@ -6,8 +6,10 @@ import electroblob.wizardry.spell.Spell;
|
|||||||
import electroblob.wizardry.util.AllyDesignationSystem.FriendlyFire;
|
import electroblob.wizardry.util.AllyDesignationSystem.FriendlyFire;
|
||||||
import electroblob.wizardry.util.MagicDamage;
|
import electroblob.wizardry.util.MagicDamage;
|
||||||
import electroblob.wizardry.util.MagicDamage.DamageType;
|
import electroblob.wizardry.util.MagicDamage.DamageType;
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.EntityList;
|
import net.minecraft.entity.EntityList;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.text.translation.I18n;
|
import net.minecraft.util.text.translation.I18n;
|
||||||
import net.minecraftforge.common.config.ConfigCategory;
|
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.event.FMLPreInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
|
import net.minecraftforge.oredict.OreDictionary;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -1106,10 +1109,23 @@ public final class Settings {
|
|||||||
meta = Short.parseShort(itemArgs[itemArgs.length-1]);
|
meta = Short.parseShort(itemArgs[itemArgs.length-1]);
|
||||||
item = String.join(":", Arrays.copyOfRange(itemArgs, 0, itemArgs.length-1));
|
item = String.join(":", Arrays.copyOfRange(itemArgs, 0, itemArgs.length-1));
|
||||||
}catch(NumberFormatException e){ // If no metadata is specified
|
}catch(NumberFormatException e){ // If no metadata is specified
|
||||||
meta = 0;
|
meta = OreDictionary.WILDCARD_VALUE;
|
||||||
item = string;
|
item = string;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Pair.of(new ResourceLocation(item), meta);
|
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;
|
package electroblob.wizardry.spell;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Settings;
|
||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.block.BlockCrystalOre;
|
import electroblob.wizardry.block.BlockCrystalOre;
|
||||||
import electroblob.wizardry.registry.WizardryItems;
|
import electroblob.wizardry.registry.WizardryItems;
|
||||||
@@ -71,8 +72,7 @@ public class Divination extends Spell {
|
|||||||
return !(block instanceof BlockOre
|
return !(block instanceof BlockOre
|
||||||
|| block instanceof BlockRedstoneOre
|
|| block instanceof BlockRedstoneOre
|
||||||
|| block instanceof BlockCrystalOre
|
|| block instanceof BlockCrystalOre
|
||||||
|| Arrays.asList(Wizardry.settings.divinationOreWhitelist)
|
|| Settings.containsMetaBlock(Wizardry.settings.divinationOreWhitelist, world.getBlockState(b)));
|
||||||
.contains(Pair.of(block.getRegistryName(), (short)block.getMetaFromState(world.getBlockState(b)))));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Strength strength = Strength.NOTHING;
|
Strength strength = Strength.NOTHING;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.spell;
|
package electroblob.wizardry.spell;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Settings;
|
||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.constants.Constants;
|
import electroblob.wizardry.constants.Constants;
|
||||||
import electroblob.wizardry.data.WizardData;
|
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. */
|
/** 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){
|
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. */
|
/** 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){
|
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;
|
package electroblob.wizardry.spell;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Settings;
|
||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.util.SpellModifiers;
|
import electroblob.wizardry.util.SpellModifiers;
|
||||||
import electroblob.wizardry.util.WizardryUtilities;
|
import electroblob.wizardry.util.WizardryUtilities;
|
||||||
@@ -9,9 +10,6 @@ import net.minecraft.item.crafting.FurnaceRecipes;
|
|||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.EnumParticleTypes;
|
import net.minecraft.util.EnumParticleTypes;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class PocketFurnace extends Spell {
|
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)
|
if(!result.isEmpty() && !(stack.getItem() instanceof ItemTool) && !(stack.getItem() instanceof ItemSword)
|
||||||
&& !(stack.getItem() instanceof ItemArmor)
|
&& !(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){
|
if(stack.getCount() <= usesLeft){
|
||||||
ItemStack stack2 = new ItemStack(result.getItem(), stack.getCount(), result.getItemDamage());
|
ItemStack stack2 = new ItemStack(result.getItem(), stack.getCount(), result.getItemDamage());
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package electroblob.wizardry.util;
|
package electroblob.wizardry.util;
|
||||||
|
|
||||||
import electroblob.wizardry.CommonProxy;
|
import electroblob.wizardry.CommonProxy;
|
||||||
|
import electroblob.wizardry.Settings;
|
||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.data.WizardData;
|
import electroblob.wizardry.data.WizardData;
|
||||||
import electroblob.wizardry.entity.living.ISpellCaster;
|
import electroblob.wizardry.entity.living.ISpellCaster;
|
||||||
@@ -32,7 +33,6 @@ import net.minecraft.world.EnumDifficulty;
|
|||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.event.ForgeEventFactory;
|
import net.minecraftforge.event.ForgeEventFactory;
|
||||||
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -302,7 +302,7 @@ public final class WizardryUtilities {
|
|||||||
Block block = world.getBlockState(pos).getBlock();
|
Block block = world.getBlockState(pos).getBlock();
|
||||||
return block instanceof BlockLog || block instanceof BlockCactus
|
return block instanceof BlockLog || block instanceof BlockCactus
|
||||||
|| block.isLeaves(world.getBlockState(pos), world, pos) || block.isFoliage(world, pos)
|
|| 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user