diff --git a/gradle.properties b/gradle.properties index bcf9d97a..d4229007 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ mappings_version=snapshot_20170814 jei_version=4.7.5.85 waila_version=1.8.20-B35 -guideapi_version=2.1.4-56 \ No newline at end of file +guideapi_version=2.1.4-57 \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/BloodMagic.java b/src/main/java/WayofTime/bloodmagic/BloodMagic.java index 4957a1be..72c9155f 100644 --- a/src/main/java/WayofTime/bloodmagic/BloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/BloodMagic.java @@ -1,9 +1,7 @@ package WayofTime.bloodmagic; -import WayofTime.bloodmagic.annot.Handler; import WayofTime.bloodmagic.api.registry.OrbRegistry; import WayofTime.bloodmagic.api.registry.RitualRegistry; -import WayofTime.bloodmagic.api.util.helper.LogHelper; import WayofTime.bloodmagic.api_impl.BloodMagicAPI; import WayofTime.bloodmagic.apiv2.BloodMagicPlugin; import WayofTime.bloodmagic.apiv2.IBloodMagicPlugin; @@ -16,8 +14,8 @@ import WayofTime.bloodmagic.network.BloodMagicPacketHandler; import WayofTime.bloodmagic.proxy.CommonProxy; import WayofTime.bloodmagic.registry.*; import WayofTime.bloodmagic.structures.ModDungeons; +import WayofTime.bloodmagic.util.BloodMagicIsntReadyYetStopTryingToUseItAndJustWaitForMeToFinishPleaseAndThankYou; import WayofTime.bloodmagic.util.PluginUtil; -import WayofTime.bloodmagic.util.Utils; import WayofTime.bloodmagic.util.handler.IMCHandler; import com.google.common.collect.Lists; import net.minecraft.creativetab.CreativeTabs; @@ -29,24 +27,27 @@ import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.*; import net.minecraftforge.fml.common.network.NetworkRegistry; import org.apache.commons.lang3.tuple.Pair; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.io.File; import java.util.List; -@Mod(modid = BloodMagic.MODID, name = BloodMagic.NAME, version = BloodMagic.VERSION, dependencies = BloodMagic.DEPEND, guiFactory = "WayofTime.bloodmagic.client.gui.config.ConfigGuiFactory") +@Mod(modid = BloodMagic.MODID, name = BloodMagic.NAME, version = BloodMagic.VERSION, dependencies = BloodMagic.DEPEND) public class BloodMagic { public static final String MODID = "bloodmagic"; public static final String NAME = "Blood Magic: Alchemical Wizardry"; public static final String VERSION = "@VERSION@"; public static final String DEPEND = "required-after:guideapi;"; + public static final boolean IS_DEV = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); + public static final Logger LOGGER = LogManager.getLogger(NAME.substring(0, NAME.indexOf(":"))); + public static final List> PLUGINS = Lists.newArrayList(); public static final CreativeTabs TAB_BM = new CreativeTabs(MODID + ".creativeTab") { @Override public ItemStack getTabIconItem() { return OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK); } }; - public static final boolean IS_DEV = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); - public static final List> PLUGINS = Lists.newArrayList(); public static CreativeTabs TAB_TOMES = new CreativeTabs(MODID + ".creativeTabTome") { @Override public ItemStack getTabIconItem() { @@ -68,28 +69,26 @@ public class BloodMagic { FluidRegistry.enableUniversalBucket(); } - public LogHelper logger = new LogHelper(MODID); private File configDir; @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { - configDir = new File(event.getModConfigurationDirectory(), "BloodMagic"); - ConfigHandler.init(new File(configDir, "BloodMagic.cfg")); + if (!IS_DEV) + throw new BloodMagicIsntReadyYetStopTryingToUseItAndJustWaitForMeToFinishPleaseAndThankYou(); + + configDir = new File(event.getModConfigurationDirectory(), "bloodmagic"); PLUGINS.addAll(PluginUtil.getPlugins(event.getAsmData())); ModTranquilityHandlers.init(); ModDungeons.init(); - Utils.registerHandlers(event.getAsmData().getAll(Handler.class.getCanonicalName())); proxy.preInit(); } @Mod.EventHandler public void init(FMLInitializationEvent event) { BloodMagicPacketHandler.init(); - for (Pair plugin : PLUGINS) - plugin.getLeft().register(BloodMagicAPI.INSTANCE); ModRecipes.init(); ModRituals.initRituals(); @@ -106,6 +105,9 @@ public class BloodMagic { public void postInit(FMLPostInitializationEvent event) { ModRecipes.addCompressionHandlers(); + for (Pair plugin : PLUGINS) + plugin.getLeft().register(BloodMagicAPI.INSTANCE); + proxy.postInit(); } @@ -128,4 +130,9 @@ public class BloodMagic { public void onIMCRecieved(FMLInterModComms.IMCEvent event) { IMCHandler.handleIMC(event); } + + public static void debug(String message, Object... args) { + if (IS_DEV) + LOGGER.info("[DEBUG] " + message, args); + } } diff --git a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java index 4ec4c8c6..23e12138 100644 --- a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java +++ b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java @@ -1,352 +1,115 @@ package WayofTime.bloodmagic; -import WayofTime.bloodmagic.annot.Handler; -import WayofTime.bloodmagic.api.BlockStack; -import WayofTime.bloodmagic.api.BloodMagicAPI; -import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.meteor.MeteorConfigHandler; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.Block; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Config; +import net.minecraftforge.common.config.ConfigManager; import net.minecraftforge.fml.client.event.ConfigChangedEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.registry.ForgeRegistries; -import net.minecraftforge.oredict.OreDictionary; -import java.io.File; -import java.util.*; - -@Handler +@Config(modid = BloodMagic.MODID, name = BloodMagic.MODID + "/" + BloodMagic.MODID, category = "") +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) public class ConfigHandler { - public static Configuration config; - // Teleposer - public static String[] teleposerBlacklisting; - public static ArrayList teleposerBlacklist = new ArrayList<>(); - public static List teleposerBlacklistEntity; + @Config.Comment({ "Blacklist options for various features" }) + public static ConfigBlacklist blacklist = new ConfigBlacklist(); + @Config.Comment({ "Value modifiers for various features" }) + public static ConfigValues values = new ConfigValues(); + @Config.Comment({ "Toggles for all rituals" }) + public static ConfigRituals rituals = new ConfigRituals(); + @Config.Comment({ "Settings that only pertain to the client" }) + public static ConfigClient client = new ConfigClient(); + @Config.Comment({ "Compatibility settings" }) + public static ConfigCompat compat = new ConfigCompat(); - // Transposition Sigil - public static String[] transpositionBlacklisting; - public static ArrayList transpositionBlacklist = new ArrayList<>(); + public static class ConfigBlacklist { + @Config.Comment({ "Stops listed blocks and entities from being teleposed.", "Use the registry name of the block or entity. Vanilla objects do not require the modid.", "If a block is specified, you can list the variants to only blacklist a given state." }) + public String[] teleposer = { "bedrock", "mob_spawner" }; + @Config.Comment({ "Stops listed blocks from being transposed.", "Use the registry name of the block. Vanilla blocks do not require the modid." }) + public String[] transposer = { "bedrock", "mob_spawner" }; + @Config.Comment({ "Stops the listed entities from being used in the Well of Suffering.", "Use the registry name of the entity. Vanilla entities do not require the modid." }) + public String[] wellOfSuffering = { }; + } - // Well of Suffering Blacklist - public static List wellOfSufferingBlacklist; + public static class ConfigValues { + @Config.Comment({ "Declares the amount of LP gained per HP sacrificed for the given entity.", "Setting the value to 0 will blacklist it.", "Use the registry name of the entity followed by a ';' and then the value you want.", "Vanilla entities do not require the modid." }) + public String[] sacrificialValues = { "villager;100", "slime;15", "enderman;10", "cow;100", "chicken;100", "horse;100", "sheep;100", "wolf;100", "ocelot;100", "pig;100", "rabbit;100" }; + @Config.Comment({ "Amount of LP the Coat of Arms should provide for each damage dealt." }) + @Config.RangeInt(min = 0, max = 100) + public int coatOfArmsConversion = 20; + @Config.Comment({ "Amount of LP the Sacrificial Dagger should provide for each damage dealt." }) + @Config.RangeInt(min = 0, max = 10000) + public int sacrificialDaggerConversion = 100; + @Config.Comment({ "Will rewrite any default meteor types with new versions.", "Disable this if you want any of your changes to stay, or do not want default meteor types regenerated." }) + public boolean shouldResyncMeteors = true; + } - // Blood Altar Sacrificial Values - public static String[] entitySacrificeValuesList; - public static Map entitySacrificeValues = new HashMap<>(); + public static class ConfigRituals { + public boolean ritualAnimalGrowth = true; + public boolean ritualContainment = true; + public boolean ritualCrushing = true; + public boolean ritualExpulsion = true; + public boolean ritualFeatheredKnife = true; + public boolean ritualFullStomach = true; + public boolean ritualGreenGrove = true; + public boolean ritualHarvest = true; + public boolean ritualInterdiction = true; + public boolean ritualJumping = true; + public boolean ritualLava = true; + public boolean ritualMagnetic = true; + public boolean ritualRegeneration = true; + public boolean ritualSpeed = true; + public boolean ritualSuppression = true; + public boolean ritualWater = true; + public boolean ritualWellOfSuffering = true; + public boolean ritualZephyr = true; + public boolean ritualUpgradeRemove = true; + public boolean ritualArmourEvolve = true; + public boolean ritualForsakenSoul = true; + public boolean ritualCrystalHarvest = true; + public boolean ritualPlacer = true; + public boolean ritualFelling = true; + public boolean ritualPump = true; + public boolean ritualAltarBuilder = true; + public boolean ritualPortal = true; + public boolean ritualMeteor = true; + public boolean ritualDowngrade = true; + public ConfigImperfectRituals imperfect = new ConfigImperfectRituals(); + } - // Rituals - public static boolean ritualAnimalGrowth; - public static boolean ritualContainment; - public static boolean ritualCrushing; - public static boolean ritualExpulsion; - public static boolean ritualFeatheredKnife; - public static boolean ritualFullStomach; - public static boolean ritualGreenGrove; - public static boolean ritualHarvest; - public static boolean ritualInterdiction; - public static boolean ritualJumping; - public static boolean ritualLava; - public static boolean ritualMagnetic; - public static boolean ritualRegeneration; - public static boolean ritualSpeed; - public static boolean ritualSuppression; - public static boolean ritualWater; - public static boolean ritualWellOfSuffering; - public static boolean ritualZephyr; - public static boolean ritualUpgradeRemove; - public static boolean ritualArmourEvolve; - public static boolean ritualForsakenSoul; - public static boolean ritualCrystalHarvest; + public static class ConfigImperfectRituals { + public boolean imperfectRitualNight = true; + public boolean imperfectRitualRain = true; + public boolean imperfectRitualResistance = true; + public boolean imperfectRitualZombie = true; + } - public static boolean cobblestoneRitual; - public static boolean placerRitual; - public static boolean fellingRitual; - public static boolean pumpRitual; - public static boolean altarBuilderRitual; - public static boolean portalRitual; - public static boolean meteorRitual; - public static boolean downgradeRitual; + public static class ConfigClient { + @Config.Comment({ "Always render the beams between routing nodes.", "If disabled, the beams will only render while the Node Router is held." }) + public boolean alwaysRenderRoutingLines = false; + @Config.Comment({ "Completely hide spectral blocks from view.", "If disabled, a transparent block will be displayed." }) + public boolean invisibleSpectralBlocks = true; + @Config.Comment({ "When cycling through slots, the Sigil of Holding will skip over empty slots and move to the next occupied one.", "If disabled, it will behave identically to the default hotbar." }) + public boolean sigilHoldingSkipsEmptySlots = false; + } - // Imperfect Rituals - public static boolean imperfectRitualNight; - public static boolean imperfectRitualRain; - public static boolean imperfectRitualResistance; - public static boolean imperfectRitualZombie; + public static class ConfigCompat { + @Config.Comment({ "The display mode to use when looking at a Blood Altar.", "ALWAYS - Always display information.", "SIGIL_HELD - Only display information when a Divination or Seers sigil is held in either hand.", "SIGIL_CONTAINED - Only display information when a Divination or Seers sigil is somewhere in the inventory." }) + public AltarDisplayMode wailaAltarDisplayMode = AltarDisplayMode.SIGIL_HELD; - // Potion ID's - public static int customPotionDrowningID; - public static int customPotionBoostID; - public static int customPotionProjProtID; - public static int customPotionInhibitID; - public static int customPotionFlightID; - public static int customPotionReciprocationID; - public static int customPotionFlameCloakID; - public static int customPotionIceCloakID; - public static int customPotionHeavyHeartID; - public static int customPotionFireFuseID; - public static int customPotionPlanarBindingID; - public static int customPotionSoulFrayID; - public static int customPotionSoulHardenID; - public static int customPotionDeafID; - public static int customPotionFeatherFallID; - public static int customPotionDemonCloakID; - public static int customPotionAmphibianID; - - // Potion toggles - public static boolean customPotionDrowningEnabled; - public static boolean customPotionBoostEnabled; - public static boolean customPotionProjProtEnabled; - public static boolean customPotionInhibitEnabled; - public static boolean customPotionFlightEnabled; - public static boolean customPotionReciprocationEnabled; - public static boolean customPotionFlameCloakEnabled; - public static boolean customPotionIceCloakEnabled; - public static boolean customPotionHeavyHeartEnabled; - public static boolean customPotionFireFuseEnabled; - public static boolean customPotionPlanarBindingEnabled; - public static boolean customPotionSoulFrayEnabled; - public static boolean customPotionSoulHardenEnabled; - public static boolean customPotionDeafEnabled; - public static boolean customPotionFeatherFallEnabled; - public static boolean customPotionDemonCloakEnabled; - public static boolean customPotionAmphibianEnabled; - public static boolean vanillaPotionRegenerationEnabled; - public static boolean vanillaPotionNightVisionEnabled; - public static boolean vanillaPotionFireResistEnabled; - public static boolean vanillaPotionWaterBreathingEnabled; - public static boolean vanillaPotionSpeedEnabled; - public static boolean vanillaPotionHealthEnabled; - public static boolean vanillaPotionPoisonEnabled; - public static boolean vanillaPotionBlindnessEnabled; - public static boolean vanillaPotionWeaknessEnabled; - public static boolean vanillaPotionStrengthEnabled; - public static boolean vanillaPotionJumpBoostEnabled; - public static boolean vanillaPotionSlownessEnabled; - public static boolean vanillaPotionMiningEnabled; - public static boolean vanillaPotionInvisibilityEnabled; - public static boolean vanillaPotionResistanceEnabled; - public static boolean vanillaPotionSaturationEnabled; - public static boolean vanillaPotionHealthBoostEnabled; - public static boolean vanillaPotionAbsorptionEnabled; - - // General - public static int sacrificialPackConversion; - public static int sacrificialDaggerDamage; - public static int sacrificialDaggerConversion; - - // Client - public static boolean alwaysRenderRoutingLines; - public static boolean invisibleSpectralBlocks; - public static boolean sigilHoldingSkipsEmptySlots; - - // Compat - public static int wailaAltarDisplayMode; - public static boolean thaumcraftGogglesUpgrade; - public static boolean ignoreCompressionSpamAddedByCompression; + public enum AltarDisplayMode { + ALWAYS, + SIGIL_HELD, + SIGIL_CONTAINED, + ; + } + } @SubscribeEvent - public void onConfigChanged(ConfigChangedEvent event) { + public static void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) { if (event.getModID().equals(BloodMagic.MODID)) { - syncConfig(); - MeteorConfigHandler.handleMeteors(false); - } - } - - public static void init(File file) { - config = new Configuration(file); - syncConfig(); - } - - public static void syncConfig() { - String category; - - category = "Item/Block Blacklisting"; - config.addCustomCategoryComment(category, "Allows disabling of specific Blocks/Items.\nNote that using this may result in crashes. Use is not supported."); - config.setCategoryRequiresMcRestart(category, true); - - category = "Teleposer Blacklist"; - config.addCustomCategoryComment(category, "Block blacklisting"); - teleposerBlacklisting = config.getStringList("teleposerBlacklist", category, new String[]{"minecraft:bedrock", "minecraft:mob_spawner"}, "Stops specified blocks from being teleposed. Put entries on new lines. Valid syntax is:\nmodid:blockname:meta"); - buildBlacklist(teleposerBlacklisting, teleposerBlacklist); - teleposerBlacklistEntity = Arrays.asList(config.getStringList("teleposerBlacklistEntity", category, new String[]{}, "Entity class names listed here will not be able to be teleposed.")); - - category = "Transposition Sigil Blacklist"; - config.addCustomCategoryComment(category, "Block blacklisting"); - transpositionBlacklisting = config.getStringList("transpositionBlacklist", category, new String[]{"minecraft:bedrock", "minecraft:mob_spawner"}, "Stops specified blocks from being teleposed. Put entries on new lines. Valid syntax is:\nmodid:blockname:meta"); - buildBlacklist(transpositionBlacklisting, transpositionBlacklist); - - category = "Well of Suffering Blacklist"; - config.addCustomCategoryComment(category, "Entity blacklisting from WoS"); - wellOfSufferingBlacklist = Arrays.asList(config.getStringList("wellOfSufferingBlacklist", category, new String[]{"EntityArmorStand", "EntitySentientSpecter"}, "Use the class name of the Entity to blacklist it from usage.\nIE: EntityWolf, EntityWitch, etc")); - - category = "Blood Altar Sacrificial Values"; - config.addCustomCategoryComment(category, "Entity Sacrificial Value Settings"); - entitySacrificeValuesList = config.getStringList("entitySacrificeLP:HPValues", category, new String[]{"EntityVillager;100", "EntitySlime;15", "EntityEnderman;10", "EntityCow;100", "EntityChicken;100", "EntityHorse;100", "EntitySheep;100", "EntityWolf;100", "EntityOcelot;100", "EntityPig;100", "EntityRabbit;100", "EntityArmorStand;0", "EntitySentientSpecter;0"}, "Used to edit the amount of LP gained per HP sacrificed for the given entity.\nSetting an entity to 0 effectively blacklists it.\nIf a mod modifies an entity via the API, it will take precedence over this config.\nSyntax: EntityClassName;LPPerHP"); - buildEntitySacrificeValues(); - - category = "Potions"; - config.addCustomCategoryComment(category, "Potion settings"); - config.addCustomCategoryComment(category + ".id", "Potion ID settings"); - customPotionDrowningID = config.getInt("customPotionDrowningID", category + ".id", 100, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Drowning potion"); - customPotionBoostID = config.getInt("customPotionBoostID", category + ".id", 101, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Boost potion"); - customPotionProjProtID = config.getInt("customPotionProjProtID", category + ".id", 102, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Projectile Protection potion"); - customPotionInhibitID = config.getInt("customPotionInhibitID", category + ".id", 103, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Inhibit potion"); - customPotionFlightID = config.getInt("customPotionFlightID", category + ".id", 104, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Flight potion"); - customPotionReciprocationID = config.getInt("customPotionReciprocationID", category + ".id", 105, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Reciprocation potion"); - customPotionFlameCloakID = config.getInt("customPotionFlameCloakID", category + ".id", 106, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Flame Cloak potion"); - customPotionIceCloakID = config.getInt("customPotionIceCloakID", category + ".id", 107, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Ice Cloak potion"); - customPotionHeavyHeartID = config.getInt("customPotionHeavyHeartID", category + ".id", 108, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Heavy Heart potion"); - customPotionFireFuseID = config.getInt("customPotionFireFuseID", category + ".id", 109, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Fire Fuse potion"); - customPotionPlanarBindingID = config.getInt("customPotionPlanarBindingID", category + ".id", 110, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Planar Binding potion"); - customPotionSoulFrayID = config.getInt("customPotionSoulFrayID", category + ".id", 111, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Soul Fray potion"); - customPotionSoulHardenID = config.getInt("customPotionSoulHardenID", category + ".id", 112, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Soul Harden potion"); - customPotionDeafID = config.getInt("customPotionDeafID", category + ".id", 113, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Deaf potion"); - customPotionFeatherFallID = config.getInt("customPotionFeatherFallID", category + ".id", 114, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Feather Fall potion"); - customPotionDemonCloakID = config.getInt("customPotionDemonCloakID", category + ".id", 115, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Demon Cloak potion"); - customPotionAmphibianID = config.getInt("customPotionAmphibianID", category + ".id", 116, 20, Constants.Misc.POTION_ARRAY_SIZE, "ID of the Amphibian potion"); - - config.addCustomCategoryComment(category + ".toggle", "Toggle potions available in Alchemy"); - customPotionDrowningEnabled = config.getBoolean("customPotionDrowningEnabled", category + ".toggle", true, "Enables the Drowning potion in Alchemy"); - customPotionBoostEnabled = config.getBoolean("customPotionBoostEnabled", category + ".toggle", true, "Enables the Boost potion in Alchemy"); - customPotionProjProtEnabled = config.getBoolean("customPotionProjProtEnabled", category + ".toggle", true, "Enables the Projectile Protection potion in Alchemy"); - customPotionInhibitEnabled = config.getBoolean("customPotionInhibitEnabled", category + ".toggle", true, "Enables the Inhibit potion in Alchemy"); - customPotionFlightEnabled = config.getBoolean("customPotionFlightEnabled", category + ".toggle", true, "Enables the Flight potion in Alchemy"); - customPotionReciprocationEnabled = config.getBoolean("customPotionReciprocationEnabled", category + ".toggle", true, "Enables the Reciprocation potion in Alchemy"); - customPotionFlameCloakEnabled = config.getBoolean("customPotionFlameCloakEnabled", category + ".toggle", true, "Enables the Flame Cloak potion in Alchemy"); - customPotionIceCloakEnabled = config.getBoolean("customPotionIceCloakEnabled", category + ".toggle", true, "Enables the Ice Cloak potion in Alchemy"); - customPotionHeavyHeartEnabled = config.getBoolean("customPotionHeavyHeartEnabled", category + ".toggle", true, "Enables the Heavy Heart potion in Alchemy"); - customPotionFireFuseEnabled = config.getBoolean("customPotionFireFuseEnabled", category + ".toggle", true, "Enables the Fire Fuse potion in Alchemy"); - customPotionPlanarBindingEnabled = config.getBoolean("customPotionPlanarBindingEnabled", category + ".toggle", true, "Enables the Planar Binding potion in Alchemy"); - customPotionSoulFrayEnabled = config.getBoolean("customPotionSoulFrayEnabled", category + ".toggle", true, "Enables the Soul Fray potion in Alchemy"); - customPotionSoulHardenEnabled = config.getBoolean("customPotionSoulHardenEnabled", category + ".toggle", true, "Enables the Soul Harden potion in Alchemy"); - customPotionDeafEnabled = config.getBoolean("customPotionDeafEnabled", category + ".toggle", true, "Enables the Deaf potion in Alchemy"); - customPotionFeatherFallEnabled = config.getBoolean("customPotionFeatherFallEnabled", category + ".toggle", true, "Enables the Feather Fall potion in Alchemy"); - customPotionDemonCloakEnabled = config.getBoolean("customPotionDemonCloakEnabled", category + ".toggle", true, "Enables the Demon Cloak potion in Alchemy"); - customPotionAmphibianEnabled = config.getBoolean("customPotionAmphibianEnabled", category + ".toggle", true, "Enables the Amphibian potion in Alchemy"); - vanillaPotionAbsorptionEnabled = config.getBoolean("vanillaPotionAbsorptionEnabled", category + ".toggle", true, "Enables the Absorption potion in Alchemy"); - vanillaPotionBlindnessEnabled = config.getBoolean("vanillaPotionBlindnessEnabled", category + ".toggle", true, "Enables the Blindness potion in Alchemy"); - vanillaPotionFireResistEnabled = config.getBoolean("vanillaPotionFireResistEnabled", category + ".toggle", true, "Enables the Fire Resistance potion in Alchemy"); - vanillaPotionHealthBoostEnabled = config.getBoolean("vanillaPotionHealthBoostEnabled", category + ".toggle", true, "Enables the Health Boost potion in Alchemy"); - vanillaPotionHealthEnabled = config.getBoolean("vanillaPotionHealthEnabled", category + ".toggle", true, "Enables the Instant Health potion in Alchemy"); - vanillaPotionInvisibilityEnabled = config.getBoolean("vanillaPotionInvisibilityEnabled", category + ".toggle", true, "Enables the Invisibility potion in Alchemy"); - vanillaPotionJumpBoostEnabled = config.getBoolean("vanillaPotionJumpBoostEnabled", category + ".toggle", true, "Enables the Jump Boost potion in Alchemy"); - vanillaPotionMiningEnabled = config.getBoolean("vanillaPotionMiningEnabled", category + ".toggle", true, "Enables the Mining potion in Alchemy"); - vanillaPotionPoisonEnabled = config.getBoolean("vanillaPotionPoisonEnabled", category + ".toggle", true, "Enables the Poison potion in Alchemy"); - vanillaPotionRegenerationEnabled = config.getBoolean("vanillaPotionRegenerationEnabled", category + ".toggle", true, "Enables the Regeneration potion in Alchemy"); - vanillaPotionNightVisionEnabled = config.getBoolean("vanillaPotionNightVisionEnabled", category + ".toggle", true, "Enables the Night Vision potion in Alchemy"); - vanillaPotionResistanceEnabled = config.getBoolean("vanillaPotionResistanceEnabled", category + ".toggle", true, "Enables the Resistance potion in Alchemy"); - vanillaPotionSaturationEnabled = config.getBoolean("vanillaPotionSaturationEnabled", category + ".toggle", true, "Enables the Saturation potion in Alchemy"); - vanillaPotionSlownessEnabled = config.getBoolean("vanillaPotionSlownessEnabled", category + ".toggle", true, "Enables the Slowness potion in Alchemy"); - vanillaPotionSpeedEnabled = config.getBoolean("vanillaPotionSpeedEnabled", category + ".toggle", true, "Enables the Speed potion in Alchemy"); - vanillaPotionStrengthEnabled = config.getBoolean("vanillaPotionStrengthEnabled", category + ".toggle", true, "Enables the Strength potion in Alchemy"); - vanillaPotionWaterBreathingEnabled = config.getBoolean("vanillaPotionWaterBreathingEnabled", category + ".toggle", true, "Enables the Water Breathing potion in Alchemy"); - vanillaPotionWeaknessEnabled = config.getBoolean("vanillaPotionWeaknessEnabled", category + ".toggle", true, "Enables the Weakness potion in Alchemy"); - - category = "Rituals"; - config.addCustomCategoryComment(category, "Ritual toggling"); - config.setCategoryRequiresMcRestart(category, true); - ritualAnimalGrowth = config.get(category, "ritualAnimalGrowth", true).getBoolean(); - ritualContainment = config.get(category, "ritualContainment", true).getBoolean(); - ritualCrushing = config.get(category, "ritualCrushing", true).getBoolean(); - ritualExpulsion = config.get(category, "ritualExpulsion", true).getBoolean(); - ritualFeatheredKnife = config.get(category, "ritualFeatheredKnife", true).getBoolean(); - ritualFullStomach = config.get(category, "ritualFullStomach", true).getBoolean(); - ritualGreenGrove = config.get(category, "ritualGreenGrove", true).getBoolean(); - ritualHarvest = config.get(category, "ritualHarvest", true).getBoolean(); - ritualInterdiction = config.get(category, "ritualInterdiction", true).getBoolean(); - ritualJumping = config.get(category, "ritualJumping", true).getBoolean(); - ritualLava = config.get(category, "ritualLava", true).getBoolean(); - ritualMagnetic = config.get(category, "ritualMagnetic", true).getBoolean(); - ritualRegeneration = config.get(category, "ritualRegeneration", true).getBoolean(); - ritualSpeed = config.get(category, "ritualSpeed", true).getBoolean(); - ritualSuppression = config.get(category, "ritualSuppression", true).getBoolean(); - ritualWater = config.get(category, "ritualWater", true).getBoolean(); - ritualWellOfSuffering = config.get(category, "ritualWellOfSuffering", true).getBoolean(); - ritualZephyr = config.get(category, "ritualZephyr", true).getBoolean(); - ritualUpgradeRemove = config.get(category, "ritualRemove", true).getBoolean(); - ritualArmourEvolve = config.get(category, "ritualArmourEvolve", true).getBoolean(); - ritualForsakenSoul = config.get(category, "ritualForsakenSoul", true).getBoolean(); - ritualCrystalHarvest = config.get(category, "ritualCrystalHarvest", true).getBoolean(); - - cobblestoneRitual = config.get(category, "ritualCobblestone", true).getBoolean(); - placerRitual = config.get(category, "ritualPlacer", true).getBoolean(); - fellingRitual = config.get(category, "ritualFelling", true).getBoolean(); - pumpRitual = config.get(category, "ritualPump", true).getBoolean(); - altarBuilderRitual = config.get(category, "ritualAltarBuilder", true).getBoolean(); - portalRitual = config.get(category, "ritualPortal", true).getBoolean(); - meteorRitual = config.get(category, "ritualMeteor", true).getBoolean(); - downgradeRitual = config.get(category, "ritualDowngrade", true).getBoolean(); - - category = "Rituals.Imperfect"; - imperfectRitualNight = config.get(category, "imperfectRitualNight", true).getBoolean(); - imperfectRitualRain = config.get(category, "imperfectRitualRain", true).getBoolean(); - imperfectRitualResistance = config.get(category, "imperfectRitualResistance", true).getBoolean(); - imperfectRitualZombie = config.get(category, "imperfectRitualZombie", true).getBoolean(); - - category = "General"; - config.addCustomCategoryComment(category, "General settings"); - BloodMagicAPI.loggingEnabled = config.getBoolean("enableLogging", category, true, "Allows logging information to the console. Fatal errors will bypass this"); - sacrificialPackConversion = config.getInt("sacrificialPackConversion", category, 20, 0, 100, "Base multiplier for the Coat of Arms. DamageDealt * sacrificialPackConversion"); - sacrificialDaggerDamage = config.getInt("sacrificialDaggerDamage", category, 2, 0, 10000, "Damage done from using the Sacrificial Dagger"); - sacrificialDaggerConversion = config.getInt("sacrificialDaggerConversion", category, 100, 0, 10000, "Amount of LP received per damage point (not heart!)"); - - category = "Client"; - config.addCustomCategoryComment(category, "Client only settings"); - alwaysRenderRoutingLines = config.getBoolean("alwaysRenderRoutingLines", category, false, "Always renders the beams between routing nodes. If false, only renders while a Node Router is being held."); - invisibleSpectralBlocks = config.get(category, "invisibleSpectralBlocks", true, "Spectral Blocks (Used by the Suppression Sigil to store fluids) will not render at all. If false, a see through texture will render. [default: true]").setRequiresMcRestart(true).getBoolean(); - sigilHoldingSkipsEmptySlots = config.getBoolean("sigilHoldingSkipsEmptySlots", category, false, "The Sigil of Holding will skip empty sigil slots if set to true."); - - category = "Compatibility"; - config.addCustomCategoryComment(category, "Compatibility settings"); - wailaAltarDisplayMode = config.getInt("wailaAltarDisplayMode", category + ".waila", 1, 0, 2, "The mode for the Waila display on Blood Altars.\n0 - Always display information\n1 - Only display when Divination/Seer sigil is in hand.\n2 - Only display when Divination/Seer sigil is in inventory"); - thaumcraftGogglesUpgrade = config.getBoolean("thaumcraftGogglesUpgrade", category + ".thaumcraft", true, "Allows the Living Helmet to be upgraded with Goggles of Revealing in an Anvil."); - ignoreCompressionSpamAddedByCompression = config.getBoolean("ignoreCompressionSpamAddedByCompression", category + ".compression", true, "Compression decided to add a storage recipe for every item and block in the game. This will make the Sigil of Compression ignore those recipes so your game will actually load in a decent amount of time."); - - category = "Meteors"; - config.addCustomCategoryComment(category, "Meteor settings"); - - config.save(); - } - - private static void buildBlacklist(String[] blacklisting, List blockBlacklist) { - blockBlacklist.clear(); - - for (String blockSet : blacklisting) { - String[] blockData = blockSet.split(":"); - - Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockData[0], blockData[1])); - int meta = 0; - - if (blockData.length == 3) { - // Check if it's an int, if so, parse it. If not, set meta to 0 - // to avoid crashing. - if (Utils.isInteger(blockData[2])) - meta = Integer.parseInt(blockData[2]); - else if (blockData[2].equals("*")) - meta = OreDictionary.WILDCARD_VALUE; - else - meta = 0; - } - - blockBlacklist.add(new BlockStack(block, meta)); - } - } - - private static void buildEntitySacrificeValues() { - entitySacrificeValues.clear(); - - for (String entityData : entitySacrificeValuesList) { - String[] split = entityData.split(";"); - - int amount = 500; - if (Utils.isInteger(split[1])) - amount = Integer.parseInt(split[1]); - - if (!entitySacrificeValues.containsKey(split[0])) - entitySacrificeValues.put(split[0], amount); + ConfigManager.sync(event.getModID(), Config.Type.INSTANCE); // Sync config values + MeteorConfigHandler.handleMeteors(false); // Reload meteors } } } diff --git a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java index b4846dfa..47e1f274 100644 --- a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java @@ -6,14 +6,12 @@ import WayofTime.bloodmagic.api.altar.*; import WayofTime.bloodmagic.api.event.AltarCraftedEvent; import WayofTime.bloodmagic.api.orb.BloodOrb; import WayofTime.bloodmagic.api.orb.IBloodOrb; -import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry; -import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry.AltarRecipe; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api_impl.BloodMagicAPI; +import WayofTime.bloodmagic.api_impl.recipe.RecipeBloodAltar; import WayofTime.bloodmagic.block.BlockBloodRune; import WayofTime.bloodmagic.block.BlockLifeEssence; import WayofTime.bloodmagic.tile.TileAltar; -import WayofTime.bloodmagic.util.Utils; import com.google.common.base.Enums; import com.google.common.base.Strings; import net.minecraft.block.state.IBlockState; @@ -31,7 +29,6 @@ import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.FluidTankPropertiesWrapper; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; -import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import java.util.List; @@ -78,7 +75,7 @@ public class BloodAltar implements IFluidHandler { private int chargingFrequency = 0; private int maxCharge = 0; private int cooldownAfterCrafting = 60; - private AltarRecipe recipe; + private RecipeBloodAltar recipe; private ItemStack result = ItemStack.EMPTY; private EnumAltarTier currentTierDisplayed = EnumAltarTier.ONE; @@ -189,14 +186,14 @@ public class BloodAltar implements IFluidHandler { if (!input.isEmpty()) { // Do recipes - AltarRecipe recipe = AltarRecipeRegistry.getRecipeForInput(input); + RecipeBloodAltar recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getBloodAltar(input); if (recipe != null) { - if (recipe.doesRequiredItemMatch(input, altarTier)) { + if (recipe.getMinimumTier().ordinal() <= altarTier.ordinal()) { this.isActive = true; this.recipe = recipe; this.result = recipe.getOutput().isEmpty() ? ItemStack.EMPTY : new ItemStack(recipe.getOutput().getItem(), 1, recipe.getOutput().getMetadata()); this.liquidRequired = recipe.getSyphon(); - this.canBeFilled = recipe.isFillable(); + this.canBeFilled = false; this.consumptionRate = recipe.getConsumeRate(); this.drainRate = recipe.getDrainRate(); return; @@ -318,7 +315,8 @@ public class BloodAltar implements IFluidHandler { if (!result.isEmpty()) result.setCount(result.getCount() * stackSize); - MinecraftForge.EVENT_BUS.post(new AltarCraftedEvent(recipe, result)); + // TODO - Update for new recipe type +// MinecraftForge.EVENT_BUS.post(new AltarCraftedEvent(recipe, result)); tileAltar.setInventorySlotContents(0, result); progress = 0; diff --git a/src/main/java/WayofTime/bloodmagic/annot/Handler.java b/src/main/java/WayofTime/bloodmagic/annot/Handler.java deleted file mode 100644 index 0e972824..00000000 --- a/src/main/java/WayofTime/bloodmagic/annot/Handler.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.bloodmagic.annot; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Classes annotated with this will automatically be registered to the - * {@link net.minecraftforge.common.MinecraftForge#EVENT_BUS}. - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface Handler { -} diff --git a/src/main/java/WayofTime/bloodmagic/api/Constants.java b/src/main/java/WayofTime/bloodmagic/api/Constants.java index 4ead21b0..7a7640d7 100644 --- a/src/main/java/WayofTime/bloodmagic/api/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/api/Constants.java @@ -7,10 +7,11 @@ import net.minecraftforge.fml.common.registry.ForgeRegistries; import java.util.Locale; +@Deprecated public class Constants { public static class NBT { - public static final String OWNER_UUID = "ownerUUID"; - public static final String OWNER_NAME = "ownerNAME"; + public static final String OWNER_UUID = "uuid"; + public static final String OWNER_NAME = "name"; public static final String USES = "uses"; public static final String ACTIVATED = "activated"; public static final String UNUSABLE = "unusable"; diff --git a/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java b/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java index 16a4e7e1..a5ac7a96 100644 --- a/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java +++ b/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java @@ -120,6 +120,7 @@ public enum EnumAltarTier { //@formatter:on }; + public static final EnumAltarTier[] VALUES = values(); public static final int MAXTIERS = values().length; ArrayList altarComponents = new ArrayList(); diff --git a/src/main/java/WayofTime/bloodmagic/api/iface/IBindable.java b/src/main/java/WayofTime/bloodmagic/api/iface/IBindable.java index 5b515342..dee1f4c6 100644 --- a/src/main/java/WayofTime/bloodmagic/api/iface/IBindable.java +++ b/src/main/java/WayofTime/bloodmagic/api/iface/IBindable.java @@ -3,6 +3,8 @@ package WayofTime.bloodmagic.api.iface; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import javax.annotation.Nullable; + /** * Implement this interface on any Item that can be bound to a player. */ @@ -16,7 +18,10 @@ public interface IBindable { * @param stack - The owned ItemStack * @return - The username of the Item's owner */ - String getOwnerName(ItemStack stack); + @Nullable + default String getOwnerName(ItemStack stack) { + return !stack.isEmpty() && stack.hasTagCompound() ? stack.getTagCompound().getString("name") : null; + } /** * Gets the UUID of the Item's owner. @@ -26,7 +31,10 @@ public interface IBindable { * @param stack - The owned ItemStack * @return - The UUID of the Item's owner */ - String getOwnerUUID(ItemStack stack); + @Nullable + default String getOwnerUUID(ItemStack stack) { + return !stack.isEmpty() && stack.hasTagCompound() ? stack.getTagCompound().getString("uuid") : null; + } /** * Called when the player attempts to bind the item. @@ -35,5 +43,7 @@ public interface IBindable { * @param stack - The ItemStack to attempt binding * @return If binding was successful. */ - boolean onBind(EntityPlayer player, ItemStack stack); + default boolean onBind(EntityPlayer player, ItemStack stack) { + return true; + } } diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java b/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java index 11fe41a2..38a0b4c4 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java +++ b/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java @@ -25,11 +25,11 @@ public class ItemBindable extends Item implements IBindable { @Override public String getOwnerName(ItemStack stack) { - return !stack.isEmpty() ? stack.getTagCompound().getString(Constants.NBT.OWNER_NAME) : null; + return !stack.isEmpty() && stack.hasTagCompound() ? stack.getTagCompound().getString(Constants.NBT.OWNER_NAME) : null; } @Override public String getOwnerUUID(ItemStack stack) { - return !stack.isEmpty() ? stack.getTagCompound().getString(Constants.NBT.OWNER_UUID) : null; + return !stack.isEmpty() && stack.hasTagCompound() ? stack.getTagCompound().getString(Constants.NBT.OWNER_UUID) : null; } } diff --git a/src/main/java/WayofTime/bloodmagic/api/soul/EnumDemonWillType.java b/src/main/java/WayofTime/bloodmagic/api/soul/EnumDemonWillType.java index 445697f7..12aee7ff 100644 --- a/src/main/java/WayofTime/bloodmagic/api/soul/EnumDemonWillType.java +++ b/src/main/java/WayofTime/bloodmagic/api/soul/EnumDemonWillType.java @@ -1,10 +1,15 @@ package WayofTime.bloodmagic.api.soul; +import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; +import WayofTime.bloodmagic.item.types.ISubItem; +import net.minecraft.item.ItemStack; import net.minecraft.util.IStringSerializable; +import org.apache.commons.lang3.text.WordUtils; +import javax.annotation.Nonnull; import java.util.Locale; -public enum EnumDemonWillType implements IStringSerializable { +public enum EnumDemonWillType implements IStringSerializable, ISubItem { DEFAULT("default"), CORROSIVE("corrosive"), DESTRUCTIVE("destructive"), @@ -26,4 +31,17 @@ public enum EnumDemonWillType implements IStringSerializable { public String getName() { return this.toString(); } + + + @Nonnull + @Override + public String getInternalName() { + return "crystal" + WordUtils.capitalize(name); + } + + @Nonnull + @Override + public ItemStack getStack(int count) { + return new ItemStack(RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL, count, ordinal()); + } } diff --git a/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerSacrificeHelper.java b/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerSacrificeHelper.java index 4691fadc..6c1fdc9d 100644 --- a/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerSacrificeHelper.java +++ b/src/main/java/WayofTime/bloodmagic/api/util/helper/PlayerSacrificeHelper.java @@ -61,7 +61,7 @@ public class PlayerSacrificeHelper { if (health > maxHealth / 10.0) { float sacrificedHealth = health - maxHealth / 10.0f; - int lpAdded = (int) (sacrificedHealth * ConfigHandler.sacrificialDaggerConversion * getModifier(amount)); + int lpAdded = (int) (sacrificedHealth * ConfigHandler.values.sacrificialDaggerConversion * getModifier(amount)); SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, (int) sacrificedHealth, lpAdded); if (MinecraftForge.EVENT_BUS.post(evt)) diff --git a/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicAPI.java b/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicAPI.java index b2fc17ce..f3698004 100644 --- a/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicAPI.java +++ b/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicAPI.java @@ -2,6 +2,7 @@ package WayofTime.bloodmagic.api_impl; import WayofTime.bloodmagic.api.altar.EnumAltarComponent; import WayofTime.bloodmagic.apiv2.IBloodMagicAPI; +import com.google.common.base.Preconditions; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; @@ -9,6 +10,8 @@ import com.google.common.collect.Multimap; import net.minecraft.block.state.IBlockState; import net.minecraft.util.ResourceLocation; +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; import java.util.*; public class BloodMagicAPI implements IBloodMagicAPI { @@ -16,27 +19,42 @@ public class BloodMagicAPI implements IBloodMagicAPI { public static final BloodMagicAPI INSTANCE = new BloodMagicAPI(); private final BloodMagicBlacklist blacklist; + private final BloodMagicRecipeRegistrar recipeRegistrar; private final Map sacrificialValues; private final Multimap altarComponents; public BloodMagicAPI() { this.blacklist = new BloodMagicBlacklist(); + this.recipeRegistrar = new BloodMagicRecipeRegistrar(); this.sacrificialValues = Maps.newHashMap(); this.altarComponents = ArrayListMultimap.create(); } + @Nonnull @Override public BloodMagicBlacklist getBlacklist() { return blacklist; } + @Nonnull @Override - public void setSacrificialValue(ResourceLocation entityId, int value) { + public BloodMagicRecipeRegistrar getRecipeRegistrar() { + return recipeRegistrar; + } + + @Override + public void setSacrificialValue(@Nonnull ResourceLocation entityId, @Nonnegative int value) { + Preconditions.checkNotNull(entityId, "entityId cannot be null."); + Preconditions.checkArgument(value >= 0, "value cannot be negative."); + sacrificialValues.put(entityId, value); } @Override - public void registerAltarComponent(IBlockState state, String componentType) { + public void registerAltarComponent(@Nonnull IBlockState state, @Nonnull String componentType) { + Preconditions.checkNotNull(state, "state cannot be null."); + Preconditions.checkNotNull(componentType, "componentType cannot be null."); + EnumAltarComponent component = EnumAltarComponent.NOTAIR; for (EnumAltarComponent type : EnumAltarComponent.VALUES) { if (type.name().equalsIgnoreCase(componentType)) { diff --git a/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicBlacklist.java b/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicBlacklist.java index 0d448390..86022491 100644 --- a/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicBlacklist.java +++ b/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicBlacklist.java @@ -1,12 +1,14 @@ package WayofTime.bloodmagic.api_impl; import WayofTime.bloodmagic.apiv2.IBloodMagicBlacklist; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.util.ResourceLocation; +import javax.annotation.Nonnull; import java.util.Set; public class BloodMagicBlacklist implements IBloodMagicBlacklist { @@ -26,49 +28,65 @@ public class BloodMagicBlacklist implements IBloodMagicBlacklist { } @Override - public void addTeleposer(IBlockState state) { + public void addTeleposer(@Nonnull IBlockState state) { + Preconditions.checkNotNull(state, "state cannot be null."); + if (!teleposer.contains(state)) teleposer.add(state); } @Override - public void addTeleposer(Block block) { + public void addTeleposer(@Nonnull Block block) { + Preconditions.checkNotNull(block, "block cannot be null."); + for (IBlockState state : block.getBlockState().getValidStates()) addTeleposer(state); } @Override - public void addTeleposer(ResourceLocation entityId) { + public void addTeleposer(@Nonnull ResourceLocation entityId) { + Preconditions.checkNotNull(entityId, "entityId cannot be null."); + if (!teleposerEntities.contains(entityId)) teleposerEntities.add(entityId); } @Override - public void addTransposition(IBlockState state) { + public void addTransposition(@Nonnull IBlockState state) { + Preconditions.checkNotNull(state, "state cannot be null."); + if (!transposition.contains(state)) transposition.add(state); } @Override - public void addTransposition(Block block) { + public void addTransposition(@Nonnull Block block) { + Preconditions.checkNotNull(block, "block cannot be null."); + for (IBlockState state : block.getBlockState().getValidStates()) addTransposition(state); } @Override - public void addGreenGrove(IBlockState state) { + public void addGreenGrove(@Nonnull IBlockState state) { + Preconditions.checkNotNull(state, "state cannot be null."); + if (!greenGrove.contains(state)) greenGrove.add(state); } @Override - public void addGreenGrove(Block block) { + public void addGreenGrove(@Nonnull Block block) { + Preconditions.checkNotNull(block, "block cannot be null."); + for (IBlockState state : block.getBlockState().getValidStates()) addGreenGrove(state); } @Override - public void addSacrifice(ResourceLocation entityId) { + public void addWellOfSuffering(@Nonnull ResourceLocation entityId) { + Preconditions.checkNotNull(entityId, "entityId cannot be null."); + if (!sacrifice.contains(entityId)) sacrifice.add(entityId); } diff --git a/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicCorePlugin.java b/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicCorePlugin.java index e2800fc6..e9d57594 100644 --- a/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicCorePlugin.java +++ b/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicCorePlugin.java @@ -1,17 +1,26 @@ package WayofTime.bloodmagic.api_impl; import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.api.altar.EnumAltarComponent; import WayofTime.bloodmagic.apiv2.BloodMagicPlugin; import WayofTime.bloodmagic.apiv2.IBloodMagicAPI; +import WayofTime.bloodmagic.apiv2.IBloodMagicBlacklist; import WayofTime.bloodmagic.apiv2.IBloodMagicPlugin; import WayofTime.bloodmagic.block.BlockBloodRune; import WayofTime.bloodmagic.block.BlockDecorative; import WayofTime.bloodmagic.block.enums.EnumBloodRune; import WayofTime.bloodmagic.block.enums.EnumDecorative; import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; +import WayofTime.bloodmagic.core.RegistrarBloodMagicRecipes; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.registry.EntityEntry; +import net.minecraftforge.fml.common.registry.ForgeRegistries; @BloodMagicPlugin public class BloodMagicCorePlugin implements IBloodMagicPlugin { @@ -31,10 +40,13 @@ public class BloodMagicCorePlugin implements IBloodMagicPlugin { api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.DEMON_CRYSTAL); api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.INVERSION_PILLAR); api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.INVERSION_PILLAR); - api.getBlacklist().addSacrifice(new ResourceLocation("armor_stand")); - api.getBlacklist().addSacrifice(new ResourceLocation(BloodMagic.MODID, "sentient_specter")); + api.getBlacklist().addWellOfSuffering(new ResourceLocation("armor_stand")); + api.getBlacklist().addWellOfSuffering(new ResourceLocation(BloodMagic.MODID, "sentient_specter")); - // TODO - Register things from config + api.setSacrificialValue(new ResourceLocation("armor_stand"), 0); + api.setSacrificialValue(new ResourceLocation(BloodMagic.MODID, "sentient_specter"), 0); + + handleConfigValues(api); // Add standard blocks for altar components api.registerAltarComponent(Blocks.GLOWSTONE.getDefaultState(), EnumAltarComponent.GLOWSTONE.name()); @@ -50,5 +62,84 @@ public class BloodMagicCorePlugin implements IBloodMagicPlugin { BlockBloodRune bloodRune = (BlockBloodRune) RegistrarBloodMagicBlocks.BLOOD_RUNE; for (EnumBloodRune runeType : EnumBloodRune.values()) api.registerAltarComponent(bloodRune.getDefaultState().withProperty(bloodRune.getProperty(), runeType), EnumAltarComponent.BLOODRUNE.name()); + + RegistrarBloodMagicRecipes.registerAltarRecipes(api.getRecipeRegistrar()); + RegistrarBloodMagicRecipes.registerAlchemyTableRecipes(api.getRecipeRegistrar()); + RegistrarBloodMagicRecipes.registerTartaricForgeRecipes(((BloodMagicAPI) api).getRecipeRegistrar()); + } + + private static void handleConfigValues(IBloodMagicAPI api) { + for (String value : ConfigHandler.values.sacrificialValues) { + String[] split = value.split(";"); + if (split.length != 2) // Not valid format + continue; + + api.setSacrificialValue(new ResourceLocation(split[0]), Integer.parseInt(split[1])); + } + + for (String value : ConfigHandler.blacklist.teleposer) { + EntityEntry entityEntry = ForgeRegistries.ENTITIES.getValue(new ResourceLocation(value)); + if (entityEntry == null) { // It's not an entity (or at least not a valid one), so let's try a block. + String[] blockData = value.split("\\["); + Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockData[0])); + if (block == Blocks.AIR || block == null) // Not a valid block either + continue; + + if (blockData.length > 1) { // We have properties listed, so let's build a state. + api.getBlacklist().addTeleposer(parseState(value)); + continue; + } + + api.getBlacklist().addTeleposer(block); + continue; + } + + api.getBlacklist().addTeleposer(entityEntry.getRegistryName()); + } + + for (String value : ConfigHandler.blacklist.transposer) { + String[] blockData = value.split("\\["); + Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockData[0])); + if (block == Blocks.AIR || block == null) // Not a valid block + continue; + + if (blockData.length > 1) { // We have properties listed, so let's build a state. + api.getBlacklist().addTeleposer(parseState(value)); + continue; + } + + api.getBlacklist().addTeleposer(block); + } + + for (String value : ConfigHandler.blacklist.wellOfSuffering) { + EntityEntry entityEntry = ForgeRegistries.ENTITIES.getValue(new ResourceLocation(value)); + if (entityEntry == null) // Not a valid entity + continue; + + api.getBlacklist().addWellOfSuffering(entityEntry.getRegistryName()); + } + } + + private static IBlockState parseState(String blockInfo) { + String[] split = blockInfo.split("\\["); + split[1] = split[1].substring(0, split[1].lastIndexOf("]")); // Make sure brackets are removed from state + + Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(split[0])); // Find the block + if (block == Blocks.AIR) + return Blocks.AIR.getDefaultState(); // The block is air, so we're looking at invalid data + + BlockStateContainer blockState = block.getBlockState(); + IBlockState returnState = blockState.getBaseState(); + + // Force our values into the state + String[] stateValues = split[1].split(","); // Splits up each value + for (String value : stateValues) { + String[] valueSplit = value.split("="); // Separates property and value + IProperty property = blockState.getProperty(valueSplit[0]); + if (property != null) + returnState = returnState.withProperty(property, (Comparable) property.parseValue(valueSplit[1]).get()); // Force the property into the state + } + + return returnState; } } diff --git a/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicRecipeRegistrar.java b/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicRecipeRegistrar.java new file mode 100644 index 00000000..432d9b40 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api_impl/BloodMagicRecipeRegistrar.java @@ -0,0 +1,185 @@ +package WayofTime.bloodmagic.api_impl; + +import WayofTime.bloodmagic.api.orb.IBloodOrb; +import WayofTime.bloodmagic.api_impl.recipe.RecipeAlchemyTable; +import WayofTime.bloodmagic.api_impl.recipe.RecipeBloodAltar; +import WayofTime.bloodmagic.api_impl.recipe.RecipeTartaricForge; +import WayofTime.bloodmagic.apiv2.IBloodMagicRecipeRegistrar; +import WayofTime.bloodmagic.core.recipe.IngredientBloodOrb; +import com.google.common.base.Preconditions; +import com.google.common.collect.*; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.NonNullList; +import net.minecraftforge.common.crafting.CraftingHelper; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; +import java.util.Set; + +public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar { + + private final Set altarRecipes; + private final Set alchemyRecipes; + private final Set tartaricForgeRecipes; + + public BloodMagicRecipeRegistrar() { + this.altarRecipes = Sets.newHashSet(); + this.alchemyRecipes = Sets.newHashSet(); + this.tartaricForgeRecipes = Sets.newHashSet(); + } + + @Override + public void addBloodAltar(@Nonnull Ingredient input, @Nonnull ItemStack output, @Nonnegative int minimumTier, @Nonnegative int syphon, @Nonnegative int consumeRate, @Nonnegative int drainRate) { + Preconditions.checkNotNull(input, "input cannot be null."); + Preconditions.checkNotNull(output, "output cannot be null."); + Preconditions.checkArgument(minimumTier >= 0, "minimumTier cannot be negative."); + Preconditions.checkArgument(syphon >= 0, "syphon cannot be negative."); + Preconditions.checkArgument(consumeRate >= 0, "consumeRate cannot be negative."); + Preconditions.checkArgument(drainRate >= 0, "drainRate cannot be negative."); + + altarRecipes.add(new RecipeBloodAltar(input, output, minimumTier, syphon, consumeRate, drainRate)); + } + + @Override + public boolean removeBloodAltar(@Nonnull ItemStack input) { + Preconditions.checkNotNull(input, "input cannot be null."); + + return altarRecipes.remove(getBloodAltar(input)); + } + + @Override + public void addAlchemyTable(@Nonnull ItemStack output, @Nonnegative int syphon, @Nonnegative int ticks, @Nonnegative int minimumTier, @Nonnull Ingredient... input) { + Preconditions.checkNotNull(output, "output cannot be null."); + Preconditions.checkArgument(syphon >= 0, "syphon cannot be negative."); + Preconditions.checkArgument(ticks >= 0, "ticks cannot be negative."); + Preconditions.checkArgument(minimumTier >= 0, "minimumTier cannot be negative."); + Preconditions.checkNotNull(input, "input cannot be null."); + + NonNullList inputs = NonNullList.from(Ingredient.EMPTY, input); + alchemyRecipes.add(new RecipeAlchemyTable(inputs, output, syphon, ticks, minimumTier)); + } + + @Override + public boolean removeAlchemyTable(@Nonnull ItemStack... input) { + Preconditions.checkNotNull(input, "inputs cannot be null."); + + for (ItemStack stack : input) + Preconditions.checkNotNull(stack, "input cannot be null."); + + return alchemyRecipes.remove(getAlchemyTable(Lists.newArrayList(input))); + } + + @Override + public void addTartaricForge(@Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain, @Nonnull Ingredient... input) { + Preconditions.checkNotNull(output, "output cannot be null."); + Preconditions.checkArgument(minimumSouls >= 0, "minimumSouls cannot be negative."); + Preconditions.checkArgument(soulDrain >= 0, "soulDrain cannot be negative."); + Preconditions.checkNotNull(input, "input cannot be null."); + + NonNullList inputs = NonNullList.from(Ingredient.EMPTY, input); + tartaricForgeRecipes.add(new RecipeTartaricForge(inputs, output, minimumSouls, soulDrain)); + } + + @Override + public boolean removeTartaricForge(@Nonnull ItemStack... input) { + Preconditions.checkNotNull(input, "inputs cannot be null."); + + for (ItemStack stack : input) + Preconditions.checkNotNull(stack, "input cannot be null."); + + return tartaricForgeRecipes.remove(getTartaricForge(Lists.newArrayList(input))); + } + + public void addTartaricForge(@Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain, @Nonnull Object... input) { + Preconditions.checkNotNull(output, "output cannot be null."); + Preconditions.checkArgument(minimumSouls >= 0, "minimumSouls cannot be negative."); + Preconditions.checkArgument(soulDrain >= 0, "soulDrain cannot be negative."); + Preconditions.checkNotNull(input, "input cannot be null."); + + List ingredients = Lists.newArrayList(); + for (Object object : input) { + if (object instanceof ItemStack && ((ItemStack) object).getItem() instanceof IBloodOrb) { + ingredients.add(new IngredientBloodOrb(((IBloodOrb) ((ItemStack) object).getItem()).getOrb((ItemStack) object))); + continue; + } + + ingredients.add(CraftingHelper.getIngredient(object)); + } + + addTartaricForge(output, minimumSouls, soulDrain, ingredients.toArray(new Ingredient[0])); + } + + @Nullable + public RecipeBloodAltar getBloodAltar(@Nonnull ItemStack input) { + Preconditions.checkNotNull(input, "input cannot be null."); + if (input.isEmpty()) + return null; + + for (RecipeBloodAltar recipe : altarRecipes) + if (recipe.getInput().test(input)) + return recipe; + + return null; + } + + @Nullable + public RecipeAlchemyTable getAlchemyTable(@Nonnull List input) { + Preconditions.checkNotNull(input, "input cannot be null."); + if (input.isEmpty()) + return null; + + mainLoop: + for (RecipeAlchemyTable recipe : alchemyRecipes) { + if (recipe.getInput().size() != input.size()) + continue; + + for (int i = 0; i < input.size(); i++) { + Ingredient ingredient = recipe.getInput().get(i); + if (!ingredient.apply(input.get(i))) + continue mainLoop; + } + + return recipe; + } + + return null; + } + + @Nullable + public RecipeTartaricForge getTartaricForge(@Nonnull List input) { + Preconditions.checkNotNull(input, "input cannot be null."); + if (input.isEmpty()) + return null; + + mainLoop: + for (RecipeTartaricForge recipe : tartaricForgeRecipes) { + if (recipe.getInput().size() != input.size()) + continue; + + for (int i = 0; i < input.size(); i++) { + Ingredient ingredient = recipe.getInput().get(i); + if (!ingredient.apply(input.get(i))) + continue mainLoop; + } + + return recipe; + } + + return null; + } + + public Set getAltarRecipes() { + return ImmutableSet.copyOf(altarRecipes); + } + + public Set getAlchemyRecipes() { + return ImmutableSet.copyOf(alchemyRecipes); + } + + public Set getTartaricForgeRecipes() { + return ImmutableSet.copyOf(tartaricForgeRecipes); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/api_impl/recipe/RecipeAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/api_impl/recipe/RecipeAlchemyTable.java new file mode 100644 index 00000000..817201e1 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api_impl/recipe/RecipeAlchemyTable.java @@ -0,0 +1,59 @@ +package WayofTime.bloodmagic.api_impl.recipe; + +import com.google.common.base.Preconditions; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.NonNullList; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +public class RecipeAlchemyTable { + + @Nonnull + private final NonNullList input; + @Nonnull + private final ItemStack output; + @Nonnegative + private final int syphon; + @Nonnegative + private final int ticks; + @Nonnegative + private final int minimumTier; + + public RecipeAlchemyTable(@Nonnull NonNullList input, @Nonnull ItemStack output, int syphon, int ticks, int minimumTier) { + Preconditions.checkNotNull(input, "input cannot be null."); + Preconditions.checkNotNull(output, "output cannot be null."); + Preconditions.checkArgument(syphon >= 0, "syphon cannot be negative."); + Preconditions.checkArgument(ticks >= 0, "ticks cannot be negative."); + Preconditions.checkArgument(minimumTier >= 0, "minimumTier cannot be negative."); + + this.input = input; + this.output = output; + this.syphon = syphon; + this.ticks = ticks; + this.minimumTier = minimumTier; + } + + @Nonnull + public final NonNullList getInput() { + return input; + } + + @Nonnull + public final ItemStack getOutput() { + return output; + } + + public final int getSyphon() { + return syphon; + } + + public final int getTicks() { + return ticks; + } + + public final int getMinimumTier() { + return minimumTier; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/api_impl/recipe/RecipeBloodAltar.java b/src/main/java/WayofTime/bloodmagic/api_impl/recipe/RecipeBloodAltar.java new file mode 100644 index 00000000..02640377 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api_impl/recipe/RecipeBloodAltar.java @@ -0,0 +1,72 @@ +package WayofTime.bloodmagic.api_impl.recipe; + +import WayofTime.bloodmagic.api.altar.EnumAltarTier; +import com.google.common.base.Preconditions; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +public class RecipeBloodAltar { + + @Nonnull + private final Ingredient input; + @Nonnull + private final ItemStack output; + @Nonnull + private final EnumAltarTier minimumTier; + @Nonnegative + private final int syphon; + @Nonnegative + private final int consumeRate; + @Nonnegative + private final int drainRate; + + public RecipeBloodAltar(@Nonnull Ingredient input, @Nonnull ItemStack output, @Nonnegative int minimumTier, @Nonnegative int syphon, @Nonnegative int consumeRate, @Nonnegative int drainRate) { + Preconditions.checkNotNull(input, "input cannot be null."); + Preconditions.checkNotNull(output, "output cannot be null."); + Preconditions.checkArgument(minimumTier >= 0, "minimumTier cannot be negative."); + Preconditions.checkArgument(minimumTier <= EnumAltarTier.MAXTIERS, "minimumTier cannot be higher than max tier"); + Preconditions.checkArgument(syphon >= 0, "syphon cannot be negative."); + Preconditions.checkArgument(consumeRate >= 0, "consumeRate cannot be negative."); + Preconditions.checkArgument(drainRate >= 0, "drain cannot be negative."); + + this.input = input; + this.output = output; + this.minimumTier = EnumAltarTier.VALUES[minimumTier]; + this.syphon = syphon; + this.consumeRate = consumeRate; + this.drainRate = drainRate; + } + + @Nonnull + public final Ingredient getInput() { + return input; + } + + @Nonnull + public final ItemStack getOutput() { + return output; + } + + @Nonnull + public EnumAltarTier getMinimumTier() { + return minimumTier; + } + + @Nonnegative + public final int getSyphon() { + return syphon; + } + + @Nonnegative + public final int getConsumeRate() { + return consumeRate; + } + + @Nonnegative + public final int getDrainRate() { + return drainRate; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/api_impl/recipe/RecipeTartaricForge.java b/src/main/java/WayofTime/bloodmagic/api_impl/recipe/RecipeTartaricForge.java new file mode 100644 index 00000000..d1db42ae --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api_impl/recipe/RecipeTartaricForge.java @@ -0,0 +1,53 @@ +package WayofTime.bloodmagic.api_impl.recipe; + +import com.google.common.base.Preconditions; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.NonNullList; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +public class RecipeTartaricForge { + + @Nonnull + private final NonNullList input; + @Nonnull + private final ItemStack output; + @Nonnegative + private final double minimumSouls; + @Nonnegative + private final double soulDrain; + + public RecipeTartaricForge(@Nonnull NonNullList input, @Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain) { + Preconditions.checkNotNull(input, "input cannot be null."); + Preconditions.checkNotNull(output, "output cannot be null."); + Preconditions.checkArgument(minimumSouls >= 0, "minimumSouls cannot be negative."); + Preconditions.checkArgument(soulDrain >= 0, "soulDrain cannot be negative."); + + this.input = input; + this.output = output; + this.minimumSouls = minimumSouls; + this.soulDrain = soulDrain; + } + + @Nonnull + public final NonNullList getInput() { + return input; + } + + @Nonnull + public final ItemStack getOutput() { + return output; + } + + @Nonnegative + public final double getMinimumSouls() { + return minimumSouls; + } + + @Nonnegative + public final double getSoulDrain() { + return soulDrain; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicAPI.java b/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicAPI.java index 0e7c8d50..0024672a 100644 --- a/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicAPI.java +++ b/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicAPI.java @@ -3,6 +3,9 @@ package WayofTime.bloodmagic.apiv2; import net.minecraft.block.state.IBlockState; import net.minecraft.util.ResourceLocation; +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + public interface IBloodMagicAPI { /** @@ -10,9 +13,13 @@ public interface IBloodMagicAPI { * * @return the active blacklist instance */ + @Nonnull IBloodMagicBlacklist getBlacklist(); - void setSacrificialValue(ResourceLocation entityId, int value); + @Nonnull + IBloodMagicRecipeRegistrar getRecipeRegistrar(); - void registerAltarComponent(IBlockState state, String componentType); + void setSacrificialValue(@Nonnull ResourceLocation entityId, @Nonnegative int value); + + void registerAltarComponent(@Nonnull IBlockState state, @Nonnull String componentType); } diff --git a/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicBlacklist.java b/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicBlacklist.java index 61caa272..f1f1b0ad 100644 --- a/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicBlacklist.java +++ b/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicBlacklist.java @@ -4,21 +4,23 @@ import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.util.ResourceLocation; +import javax.annotation.Nonnull; + public interface IBloodMagicBlacklist { - void addTeleposer(IBlockState state); + void addTeleposer(@Nonnull IBlockState state); - void addTeleposer(Block block); + void addTeleposer(@Nonnull Block block); - void addTeleposer(ResourceLocation entityId); + void addTeleposer(@Nonnull ResourceLocation entityId); - void addTransposition(IBlockState state); + void addTransposition(@Nonnull IBlockState state); - void addTransposition(Block block); + void addTransposition(@Nonnull Block block); - void addGreenGrove(IBlockState state); + void addGreenGrove(@Nonnull IBlockState state); - void addGreenGrove(Block block); + void addGreenGrove(@Nonnull Block block); - void addSacrifice(ResourceLocation entityId); + void addWellOfSuffering(@Nonnull ResourceLocation entityId); } diff --git a/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicPlugin.java b/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicPlugin.java index ad2098a7..3d6c899d 100644 --- a/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicPlugin.java +++ b/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicPlugin.java @@ -1,6 +1,8 @@ package WayofTime.bloodmagic.apiv2; +import javax.annotation.Nonnull; + public interface IBloodMagicPlugin { - void register(IBloodMagicAPI api); + void register(@Nonnull IBloodMagicAPI api); } diff --git a/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicRecipeRegistrar.java b/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicRecipeRegistrar.java new file mode 100644 index 00000000..eb915423 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/apiv2/IBloodMagicRecipeRegistrar.java @@ -0,0 +1,22 @@ +package WayofTime.bloodmagic.apiv2; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +public interface IBloodMagicRecipeRegistrar { + + void addBloodAltar(@Nonnull Ingredient input, @Nonnull ItemStack output, @Nonnegative int minimumTier, @Nonnegative int syphon, @Nonnegative int consumeRate, @Nonnegative int drainRate); + + boolean removeBloodAltar(@Nonnull ItemStack input); + + void addAlchemyTable(@Nonnull ItemStack output, @Nonnegative int syphon, @Nonnegative int ticks, @Nonnegative int minimumTier, @Nonnull Ingredient... input); + + boolean removeAlchemyTable(@Nonnull ItemStack... input); + + void addTartaricForge(@Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain, @Nonnull Ingredient... input); + + boolean removeTartaricForge(@Nonnull ItemStack... input); +} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java b/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java index 886bbe25..aeb13014 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java @@ -16,6 +16,7 @@ import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileAltar; import WayofTime.bloodmagic.util.Utils; import com.google.common.base.Strings; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -163,10 +164,8 @@ public class BlockAltar extends Block implements IVariantProvider, IDocumentedBl // IVariantProvider @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "normal"); } // IDocumentedBlock diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java index 6637e06d..b8354f7e 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java @@ -6,6 +6,7 @@ import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.item.block.ItemBlockBloodTank; import WayofTime.bloodmagic.tile.TileBloodTank; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -195,11 +196,8 @@ public class BlockBloodTank extends BlockInteger implements IVariantProvider, IB // IVariantProvider @Override - public List> getVariants() { - List> ret = Lists.newArrayList(); + public void populateVariants(Int2ObjectMap variants) { for (int i = 0; i < TileBloodTank.CAPACITIES.length; i++) - ret.add(Pair.of(i, "inventory")); - - return ret; + variants.put(i, "inventory"); } } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java index b0bfcfb1..ba562cab 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java @@ -6,6 +6,7 @@ import WayofTime.bloodmagic.api.soul.IDiscreteDemonWill; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileDemonCrucible; import WayofTime.bloodmagic.util.Utils; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -100,10 +101,8 @@ public class BlockDemonCrucible extends Block implements IVariantProvider, IBMBl } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "normal"); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java index 95352a33..c5ca0a1b 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; import WayofTime.bloodmagic.api.soul.PlayerDemonWillHandler; import WayofTime.bloodmagic.item.ItemDemonCrystal; +import WayofTime.bloodmagic.item.block.ItemBlockDemonCrystal; import WayofTime.bloodmagic.tile.TileDemonCrystal; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -13,6 +14,7 @@ import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; @@ -26,7 +28,7 @@ import net.minecraft.world.World; import javax.annotation.Nullable; import java.util.Random; -public class BlockDemonCrystal extends Block { +public class BlockDemonCrystal extends Block implements IBMBlock { public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 6); public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumDemonWillType.class); public static final PropertyEnum ATTACHED = PropertyEnum.create("attached", EnumFacing.class); @@ -156,6 +158,8 @@ public class BlockDemonCrystal extends Block { } TileDemonCrystal crystal = (TileDemonCrystal) world.getTileEntity(pos); + if (crystal == null) + return false; if (PlayerDemonWillHandler.getTotalDemonWill(EnumDemonWillType.DEFAULT, player) > 1024) { crystal.dropSingleCrystal(); @@ -177,49 +181,13 @@ public class BlockDemonCrystal extends Block { return new TileDemonCrystal(); } - public static ItemStack getItemStackDropped(EnumDemonWillType type, int crystalNumber) { - ItemStack stack = null; - switch (type) { - case CORROSIVE: - stack = ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_CORROSIVE); - break; - case DEFAULT: - stack = ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT); - break; - case DESTRUCTIVE: - stack = ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DESTRUCTIVE); - break; - case STEADFAST: - stack = ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_STEADFAST); - break; - case VENGEFUL: - stack = ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_VENGEFUL); - break; - } - - stack.setCount(crystalNumber); - return stack; + @Nullable + @Override + public ItemBlock getItem() { + return new ItemBlockDemonCrystal(this); } - // @Override -// public java.util.List getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) -// { -// java.util.List ret = super.getDrops(world, pos, state, fortune); -// int age = ((Integer) state.getValue(AGE)).intValue(); -// Random rand = world instanceof World ? ((World) world).rand : new Random(); -// -// if (age >= 7) -// { -// int k = 3 + fortune; -// -// for (int i = 0; i < 3 + fortune; ++i) -// { -// if (rand.nextInt(15) <= age) -// { -// ret.add(new ItemStack(this.getSeed(), 1, 0)); -// } -// } -// } -// return ret; -// } + public static ItemStack getItemStackDropped(EnumDemonWillType type, int crystalNumber) { + return type.getStack(crystalNumber); + } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java index 0b255c05..9377a5c5 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.block; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileDemonCrystallizer; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -68,10 +69,8 @@ public class BlockDemonCrystallizer extends BlockContainer implements IVariantPr } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "normal"); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarBase.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarBase.java index 44c7f95f..5ff97e5b 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarBase.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarBase.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.block; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.block.base.BlockEnumPillar; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.util.EnumFacing; @@ -24,16 +25,12 @@ public class BlockDemonPillarBase & IStringSerializable> exten } @Override - public List> getVariants() { - List> ret = Lists.newArrayList(); - + public void populateVariants(Int2ObjectMap variants) { //This is done to make the ItemBlocks have the proper model EnumFacing.Axis[] axis = new EnumFacing.Axis[]{EnumFacing.Axis.Y, EnumFacing.Axis.X, EnumFacing.Axis.Z}; for (int i = 0; i < 3; i++) for (int j = 0; j < this.getTypes().length; j++) - ret.add(Pair.of(i * 5 + j, "axis=" + axis[i] + ",type=" + this.getTypes()[j])); - - return ret; + variants.put(i * 5 + j, "axis=" + axis[i] + ",type=" + this.getTypes()[j]); } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarCapBase.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarCapBase.java index 51ef6dbb..e18397e1 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarCapBase.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarCapBase.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.block; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.block.base.BlockEnumPillarCap; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.util.EnumFacing; @@ -24,15 +25,10 @@ public class BlockDemonPillarCapBase & IStringSerializable> ex } @Override - public List> getVariants() { - List> ret = Lists.newArrayList(); - + public void populateVariants(Int2ObjectMap variants) { //This is done to make the ItemBlocks have the proper model - for (int i = 0; i < EnumFacing.values().length; i++) for (int j = 0; j < this.getTypes().length; j++) - ret.add(Pair.of(i * 2 + j, "facing=" + EnumFacing.values()[i] + ",type=" + this.getTypes()[j])); - - return ret; + variants.put(i * 2 + j, "facing=" + EnumFacing.values()[i] + ",type=" + this.getTypes()[j]); } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java index 28abe0f5..f25a0e35 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.block; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileDemonPylon; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -61,9 +62,7 @@ public class BlockDemonPylon extends BlockContainer implements IVariantProvider } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "normal"); } } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonStairsBase.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonStairsBase.java index 30166d16..457a7111 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonStairsBase.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonStairsBase.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.block; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.block.base.BlockEnumStairs; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.util.IStringSerializable; @@ -23,12 +24,8 @@ public class BlockDemonStairsBase & IStringSerializable> exten } @Override - public List> getVariants() { - List> ret = Lists.newArrayList(); - + public void populateVariants(Int2ObjectMap variants) { for (int i = 0; i < this.getTypes().length; i++) - ret.add(Pair.of(i, "facing=south,half=bottom,shape=straight,type=" + this.getTypes()[i])); - - return ret; + variants.put(i, "facing=south,half=bottom,shape=straight,type=" + this.getTypes()[i]); } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonWallBase.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonWallBase.java index 2ad6bfe1..93fab1f7 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonWallBase.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonWallBase.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.block; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.block.base.BlockEnumWall; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.util.IStringSerializable; @@ -23,12 +24,8 @@ public class BlockDemonWallBase & IStringSerializable> extends } @Override - public List> getVariants() { - List> ret = Lists.newArrayList(); - + public void populateVariants(Int2ObjectMap variants) { for (int i = 0; i < this.getTypes().length; i++) - ret.add(Pair.of(i, "east=true,north=false,south=false,type=" + this.getTypes()[i] + ",up=true,west=true")); - - return ret; + variants.put(i, "east=true,north=false,south=false,type=" + this.getTypes()[i] + ",up=true,west=true"); } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java b/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java index af051063..c6aa9870 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.block; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileIncenseAltar; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -84,10 +85,8 @@ public class BlockIncenseAltar extends Block implements IVariantProvider, IBMBlo } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "normal"); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java index 03040157..0b49e8db 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.block.base.BlockEnum; import WayofTime.bloodmagic.block.enums.EnumSubWillType; import WayofTime.bloodmagic.tile.TileInversionPillar; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.BlockStateContainer; @@ -73,11 +74,9 @@ public class BlockInversionPillar extends BlockEnum { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); + public void populateVariants(Int2ObjectMap variants) { for (int i = 0; i < this.getTypes().length; i++) - ret.add(Pair.of(i, "static=false,type=" + this.getTypes()[i])); - return ret; + variants.put(i, "static=false,type=" + this.getTypes()[i]); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java index 9b0e3067..d5669c54 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.block.base.BlockEnum; import WayofTime.bloodmagic.block.enums.EnumInversionCap; import WayofTime.bloodmagic.client.IVariantProvider; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -54,10 +55,8 @@ public class BlockInversionPillarEnd extends BlockEnum impleme } @Override - public List> getVariants() { - List> ret = new ArrayList>(); + public void populateVariants(Int2ObjectMap variants) { for (int i = 0; i < this.getTypes().length; i++) - ret.add(new ImmutablePair(i, "type=" + this.getTypes()[i])); - return ret; + variants.put(i, "type=" + this.getTypes()[i]); } } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java b/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java index b488e046..12a201a1 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.block; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TilePhantomBlock; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -85,9 +86,7 @@ public class BlockPhantom extends Block implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "normal"); } } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java index 773d98b9..f9b4fdaf 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java @@ -5,6 +5,7 @@ import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.routing.TileMasterRoutingNode; import WayofTime.bloodmagic.tile.routing.TileRoutingNode; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyBool; @@ -132,7 +133,7 @@ public class BlockRoutingNode extends Block implements IBMBlock, IVariantProvide } @Override - public List> getVariants() { - return Lists.newArrayList(Pair.of(0, "inventory")); + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "inventory"); } } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java b/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java index 2c200c2c..6fa1b227 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileSoulForge; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -98,10 +99,8 @@ public class BlockSoulForge extends Block implements IVariantProvider, IBMBlock } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "normal"); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java b/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java index 7a001100..61f54108 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileSpectralBlock; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -68,7 +69,7 @@ public class BlockSpectral extends Block implements IVariantProvider { @Override public EnumBlockRenderType getRenderType(IBlockState state) { - return ConfigHandler.invisibleSpectralBlocks ? EnumBlockRenderType.INVISIBLE : EnumBlockRenderType.MODEL; + return ConfigHandler.client.invisibleSpectralBlocks ? EnumBlockRenderType.INVISIBLE : EnumBlockRenderType.MODEL; } @Override @@ -108,9 +109,7 @@ public class BlockSpectral extends Block implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "normal"); } } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockTeleposer.java b/src/main/java/WayofTime/bloodmagic/block/BlockTeleposer.java index 6ac92d99..e47581e9 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockTeleposer.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockTeleposer.java @@ -5,6 +5,7 @@ import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.item.ItemTelepositionFocus; import WayofTime.bloodmagic.tile.TileTeleposer; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -65,10 +66,8 @@ public class BlockTeleposer extends BlockContainer implements IVariantProvider, } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "normal"); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/block/IBMBlock.java b/src/main/java/WayofTime/bloodmagic/block/IBMBlock.java index 7dd5b818..479cbcdb 100644 --- a/src/main/java/WayofTime/bloodmagic/block/IBMBlock.java +++ b/src/main/java/WayofTime/bloodmagic/block/IBMBlock.java @@ -2,7 +2,10 @@ package WayofTime.bloodmagic.block; import net.minecraft.item.ItemBlock; +import javax.annotation.Nullable; + public interface IBMBlock { + @Nullable ItemBlock getItem(); } diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnum.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnum.java index 2691f724..496bbf38 100644 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnum.java +++ b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnum.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.block.IBMBlock; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.item.block.base.ItemBlockEnum; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyEnum; @@ -77,15 +78,12 @@ public class BlockEnum & IStringSerializable> extends Block im } @Override - public List> getVariants() { - List> variants = Lists.newArrayList(); + public void populateVariants(Int2ObjectMap variants) { if (getItem() == null) - return variants; + return; for (int i = 0; i < types.length; i++) - variants.add(Pair.of(i, getProperty().getName() + "=" + types[i].name())); - - return variants; + variants.put(i, getProperty().getName() + "=" + types[i].name()); } public E[] getTypes() { diff --git a/src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java b/src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java index d697da6f..a848bc65 100644 --- a/src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java +++ b/src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java @@ -22,11 +22,9 @@ public interface IMeshProvider { ItemMeshDefinition getMeshDefinition(); /** - * Gets all possible variants for this item - * - * @return - All possible variants for this item + * Populates a list of all possible variants for this item */ - List getVariants(); + void populateVariants(List variants); /** * If a custom ResourceLocation is required, return it here. @@ -36,5 +34,7 @@ public interface IMeshProvider { * @return - The custom ResourceLocation */ @Nullable - ResourceLocation getCustomLocation(); + default ResourceLocation getCustomLocation() { + return null; + } } diff --git a/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java b/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java index c37d9958..1d6c71e5 100644 --- a/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java +++ b/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java @@ -1,9 +1,16 @@ package WayofTime.bloodmagic.client; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import org.apache.commons.lang3.tuple.Pair; import java.util.List; public interface IVariantProvider { - List> getVariants(); + + /** + * A mapping of meta -> state variant + * + * @param variants A map to populate with all variants + */ + void populateVariants(Int2ObjectMap variants); } diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/config/ConfigGui.java b/src/main/java/WayofTime/bloodmagic/client/gui/config/ConfigGui.java deleted file mode 100644 index 9013d8ea..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/gui/config/ConfigGui.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.bloodmagic.client.gui.config; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; -import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.common.config.ConfigElement; -import net.minecraftforge.fml.client.config.GuiConfig; -import net.minecraftforge.fml.client.config.IConfigElement; - -import java.util.ArrayList; -import java.util.List; - -public class ConfigGui extends GuiConfig { - - public ConfigGui(GuiScreen parentScreen) { - super(parentScreen, getConfigElements(parentScreen), BloodMagic.MODID, false, false, "BloodMagic Configuration"); - } - - @SuppressWarnings("rawtypes") - private static List getConfigElements(GuiScreen parent) { - List list = new ArrayList(); - - // adds sections declared in ConfigHandler. toLowerCase() is used - // because the configuration class automatically does this, so must we. - list.add(new ConfigElement(ConfigHandler.config.getCategory("Potions".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("Client".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("Compatibility".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("Teleposer Blacklist".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("Well of Suffering Blacklist".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("Item/Block Blacklisting".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("General".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("Rituals".toLowerCase()))); - list.add(new ConfigElement(ConfigHandler.config.getCategory("Blood Altar Sacrificial Values".toLowerCase()))); - - return list; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/config/ConfigGuiFactory.java b/src/main/java/WayofTime/bloodmagic/client/gui/config/ConfigGuiFactory.java deleted file mode 100644 index 2f968574..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/gui/config/ConfigGuiFactory.java +++ /dev/null @@ -1,29 +0,0 @@ -package WayofTime.bloodmagic.client.gui.config; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.fml.client.IModGuiFactory; - -import java.util.Set; - -public class ConfigGuiFactory implements IModGuiFactory { - @Override - public void initialize(Minecraft minecraftInstance) { - - } - - @Override - public boolean hasConfigGui() { - return false; - } - - @Override - public GuiScreen createConfigGui(GuiScreen parentScreen) { - return new ConfigGui(parentScreen); - } - - @Override - public Set runtimeGuiCategories() { - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java index 9a94e561..083de767 100644 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java @@ -24,7 +24,7 @@ public class RenderItemRoutingNode extends TileEntitySpecialRenderer connectionList = tileNode.getConnected(); for (BlockPos wantedPos : connectionList) { BlockPos offsetPos = wantedPos.subtract(tileNode.getPos()); diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityBloodLight.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityBloodLight.java index 5d74c644..dcf62cf9 100644 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityBloodLight.java +++ b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityBloodLight.java @@ -1,7 +1,8 @@ package WayofTime.bloodmagic.client.render.entity; import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; -import WayofTime.bloodmagic.item.ItemComponent; +import WayofTime.bloodmagic.item.types.ComponentType; +import WayofTime.bloodmagic.item.types.ReagentType; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderItem; @@ -26,7 +27,7 @@ public class RenderEntityBloodLight extends Render { GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); GlStateManager.rotate(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); - this.renderItem.renderItem(ItemComponent.getStack(ItemComponent.REAGENT_BLOODLIGHT), ItemCameraTransforms.TransformType.GROUND); + this.renderItem.renderItem(ReagentType.REAGENT_BLOODLIGHT.getStack(), ItemCameraTransforms.TransformType.GROUND); GlStateManager.disableRescaleNormal(); GlStateManager.popMatrix(); super.doRender(entity, x, y, z, entityYaw, partialTicks); diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/BloodMagicGuideAPIPlugin.java similarity index 65% rename from src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java rename to src/main/java/WayofTime/bloodmagic/compat/guideapi/BloodMagicGuideAPIPlugin.java index 39319de7..8b6cff38 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/BloodMagicGuideAPIPlugin.java @@ -24,7 +24,7 @@ import javax.annotation.Nullable; import java.awt.Color; @GuideBook(priority = EventPriority.HIGHEST) -public class GuideBloodMagic implements IGuideBook { +public class BloodMagicGuideAPIPlugin implements IGuideBook { public static final Book GUIDE_BOOK = new Book(); @@ -38,21 +38,21 @@ public class GuideBloodMagic implements IGuideBook { GUIDE_BOOK.setRegistryName(new ResourceLocation(BloodMagic.MODID, "guide")); GUIDE_BOOK.setColor(Color.RED); + CategoryAlchemy.buildCategory(GUIDE_BOOK); + CategoryArchitect.buildCategory(GUIDE_BOOK); + CategoryDemon.buildCategory(GUIDE_BOOK); + CategoryRitual.buildCategory(GUIDE_BOOK); + return GUIDE_BOOK; } @Override public void handlePost(ItemStack bookStack) { - GUIDE_BOOK.addCategory(new CategoryItemStack(CategoryAlchemy.buildCategory(), "guide.bloodmagic.category.alchemy", new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES))); - GUIDE_BOOK.addCategory(new CategoryItemStack(CategoryArchitect.buildCategory(), "guide.bloodmagic.category.architect", new ItemStack(RegistrarBloodMagicItems.SIGIL_DIVINATION))); - GUIDE_BOOK.addCategory(new CategoryItemStack(CategoryDemon.buildCategory(), "guide.bloodmagic.category.demon", new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD))); - GUIDE_BOOK.addCategory(new CategoryItemStack(CategoryRitual.buildCategory(), "guide.bloodmagic.category.ritual", new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER))); -// guideBook.addCategory(new CategoryItemStack(CategorySpell.buildCategory(), "guide.bloodmagic.category.spell", new ItemStack(ModItems.ritualDiviner))); } @Nullable @Override public IRecipe getRecipe(@Nonnull ItemStack bookStack) { - return new ShapelessOreRecipe(new ResourceLocation(BloodMagic.MODID, "guide"), GuideAPI.getStackFromBook(GUIDE_BOOK), new ItemStack(Items.BOOK), "glass", "feather").setRegistryName("guide"); + return new ShapelessOreRecipe(new ResourceLocation(BloodMagic.MODID, "guide"), GuideAPI.getStackFromBook(GUIDE_BOOK), new ItemStack(Items.BOOK), "blockGlass", "feather").setRegistryName("guide"); } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/BookUtils.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/BookUtils.java index 0c70656d..a532d149 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/BookUtils.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/BookUtils.java @@ -1,19 +1,47 @@ package WayofTime.bloodmagic.compat.guideapi; +import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyCircleRenderer; import WayofTime.bloodmagic.api.registry.AlchemyArrayRecipeRegistry; +import WayofTime.bloodmagic.api_impl.BloodMagicAPI; +import WayofTime.bloodmagic.api_impl.recipe.RecipeBloodAltar; +import WayofTime.bloodmagic.api_impl.recipe.RecipeTartaricForge; import WayofTime.bloodmagic.client.render.alchemyArray.DualAlchemyCircleRenderer; import WayofTime.bloodmagic.compat.guideapi.page.PageAlchemyArray; -import amerifrance.guideapi.page.PageIRecipe; +import WayofTime.bloodmagic.compat.guideapi.page.PageAltarRecipe; +import WayofTime.bloodmagic.compat.guideapi.page.PageTartaricForgeRecipe; +import amerifrance.guideapi.page.PageJsonRecipe; import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; import net.minecraft.util.ResourceLocation; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; public class BookUtils { + @Nullable + public static PageAltarRecipe getAltarPage(ItemStack output) { + for (RecipeBloodAltar recipe : BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes()) + if (ItemStack.areItemStacksEqualUsingNBTShareTag(output, recipe.getOutput())) + return new PageAltarRecipe(recipe); + + return null; + } + + @Nullable + public static PageTartaricForgeRecipe getForgePage(ItemStack output) { + for (RecipeTartaricForge recipe : BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForgeRecipes()) + if (ItemStack.areItemStacksEqualUsingNBTShareTag(output, recipe.getOutput())) + return new PageTartaricForgeRecipe(recipe); + + return null; + } + + public static PageJsonRecipe getCraftingPage(String name) { + return new PageJsonRecipe(new ResourceLocation(BloodMagic.MODID, name)); + } + public static PageAlchemyArray getAlchemyPage(String key) { ItemStack[] recipe = AlchemyArrayRecipeRegistry.getRecipeForArrayEffect(key); if (recipe[0] != null) { @@ -55,8 +83,4 @@ public class BookUtils { return null; } - - public static PageIRecipe getPageForRecipe(IRecipe recipe) { - return new PageIRecipe(recipe); - } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryAlchemy.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryAlchemy.java index a161cb2c..e0f1d390 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryAlchemy.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryAlchemy.java @@ -1,103 +1,58 @@ package WayofTime.bloodmagic.compat.guideapi.book; import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe; import WayofTime.bloodmagic.compat.guideapi.BookUtils; import WayofTime.bloodmagic.compat.guideapi.entry.EntryText; -import WayofTime.bloodmagic.compat.guideapi.page.PageAlchemyArray; -import WayofTime.bloodmagic.compat.guideapi.page.PageTartaricForgeRecipe; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.util.helper.RecipeHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; import amerifrance.guideapi.api.IPage; +import amerifrance.guideapi.api.impl.Book; import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; import amerifrance.guideapi.api.util.PageHelper; +import amerifrance.guideapi.category.CategoryItemStack; import amerifrance.guideapi.page.PageText; +import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; public class CategoryAlchemy { - public static Map buildCategory() { - Map entries = new LinkedHashMap(); - String keyBase = "guide." + BloodMagic.MODID + ".entry.alchemy."; - List introPages = new ArrayList(); - introPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "intro" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "intro"), new EntryText(introPages, TextHelper.localize(keyBase + "intro"), true)); + public static void buildCategory(Book book) { + final String keyBase = "guide." + BloodMagic.MODID + ".entry.alchemy."; - List ashPages = new ArrayList(); + CategoryItemStack category = new CategoryItemStack(keyBase + "alchemy", new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES)); + category.withKeyBase(BloodMagic.MODID); - TartaricForgeRecipe ashRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES)); - if (ashRecipe != null) { - ashPages.add(new PageTartaricForgeRecipe(ashRecipe)); - } - ashPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "ash" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "ash"), new EntryText(ashPages, TextHelper.localize(keyBase + "ash"), true)); + category.addEntry("intro", new EntryText(keyBase + "intro", true)); + category.getEntry("intro").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "intro.info"), 370)); - List speedPages = new ArrayList(); + category.addEntry("ash", new EntryText(keyBase + "ash", true)); + category.getEntry("ash").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES))); + category.getEntry("ash").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "ash.info"), 370)); - PageAlchemyArray speedRecipePage = BookUtils.getAlchemyPage("movement"); - if (speedRecipePage != null) { - speedPages.add(speedRecipePage); - } - speedPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "speed" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "speed"), new EntryText(speedPages, TextHelper.localize(keyBase + "speed"), true)); + category.addEntry("speed", new EntryText(keyBase + "speed", true)); + category.getEntry("speed").addPage(BookUtils.getAlchemyPage("movement")); + category.getEntry("speed").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "speed.info"), 370)); - List updraftPages = new ArrayList(); + category.addEntry("updraft", new EntryText(keyBase + "updraft", true)); + category.getEntry("updraft").addPage(BookUtils.getAlchemyPage("updraft")); + category.getEntry("updraft").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "updraft.info"), 370)); - PageAlchemyArray updraftRecipePage = BookUtils.getAlchemyPage("updraft"); - if (updraftRecipePage != null) { - updraftPages.add(updraftRecipePage); - } - updraftPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "updraft" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "updraft"), new EntryText(updraftPages, TextHelper.localize(keyBase + "updraft"), true)); + category.addEntry("turret", new EntryText(keyBase + "turret", true)); + category.getEntry("turret").addPage(BookUtils.getAlchemyPage("skeletonTurret")); + category.getEntry("turret").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "turret.info"), 370)); - List turretPages = new ArrayList(); + category.addEntry("bounce", new EntryText(keyBase + "bounce", true)); + category.getEntry("bounce").addPage(BookUtils.getAlchemyPage("bounce")); + category.getEntry("bounce").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "bounce.info"), 370)); - PageAlchemyArray turretRecipePage = BookUtils.getAlchemyPage("skeletonTurret"); - if (turretRecipePage != null) { - turretPages.add(turretRecipePage); - } - turretPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "turret" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "turret"), new EntryText(turretPages, TextHelper.localize(keyBase + "turret"), true)); + category.addEntry("buff", new EntryText(keyBase + "buff", true)); + category.getEntry("buff").addPage(BookUtils.getAlchemyPage("buff")); + category.getEntry("buff").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "buff.info"), 370)); - List bouncePages = new ArrayList(); + category.addEntry("fastMiner", new EntryText(keyBase + "fastMiner", true)); + category.getEntry("fastMiner").addPage(BookUtils.getAlchemyPage("fastMiner")); + category.getEntry("fastMiner").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "fastMiner.info"), 370)); - PageAlchemyArray bounceRecipePage = BookUtils.getAlchemyPage("bounce"); - if (bounceRecipePage != null) { - bouncePages.add(bounceRecipePage); - } - bouncePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bounce" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "bounce"), new EntryText(bouncePages, TextHelper.localize(keyBase + "bounce"), true)); - - List buffPages = new ArrayList(); - - buffPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "buff" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "buff"), new EntryText(buffPages, TextHelper.localize(keyBase + "buff"), true)); - - List fastMinerPages = new ArrayList(); - - PageAlchemyArray fastMinerRecipePage = BookUtils.getAlchemyPage("fastMiner"); - if (fastMinerRecipePage != null) { - fastMinerPages.add(fastMinerRecipePage); - } - fastMinerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "fastMiner" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "fastMiner"), new EntryText(fastMinerPages, TextHelper.localize(keyBase + "fastMiner"), true)); - - for (Entry entry : entries.entrySet()) { - for (IPage page : entry.getValue().pageList) { - if (page instanceof PageText) { - ((PageText) page).setUnicodeFlag(true); - } - } - } - - return entries; + category.entries.values().forEach(e -> e.pageList.stream().filter(p -> p instanceof PageText).forEach(p -> ((PageText) p).setUnicodeFlag(true))); + book.addCategory(category); } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryArchitect.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryArchitect.java index ba1b8d31..9501278b 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryArchitect.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryArchitect.java @@ -1,646 +1,259 @@ package WayofTime.bloodmagic.compat.guideapi.book; import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe; -import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry.AltarRecipe; -import WayofTime.bloodmagic.api.registry.OrbRegistry; +import WayofTime.bloodmagic.api.orb.BloodOrb; import WayofTime.bloodmagic.compat.guideapi.BookUtils; import WayofTime.bloodmagic.compat.guideapi.entry.EntryText; -import WayofTime.bloodmagic.compat.guideapi.page.PageAlchemyArray; -import WayofTime.bloodmagic.compat.guideapi.page.PageAltarRecipe; -import WayofTime.bloodmagic.compat.guideapi.page.PageTartaricForgeRecipe; import WayofTime.bloodmagic.core.RegistrarBloodMagic; import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.ItemComponent; -import WayofTime.bloodmagic.util.helper.RecipeHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import amerifrance.guideapi.api.IPage; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; +import WayofTime.bloodmagic.item.types.ComponentType; +import WayofTime.bloodmagic.item.types.ReagentType; +import amerifrance.guideapi.api.impl.Book; import amerifrance.guideapi.api.util.PageHelper; +import amerifrance.guideapi.category.CategoryItemStack; import amerifrance.guideapi.page.PageText; +import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; +import net.minecraft.nbt.NBTTagCompound; public class CategoryArchitect { - public static Map buildCategory() { - Map entries = new LinkedHashMap(); - String keyBase = "guide." + BloodMagic.MODID + ".entry.architect."; - List introPages = new ArrayList(); - introPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "intro" + ".info"), 370)); -// introPages.add(new PageImage(new ResourceLocation("bloodmagicguide", "textures/guide/" + ritual.getName() + ".png"))); - entries.put(new ResourceLocation(keyBase + "intro"), new EntryText(introPages, TextHelper.localize(keyBase + "intro"), true)); - - List altarPages = new ArrayList(); - - IRecipe altarRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.ALTAR)); - if (altarRecipe != null) { - altarPages.add(BookUtils.getPageForRecipe(altarRecipe)); - } - - altarPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bloodaltar" + ".info.1"), 370)); - - IRecipe daggerRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SACRIFICIAL_DAGGER)); - if (daggerRecipe != null) { - altarPages.add(BookUtils.getPageForRecipe(daggerRecipe)); - } - - altarPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bloodaltar" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "bloodaltar"), new EntryText(altarPages, TextHelper.localize(keyBase + "bloodaltar"), true)); - - List ashPages = new ArrayList(); - - TartaricForgeRecipe ashRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES)); - if (ashRecipe != null) { - ashPages.add(new PageTartaricForgeRecipe(ashRecipe)); - } - ashPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "ash" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "ash"), new EntryText(ashPages, TextHelper.localize(keyBase + "ash"), true)); - - List divinationPages = new ArrayList(); - - PageAlchemyArray divinationRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_DIVINATION)); - if (divinationRecipePage != null) { - divinationPages.add(divinationRecipePage); - } - - divinationPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "divination" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "divination"), new EntryText(divinationPages, TextHelper.localize(keyBase + "divination"), true)); - - List soulnetworkPages = new ArrayList(); - - soulnetworkPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "soulnetwork" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "soulnetwork"), new EntryText(soulnetworkPages, TextHelper.localize(keyBase + "soulnetwork"), true)); - - List weakorbPages = new ArrayList(); - weakorbPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "weakorb" + ".info.1"), 370)); - - AltarRecipe weakorbRecipe = RecipeHelper.getAltarRecipeForOutput(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK)); - if (weakorbRecipe != null) { - weakorbPages.add(new PageAltarRecipe(weakorbRecipe)); - } - - weakorbPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "weakorb" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "weakorb"), new EntryText(weakorbPages, TextHelper.localize(keyBase + "weakorb"), true)); - - List incensePages = new ArrayList(); - - IRecipe incenseRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.INCENSE_ALTAR)); - if (incenseRecipe != null) { - incensePages.add(BookUtils.getPageForRecipe(incenseRecipe)); - } - - incensePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "incense" + ".info.1"), 370)); - - IRecipe woodPathRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 0)); - if (woodPathRecipe != null) { - incensePages.add(BookUtils.getPageForRecipe(woodPathRecipe)); - } - - incensePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "incense" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "incense"), new EntryText(incensePages, TextHelper.localize(keyBase + "incense"), true)); - - List runePages = new ArrayList(); - - IRecipe runeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 0)); - if (runeRecipe != null) { - runePages.add(BookUtils.getPageForRecipe(runeRecipe)); - } - - runePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bloodrune" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "bloodrune"), new EntryText(runePages, TextHelper.localize(keyBase + "bloodrune"), true)); - - List inspectPages = new ArrayList(); - - AltarRecipe inspectRecipe = RecipeHelper.getAltarRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SANGUINE_BOOK)); - if (inspectRecipe != null) { - inspectPages.add(new PageAltarRecipe(inspectRecipe)); - } - - inspectPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "inspectoris" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "inspectoris"), new EntryText(inspectPages, TextHelper.localize(keyBase + "inspectoris"), true)); - - List speedRunePages = new ArrayList(); - - IRecipe speedRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 1)); - if (speedRecipe != null) { - speedRunePages.add(BookUtils.getPageForRecipe(speedRecipe)); - } - - speedRunePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeSpeed" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "runeSpeed"), new EntryText(speedRunePages, TextHelper.localize(keyBase + "runeSpeed"), true)); - - List waterPages = new ArrayList(); - - TartaricForgeRecipe waterRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_WATER)); - if (waterRecipe != null) { - waterPages.add(new PageTartaricForgeRecipe(waterRecipe)); - } - - PageAlchemyArray waterRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_WATER)); - if (waterRecipePage != null) { - waterPages.add(waterRecipePage); - } - - waterPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "water" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "water"), new EntryText(waterPages, TextHelper.localize(keyBase + "water"), true)); - - List lavaPages = new ArrayList(); - - TartaricForgeRecipe lavaRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_LAVA)); - if (lavaRecipe != null) { - lavaPages.add(new PageTartaricForgeRecipe(lavaRecipe)); - } - - PageAlchemyArray lavaRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_LAVA)); - if (lavaRecipePage != null) { - lavaPages.add(lavaRecipePage); - } - - lavaPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lava" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "lava"), new EntryText(lavaPages, TextHelper.localize(keyBase + "lava"), true)); - - List lavaCrystalPages = new ArrayList(); - - IRecipe lavaCrystalRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.LAVA_CRYSTAL)); - if (lavaCrystalRecipe != null) { - lavaCrystalPages.add(BookUtils.getPageForRecipe(lavaCrystalRecipe)); - } - - lavaCrystalPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lavaCrystal" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "lavaCrystal"), new EntryText(lavaCrystalPages, TextHelper.localize(keyBase + "lavaCrystal"), true)); - - List apprenticeorbPages = new ArrayList(); - - AltarRecipe apprenticeorbRecipe = RecipeHelper.getAltarRecipeForOutput(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_APPRENTICE)); - if (apprenticeorbRecipe != null) { - apprenticeorbPages.add(new PageAltarRecipe(apprenticeorbRecipe)); - } - - apprenticeorbPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "apprenticeorb" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "apprenticeorb"), new EntryText(apprenticeorbPages, TextHelper.localize(keyBase + "apprenticeorb"), true)); - - List daggerPages = new ArrayList(); - - AltarRecipe daggerOfSacrificeRecipe = RecipeHelper.getAltarRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.DAGGER_OF_SACRIFICE)); - if (daggerOfSacrificeRecipe != null) { - daggerPages.add(new PageAltarRecipe(daggerOfSacrificeRecipe)); - } - - daggerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "dagger" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "dagger"), new EntryText(daggerPages, TextHelper.localize(keyBase + "dagger"), true)); - - List runeSacrificePages = new ArrayList(); - - IRecipe runeSacrificeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 3)); - if (runeSacrificeRecipe != null) { - runeSacrificePages.add(BookUtils.getPageForRecipe(runeSacrificeRecipe)); - } - - runeSacrificePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeSacrifice" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "runeSacrifice"), new EntryText(runeSacrificePages, TextHelper.localize(keyBase + "runeSacrifice"), true)); - - List runeSelfSacrificePages = new ArrayList(); - - IRecipe runeSelfSacrificeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 4)); - if (runeSelfSacrificeRecipe != null) { - runeSelfSacrificePages.add(BookUtils.getPageForRecipe(runeSelfSacrificeRecipe)); - } - - runeSelfSacrificePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeSelfSacrifice" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "runeSelfSacrifice"), new EntryText(runeSelfSacrificePages, TextHelper.localize(keyBase + "runeSelfSacrifice"), true)); - - List holdingPages = new ArrayList(); - - TartaricForgeRecipe holdingRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_HOLDING)); - if (holdingRecipe != null) { - holdingPages.add(new PageTartaricForgeRecipe(holdingRecipe)); - } - - PageAlchemyArray holdingRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_HOLDING)); - if (holdingRecipePage != null) { - holdingPages.add(holdingRecipePage); - } - - holdingPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "holding" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "holding"), new EntryText(holdingPages, TextHelper.localize(keyBase + "holding"), true)); - - List airPages = new ArrayList(); - - TartaricForgeRecipe airRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_AIR)); - if (airRecipe != null) { - airPages.add(new PageTartaricForgeRecipe(airRecipe)); - } - - PageAlchemyArray airRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_AIR)); - if (airRecipePage != null) { - airPages.add(airRecipePage); - } - - airPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "air" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "air"), new EntryText(airPages, TextHelper.localize(keyBase + "air"), true)); - - List voidPages = new ArrayList(); - - TartaricForgeRecipe voidRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_VOID)); - if (voidRecipe != null) { - voidPages.add(new PageTartaricForgeRecipe(voidRecipe)); - } - - PageAlchemyArray voidRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_VOID)); - if (voidRecipePage != null) { - voidPages.add(voidRecipePage); - } - - voidPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "void" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "void"), new EntryText(voidPages, TextHelper.localize(keyBase + "void"), true)); - - List greenGrovePages = new ArrayList(); - - TartaricForgeRecipe greenGroveRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_GROWTH)); - if (greenGroveRecipe != null) { - greenGrovePages.add(new PageTartaricForgeRecipe(greenGroveRecipe)); - } - - PageAlchemyArray greenGroveRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_GREEN_GROVE)); - if (greenGroveRecipePage != null) { - greenGrovePages.add(greenGroveRecipePage); - } - - greenGrovePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "greenGrove" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "greenGrove"), new EntryText(greenGrovePages, TextHelper.localize(keyBase + "greenGrove"), true)); - - List fastMinerPages = new ArrayList(); - - TartaricForgeRecipe fastMinerRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_FASTMINER)); - if (fastMinerRecipe != null) { - fastMinerPages.add(new PageTartaricForgeRecipe(fastMinerRecipe)); - } - - PageAlchemyArray fastMinerRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_FAST_MINER)); - if (fastMinerRecipePage != null) { - fastMinerPages.add(fastMinerRecipePage); - } - - fastMinerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "fastMiner" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "fastMiner"), new EntryText(fastMinerPages, TextHelper.localize(keyBase + "fastMiner"), true)); - - List seerPages = new ArrayList(); - - TartaricForgeRecipe seerRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_SIGHT)); - if (seerRecipe != null) { - seerPages.add(new PageTartaricForgeRecipe(seerRecipe)); - } - - PageAlchemyArray seerRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_SEER)); - if (seerRecipePage != null) { - seerPages.add(seerRecipePage); - } - - seerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "seer" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "seer"), new EntryText(seerPages, TextHelper.localize(keyBase + "seer"), true)); - - List magicianOrbPages = new ArrayList(); - - AltarRecipe magicianOrbRecipe = RecipeHelper.getAltarRecipeForOutput(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MAGICIAN)); - if (magicianOrbRecipe != null) { - magicianOrbPages.add(new PageAltarRecipe(magicianOrbRecipe)); - } - - magicianOrbPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "magicianOrb" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "magicianOrb"), new EntryText(magicianOrbPages, TextHelper.localize(keyBase + "magicianOrb"), true)); - - List capacityPages = new ArrayList(); - - IRecipe capacityRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 4)); - if (capacityRecipe != null) { - capacityPages.add(BookUtils.getPageForRecipe(capacityRecipe)); - } - - capacityPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "capacity" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "capacity"), new EntryText(capacityPages, TextHelper.localize(keyBase + "capacity"), true)); - - List displacementPages = new ArrayList(); - - IRecipe displacementRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 4)); - if (displacementRecipe != null) { - displacementPages.add(BookUtils.getPageForRecipe(displacementRecipe)); - } - - displacementPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "displacement" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "displacement"), new EntryText(displacementPages, TextHelper.localize(keyBase + "displacement"), true)); - - List affinityPages = new ArrayList(); - - TartaricForgeRecipe affinityRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_AFFINITY)); - if (affinityRecipe != null) { - affinityPages.add(new PageTartaricForgeRecipe(affinityRecipe)); - } - - PageAlchemyArray affinityRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_ELEMENTAL_AFFINITY)); - if (affinityRecipePage != null) { - affinityPages.add(affinityRecipePage); - } - - affinityPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "affinity" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "affinity"), new EntryText(affinityPages, TextHelper.localize(keyBase + "affinity"), true)); - - List lampPages = new ArrayList(); - - TartaricForgeRecipe lampRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_BLOODLIGHT)); - if (lampRecipe != null) { - lampPages.add(new PageTartaricForgeRecipe(lampRecipe)); - } - - PageAlchemyArray lampRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_BLOOD_LIGHT)); - if (lampRecipePage != null) { - lampPages.add(lampRecipePage); - } - - lampPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lamp" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "lamp"), new EntryText(lampPages, TextHelper.localize(keyBase + "lamp"), true)); - - List magnetismPages = new ArrayList(); - - TartaricForgeRecipe magnetismRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_MAGNETISM)); - if (magnetismRecipe != null) { - magnetismPages.add(new PageTartaricForgeRecipe(magnetismRecipe)); - } - - PageAlchemyArray magnetismRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_MAGNETISM)); - if (magnetismRecipePage != null) { - magnetismPages.add(magnetismRecipePage); - } - - magnetismPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "magnetism" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "magnetism"), new EntryText(magnetismPages, TextHelper.localize(keyBase + "magnetism"), true)); - - List peritiaPages = new ArrayList(); - - IRecipe peritiaRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.EXPERIENCE_TOME)); - if (peritiaRecipe != null) { - peritiaPages.add(BookUtils.getPageForRecipe(peritiaRecipe)); - } - - peritiaPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "peritia" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "peritia"), new EntryText(peritiaPages, TextHelper.localize(keyBase + "peritia"), true)); - - List livingArmourPages = new ArrayList(); - - TartaricForgeRecipe bindingRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_BINDING)); - if (bindingRecipe != null) { - livingArmourPages.add(new PageTartaricForgeRecipe(bindingRecipe)); - } - - PageAlchemyArray bindingRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST)); - if (bindingRecipePage != null) { - livingArmourPages.add(bindingRecipePage); - } - - bindingRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET)); - if (bindingRecipePage != null) { - livingArmourPages.add(bindingRecipePage); - } - - bindingRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_LEGGINGS)); - if (bindingRecipePage != null) { - livingArmourPages.add(bindingRecipePage); - } - - bindingRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_BOOTS)); - if (bindingRecipePage != null) { - livingArmourPages.add(bindingRecipePage); - } - - livingArmourPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "livingArmour" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "livingArmour"), new EntryText(livingArmourPages, TextHelper.localize(keyBase + "livingArmour"), true)); - - List upgradePages = new ArrayList(); - - upgradePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "upgradeTome" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "upgradeTome"), new EntryText(upgradePages, TextHelper.localize(keyBase + "upgradeTome"), true)); - - List downgradePages = new ArrayList(); - - downgradePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "downgrade" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "downgrade"), new EntryText(downgradePages, TextHelper.localize(keyBase + "downgrade"), true)); - - List teleposerPages = new ArrayList(); - - AltarRecipe teleposerFocusRecipe = RecipeHelper.getAltarRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS)); - if (teleposerFocusRecipe != null) { - teleposerPages.add(new PageAltarRecipe(teleposerFocusRecipe)); - } - - IRecipe teleposerRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.TELEPOSER)); - if (teleposerRecipe != null) { - teleposerPages.add(BookUtils.getPageForRecipe(teleposerRecipe)); - } - - teleposerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "teleposer" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "teleposer"), new EntryText(teleposerPages, TextHelper.localize(keyBase + "teleposer"), true)); - - List boundBladePages = new ArrayList(); - - PageAlchemyArray boundBladePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_SWORD)); - if (boundBladePage != null) { - boundBladePages.add(boundBladePage); - } - - boundBladePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "boundBlade" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "boundBlade"), new EntryText(boundBladePages, TextHelper.localize(keyBase + "boundBlade"), true)); - - List boundToolPages = new ArrayList(); - - PageAlchemyArray boundToolPage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_PICKAXE)); - if (boundToolPage != null) { - boundToolPages.add(boundToolPage); - } - - boundToolPage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_AXE)); - if (boundToolPage != null) { - boundToolPages.add(boundToolPage); - } - - boundToolPage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_SHOVEL)); - if (boundToolPage != null) { - boundToolPages.add(boundToolPage); - } - - boundToolPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "boundTool" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "boundTool"), new EntryText(boundToolPages, TextHelper.localize(keyBase + "boundTool"), true)); - - List weakShardPages = new ArrayList(); - - weakShardPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "weakShard" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "weakShard"), new EntryText(weakShardPages, TextHelper.localize(keyBase + "weakShard"), true)); - - List masterOrbPages = new ArrayList(); - - AltarRecipe masterOrbRecipe = RecipeHelper.getAltarRecipeForOutput(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MASTER)); - if (magicianOrbRecipe != null) { - masterOrbPages.add(new PageAltarRecipe(masterOrbRecipe)); - } - - masterOrbPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "masterOrb" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "masterOrb"), new EntryText(masterOrbPages, TextHelper.localize(keyBase + "masterOrb"), true)); - - List orbRunePages = new ArrayList(); - - IRecipe orbRuneRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 8)); - if (orbRuneRecipe != null) { - orbRunePages.add(BookUtils.getPageForRecipe(orbRuneRecipe)); - } - - orbRunePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeOrb" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "runeOrb"), new EntryText(orbRunePages, TextHelper.localize(keyBase + "runeOrb"), true)); - - List augmentedCapacityPages = new ArrayList(); - - IRecipe augmentedCapacityRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 7)); - if (orbRuneRecipe != null) { - augmentedCapacityPages.add(BookUtils.getPageForRecipe(augmentedCapacityRecipe)); - } - - augmentedCapacityPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "augmentedCapacity" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "augmentedCapacity"), new EntryText(augmentedCapacityPages, TextHelper.localize(keyBase + "augmentedCapacity"), true)); - - List chargingPages = new ArrayList(); - - IRecipe chargingRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 10)); - if (orbRuneRecipe != null) { - chargingPages.add(BookUtils.getPageForRecipe(chargingRecipe)); - } - - chargingPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "charging" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "charging"), new EntryText(chargingPages, TextHelper.localize(keyBase + "charging"), true)); - - List accelerationPages = new ArrayList(); - - IRecipe accelerationRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 9)); - if (orbRuneRecipe != null) { - accelerationPages.add(BookUtils.getPageForRecipe(accelerationRecipe)); - } - - accelerationPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "acceleration" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "acceleration"), new EntryText(accelerationPages, TextHelper.localize(keyBase + "acceleration"), true)); - - List suppressionPages = new ArrayList(); - - TartaricForgeRecipe suppressionRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_SUPPRESSION)); - if (suppressionRecipe != null) { - suppressionPages.add(new PageTartaricForgeRecipe(suppressionRecipe)); - } - - PageAlchemyArray suppressionRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_SUPPRESSION)); - if (suppressionRecipePage != null) { - suppressionPages.add(suppressionRecipePage); - } - - suppressionPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "suppression" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "suppression"), new EntryText(suppressionPages, TextHelper.localize(keyBase + "suppression"), true)); - - List hastePages = new ArrayList(); - - TartaricForgeRecipe hasteRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_HASTE)); - if (hasteRecipe != null) { - hastePages.add(new PageTartaricForgeRecipe(hasteRecipe)); - } - - PageAlchemyArray hasteRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_HASTE)); - if (hasteRecipePage != null) { - hastePages.add(hasteRecipePage); - } - - hastePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "haste" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "haste"), new EntryText(hastePages, TextHelper.localize(keyBase + "haste"), true)); - - List severancePages = new ArrayList(); - - TartaricForgeRecipe severanceRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_SEVERANCE)); - if (severanceRecipe != null) { - severancePages.add(new PageTartaricForgeRecipe(severanceRecipe)); - } - - PageAlchemyArray severanceRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_ENDER_SEVERANCE)); - if (severanceRecipePage != null) { - severancePages.add(severanceRecipePage); - } - - severancePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "severance" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "severance"), new EntryText(severancePages, TextHelper.localize(keyBase + "severance"), true)); - - List telepositionPages = new ArrayList(); - - TartaricForgeRecipe telepositionRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_TELEPOSITION)); - if (telepositionRecipe != null) { - telepositionPages.add(new PageTartaricForgeRecipe(telepositionRecipe)); - } - - PageAlchemyArray telepositionRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_TELEPOSITION)); - if (telepositionRecipePage != null) { - telepositionPages.add(telepositionRecipePage); - } - - telepositionPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "teleposition" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "teleposition"), new EntryText(telepositionPages, TextHelper.localize(keyBase + "teleposition"), true)); - - List compressionPages = new ArrayList(); - - TartaricForgeRecipe compressionRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_COMPRESSION)); - if (compressionRecipe != null) { - compressionPages.add(new PageTartaricForgeRecipe(compressionRecipe)); - } - - PageAlchemyArray compressionRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_COMPRESSION)); - if (compressionRecipePage != null) { - compressionPages.add(compressionRecipePage); - } - - compressionPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "compression" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "compression"), new EntryText(compressionPages, TextHelper.localize(keyBase + "compression"), true)); - - List bridgePages = new ArrayList(); - - TartaricForgeRecipe bridgeRecipe = RecipeHelper.getForgeRecipeForOutput(ItemComponent.getStack(ItemComponent.REAGENT_BRIDGE)); - if (bridgeRecipe != null) { - bridgePages.add(new PageTartaricForgeRecipe(bridgeRecipe)); - } - - PageAlchemyArray bridgeRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_PHANTOM_BRIDGE)); - if (bridgeRecipePage != null) { - bridgePages.add(bridgeRecipePage); - } - - bridgePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bridge" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "bridge"), new EntryText(bridgePages, TextHelper.localize(keyBase + "bridge"), true)); - - List mimicPages = new ArrayList(); - - IRecipe mimicRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.MIMIC, 1, 1)); - if (mimicRecipe != null) { - mimicPages.add(BookUtils.getPageForRecipe(mimicRecipe)); - } - - mimicPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "mimic" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "mimic"), new EntryText(mimicPages, TextHelper.localize(keyBase + "mimic"), true)); - - for (Entry entry : entries.entrySet()) { - for (IPage page : entry.getValue().pageList) { - if (page instanceof PageText) { - ((PageText) page).setUnicodeFlag(true); - } - } - } - - return entries; + public static void buildCategory(Book book) { + final String keyBase = "guide." + BloodMagic.MODID + ".entry.architect."; + + CategoryItemStack category = new CategoryItemStack(keyBase + "architect", new ItemStack(RegistrarBloodMagicItems.SIGIL_DIVINATION)); + category.withKeyBase(BloodMagic.MODID); + + category.addEntry("intro", new EntryText(keyBase + "intro", true)); + category.getEntry("intro").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "intro.info"), 370)); + + category.addEntry("bloodaltar", new EntryText(keyBase + "bloodaltar", true)); + category.getEntry("bloodaltar").addPage(BookUtils.getCraftingPage("altar")); + category.getEntry("bloodaltar").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "bloodaltar.info.1"), 370)); + category.getEntry("bloodaltar").addPage(BookUtils.getCraftingPage("sacrificial_dagger")); + category.getEntry("bloodaltar").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "bloodaltar.info.2"), 370)); + + category.addEntry("ash", new EntryText(keyBase + "ash", true)); + category.getEntry("ash").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES))); + category.getEntry("ash").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "ash.info"), 370)); + + category.addEntry("divination", new EntryText(keyBase + "divination", true)); + category.getEntry("divination").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_DIVINATION))); + category.getEntry("divination").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "divination.info"))); + + category.addEntry("soulnetwork", new EntryText(keyBase + "soulnetwork", true)); + category.getEntry("soulnetwork").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "soulnetwork.info"))); + + category.addEntry("weakorb", new EntryText(keyBase + "weakorb", true)); + category.getEntry("weakorb").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "weakorb.info1"), 370)); + category.getEntry("weakorb").addPage(BookUtils.getAltarPage(getOrbStack(RegistrarBloodMagic.ORB_WEAK))); + category.getEntry("weakorb").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "weakorb.info2"), 370)); + + category.addEntry("incense", new EntryText(keyBase + "incense", true)); + category.getEntry("incense").addPage(BookUtils.getCraftingPage("incense_altar")); + category.getEntry("incense").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "incense.info.1"), 370)); + category.getEntry("incense").addPage(BookUtils.getCraftingPage("path_wood")); + category.getEntry("incense").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "incense.info.2"), 370)); + + category.addEntry("bloodrune", new EntryText(keyBase + "bloodrune", true)); + category.getEntry("bloodrune").addPage(BookUtils.getCraftingPage("blood_rune_blank")); + category.getEntry("bloodrune").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "bloodrune.info.1"), 370)); + + category.addEntry("inspectoris", new EntryText(keyBase + "inspectoris", true)); + category.getEntry("inspectoris").addPage(BookUtils.getAltarPage(new ItemStack(RegistrarBloodMagicItems.SANGUINE_BOOK))); + category.getEntry("inspectoris").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "inspectoris.info.1"), 370)); + + category.addEntry("runeSpeed", new EntryText(keyBase + "runeSpeed", true)); + category.getEntry("runeSpeed").addPage(BookUtils.getAltarPage(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 1))); + category.getEntry("runeSpeed").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "runeSpeed.info.1"), 370)); + + category.addEntry("water", new EntryText(keyBase + "water", true)); + category.getEntry("water").addPage(BookUtils.getForgePage(ReagentType.REAGENT_WATER.getStack())); + category.getEntry("water").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_WATER))); + category.getEntry("water").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "water.info.1"), 370)); + + category.addEntry("lava", new EntryText(keyBase + "lava", true)); + category.getEntry("lava").addPage(BookUtils.getForgePage(ReagentType.REAGENT_LAVA.getStack())); + category.getEntry("lava").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_LAVA))); + category.getEntry("lava").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "lava.info.1"), 370)); + + category.addEntry("lavaCrystal", new EntryText(keyBase + "lavaCrystal", true)); + category.getEntry("lavaCrystal").addPage(BookUtils.getCraftingPage("lava_crystal")); + category.getEntry("lavaCrystal").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "lavaCrystal.info.1"), 370)); + + category.addEntry("apprenticeorb", new EntryText(keyBase + "apprenticeorb", true)); + category.getEntry("apprenticeorb").addPage(BookUtils.getAltarPage(getOrbStack(RegistrarBloodMagic.ORB_APPRENTICE))); + category.getEntry("apprenticeorb").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "apprenticeorb.info.1"), 370)); + + category.addEntry("dagger", new EntryText(keyBase + "dagger", true)); + category.getEntry("dagger").addPage(BookUtils.getAltarPage(new ItemStack(RegistrarBloodMagicItems.DAGGER_OF_SACRIFICE))); + category.getEntry("dagger").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "dagger.info.1"), 370)); + + category.addEntry("runeSacrifice", new EntryText(keyBase + "runeSacrifice", true)); + category.getEntry("runeSacrifice").addPage(BookUtils.getCraftingPage("blood_rune_sacrifice")); + category.getEntry("runeSacrifice").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "runeSacrifice.info.1"), 370)); + + category.addEntry("runeSelfSacrifice", new EntryText(keyBase + "runeSelfSacrifice", true)); + category.getEntry("runeSelfSacrifice").addPage(BookUtils.getCraftingPage("blood_rune_selfsacrifice")); + category.getEntry("runeSelfSacrifice").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "runeSelfSacrifice.info.1"), 370)); + + category.addEntry("holding", new EntryText(keyBase + "holding", true)); + category.getEntry("holding").addPage(BookUtils.getForgePage(ReagentType.REAGENT_HOLDING.getStack())); + category.getEntry("holding").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_HOLDING))); + category.getEntry("holding").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "holding.info.1"), 370)); + + category.addEntry("air", new EntryText(keyBase + "air", true)); + category.getEntry("air").addPage(BookUtils.getForgePage(ReagentType.REAGENT_AIR.getStack())); + category.getEntry("air").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_AIR))); + category.getEntry("air").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "air.info.1"), 370)); + + category.addEntry("void", new EntryText(keyBase + "void", true)); + category.getEntry("void").addPage(BookUtils.getForgePage(ReagentType.REAGENT_VOID.getStack())); + category.getEntry("void").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_VOID))); + category.getEntry("void").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "void.info.1"), 370)); + + category.addEntry("greenGrove", new EntryText(keyBase + "greenGrove", true)); + category.getEntry("greenGrove").addPage(BookUtils.getForgePage(ReagentType.REAGENT_GROWTH.getStack())); + category.getEntry("greenGrove").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_GREEN_GROVE))); + category.getEntry("greenGrove").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "greenGrove.info.1"), 370)); + + category.addEntry("fastMiner", new EntryText(keyBase + "fastMiner", true)); + category.getEntry("fastMiner").addPage(BookUtils.getForgePage(ReagentType.REAGENT_FASTMINER.getStack())); + category.getEntry("fastMiner").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_FAST_MINER))); + category.getEntry("fastMiner").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "fastMiner.info.1"), 370)); + + category.addEntry("seer", new EntryText(keyBase + "seer", true)); + category.getEntry("seer").addPage(BookUtils.getForgePage(ReagentType.REAGENT_SIGHT.getStack())); + category.getEntry("seer").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_SEER))); + category.getEntry("seer").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "seer.info.1"), 370)); + + category.addEntry("magicianOrb", new EntryText(keyBase + "magicianOrb", true)); + category.getEntry("magicianOrb").addPage(BookUtils.getAltarPage(getOrbStack(RegistrarBloodMagic.ORB_MAGICIAN))); + category.getEntry("magicianOrb").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "magicianOrb.info.1"), 370)); + + category.addEntry("capacity", new EntryText(keyBase + "capacity", true)); + category.getEntry("capacity").addPage(BookUtils.getCraftingPage("blood_rune_capacity")); + category.getEntry("capacity").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "capacity.info.1"), 370)); + + category.addEntry("displacement", new EntryText(keyBase + "displacement", true)); + category.getEntry("displacement").addPage(BookUtils.getCraftingPage("blood_rune_displacement")); + category.getEntry("displacement").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "displacement.info.1"), 370)); + + category.addEntry("affinity", new EntryText(keyBase + "affinity", true)); + category.getEntry("affinity").addPage(BookUtils.getForgePage(ReagentType.REAGENT_AFFINITY.getStack())); + category.getEntry("affinity").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_ELEMENTAL_AFFINITY))); + category.getEntry("affinity").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "affinity.info"), 370)); + + category.addEntry("lamp", new EntryText(keyBase + "lamp", true)); + category.getEntry("lamp").addPage(BookUtils.getForgePage(ReagentType.REAGENT_BLOODLIGHT.getStack())); + category.getEntry("lamp").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_BLOOD_LIGHT))); + category.getEntry("lamp").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "lamp.info.1"), 370)); + + category.addEntry("magnetism", new EntryText(keyBase + "magnetism", true)); + category.getEntry("magnetism").addPage(BookUtils.getForgePage(ReagentType.REAGENT_MAGNETISM.getStack())); + category.getEntry("magnetism").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_MAGNETISM))); + category.getEntry("magnetism").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "magnetism.info.1"), 370)); + + category.addEntry("peritia", new EntryText(keyBase + "peritia", true)); + category.getEntry("peritia").addPage(BookUtils.getCraftingPage("experience_tome")); + category.getEntry("peritia").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "peritia.info.1"), 370)); + + category.addEntry("livingArmour", new EntryText(keyBase + "livingArmour", true)); + category.getEntry("livingArmour").addPage(BookUtils.getForgePage(ReagentType.REAGENT_BINDING.getStack())); + category.getEntry("livingArmour").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST))); + category.getEntry("livingArmour").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET))); + category.getEntry("livingArmour").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_LEGGINGS))); + category.getEntry("livingArmour").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_BOOTS))); + category.getEntry("livingArmour").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "livingArmour.info.1"), 370)); + + category.addEntry("upgradeTome", new EntryText(keyBase + "upgradeTome", true)); + category.getEntry("upgradeTome").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "upgradeTome.info.1"))); + + category.addEntry("downgrade", new EntryText(keyBase + "downgrade", true)); + category.getEntry("downgrade").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "downgrade.info.1"))); + + category.addEntry("teleposer", new EntryText(keyBase + "teleposer", true)); + category.getEntry("teleposer").addPage(BookUtils.getAltarPage(new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS))); + category.getEntry("teleposer").addPage(BookUtils.getCraftingPage("teleposer")); + category.getEntry("teleposer").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "teleposer.info.1"), 370)); + + category.addEntry("boundBlade", new EntryText(keyBase + "boundBlade", true)); + category.getEntry("boundBlade").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_SWORD))); + category.getEntry("boundBlade").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "boundBlade.info.1"), 370)); + + category.addEntry("boundTool", new EntryText(keyBase + "boundTool", true)); + category.getEntry("boundTool").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_PICKAXE))); + category.getEntry("boundTool").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_AXE))); + category.getEntry("boundTool").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_SHOVEL))); + category.getEntry("boundTool").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "boundTool.info.1"), 370)); + + category.addEntry("weakShard", new EntryText(keyBase + "weakShard", true)); + category.getEntry("weakShard").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "weakShard.info.1"), 370)); + + category.addEntry("masterOrb", new EntryText(keyBase + "masterOrb", true)); + category.getEntry("masterOrb").addPage(BookUtils.getAltarPage(getOrbStack(RegistrarBloodMagic.ORB_MASTER))); + category.getEntry("masterOrb").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "masterOrb.info.1"), 370)); + + category.addEntry("runeOrb", new EntryText(keyBase + "runeOrb", true)); + category.getEntry("runeOrb").addPage(BookUtils.getCraftingPage("blood_rune_orb")); + category.getEntry("runeOrb").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "runeOrb.info.1"), 370)); + + category.addEntry("augmentedCapacity", new EntryText(keyBase + "augmentedCapacity", true)); + category.getEntry("augmentedCapacity").addPage(BookUtils.getCraftingPage("blood_rune_augcapacity")); + category.getEntry("augmentedCapacity").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "augmentedCapacity.info.1"), 370)); + + category.addEntry("charging", new EntryText(keyBase + "charging", true)); + category.getEntry("charging").addPage(BookUtils.getCraftingPage("blood_rune_charging")); + category.getEntry("charging").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "charging.info.1"), 370)); + + category.addEntry("acceleration", new EntryText(keyBase + "acceleration", true)); + category.getEntry("acceleration").addPage(BookUtils.getCraftingPage("blood_rune_acceleration")); + category.getEntry("acceleration").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "acceleration.info.1"), 370)); + + category.addEntry("suppression", new EntryText(keyBase + "suppression", true)); + category.getEntry("suppression").addPage(BookUtils.getForgePage(ReagentType.REAGENT_SUPPRESSION.getStack())); + category.getEntry("suppression").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_SUPPRESSION))); + category.getEntry("suppression").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "suppression.info.1"), 370)); + + category.addEntry("haste", new EntryText(keyBase + "haste", true)); + category.getEntry("haste").addPage(BookUtils.getForgePage(ReagentType.REAGENT_HASTE.getStack())); + category.getEntry("haste").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_HASTE))); + category.getEntry("haste").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "haste.info.1"), 370)); + + category.addEntry("severance", new EntryText(keyBase + "severance", true)); + category.getEntry("severance").addPage(BookUtils.getForgePage(ReagentType.REAGENT_SEVERANCE.getStack())); + category.getEntry("severance").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_ENDER_SEVERANCE))); + category.getEntry("severance").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "severance.info.1"), 370)); + + category.addEntry("teleposition", new EntryText(keyBase + "teleposition", true)); + category.getEntry("teleposition").addPage(BookUtils.getForgePage(ReagentType.REAGENT_TELEPOSITION.getStack())); + category.getEntry("teleposition").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_TELEPOSITION))); + category.getEntry("teleposition").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "teleposition.info.1"), 370)); + + category.addEntry("compression", new EntryText(keyBase + "compression", true)); + category.getEntry("compression").addPage(BookUtils.getForgePage(ReagentType.REAGENT_COMPRESSION.getStack())); + category.getEntry("compression").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_COMPRESSION))); + category.getEntry("compression").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "compression.info.1"), 370)); + + category.addEntry("bridge", new EntryText(keyBase + "bridge", true)); + category.getEntry("bridge").addPage(BookUtils.getForgePage(ReagentType.REAGENT_BRIDGE.getStack())); + category.getEntry("bridge").addPage(BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_PHANTOM_BRIDGE))); + category.getEntry("bridge").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "bridge.info.1"), 370)); + + category.addEntry("mimic", new EntryText(keyBase + "mimic", true)); + category.getEntry("mimic").addPage(BookUtils.getCraftingPage("mimic_solidopaque")); + category.getEntry("mimic").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "mimic.info.1"), 370)); + + category.entries.values().forEach(e -> e.pageList.stream().filter(p -> p instanceof PageText).forEach(p -> ((PageText) p).setUnicodeFlag(true))); + book.addCategory(category); + } + + private static ItemStack getOrbStack(BloodOrb orb) { + ItemStack ret = new ItemStack(RegistrarBloodMagicItems.BLOOD_ORB); + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("orb", BloodMagic.MODID + ":" + orb.getName()); + ret.setTagCompound(tag); + return ret; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryDemon.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryDemon.java index 3c5c338d..debc1cb2 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryDemon.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryDemon.java @@ -1,191 +1,95 @@ package WayofTime.bloodmagic.compat.guideapi.book; import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe; import WayofTime.bloodmagic.compat.guideapi.BookUtils; import WayofTime.bloodmagic.compat.guideapi.entry.EntryText; -import WayofTime.bloodmagic.compat.guideapi.page.PageTartaricForgeRecipe; import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.util.helper.RecipeHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import amerifrance.guideapi.api.IPage; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; +import amerifrance.guideapi.api.impl.Book; import amerifrance.guideapi.api.util.PageHelper; +import amerifrance.guideapi.category.CategoryItemStack; import amerifrance.guideapi.page.PageText; +import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; public class CategoryDemon { - //TODO: Add Forge recipe pages - public static Map buildCategory() { - Map entries = new LinkedHashMap(); - String keyBase = "guide." + BloodMagic.MODID + ".entry.demon."; - List introPages = new ArrayList(); - introPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "intro" + ".info"), 370)); -// introPages.add(new PageImage(new ResourceLocation("bloodmagicguide", "textures/guide/" + ritual.getName() + ".png"))); - entries.put(new ResourceLocation(keyBase + "intro"), new EntryText(introPages, TextHelper.localize(keyBase + "intro"), true)); + public static void buildCategory(Book book) { + final String keyBase = "guide." + BloodMagic.MODID + ".entry.demon."; - List snarePages = new ArrayList(); - snarePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "snare" + ".info.1"), 370)); + CategoryItemStack category = new CategoryItemStack(keyBase + "demon", new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD)); + category.withKeyBase(BloodMagic.MODID); - IRecipe snareRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SOUL_SNARE)); - if (snareRecipe != null) { - snarePages.add(BookUtils.getPageForRecipe(snareRecipe)); - } + category.addEntry("intro", new EntryText(keyBase + "intro", true)); + category.getEntry("intro").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "intro.info"), 370)); - snarePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "snare" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "snare"), new EntryText(snarePages, TextHelper.localize(keyBase + "snare"), true)); + category.addEntry("snare", new EntryText(keyBase + "snare", true)); + category.getEntry("snare").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "snare.info.1"), 370)); + category.getEntry("snare").addPage(BookUtils.getCraftingPage("soul_snare")); + category.getEntry("snare").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "snare.info.2"), 370)); - List forgePages = new ArrayList(); - forgePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "forge" + ".info.1"), 370)); + category.addEntry("forge", new EntryText(keyBase + "forge", true)); + category.getEntry("forge").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "forge.info.1"), 370)); + category.getEntry("forge").addPage(BookUtils.getCraftingPage("soul_forge")); + category.getEntry("forge").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "forge.info.2"), 370)); - IRecipe forgeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.SOUL_FORGE)); - if (forgeRecipe != null) { - forgePages.add(BookUtils.getPageForRecipe(forgeRecipe)); - } + category.addEntry("petty", new EntryText(keyBase + "petty", true)); + category.getEntry("petty").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "petty.info.1"), 370)); + category.getEntry("petty").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM))); + category.getEntry("petty").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "petty.info.2"), 370)); - forgePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "forge" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "forge"), new EntryText(forgePages, TextHelper.localize(keyBase + "forge"), true)); + category.addEntry("sword", new EntryText(keyBase + "sword", true)); + category.getEntry("sword").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "sword.info.1"), 370)); + category.getEntry("sword").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicItems.SENTIENT_SWORD))); + category.getEntry("sword").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "sword.info.2"), 370)); - List pettyPages = new ArrayList(); - pettyPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "petty" + ".info.1"), 370)); - TartaricForgeRecipe pettyRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM)); - if (pettyRecipe != null) { - pettyPages.add(new PageTartaricForgeRecipe(pettyRecipe)); - } - pettyPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "petty" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "petty"), new EntryText(pettyPages, TextHelper.localize(keyBase + "petty"), true)); + category.addEntry("lesser", new EntryText(keyBase + "lesser", true)); + category.getEntry("lesser").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "lesser.info.1"), 370)); + category.getEntry("lesser").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1))); + category.getEntry("lesser").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "lesser.info.2"), 370)); - List swordPages = new ArrayList(); - swordPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sword" + ".info.1"), 370)); - TartaricForgeRecipe swordRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SENTIENT_SWORD)); - if (swordRecipe != null) { - swordPages.add(new PageTartaricForgeRecipe(swordRecipe)); - } - swordPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sword" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "sword"), new EntryText(swordPages, TextHelper.localize(keyBase + "sword"), true)); + category.addEntry("reactions", new EntryText(keyBase + "reactions", true)); + category.getEntry("reactions").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "reactions.info"), 370)); - List lesserPages = new ArrayList(); - lesserPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lesser" + ".info.1"), 370)); - TartaricForgeRecipe lesserRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1)); - if (lesserRecipe != null) { - lesserPages.add(new PageTartaricForgeRecipe(lesserRecipe)); - } - lesserPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lesser" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "lesser"), new EntryText(lesserPages, TextHelper.localize(keyBase + "lesser"), true)); + category.addEntry("sentientGem", new EntryText(keyBase + "sentientGem", true)); + category.getEntry("sentientGem").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "sentientGem.info.1"), 370)); + category.getEntry("sentientGem").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "sentientGem.info.2"), 370)); - List reactionsPages = new ArrayList(); - reactionsPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "reactions" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "reactions"), new EntryText(reactionsPages, TextHelper.localize(keyBase + "reactions"), true)); + category.addEntry("routing", new EntryText(keyBase + "routing", true)); + category.getEntry("routing").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE))); + category.getEntry("routing").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE))); + category.getEntry("routing").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicBlocks.OUTPUT_ROUTING_NODE))); + category.getEntry("routing").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicBlocks.MASTER_ROUTING_NODE))); + category.getEntry("routing").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicItems.NODE_ROUTER))); + category.getEntry("routing").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "routing.info"), 370)); - List sentientGemPages = new ArrayList(); - sentientGemPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sentientGem" + ".info.1"), 370)); - sentientGemPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sentientGem" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "sentientGem"), new EntryText(sentientGemPages, TextHelper.localize(keyBase + "sentientGem"), true)); + category.addEntry("aura", new EntryText(keyBase + "aura", true)); + category.getEntry("aura").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "aura.info"), 370)); - List routingPages = new ArrayList(); - TartaricForgeRecipe nodeRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE)); - if (nodeRecipe != null) { - routingPages.add(new PageTartaricForgeRecipe(nodeRecipe)); - } - TartaricForgeRecipe inputNodeRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE)); - if (inputNodeRecipe != null) { - routingPages.add(new PageTartaricForgeRecipe(inputNodeRecipe)); - } - TartaricForgeRecipe outputNodeRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.OUTPUT_ROUTING_NODE)); - if (outputNodeRecipe != null) { - routingPages.add(new PageTartaricForgeRecipe(outputNodeRecipe)); - } - TartaricForgeRecipe masterNodeRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.MASTER_ROUTING_NODE)); - if (masterNodeRecipe != null) { - routingPages.add(new PageTartaricForgeRecipe(masterNodeRecipe)); - } + category.addEntry("types", new EntryText(keyBase + "types", true)); + category.getEntry("types").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "types.info"), 370)); - TartaricForgeRecipe nodeRouterRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.NODE_ROUTER)); - if (nodeRouterRecipe != null) { - routingPages.add(new PageTartaricForgeRecipe(nodeRouterRecipe)); - } + category.addEntry("crucible", new EntryText(keyBase + "crucible", true)); + category.getEntry("crucible").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRUCIBLE))); + category.getEntry("crucible").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "crucible.info"), 370)); - routingPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "routing" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "routing"), new EntryText(routingPages, TextHelper.localize(keyBase + "routing"), true)); + category.addEntry("crystallizer", new EntryText(keyBase + "crystallizer", true)); + category.getEntry("crystallizer").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTALLIZER))); + category.getEntry("crystallizer").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "crystallizer.info"), 370)); - List auraPages = new ArrayList(); + category.addEntry("cluster", new EntryText(keyBase + "cluster", true)); + category.getEntry("cluster").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL))); + category.getEntry("cluster").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "cluster.info"), 370)); - auraPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "aura" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "aura"), new EntryText(auraPages, TextHelper.localize(keyBase + "aura"), true)); + category.addEntry("pylon", new EntryText(keyBase + "pylon", true)); + category.getEntry("pylon").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicBlocks.DEMON_PYLON))); + category.getEntry("pylon").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "pylon.info"), 370)); - List typesPages = new ArrayList(); + category.addEntry("gauge", new EntryText(keyBase + "gauge", true)); + category.getEntry("gauge").addPage(BookUtils.getForgePage(new ItemStack(RegistrarBloodMagicItems.DEMON_WILL_GAUGE))); + category.getEntry("gauge").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "gauge.info"), 370)); - typesPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "types" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "types"), new EntryText(typesPages, TextHelper.localize(keyBase + "types"), true)); - - List cruciblePages = new ArrayList(); - - TartaricForgeRecipe crucibleRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRUCIBLE)); - if (crucibleRecipe != null) { - cruciblePages.add(new PageTartaricForgeRecipe(crucibleRecipe)); - } - - cruciblePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "crucible" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "crucible"), new EntryText(cruciblePages, TextHelper.localize(keyBase + "crucible"), true)); - - List crystallizerPages = new ArrayList(); - - TartaricForgeRecipe crystallizerRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTALLIZER)); - if (crystallizerRecipe != null) { - crystallizerPages.add(new PageTartaricForgeRecipe(crystallizerRecipe)); - } - - crystallizerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "crystallizer" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "crystallizer"), new EntryText(crystallizerPages, TextHelper.localize(keyBase + "crystallizer"), true)); - - List clusterPages = new ArrayList(); - - TartaricForgeRecipe clusterRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL)); - if (clusterRecipe != null) { - clusterPages.add(new PageTartaricForgeRecipe(clusterRecipe)); - } - - clusterPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "cluster" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "cluster"), new EntryText(clusterPages, TextHelper.localize(keyBase + "cluster"), true)); - - List pylonPages = new ArrayList(); - - TartaricForgeRecipe pylonRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.DEMON_PYLON)); - if (pylonRecipe != null) { - pylonPages.add(new PageTartaricForgeRecipe(pylonRecipe)); - } - - pylonPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "pylon" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "pylon"), new EntryText(pylonPages, TextHelper.localize(keyBase + "pylon"), true)); - - List gaugePages = new ArrayList(); - - TartaricForgeRecipe gaugeRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.DEMON_WILL_GAUGE)); - if (gaugeRecipe != null) { - gaugePages.add(new PageTartaricForgeRecipe(gaugeRecipe)); - } - - gaugePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "gauge" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "gauge"), new EntryText(gaugePages, TextHelper.localize(keyBase + "gauge"), true)); - - for (Entry entry : entries.entrySet()) { - for (IPage page : entry.getValue().pageList) { - if (page instanceof PageText) { - ((PageText) page).setUnicodeFlag(true); - } - } - } - - return entries; + category.entries.values().forEach(e -> e.pageList.stream().filter(p -> p instanceof PageText).forEach(p -> ((PageText) p).setUnicodeFlag(true))); + book.addCategory(category); } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryRitual.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryRitual.java index a294a615..cb3f4e70 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryRitual.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryRitual.java @@ -1,127 +1,113 @@ package WayofTime.bloodmagic.compat.guideapi.book; import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry.AltarRecipe; import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.compat.guideapi.BookUtils; import WayofTime.bloodmagic.compat.guideapi.entry.EntryText; -import WayofTime.bloodmagic.compat.guideapi.page.PageAltarRecipe; import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.util.helper.RecipeHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import amerifrance.guideapi.api.IPage; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; +import amerifrance.guideapi.api.impl.Book; import amerifrance.guideapi.api.util.PageHelper; +import amerifrance.guideapi.category.CategoryItemStack; import amerifrance.guideapi.page.PageText; +import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; public class CategoryRitual { - static String keyBase = "guide." + BloodMagic.MODID + ".entry.ritual."; + static final String keyBase = "guide." + BloodMagic.MODID + ".entry.ritual."; - public static Map buildCategory() { - Map entries = new LinkedHashMap(); + public static void buildCategory(Book book) { + CategoryItemStack category = new CategoryItemStack(keyBase + "ritual", new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER)); + category.withKeyBase(BloodMagic.MODID); - addRitualPagesToEntries("intro", entries); - addRitualPagesToEntries("basics", entries); + category.addEntry("intro", new EntryText(keyBase + "intro", true)); + category.getEntry("intro").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "intro.info"))); - List ritualStonePages = new ArrayList(); + category.addEntry("basics", new EntryText(keyBase + "basics", true)); + category.getEntry("basics").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "basics.info"))); - IRecipe ritualStoneRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.RITUAL_STONE)); - if (ritualStoneRecipe != null) { - ritualStonePages.add(BookUtils.getPageForRecipe(ritualStoneRecipe)); - } + category.addEntry("ritualStone", new EntryText(keyBase + "ritualStone", true)); + category.getEntry("ritualStone").addPage(BookUtils.getCraftingPage("ritual_stone_blank")); + category.getEntry("ritualStone").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "ritualStone.info.1"), 370)); + for (EnumRuneType type : EnumRuneType.values()) + category.getEntry("ritualStone").addPage(BookUtils.getAltarPage(type.getScribeStack())); + category.getEntry("ritualStone").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "ritualStone.info.2"), 370)); - ritualStonePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "ritualStone" + ".info.1"), 370)); + category.addEntry("masterRitualStone", new EntryText(keyBase + "masterRitualStone", true)); + category.getEntry("masterRitualStone").addPage(BookUtils.getCraftingPage("ritual_controller_master")); + category.getEntry("masterRitualStone").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "masterRitualStone.info"), 370)); - for (int i = 1; i < 5; i++) { - EnumRuneType type = EnumRuneType.values()[i]; - AltarRecipe scribeRecipe = RecipeHelper.getAltarRecipeForOutput(type.getScribeStack()); - if (scribeRecipe != null) { - ritualStonePages.add(new PageAltarRecipe(scribeRecipe)); - } - } + category.addEntry("activationCrystal", new EntryText(keyBase + "activationCrystal", true)); + category.getEntry("activationCrystal").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "activationCrystal.info.1"), 370)); + category.getEntry("activationCrystal").addPage(BookUtils.getAltarPage(new ItemStack(RegistrarBloodMagicItems.ACTIVATION_CRYSTAL))); + category.getEntry("activationCrystal").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "activationCrystal.info.2"), 370)); - ritualStonePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "ritualStone" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "ritualStone"), new EntryText(ritualStonePages, TextHelper.localize(keyBase + "ritualStone"), true)); + category.addEntry("diviner", new EntryText(keyBase + "diviner", true)); + category.getEntry("diviner").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "diviner.info.1"), 370)); + category.getEntry("diviner").addPage(BookUtils.getCraftingPage("ritual_diviner_0")); + category.getEntry("diviner").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "diviner.info.2"), 370)); - List masterRitualStonePages = new ArrayList(); + category.addEntry("fullSpring", new EntryText(keyBase + "fullSpring", true)); + category.getEntry("fullSpring").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "fullSpring.info"))); - IRecipe masterRitualStoneRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER, 1, 0)); - if (masterRitualStoneRecipe != null) { - masterRitualStonePages.add(BookUtils.getPageForRecipe(masterRitualStoneRecipe)); - } + category.addEntry("lava", new EntryText(keyBase + "lava", true)); + category.getEntry("lava").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "lava.info"))); - masterRitualStonePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "masterRitualStone" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "masterRitualStone"), new EntryText(masterRitualStonePages, TextHelper.localize(keyBase + "masterRitualStone"), true)); + category.addEntry("greenGrove", new EntryText(keyBase + "greenGrove", true)); + category.getEntry("greenGrove").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "greenGrove.info"))); - List activationCrystalPages = new ArrayList(); + category.addEntry("magnetism", new EntryText(keyBase + "magnetism", true)); + category.getEntry("magnetism").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "magnetism.info"))); - activationCrystalPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "activationCrystal" + ".info.1"), 370)); + category.addEntry("crusher", new EntryText(keyBase + "crusher", true)); + category.getEntry("crusher").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "crusher.info"))); - AltarRecipe crystalRecipe = RecipeHelper.getAltarRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.ACTIVATION_CRYSTAL)); - if (crystalRecipe != null) { - activationCrystalPages.add(new PageAltarRecipe(crystalRecipe)); - } + category.addEntry("highJump", new EntryText(keyBase + "highJump", true)); + category.getEntry("highJump").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "highJump.info"))); - activationCrystalPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "activationCrystal" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "activationCrystal"), new EntryText(activationCrystalPages, TextHelper.localize(keyBase + "activationCrystal"), true)); + category.addEntry("speed", new EntryText(keyBase + "speed", true)); + category.getEntry("speed").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "speed.info"))); - List divinerPages = new ArrayList(); + category.addEntry("wellOfSuffering", new EntryText(keyBase + "wellOfSuffering", true)); + category.getEntry("wellOfSuffering").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "wellOfSuffering.info"))); - divinerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "diviner" + ".info.1"), 370)); + category.addEntry("featheredKnife", new EntryText(keyBase + "featheredKnife", true)); + category.getEntry("featheredKnife").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "featheredKnife.info"))); - IRecipe divinerRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.RITUAL_DIVINER)); - if (divinerRecipe != null) { - divinerPages.add(BookUtils.getPageForRecipe(divinerRecipe)); - } + category.addEntry("regen", new EntryText(keyBase + "regen", true)); + category.getEntry("regen").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "regen.info"))); - divinerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "diviner" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "diviner"), new EntryText(divinerPages, TextHelper.localize(keyBase + "diviner"), true)); + category.addEntry("harvest", new EntryText(keyBase + "harvest", true)); + category.getEntry("harvest").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "harvest.info"))); - addRitualPagesToEntries("fullSpring", entries); - addRitualPagesToEntries("lava", entries); - addRitualPagesToEntries("greenGrove", entries); - addRitualPagesToEntries("magnetism", entries); - addRitualPagesToEntries("crusher", entries); - addRitualPagesToEntries("highJump", entries); - addRitualPagesToEntries("speed", entries); - addRitualPagesToEntries("wellOfSuffering", entries); - addRitualPagesToEntries("featheredKnife", entries); - addRitualPagesToEntries("regen", entries); - addRitualPagesToEntries("harvest", entries); - addRitualPagesToEntries("interdiction", entries); - addRitualPagesToEntries("containment", entries); - addRitualPagesToEntries("suppression", entries); - addRitualPagesToEntries("expulsion", entries); - addRitualPagesToEntries("zephyr", entries); - addRitualPagesToEntries("laying", entries); - addRitualPagesToEntries("timberman", entries); - addRitualPagesToEntries("meteor", entries); - addRitualPagesToEntries("downgrade", entries); + category.addEntry("interdiction", new EntryText(keyBase + "interdiction", true)); + category.getEntry("interdiction").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "interdiction.info"))); - for (Entry entry : entries.entrySet()) { - for (IPage page : entry.getValue().pageList) { - if (page instanceof PageText) { - ((PageText) page).setUnicodeFlag(true); - } - } - } + category.addEntry("containment", new EntryText(keyBase + "containment", true)); + category.getEntry("containment").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "containment.info"))); - return entries; - } + category.addEntry("suppression", new EntryText(keyBase + "suppression", true)); + category.getEntry("suppression").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "suppression.info"))); - public static void addRitualPagesToEntries(String name, Map entries) { - List pages = new ArrayList(); - pages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + name + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + name), new EntryText(pages, TextHelper.localize(keyBase + name), true)); + category.addEntry("expulsion", new EntryText(keyBase + "expulsion", true)); + category.getEntry("expulsion").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "expulsion.info"))); + + category.addEntry("zephyr", new EntryText(keyBase + "zephyr", true)); + category.getEntry("zephyr").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "zephyr.info"))); + + category.addEntry("laying", new EntryText(keyBase + "laying", true)); + category.getEntry("laying").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "laying.info"))); + + category.addEntry("timberman", new EntryText(keyBase + "timberman", true)); + category.getEntry("timberman").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "timberman.info"))); + + category.addEntry("meteor", new EntryText(keyBase + "meteor", true)); + category.getEntry("meteor").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "meteor.info"))); + + category.addEntry("downgrade", new EntryText(keyBase + "downgrade", true)); + category.getEntry("downgrade").addPageList(PageHelper.pagesForLongText(I18n.format(keyBase + "downgrade.info"))); + + category.entries.values().forEach(e -> e.pageList.stream().filter(p -> p instanceof PageText).forEach(p -> ((PageText) p).setUnicodeFlag(true))); + book.addCategory(category); } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategorySpell.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategorySpell.java deleted file mode 100644 index 765791a1..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategorySpell.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi.book; - -import WayofTime.bloodmagic.api.Constants; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; -import net.minecraft.util.ResourceLocation; - -import java.util.LinkedHashMap; -import java.util.Map; - -public class CategorySpell { - public static Map buildCategory() { - Map entries = new LinkedHashMap(); - String keyBase = Constants.Mod.DOMAIN + "spell_"; - - return entries; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/entry/EntryText.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/entry/EntryText.java index 577e4f85..34de49c2 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/entry/EntryText.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/entry/EntryText.java @@ -6,6 +6,7 @@ import amerifrance.guideapi.api.impl.abstraction.CategoryAbstract; import amerifrance.guideapi.api.util.GuiHelper; import amerifrance.guideapi.entry.EntryResourceLocation; import amerifrance.guideapi.gui.GuiBase; +import com.google.common.collect.Lists; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.util.ResourceLocation; @@ -17,12 +18,16 @@ import java.util.List; public class EntryText extends EntryResourceLocation { - public EntryText(List pageList, String unlocEntryName, boolean unicode) { - super(pageList, unlocEntryName, new ResourceLocation("bloodmagicguide", "textures/gui/bullet_point.png"), unicode); + public EntryText(List pageList, String name, boolean unicode) { + super(pageList, name, new ResourceLocation("bloodmagicguide", "textures/gui/bullet_point.png"), unicode); } - public EntryText(List pageList, String unlocEntryName) { - this(pageList, unlocEntryName, false); + public EntryText(List pageList, String name) { + this(pageList, name, false); + } + + public EntryText(String name, boolean unicode) { + this(Lists.newArrayList(), name, unicode); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java index 6117a981..b93f7cf6 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java @@ -1,7 +1,6 @@ package WayofTime.bloodmagic.compat.guideapi.page; -import WayofTime.bloodmagic.api.ItemStackWrapper; -import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry; +import WayofTime.bloodmagic.api_impl.recipe.RecipeBloodAltar; import WayofTime.bloodmagic.util.helper.TextHelper; import amerifrance.guideapi.api.impl.Book; import amerifrance.guideapi.api.impl.Page; @@ -11,60 +10,91 @@ import amerifrance.guideapi.api.util.GuiHelper; import amerifrance.guideapi.gui.GuiBase; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import java.util.List; +import java.util.Random; public class PageAltarRecipe extends Page { - public List input; - public ItemStack output; - public int tier; - public int bloodRequired; + public final ItemStack[] input; + public final ItemStack output; + public final int tier; + public final int bloodRequired; - public PageAltarRecipe(AltarRecipeRegistry.AltarRecipe recipe) { - this.input = ItemStackWrapper.toStackList(recipe.getInput()); + private long lastCycle = -1; + private int cycleIdx = 0; + private Random random = new Random(); + + public PageAltarRecipe(RecipeBloodAltar recipe) { + this.input = recipe.getInput().getMatchingStacks(); this.output = recipe.getOutput(); - this.tier = recipe.getMinTier().toInt(); + this.tier = recipe.getMinimumTier().toInt(); this.bloodRequired = recipe.getSyphon(); } @Override @SideOnly(Side.CLIENT) public void draw(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer) { - Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("bloodmagicguide" + ":textures/gui/altar.png")); + Minecraft mc = Minecraft.getMinecraft(); + mc.getTextureManager().bindTexture(new ResourceLocation("bloodmagicguide", "textures/gui/altar.png")); + + long time = mc.world.getTotalWorldTime(); + if (lastCycle < 0 || lastCycle < time - 20) { + if (lastCycle > 0) { + cycleIdx++; + cycleIdx = Math.max(0, cycleIdx); + } + lastCycle = mc.world.getTotalWorldTime(); + } + guiBase.drawTexturedModalRect(guiLeft + 42, guiTop + 53, 0, 0, 146, 104); guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.bloodAltar"), guiLeft + guiBase.xSize / 2, guiTop + 12, 0); int inputX = (1 + 1) * 20 + (guiLeft + guiBase.xSize / 7) + 1; int inputY = (20) + (guiTop + guiBase.ySize / 5) - 1; //1 * 20 - GuiHelper.drawItemStack(input.get(0), inputX, inputY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, inputX, inputY, 15, 15)) { - guiBase.renderToolTip(input.get(0), mouseX, mouseY); - } + ItemStack inputStack = input[getRandomizedCycle(0, input.length)]; + GuiHelper.drawItemStack(inputStack, inputX, inputY); + if (GuiHelper.isMouseBetween(mouseX, mouseY, inputX, inputY, 15, 15)) + guiBase.renderToolTip(inputStack, mouseX, mouseY); + + ItemStack outputStack = output; + if (output.isEmpty()) + outputStack = new ItemStack(Blocks.BARRIER); - if (output.isEmpty()) { - output = new ItemStack(Blocks.BARRIER); - } int outputX = (5 * 20) + (guiLeft + guiBase.xSize / 7) + 1; int outputY = (20) + (guiTop + guiBase.xSize / 5) - 1; // 1 * 20 - GuiHelper.drawItemStack(output, outputX, outputY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) { - guiBase.renderToolTip(output, outputX, outputY); - } + GuiHelper.drawItemStack(outputStack, outputX, outputY); + if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) + guiBase.renderToolTip(outputStack, outputX, outputY); - if (output.getItem() == Item.getItemFromBlock(Blocks.BARRIER)) { + if (outputStack.getItem() == Item.getItemFromBlock(Blocks.BARRIER)) { guiBase.drawCenteredString(fontRenderer, TextHelper.localize("text.furnace.error"), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6, 0xED073D); guiBase.drawCenteredString(fontRenderer, TextHelper.localize("bm.string.tier") + ": " + String.valueOf(tier), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 15, 0); guiBase.drawCenteredString(fontRenderer, "LP: " + String.valueOf(bloodRequired), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 30, 0); } + guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.tier", String.valueOf(tier)), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6, 0); guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.lp", String.valueOf(bloodRequired)), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 15, 0); } + + protected ItemStack getNextItem(ItemStack stack, int position) { + NonNullList subItems = NonNullList.create(); + Item item = stack.getItem(); + + item.getSubItems(CreativeTabs.SEARCH, subItems); + return subItems.get(getRandomizedCycle(position, subItems.size())); + } + + protected int getRandomizedCycle(int index, int max) { + random.setSeed(index); + return (index + random.nextInt(max) + cycleIdx) % max; + } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageTartaricForgeRecipe.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageTartaricForgeRecipe.java index 7f52af4a..0daf740c 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageTartaricForgeRecipe.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageTartaricForgeRecipe.java @@ -1,7 +1,7 @@ package WayofTime.bloodmagic.compat.guideapi.page; -import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe; import WayofTime.bloodmagic.api.registry.OrbRegistry; +import WayofTime.bloodmagic.api_impl.recipe.RecipeTartaricForge; import WayofTime.bloodmagic.util.helper.TextHelper; import amerifrance.guideapi.api.impl.Book; import amerifrance.guideapi.api.impl.Page; @@ -9,11 +9,14 @@ import amerifrance.guideapi.api.impl.abstraction.CategoryAbstract; import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; import amerifrance.guideapi.api.util.GuiHelper; import amerifrance.guideapi.gui.GuiBase; +import com.google.common.collect.Lists; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -23,93 +26,72 @@ import java.util.List; import java.util.Random; public class PageTartaricForgeRecipe extends Page { - public List input; - public ItemStack output; - public int tier; - public double minimumWill; - public double drainedWill; + public final List input; + public final ItemStack output; + public final int tier; + public final double minimumWill; + public final double drainedWill; + private long lastCycle = -1; private int cycleIdx = 0; - private Random rand = new Random(); + private Random random = new Random(); - public PageTartaricForgeRecipe(TartaricForgeRecipe recipe) { - this.input = recipe.getInput(); - this.output = recipe.getRecipeOutput(); + public PageTartaricForgeRecipe(RecipeTartaricForge recipe) { + input = Lists.newArrayList(); + for (Ingredient ingredient : recipe.getInput()) + input.add(ingredient.getMatchingStacks()); + + this.output = recipe.getOutput(); this.tier = 0; this.minimumWill = recipe.getMinimumSouls(); - this.drainedWill = recipe.getSoulsDrained(); + this.drainedWill = recipe.getSoulDrain(); } @SuppressWarnings("unchecked") @Override @SideOnly(Side.CLIENT) public void draw(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer) { - Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("bloodmagicguide" + ":textures/gui/soulForge.png")); + Minecraft mc = Minecraft.getMinecraft(); + mc.getTextureManager().bindTexture(new ResourceLocation("bloodmagicguide", "textures/gui/soulForge.png")); + + long time = mc.world.getTotalWorldTime(); + if (lastCycle < 0 || lastCycle < time - 20) { + if (lastCycle > 0) { + cycleIdx++; + cycleIdx = Math.max(0, cycleIdx); + } + lastCycle = mc.world.getTotalWorldTime(); + } + guiBase.drawTexturedModalRect(guiLeft + 42, guiTop + 53, 0, 0, 146, 104); - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.soulForge"), guiLeft + guiBase.xSize / 2, guiTop + 12, 0); -// int inputX = (1 + 1) * 20 + (guiLeft + guiBase.xSize / 7) + 1; -// int inputY = (20) + (guiTop + guiBase.ySize / 5) - 1; //1 * 20 - for (int y = 0; y < 2; y++) { for (int x = 0; x < 2; x++) { int stackX = (x + 1) * 20 + (guiLeft + guiBase.xSize / 7) + 1; int stackY = (y + 1) * 20 + (guiTop + guiBase.ySize / 5) - 1; - Object component = input.size() > y * 2 + x ? input.get(y * 2 + x) : null;//recipe.getInput()[y * 2 + x]; + ItemStack[] component = input.size() > y * 2 + x ? input.get(y * 2 + x) : null;//recipe.getInput()[y * 2 + x]; if (component != null) { - if (component instanceof ItemStack) { - ItemStack input = (ItemStack) component; - if (input.getItemDamage() == OreDictionary.WILDCARD_VALUE) - input.setItemDamage(0); - - GuiHelper.drawItemStack((ItemStack) component, stackX, stackY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// tooltips = GuiHelper.getTooltip((ItemStack) component); - guiBase.renderToolTip((ItemStack) component, mouseX, mouseY); - } - } else if (component instanceof Integer) { - List list = OrbRegistry.getOrbsDownToTier((Integer) component); - if (!list.isEmpty()) { - ItemStack stack = list.get(getRandomizedCycle(x + (y * 2), list.size())); - GuiHelper.drawItemStack(stack, stackX, stackY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// tooltips = GuiHelper.getTooltip(stack); - guiBase.renderToolTip(stack, mouseX, mouseY); - } - } - } else { - List list = (List) component; - if (!list.isEmpty()) { - ItemStack stack = list.get(getRandomizedCycle(x + (y * 2), list.size())); - GuiHelper.drawItemStack(stack, stackX, stackY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// tooltips = GuiHelper.getTooltip(stack); - guiBase.renderToolTip(stack, mouseX, mouseY); - } - } - } + ItemStack drawStack = component[getRandomizedCycle(x + (y * 2), component.length)]; + GuiHelper.drawItemStack(drawStack, stackX, stackY); + if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) + guiBase.renderToolTip(drawStack, mouseX, mouseY); } } } -// GuiHelper.drawItemStack(input.get(0), inputX, inputY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, inputX, inputY, 15, 15)) -// { -// guiBase.renderToolTip(input.get(0), mouseX, mouseY); -// } + ItemStack outputStack = output; + if (outputStack.isEmpty()) + outputStack = new ItemStack(Blocks.BARRIER); - if (output == null) { - output = new ItemStack(Blocks.BARRIER); - } int outputX = (5 * 20) + (guiLeft + guiBase.xSize / 7) + 1; int outputY = (20) + (guiTop + guiBase.xSize / 5) + 10; // 1 * 20 - GuiHelper.drawItemStack(output, outputX, outputY); + GuiHelper.drawItemStack(outputStack, outputX, outputY); if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) { - guiBase.renderToolTip(output, outputX, outputY); + guiBase.renderToolTip(outputStack, outputX, outputY); } - if (output.getItem() == Item.getItemFromBlock(Blocks.BARRIER)) { + if (outputStack.getItem() == Item.getItemFromBlock(Blocks.BARRIER)) { guiBase.drawCenteredString(fontRenderer, TextHelper.localize("text.furnace.error"), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6, 0xED073D); guiBase.drawCenteredString(fontRenderer, TextHelper.localize("bm.string.tier") + ": " + String.valueOf(tier), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 15, 0); // guiBase.drawCenteredString(fontRenderer, "LP: " + String.valueOf(bloodRequired), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 30, 0); @@ -118,8 +100,16 @@ public class PageTartaricForgeRecipe extends Page { guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.drainedWill", String.valueOf(drainedWill)), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6, 0); } + protected ItemStack getNextItem(ItemStack stack, int position) { + NonNullList subItems = NonNullList.create(); + Item item = stack.getItem(); + + item.getSubItems(item.getCreativeTab(), subItems); + return subItems.get(getRandomizedCycle(position, subItems.size())); + } + protected int getRandomizedCycle(int index, int max) { - rand.setSeed(index); - return (index + rand.nextInt(max) + cycleIdx) % max; + random.setSeed(index); + return (index + random.nextInt(max) + cycleIdx) % max; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java similarity index 78% rename from src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java rename to src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java index 11c3f80a..1536dc3b 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java @@ -3,16 +3,18 @@ package WayofTime.bloodmagic.compat.jei; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.livingArmour.LivingArmourHandler; import WayofTime.bloodmagic.api.util.helper.ItemHelper.LivingUpgrades; +import WayofTime.bloodmagic.api_impl.BloodMagicAPI; +import WayofTime.bloodmagic.api_impl.recipe.RecipeAlchemyTable; +import WayofTime.bloodmagic.api_impl.recipe.RecipeBloodAltar; +import WayofTime.bloodmagic.api_impl.recipe.RecipeTartaricForge; import WayofTime.bloodmagic.client.gui.GuiSoulForge; import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingCategory; import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingRecipeHandler; import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingRecipeMaker; import WayofTime.bloodmagic.compat.jei.alchemyTable.AlchemyTableRecipeCategory; -import WayofTime.bloodmagic.compat.jei.alchemyTable.AlchemyTableRecipeHandler; -import WayofTime.bloodmagic.compat.jei.alchemyTable.AlchemyTableRecipeMaker; +import WayofTime.bloodmagic.compat.jei.alchemyTable.AlchemyTableRecipeJEI; import WayofTime.bloodmagic.compat.jei.altar.AltarRecipeCategory; -import WayofTime.bloodmagic.compat.jei.altar.AltarRecipeHandler; -import WayofTime.bloodmagic.compat.jei.altar.AltarRecipeMaker; +import WayofTime.bloodmagic.compat.jei.altar.AltarRecipeJEI; import WayofTime.bloodmagic.compat.jei.armourDowngrade.ArmourDowngradeRecipeCategory; import WayofTime.bloodmagic.compat.jei.armourDowngrade.ArmourDowngradeRecipeHandler; import WayofTime.bloodmagic.compat.jei.armourDowngrade.ArmourDowngradeRecipeMaker; @@ -20,8 +22,7 @@ import WayofTime.bloodmagic.compat.jei.binding.BindingRecipeCategory; import WayofTime.bloodmagic.compat.jei.binding.BindingRecipeHandler; import WayofTime.bloodmagic.compat.jei.binding.BindingRecipeMaker; import WayofTime.bloodmagic.compat.jei.forge.TartaricForgeRecipeCategory; -import WayofTime.bloodmagic.compat.jei.forge.TartaricForgeRecipeHandler; -import WayofTime.bloodmagic.compat.jei.forge.TartaricForgeRecipeMaker; +import WayofTime.bloodmagic.compat.jei.forge.TartaricForgeRecipeJEI; import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; import mezz.jei.api.*; @@ -32,7 +33,7 @@ import javax.annotation.Nonnull; import java.util.Map; @JEIPlugin -public class BloodMagicPlugin extends BlankModPlugin { +public class BloodMagicJEIPlugin implements IModPlugin { public static IJeiHelpers jeiHelper; @Override @@ -40,19 +41,21 @@ public class BloodMagicPlugin extends BlankModPlugin { jeiHelper = registry.getJeiHelpers(); registry.addRecipeHandlers( - new AltarRecipeHandler(), new BindingRecipeHandler(), new AlchemyArrayCraftingRecipeHandler(), - new TartaricForgeRecipeHandler(), - new AlchemyTableRecipeHandler(), new ArmourDowngradeRecipeHandler() ); - registry.addRecipes(AltarRecipeMaker.getRecipes()); + registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes(), Constants.Compat.JEI_CATEGORY_ALTAR); + registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyRecipes(), Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); + registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForgeRecipes(), Constants.Compat.JEI_CATEGORY_SOULFORGE); + + registry.handleRecipes(RecipeBloodAltar.class, AltarRecipeJEI::new, Constants.Compat.JEI_CATEGORY_ALTAR); + registry.handleRecipes(RecipeAlchemyTable.class, AlchemyTableRecipeJEI::new, Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); + registry.handleRecipes(RecipeTartaricForge.class, TartaricForgeRecipeJEI::new, Constants.Compat.JEI_CATEGORY_SOULFORGE); + registry.addRecipes(BindingRecipeMaker.getRecipes()); registry.addRecipes(AlchemyArrayCraftingRecipeMaker.getRecipes()); - registry.addRecipes(TartaricForgeRecipeMaker.getRecipes()); - registry.addRecipes(AlchemyTableRecipeMaker.getRecipes()); registry.addRecipes(ArmourDowngradeRecipeMaker.getRecipes()); registry.addIngredientInfo(new ItemStack(RegistrarBloodMagicItems.ALTAR_MAKER), ItemStack.class, "jei.bloodmagic.desc.altarBuilder"); @@ -82,6 +85,7 @@ public class BloodMagicPlugin extends BlankModPlugin { @Override public void registerItemSubtypes(ISubtypeRegistry subtypeRegistry) { subtypeRegistry.useNbtForSubtypes(RegistrarBloodMagicItems.UPGRADE_TOME); + subtypeRegistry.useNbtForSubtypes(RegistrarBloodMagicItems.BLOOD_ORB); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java index 5b9b8e22..5e51760a 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java @@ -2,7 +2,7 @@ package WayofTime.bloodmagic.compat.jei.alchemyArray; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; import WayofTime.bloodmagic.util.helper.TextHelper; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IRecipeLayout; @@ -22,7 +22,7 @@ public class AlchemyArrayCraftingCategory implements IRecipeCategory { private static final int OUTPUT_SLOT = 2; @Nonnull - private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/binding.png"), 0, 0, 100, 30); + private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/binding.png"), 0, 0, 100, 30); @Nonnull private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.alchemyArrayCrafting"); diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java index 4ade8678..2e938c83 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java @@ -3,33 +3,33 @@ package WayofTime.bloodmagic.compat.jei.alchemyTable; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.registry.OrbRegistry; -import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; import WayofTime.bloodmagic.util.helper.TextHelper; import mezz.jei.api.gui.ICraftingGridHelper; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeCategory; +import mezz.jei.api.recipe.IRecipeCategory; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import javax.annotation.Nonnull; -public class AlchemyTableRecipeCategory extends BlankRecipeCategory { +public class AlchemyTableRecipeCategory implements IRecipeCategory { private static final int OUTPUT_SLOT = 0; private static final int ORB_SLOT = 1; private static final int INPUT_SLOT = 2; @Nonnull - private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/alchemyTable.png"), 0, 0, 118, 40); + private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/alchemyTable.png"), 0, 0, 118, 40); @Nonnull private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.alchemyTable"); @Nonnull private final ICraftingGridHelper craftingGridHelper; public AlchemyTableRecipeCategory() { - craftingGridHelper = BloodMagicPlugin.jeiHelper.getGuiHelper().createCraftingGridHelper(INPUT_SLOT, OUTPUT_SLOT); + craftingGridHelper = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createCraftingGridHelper(INPUT_SLOT, OUTPUT_SLOT); } @Nonnull @@ -64,7 +64,7 @@ public class AlchemyTableRecipeCategory extends BlankRecipeCategory { - @Nonnull - @Override - public Class getRecipeClass() { - return AlchemyTableRecipeJEI.class; - } - - @Override - public String getRecipeCategoryUid(@Nonnull AlchemyTableRecipeJEI recipe) { - return Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE; - } - - @Nonnull - @Override - public IRecipeWrapper getRecipeWrapper(@Nonnull AlchemyTableRecipeJEI recipe) { - return recipe; - } - - @Override - public boolean isRecipeValid(@Nonnull AlchemyTableRecipeJEI recipe) { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java index 0079d60a..9910f1fd 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java @@ -1,42 +1,41 @@ package WayofTime.bloodmagic.compat.jei.alchemyTable; -import WayofTime.bloodmagic.api.recipe.AlchemyTableRecipe; -import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import WayofTime.bloodmagic.api_impl.recipe.RecipeAlchemyTable; +import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.collect.Lists; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeWrapper; +import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.item.ItemStack; -import java.util.ArrayList; import java.util.List; -public class AlchemyTableRecipeJEI extends BlankRecipeWrapper { - private AlchemyTableRecipe recipe; +public class AlchemyTableRecipeJEI implements IRecipeWrapper { + private RecipeAlchemyTable recipe; - public AlchemyTableRecipeJEI(AlchemyTableRecipe recipe) { + public AlchemyTableRecipeJEI(RecipeAlchemyTable recipe) { this.recipe = recipe; } @Override public void getIngredients(IIngredients ingredients) { - List> expanded = BloodMagicPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); + List> expanded = BloodMagicJEIPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); ingredients.setInputLists(ItemStack.class, expanded); - ingredients.setOutput(ItemStack.class, recipe.getRecipeOutput(Lists.newArrayList())); + ingredients.setOutput(ItemStack.class, recipe.getOutput()); } @Override public List getTooltipStrings(int mouseX, int mouseY) { - ArrayList ret = new ArrayList(); + List tooltip = Lists.newArrayList(); if (mouseX >= 58 && mouseX <= 78 && mouseY >= 21 && mouseY <= 34) { - ret.add(TextHelper.localize("tooltip.bloodmagic.tier", recipe.getTierRequired())); - ret.add(TextHelper.localize("jei.bloodmagic.recipe.lpDrained", recipe.getLpDrained())); - ret.add(TextHelper.localize("jei.bloodmagic.recipe.ticksRequired", recipe.getTicksRequired())); + tooltip.add(TextHelper.localize("tooltip.bloodmagic.tier", recipe.getMinimumTier())); + tooltip.add(TextHelper.localize("jei.bloodmagic.recipe.lpDrained", recipe.getSyphon())); + tooltip.add(TextHelper.localize("jei.bloodmagic.recipe.ticksRequired", recipe.getTicks())); } - return ret; + return tooltip; } - public AlchemyTableRecipe getRecipe() { + public RecipeAlchemyTable getRecipe() { return recipe; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeMaker.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeMaker.java deleted file mode 100644 index e526d182..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeMaker.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.alchemyTable; - -import WayofTime.bloodmagic.api.recipe.AlchemyTableRecipe; -import WayofTime.bloodmagic.api.registry.AlchemyTableRecipeRegistry; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; - -public class AlchemyTableRecipeMaker { - @Nonnull - public static List getRecipes() { - List recipeList = AlchemyTableRecipeRegistry.getRecipeList(); - ArrayList recipes = new ArrayList(); - - for (AlchemyTableRecipe recipe : recipeList) - recipes.add(new AlchemyTableRecipeJEI(recipe)); - - return recipes; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java index 482b98ab..dea74887 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java @@ -2,13 +2,12 @@ package WayofTime.bloodmagic.compat.jei.altar; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; import WayofTime.bloodmagic.util.helper.TextHelper; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.IRecipeCategory; -import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -16,12 +15,12 @@ import net.minecraft.util.ResourceLocation; import javax.annotation.Nonnull; import javax.annotation.Nullable; -public class AltarRecipeCategory implements IRecipeCategory { +public class AltarRecipeCategory implements IRecipeCategory { private static final int INPUT_SLOT = 0; private static final int OUTPUT_SLOT = 1; @Nonnull - private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/altar.png"), 3, 4, 155, 65); + private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/altar.png"), 3, 4, 155, 65); @Nonnull private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.altar"); @@ -55,14 +54,12 @@ public class AltarRecipeCategory implements IRecipeCategory { } @Override - public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) { + public void setRecipe(IRecipeLayout recipeLayout, AltarRecipeJEI recipeWrapper, IIngredients ingredients) { recipeLayout.getItemStacks().init(INPUT_SLOT, true, 31, 0); recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 125, 30); - if (recipeWrapper instanceof AltarRecipeJEI) { - recipeLayout.getItemStacks().set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); - recipeLayout.getItemStacks().set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); - } + recipeLayout.getItemStacks().set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); + recipeLayout.getItemStacks().set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeHandler.java deleted file mode 100644 index efd8c457..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.altar; - -import WayofTime.bloodmagic.api.Constants; -import mezz.jei.api.recipe.IRecipeHandler; -import mezz.jei.api.recipe.IRecipeWrapper; - -import javax.annotation.Nonnull; - -public class AltarRecipeHandler implements IRecipeHandler { - @Nonnull - @Override - public Class getRecipeClass() { - return AltarRecipeJEI.class; - } - - @Override - public String getRecipeCategoryUid(@Nonnull AltarRecipeJEI recipe) { - return Constants.Compat.JEI_CATEGORY_ALTAR; - } - - @Nonnull - @Override - public IRecipeWrapper getRecipeWrapper(@Nonnull AltarRecipeJEI recipe) { - return recipe; - } - - @Override - public boolean isRecipeValid(@Nonnull AltarRecipeJEI recipe) { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java index d7de9b3d..c7f93c33 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java @@ -1,18 +1,20 @@ package WayofTime.bloodmagic.compat.jei.altar; +import WayofTime.bloodmagic.api_impl.recipe.RecipeBloodAltar; import WayofTime.bloodmagic.util.helper.NumeralHelper; import WayofTime.bloodmagic.util.helper.TextHelper; +import com.google.common.collect.Lists; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeWrapper; +import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; import javax.annotation.Nonnull; import java.awt.Color; -import java.util.ArrayList; import java.util.List; -public class AltarRecipeJEI extends BlankRecipeWrapper { +public class AltarRecipeJEI implements IRecipeWrapper { @Nonnull private final List input; @Nonnull @@ -22,13 +24,13 @@ public class AltarRecipeJEI extends BlankRecipeWrapper { private final int consumptionRate; private final int drainRate; - public AltarRecipeJEI(@Nonnull List input, @Nonnull ItemStack output, int tier, int requiredLP, int consumptionRate, int drainRate) { - this.input = input; - this.output = output; + public AltarRecipeJEI(RecipeBloodAltar recipe) { + this.input = NonNullList.from(ItemStack.EMPTY, recipe.getInput().getMatchingStacks()); + this.output = recipe.getOutput(); - this.infoString = new String[]{TextHelper.localize("jei.bloodmagic.recipe.requiredTier", NumeralHelper.toRoman(tier)), TextHelper.localize("jei.bloodmagic.recipe.requiredLP", requiredLP)}; - this.consumptionRate = consumptionRate; - this.drainRate = drainRate; + this.infoString = new String[]{TextHelper.localize("jei.bloodmagic.recipe.requiredTier", NumeralHelper.toRoman(recipe.getMinimumTier().toInt())), TextHelper.localize("jei.bloodmagic.recipe.requiredLP", recipe.getSyphon())}; + this.consumptionRate = recipe.getConsumeRate(); + this.drainRate = recipe.getDrainRate(); } @Override @@ -39,12 +41,12 @@ public class AltarRecipeJEI extends BlankRecipeWrapper { @Override public List getTooltipStrings(int mouseX, int mouseY) { - ArrayList ret = new ArrayList(); + List tooltip = Lists.newArrayList(); if (mouseX >= 13 && mouseX <= 64 && mouseY >= 27 && mouseY <= 58) { - ret.add(TextHelper.localize("jei.bloodmagic.recipe.consumptionRate", consumptionRate)); - ret.add(TextHelper.localize("jei.bloodmagic.recipe.drainRate", drainRate)); + tooltip.add(TextHelper.localize("jei.bloodmagic.recipe.consumptionRate", consumptionRate)); + tooltip.add(TextHelper.localize("jei.bloodmagic.recipe.drainRate", drainRate)); } - return ret; + return tooltip; } @Override diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeMaker.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeMaker.java deleted file mode 100644 index 760852b2..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeMaker.java +++ /dev/null @@ -1,45 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.altar; - -import WayofTime.bloodmagic.api.ItemStackWrapper; -import WayofTime.bloodmagic.api.orb.IBloodOrb; -import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry; -import WayofTime.bloodmagic.block.BlockLifeEssence; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.ForgeModContainer; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidUtil; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class AltarRecipeMaker { - @Nonnull - public static List getRecipes() { - Map, AltarRecipeRegistry.AltarRecipe> altarMap = AltarRecipeRegistry.getRecipes(); - - ArrayList recipes = new ArrayList(); - - for (Map.Entry, AltarRecipeRegistry.AltarRecipe> itemStackAltarRecipeEntry : altarMap.entrySet()) { - // Make sure input is not a Blood Orb. If it is, the recipe is for a filling orb, and we don't want that. - if (!(itemStackAltarRecipeEntry.getKey().get(0).toStack().getItem() instanceof IBloodOrb)) { - List input = ItemStackWrapper.toStackList(itemStackAltarRecipeEntry.getValue().getInput()); - ItemStack output = itemStackAltarRecipeEntry.getValue().getOutput(); - int requiredTier = itemStackAltarRecipeEntry.getValue().getMinTier().toInt(); - int requiredLP = itemStackAltarRecipeEntry.getValue().getSyphon(); - int consumptionRate = itemStackAltarRecipeEntry.getValue().getConsumeRate(); - int drainRate = itemStackAltarRecipeEntry.getValue().getDrainRate(); - - if (output.getItem() == ForgeModContainer.getInstance().universalBucket && requiredLP == 1000) - output = FluidUtil.getFilledBucket(new FluidStack(BlockLifeEssence.getLifeEssence(), Fluid.BUCKET_VOLUME)); - - AltarRecipeJEI recipe = new AltarRecipeJEI(input, output, requiredTier, requiredLP, consumptionRate, drainRate); - recipes.add(recipe); - } - } - - return recipes; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java index f8a93172..ccde0d58 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java @@ -2,7 +2,7 @@ package WayofTime.bloodmagic.compat.jei.armourDowngrade; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; import WayofTime.bloodmagic.util.helper.TextHelper; import mezz.jei.api.gui.ICraftingGridHelper; import mezz.jei.api.gui.IDrawable; @@ -24,14 +24,14 @@ public class ArmourDowngradeRecipeCategory implements IRecipeCategory { private static final int INPUT_SLOT = 2; @Nonnull - private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/alchemyTable.png"), 0, 0, 118, 40); + private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/alchemyTable.png"), 0, 0, 118, 40); @Nonnull private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.armourDowngrade"); @Nonnull private final ICraftingGridHelper craftingGridHelper; public ArmourDowngradeRecipeCategory() { - craftingGridHelper = BloodMagicPlugin.jeiHelper.getGuiHelper().createCraftingGridHelper(INPUT_SLOT, OUTPUT_SLOT); + craftingGridHelper = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createCraftingGridHelper(INPUT_SLOT, OUTPUT_SLOT); } @Nonnull diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java index d8155ace..c7a2c037 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java @@ -2,7 +2,7 @@ package WayofTime.bloodmagic.compat.jei.armourDowngrade; import WayofTime.bloodmagic.api.recipe.LivingArmourDowngradeRecipe; import WayofTime.bloodmagic.api.util.helper.ItemHelper.LivingUpgrades; -import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; import com.google.common.collect.Lists; import mezz.jei.api.ingredients.IIngredients; @@ -20,7 +20,7 @@ public class ArmourDowngradeRecipeJEI extends BlankRecipeWrapper { @Override public void getIngredients(IIngredients ingredients) { - List> expanded = BloodMagicPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); + List> expanded = BloodMagicJEIPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); expanded.add(Lists.newArrayList(recipe.getKey())); ingredients.setInputLists(ItemStack.class, expanded); ItemStack upgradeStack = new ItemStack(RegistrarBloodMagicItems.UPGRADE_TOME); diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java index c511fa04..dad5481a 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java @@ -2,7 +2,7 @@ package WayofTime.bloodmagic.compat.jei.binding; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; import WayofTime.bloodmagic.util.helper.TextHelper; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IRecipeLayout; @@ -22,7 +22,7 @@ public class BindingRecipeCategory implements IRecipeCategory { private static final int OUTPUT_SLOT = 2; @Nonnull - private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/binding.png"), 0, 0, 100, 30); + private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/binding.png"), 0, 0, 100, 30); @Nonnull private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.binding"); diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java index ceee68d8..9e2ae73c 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java @@ -2,7 +2,7 @@ package WayofTime.bloodmagic.compat.jei.forge; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; import WayofTime.bloodmagic.util.helper.TextHelper; import mezz.jei.api.gui.ICraftingGridHelper; import mezz.jei.api.gui.IDrawable; @@ -10,7 +10,6 @@ import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.IRecipeCategory; -import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -19,20 +18,20 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; -public class TartaricForgeRecipeCategory implements IRecipeCategory { +public class TartaricForgeRecipeCategory implements IRecipeCategory { private static final int OUTPUT_SLOT = 0; private static final int GEM_SLOT = 1; private static final int INPUT_SLOT = 2; @Nonnull - private final IDrawable background = BloodMagicPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/soulForge.png"), 0, 0, 100, 40); + private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/soulForge.png"), 0, 0, 100, 40); @Nonnull private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.soulForge"); @Nonnull private final ICraftingGridHelper craftingGridHelper; public TartaricForgeRecipeCategory() { - craftingGridHelper = BloodMagicPlugin.jeiHelper.getGuiHelper().createCraftingGridHelper(INPUT_SLOT, OUTPUT_SLOT); + craftingGridHelper = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createCraftingGridHelper(INPUT_SLOT, OUTPUT_SLOT); } @Nonnull @@ -65,7 +64,7 @@ public class TartaricForgeRecipeCategory implements IRecipeCategory { } @Override - public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) { + public void setRecipe(IRecipeLayout recipeLayout, TartaricForgeRecipeJEI recipeWrapper, IIngredients ingredients) { IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); guiItemStacks.init(OUTPUT_SLOT, false, 73, 13); @@ -79,16 +78,12 @@ public class TartaricForgeRecipeCategory implements IRecipeCategory { } List> inputs = ingredients.getInputs(ItemStack.class); - List> outputs = ingredients.getOutputs(ItemStack.class); - if (recipeWrapper instanceof TartaricForgeRecipeJEI) { - TartaricForgeRecipeJEI recipe = (TartaricForgeRecipeJEI) recipeWrapper; - guiItemStacks.set(GEM_SLOT, ingredients.getInputs(ItemStack.class).get(ingredients.getInputs(ItemStack.class).size() - 1)); - inputs.remove(ingredients.getInputs(ItemStack.class).size() - 1); - guiItemStacks.set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); - guiItemStacks.set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); - craftingGridHelper.setInputs(guiItemStacks, inputs); - } + guiItemStacks.set(GEM_SLOT, ingredients.getInputs(ItemStack.class).get(ingredients.getInputs(ItemStack.class).size() - 1)); + inputs.remove(ingredients.getInputs(ItemStack.class).size() - 1); + guiItemStacks.set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); + guiItemStacks.set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); + craftingGridHelper.setInputs(guiItemStacks, inputs); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeHandler.java deleted file mode 100644 index 608d97be..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.forge; - -import WayofTime.bloodmagic.api.Constants; -import mezz.jei.api.recipe.IRecipeHandler; -import mezz.jei.api.recipe.IRecipeWrapper; - -import javax.annotation.Nonnull; - -public class TartaricForgeRecipeHandler implements IRecipeHandler { - @Nonnull - @Override - public Class getRecipeClass() { - return TartaricForgeRecipeJEI.class; - } - - @Override - public String getRecipeCategoryUid(@Nonnull TartaricForgeRecipeJEI recipe) { - return Constants.Compat.JEI_CATEGORY_SOULFORGE; - } - - @Nonnull - @Override - public IRecipeWrapper getRecipeWrapper(@Nonnull TartaricForgeRecipeJEI recipe) { - return recipe; - } - - @Override - public boolean isRecipeValid(@Nonnull TartaricForgeRecipeJEI recipe) { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java index 9919a733..79c6536f 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java @@ -1,22 +1,22 @@ package WayofTime.bloodmagic.compat.jei.forge; -import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe; -import WayofTime.bloodmagic.compat.jei.BloodMagicPlugin; +import WayofTime.bloodmagic.api_impl.recipe.RecipeTartaricForge; +import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; import WayofTime.bloodmagic.util.helper.TextHelper; +import com.google.common.collect.Lists; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeWrapper; import net.minecraft.item.ItemStack; import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.List; public class TartaricForgeRecipeJEI extends BlankRecipeWrapper { - private TartaricForgeRecipe recipe; - private List validGems = new ArrayList(); + private RecipeTartaricForge recipe; + private List validGems = Lists.newArrayList(); - public TartaricForgeRecipeJEI(TartaricForgeRecipe recipe) { + public TartaricForgeRecipeJEI(RecipeTartaricForge recipe) { this.recipe = recipe; for (DefaultWill will : DefaultWill.values()) @@ -26,32 +26,28 @@ public class TartaricForgeRecipeJEI extends BlankRecipeWrapper { @Override public void getIngredients(IIngredients ingredients) { - List> expandedInputs = BloodMagicPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); + List> expandedInputs = BloodMagicJEIPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); expandedInputs.add(validGems); ingredients.setInputLists(ItemStack.class, expandedInputs); - ingredients.setOutput(ItemStack.class, recipe.getRecipeOutput()); + ingredients.setOutput(ItemStack.class, recipe.getOutput()); } @Nullable @Override public List getTooltipStrings(int mouseX, int mouseY) { - ArrayList ret = new ArrayList(); + List tooltip = Lists.newArrayList(); if (mouseX >= 40 && mouseX <= 60 && mouseY >= 21 && mouseY <= 34) { - ret.add(TextHelper.localize("jei.bloodmagic.recipe.minimumSouls", recipe.getMinimumSouls())); - ret.add(TextHelper.localize("jei.bloodmagic.recipe.soulsDrained", recipe.getSoulsDrained())); - return ret; + tooltip.add(TextHelper.localize("jei.bloodmagic.recipe.minimumSouls", recipe.getMinimumSouls())); + tooltip.add(TextHelper.localize("jei.bloodmagic.recipe.soulsDrained", recipe.getSoulDrain())); + return tooltip; } return null; } - public TartaricForgeRecipe getRecipe() { + public RecipeTartaricForge getRecipe() { return recipe; } - public List getValidGems() { - return validGems; - } - public enum DefaultWill { SOUL(new ItemStack(RegistrarBloodMagicItems.MONSTER_SOUL, 1, 0), 64), PETTY(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 0), 64), diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeMaker.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeMaker.java deleted file mode 100644 index 9f66cc27..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeMaker.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.forge; - -import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe; -import WayofTime.bloodmagic.api.registry.TartaricForgeRecipeRegistry; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; - -public class TartaricForgeRecipeMaker { - @Nonnull - public static List getRecipes() { - List recipeList = TartaricForgeRecipeRegistry.getRecipeList(); - ArrayList recipes = new ArrayList(); - - for (TartaricForgeRecipe recipe : recipeList) - recipes.add(new TartaricForgeRecipeJEI(recipe)); - - return recipes; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/WailaPluginBloodMagic.java b/src/main/java/WayofTime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java similarity index 96% rename from src/main/java/WayofTime/bloodmagic/compat/waila/WailaPluginBloodMagic.java rename to src/main/java/WayofTime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java index 5cfd9622..7ec1536f 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/WailaPluginBloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java @@ -9,7 +9,7 @@ import mcp.mobius.waila.api.IWailaRegistrar; import mcp.mobius.waila.api.WailaPlugin; @WailaPlugin -public class WailaPluginBloodMagic implements IWailaPlugin { +public class BloodMagicHwylaPlugin implements IWailaPlugin { @Override public void register(IWailaRegistrar registrar) { registrar.registerBodyProvider(new DataProviderBloodAltar(), BlockAltar.class); diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java index 8affc801..f7be07dc 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java @@ -4,8 +4,8 @@ import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.block.BlockAltar; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.sigil.ItemSigilDivination; import WayofTime.bloodmagic.item.sigil.ItemSigilSeer; +import WayofTime.bloodmagic.item.sigil.sigil.ItemSigilDivination; import WayofTime.bloodmagic.tile.TileAltar; import WayofTime.bloodmagic.util.helper.TextHelper; import mcp.mobius.waila.api.IWailaConfigHandler; @@ -27,16 +27,6 @@ import java.util.List; * in ImLookingAtBlood by Pokefenn. */ public class DataProviderBloodAltar implements IWailaDataProvider { - @Override - public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) { - return null; - } - - @Override - public List getWailaHead(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - return null; - } - @Override public List getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { if (!config.getConfig(Constants.Compat.WAILA_CONFIG_ALTAR)) @@ -45,24 +35,21 @@ public class DataProviderBloodAltar implements IWailaDataProvider { boolean hasSigil = false; boolean hasSeer = false; - switch (ConfigHandler.wailaAltarDisplayMode) { - case 0: { + switch (ConfigHandler.compat.wailaAltarDisplayMode) { + case ALWAYS: { hasSigil = hasSeer = true; break; } - case 1: { + case SIGIL_HELD: { hasSeer = holdingSeerSigil(accessor.getPlayer()); hasSigil = hasSeer || holdingDivinationSigil(accessor.getPlayer()); break; } - case 2: { + case SIGIL_CONTAINED: { hasSeer = hasStack(new ItemStack(RegistrarBloodMagicItems.SIGIL_SEER), accessor.getPlayer()); hasSigil = hasSeer || hasStack(new ItemStack(RegistrarBloodMagicItems.SIGIL_DIVINATION), accessor.getPlayer()); break; } - default: { - break; - } } if (!hasSeer && !hasSigil) @@ -93,11 +80,6 @@ public class DataProviderBloodAltar implements IWailaDataProvider { return currenttip; } - @Override - public List getWailaTail(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - return null; - } - @Override public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { if (te != null) @@ -127,7 +109,7 @@ public class DataProviderBloodAltar implements IWailaDataProvider { if (player.getHeldItemMainhand().getItem() instanceof ItemSigilDivination) return true; - if (player.getHeldItemOffhand() != null && player.getHeldItemOffhand().getItem() instanceof ItemSigilDivination) + if (!player.getHeldItemOffhand().isEmpty() && player.getHeldItemOffhand().getItem() instanceof ItemSigilDivination) return true; return false; diff --git a/src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingManager.java b/src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingManager.java index 093dbff0..ef1638a9 100644 --- a/src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingManager.java +++ b/src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingManager.java @@ -20,7 +20,7 @@ public class StorageBlockCraftingManager { public void addStorageBlockRecipes() { // this.recipes = new StorageBlockCraftingRecipeAssimilator().getPackingRecipes(); - BloodMagic.instance.logger.info("Total number of compression recipes: " + this.recipes.size()); + BloodMagic.LOGGER.info("Total number of compression recipes: {}", this.recipes.size()); } public ItemStack findMatchingRecipe(InventoryCrafting craftingInventory, World world) { diff --git a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java index 80b2cf1f..9a81cc95 100644 --- a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java @@ -8,14 +8,21 @@ import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; import WayofTime.bloodmagic.entity.projectile.EntityMeteor; import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow; import WayofTime.bloodmagic.entity.projectile.EntitySoulSnare; +import WayofTime.bloodmagic.item.types.ComponentType; import WayofTime.bloodmagic.potion.PotionBloodMagic; +import com.google.common.base.Stopwatch; +import net.minecraft.block.Block; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.init.MobEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; import net.minecraft.potion.Potion; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.event.furnace.FurnaceFuelBurnTimeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.EntityEntry; @@ -58,8 +65,30 @@ public class RegistrarBloodMagic { public static IForgeRegistry BLOOD_ORBS = null; + @SubscribeEvent + public static void registerItems(RegistryEvent.Register event) { + Stopwatch stopwatch = Stopwatch.createStarted(); + RegistrarBloodMagicItems.registerItems(event.getRegistry()); + BloodMagic.debug("Item registration completed in {}", stopwatch.stop()); + } + + @SubscribeEvent + public static void registerBlocks(RegistryEvent.Register event) { + Stopwatch stopwatch = Stopwatch.createStarted(); + RegistrarBloodMagicBlocks.registerBlocks(event.getRegistry()); + BloodMagic.debug("Block registration completed in {}", stopwatch.stop()); + } + + @SubscribeEvent + public static void registerRecipes(RegistryEvent.Register event) { + Stopwatch stopwatch = Stopwatch.createStarted(); + RegistrarBloodMagicRecipes.registerCrafting(event.getRegistry()); + BloodMagic.debug("Recipe registration completed in {}", stopwatch.stop()); + } + @SubscribeEvent public static void registerBloodOrbs(RegistryEvent.Register event) { + Stopwatch stopwatch = Stopwatch.createStarted(); ResourceLocation orb = RegistrarBloodMagicItems.BLOOD_ORB.getRegistryName(); event.getRegistry().registerAll( new BloodOrb("weak", 1, 5000).withModel(new ModelResourceLocation(orb, "type=weak")).setRegistryName("weak"), @@ -69,10 +98,12 @@ public class RegistrarBloodMagic { new BloodOrb("archmage", 5, 10000000).withModel(new ModelResourceLocation(orb, "type=archmage")).setRegistryName("archmage"), new BloodOrb("transcendent", 6, 30000000).withModel(new ModelResourceLocation(orb, "type=transcendent")).setRegistryName("transcendent") ); + BloodMagic.debug("Blood Orb registration completed in {}", stopwatch.stop()); } @SubscribeEvent public static void registerPotions(RegistryEvent.Register event) { + Stopwatch stopwatch = Stopwatch.createStarted(); event.getRegistry().registerAll( new PotionBloodMagic("Boost", false, 0xFFFFFF, 0, 1).setRegistryName("boost"), new PotionBloodMagic("Planar Binding", false, 0, 2, 0).setRegistryName("planar_binding"), @@ -86,10 +117,12 @@ public class RegistrarBloodMagic { new PotionBloodMagic("Cling", false, 0x000000, 2, 1).setRegistryName("cling"), new PotionBloodMagic("S. Lamb", false, 0x000000, 3, 1).setRegistryName("sacrificial_lamb") ); + BloodMagic.debug("Potion registration completed in {}", stopwatch.stop()); } @SubscribeEvent public static void registerEntities(RegistryEvent.Register event) { + Stopwatch stopwatch = Stopwatch.createStarted(); int entities = 0; EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "blood_light"), EntityBloodLight.class, "BloodLight", ++entities, BloodMagic.instance, 16 * 4, 3, true); EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "soul_snare"), EntitySoulSnare.class, "SoulSnare", ++entities, BloodMagic.instance, 16 * 4, 3, true); @@ -101,21 +134,25 @@ public class RegistrarBloodMagic { EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "corrupted_sheep"), EntityCorruptedSheep.class, "CorruptedSheep", ++entities, BloodMagic.instance, 16 * 4, 3, true); EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "corrupted_chicken"), EntityCorruptedChicken.class, "CorruptedChicken", ++entities, BloodMagic.instance, 16 * 4, 3, true); EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "corrupted_spider"), EntityCorruptedSpider.class, "CorruptedSpider", ++entities, BloodMagic.instance, 16 * 4, 3, true); + BloodMagic.debug("Entity registration completed in {}", stopwatch.stop()); } @SubscribeEvent public static void onRegistryCreation(RegistryEvent.NewRegistry event) { + Stopwatch stopwatch = Stopwatch.createStarted(); BLOOD_ORBS = new RegistryBuilder() .setName(new ResourceLocation(BloodMagic.MODID, "blood_orb")) .setIDRange(0, Short.MAX_VALUE) .setType(BloodOrb.class) .addCallback((IForgeRegistry.AddCallback) (owner, stage, id, obj, oldObj) -> OrbRegistry.tierMap.put(obj.getTier(), OrbRegistry.getOrbStack(obj))) .create(); + BloodMagic.debug("Registry creation completed in {}", stopwatch.stop()); } @SideOnly(Side.CLIENT) @SubscribeEvent public static void registerModels(ModelRegistryEvent event) { + Stopwatch stopwatch = Stopwatch.createStarted(); for (BloodOrb orb : BLOOD_ORBS) { ModelResourceLocation modelLocation = orb.getModelLocation(); if (modelLocation == null) @@ -134,5 +171,15 @@ public class RegistrarBloodMagic { return orb.getModelLocation(); }); + + RegistrarBloodMagicItems.registerModels(); + RegistrarBloodMagicBlocks.registerModels(); + BloodMagic.debug("Model registration completed in {}", stopwatch.stop()); + } + + @SubscribeEvent + public static void handleBurnTime(FurnaceFuelBurnTimeEvent event) { + if (ItemStack.areItemsEqual(event.getItemStack(), ComponentType.SAND_COAL.getStack())) + event.setBurnTime(1600); } } diff --git a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicBlocks.java b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicBlocks.java index 92544f16..585b6a06 100644 --- a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicBlocks.java @@ -15,17 +15,13 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.StateMapperBase; import net.minecraft.init.Blocks; -import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.model.ModelLoader; -import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.registries.IForgeRegistry; import java.util.List; -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) @GameRegistry.ObjectHolder(BloodMagic.MODID) @SuppressWarnings("unused") public class RegistrarBloodMagicBlocks { @@ -73,8 +69,7 @@ public class RegistrarBloodMagicBlocks { static List blocks; - @SubscribeEvent - public static void registerBlocks(RegistryEvent.Register event) { + public static void registerBlocks(IForgeRegistry registry) { FluidRegistry.registerFluid(BlockLifeEssence.getLifeEssence()); FluidRegistry.addBucketForFluid(BlockLifeEssence.getLifeEssence()); @@ -122,13 +117,12 @@ public class RegistrarBloodMagicBlocks { new BlockInversionPillarEnd().setRegistryName("inversion_pillar_end") ); - event.getRegistry().registerAll(blocks.toArray(new Block[0])); + registry.registerAll(blocks.toArray(new Block[0])); - registerTiles(); + registerTileEntities(); } - @SubscribeEvent - public static void registerModels(ModelRegistryEvent event) { + public static void registerModels() { ModelLoader.setCustomStateMapper(LIFE_ESSENCE, new StateMapperBase() { @Override protected ModelResourceLocation getModelResourceLocation(IBlockState state) { @@ -137,29 +131,28 @@ public class RegistrarBloodMagicBlocks { }); } - private static void registerTiles() { - GameRegistry.registerTileEntity(TileAltar.class, BloodMagic.MODID + ":" + TileAltar.class.getSimpleName()); - GameRegistry.registerTileEntity(TileImperfectRitualStone.class, BloodMagic.MODID + ":" + TileImperfectRitualStone.class.getSimpleName()); - GameRegistry.registerTileEntity(TileMasterRitualStone.class, BloodMagic.MODID + ":" + TileMasterRitualStone.class.getSimpleName()); - GameRegistry.registerTileEntity(TileAlchemyArray.class, BloodMagic.MODID + ":" + TileAlchemyArray.class.getSimpleName()); - GameRegistry.registerTileEntity(TileSpectralBlock.class, BloodMagic.MODID + ":" + TileSpectralBlock.class.getSimpleName()); - GameRegistry.registerTileEntity(TilePhantomBlock.class, BloodMagic.MODID + ":" + TilePhantomBlock.class.getSimpleName()); - GameRegistry.registerTileEntity(TileTeleposer.class, BloodMagic.MODID + ":" + TileTeleposer.class.getSimpleName()); - GameRegistry.registerTileEntity(TileSoulForge.class, BloodMagic.MODID + ":" + TileSoulForge.class.getSimpleName()); - GameRegistry.registerTileEntity(TileMasterRoutingNode.class, BloodMagic.MODID + ":" + TileMasterRoutingNode.class.getSimpleName()); - GameRegistry.registerTileEntity(TileInputRoutingNode.class, BloodMagic.MODID + ":" + TileInputRoutingNode.class.getSimpleName()); - GameRegistry.registerTileEntity(TileOutputRoutingNode.class, BloodMagic.MODID + ":" + TileOutputRoutingNode.class.getSimpleName()); - GameRegistry.registerTileEntity(TileItemRoutingNode.class, BloodMagic.MODID + ":" + TileItemRoutingNode.class.getSimpleName()); - GameRegistry.registerTileEntity(TileIncenseAltar.class, BloodMagic.MODID + ":" + TileIncenseAltar.class.getSimpleName()); - GameRegistry.registerTileEntity(TileDemonCrucible.class, BloodMagic.MODID + ":" + TileDemonCrucible.class.getSimpleName()); - GameRegistry.registerTileEntity(TileDemonPylon.class, BloodMagic.MODID + ":" + TileDemonPylon.class.getSimpleName()); - GameRegistry.registerTileEntity(TileDemonCrystallizer.class, BloodMagic.MODID + ":" + TileDemonCrystallizer.class.getSimpleName()); - GameRegistry.registerTileEntity(TileDemonCrystal.class, BloodMagic.MODID + ":" + TileDemonCrystal.class.getSimpleName()); - GameRegistry.registerTileEntity(TileAlchemyTable.class, BloodMagic.MODID + ":" + TileAlchemyTable.class.getSimpleName()); - - GameRegistry.registerTileEntity(TileDimensionalPortal.class, BloodMagic.MODID + ":" + TileDimensionalPortal.class.getSimpleName()); - GameRegistry.registerTileEntity(TileBloodTank.class, BloodMagic.MODID + ":" + TileBloodTank.class.getSimpleName()); - GameRegistry.registerTileEntity(TileMimic.class, BloodMagic.MODID + ":" + TileMimic.class.getSimpleName()); - GameRegistry.registerTileEntity(TileInversionPillar.class, BloodMagic.MODID + ":" + TileInversionPillar.class.getSimpleName()); + private static void registerTileEntities() { + GameRegistry.registerTileEntity(TileAltar.class, BloodMagic.MODID + ":altar"); + GameRegistry.registerTileEntity(TileImperfectRitualStone.class, BloodMagic.MODID + ":imperfect_ritual_stone"); + GameRegistry.registerTileEntity(TileMasterRitualStone.class, BloodMagic.MODID + ":master_ritual_stone"); + GameRegistry.registerTileEntity(TileAlchemyArray.class, BloodMagic.MODID + ":alchemy_array"); + GameRegistry.registerTileEntity(TileSpectralBlock.class, BloodMagic.MODID + ":spectral_block"); + GameRegistry.registerTileEntity(TilePhantomBlock.class, BloodMagic.MODID + ":phantom_block"); + GameRegistry.registerTileEntity(TileTeleposer.class, BloodMagic.MODID + ":teleposer"); + GameRegistry.registerTileEntity(TileSoulForge.class, BloodMagic.MODID + ":soul_forge"); + GameRegistry.registerTileEntity(TileMasterRoutingNode.class, BloodMagic.MODID + ":master_routing_node"); + GameRegistry.registerTileEntity(TileInputRoutingNode.class, BloodMagic.MODID + ":input_routing_node"); + GameRegistry.registerTileEntity(TileOutputRoutingNode.class, BloodMagic.MODID + ":output_routing_node"); + GameRegistry.registerTileEntity(TileItemRoutingNode.class, BloodMagic.MODID + ":item_routing_node"); + GameRegistry.registerTileEntity(TileIncenseAltar.class, BloodMagic.MODID + ":incense_altar"); + GameRegistry.registerTileEntity(TileDemonCrucible.class, BloodMagic.MODID + ":demon_crucible"); + GameRegistry.registerTileEntity(TileDemonPylon.class, BloodMagic.MODID + ":demon_pylon"); + GameRegistry.registerTileEntity(TileDemonCrystallizer.class, BloodMagic.MODID + ":demon_crystallizer"); + GameRegistry.registerTileEntity(TileDemonCrystal.class, BloodMagic.MODID + ":demon_crystal"); + GameRegistry.registerTileEntity(TileAlchemyTable.class, BloodMagic.MODID + ":alchemy_table"); + GameRegistry.registerTileEntity(TileDimensionalPortal.class, BloodMagic.MODID + ":dimensional_portal"); + GameRegistry.registerTileEntity(TileBloodTank.class, BloodMagic.MODID + ":blood_tank"); + GameRegistry.registerTileEntity(TileMimic.class, BloodMagic.MODID + ":mimic"); + GameRegistry.registerTileEntity(TileInversionPillar.class, BloodMagic.MODID + ":inversion_pillar"); } } diff --git a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java index d12b7bce..79f1dcd3 100644 --- a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java +++ b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java @@ -15,27 +15,30 @@ import WayofTime.bloodmagic.item.routing.ItemFluidRouterFilter; import WayofTime.bloodmagic.item.routing.ItemNodeRouter; import WayofTime.bloodmagic.item.routing.ItemRouterFilter; import WayofTime.bloodmagic.item.sigil.*; +import WayofTime.bloodmagic.item.sigil.sigil.*; +import WayofTime.bloodmagic.item.sigil.sigil.ItemSigilTeleposition; +import WayofTime.bloodmagic.item.sigil.sigil.ItemSigilTransposition; import WayofTime.bloodmagic.item.soul.*; +import WayofTime.bloodmagic.item.types.ComponentType; +import WayofTime.bloodmagic.item.types.ReagentType; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.init.Items; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import org.apache.commons.lang3.tuple.Pair; +import net.minecraftforge.registries.IForgeRegistry; import java.util.List; -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) @GameRegistry.ObjectHolder(BloodMagic.MODID) @SuppressWarnings("unchecked") public class RegistrarBloodMagicItems { @@ -78,6 +81,7 @@ public class RegistrarBloodMagicItems { public static final Item SIGIL_BOUNCE = Items.AIR; public static final Item SIGIL_FROST = Items.AIR; public static final Item COMPONENT = Items.AIR; + public static final Item REAGENT = Items.AIR; public static final Item ITEM_DEMON_CRYSTAL = Items.AIR; public static final Item TELEPOSITION_FOCUS = Items.AIR; public static final Item EXPERIENCE_TOME = Items.AIR; @@ -117,8 +121,7 @@ public class RegistrarBloodMagicItems { public static List items; - @SubscribeEvent - public static void registerItems(RegistryEvent.Register event) { + public static void registerItems(IForgeRegistry registry) { items = Lists.newArrayList(); RegistrarBloodMagicBlocks.blocks.stream().filter(block -> block instanceof IBMBlock && ((IBMBlock) block).getItem() != null).forEach(block -> { @@ -143,29 +146,30 @@ public class RegistrarBloodMagicItems { new ItemBoundAxe().setRegistryName("bound_axe"), new ItemBoundShovel().setRegistryName("bound_shovel"), new ItemSigilDivination().setRegistryName("sigil_divination"), - new ItemSigilAir().setRegistryName("sigil_air"), - new ItemSigilWater().setRegistryName("sigil_water"), - new ItemSigilLava().setRegistryName("sigil_lava"), + new ItemSigil(new SigilAir(), "air").setRegistryName("sigil_air"), + new ItemSigil(new SigilFluid(FluidRegistry.WATER), "water").setRegistryName("sigil_water"), + new ItemSigil(new SigilFluid(FluidRegistry.LAVA), "lava").setRegistryName("sigil_lava"), new ItemSigilVoid().setRegistryName("sigil_void"), - new ItemSigilGreenGrove().setRegistryName("sigil_green_grove"), - new ItemSigilBloodLight().setRegistryName("sigil_blood_light"), - new ItemSigilElementalAffinity().setRegistryName("sigil_elemental_affinity"), + new ItemSigil(new SigilGreenGrove(), "green_grove").setRegistryName("sigil_green_grove"), + new ItemSigil(new SigilBloodLight(), "blood_light").setRegistryName("sigil_blood_light"), + new ItemSigil(new SigilElementalAffinity(), "elemental_affinity").setRegistryName("sigil_elemental_affinity"), new ItemSigilMagnetism().setRegistryName("sigil_magnetism"), new ItemSigilSuppression().setRegistryName("sigil_suppression"), - new ItemSigilHaste().setRegistryName("sigil_haste"), - new ItemSigilFastMiner().setRegistryName("sigil_fast_miner"), + new ItemSigil(new SigilHaste(), "haste").setRegistryName("sigil_haste"), + new ItemSigil(new SigilFastMiner(), "fast_miner").setRegistryName("sigil_fast_miner"), new ItemSigilSeer().setRegistryName("sigil_seer"), new ItemSigilPhantomBridge().setRegistryName("sigil_phantom_bridge"), new ItemSigilWhirlwind().setRegistryName("sigil_whirlwind"), new ItemSigilCompression().setRegistryName("sigil_compression"), - new ItemSigilEnderSeverance().setRegistryName("sigil_ender_severance"), + new ItemSigil(new SigilEnderSeverance(), "ender_severance").setRegistryName("sigil_ender_severance"), new ItemSigilHolding().setRegistryName("sigil_holding"), new ItemSigilTeleposition().setRegistryName("sigil_teleposition"), new ItemSigilTransposition().setRegistryName("sigil_transposition"), - new ItemSigilClaw().setRegistryName("sigil_claw"), - new ItemSigilBounce().setRegistryName("sigil_bounce"), - new ItemSigilFrost().setRegistryName("sigil_frost"), - new ItemComponent().setRegistryName("component"), + new ItemSigil(new SigilClaw(), "claw").setRegistryName("sigil_claw"), + new ItemSigil(new SigilBounce(), "bounce").setRegistryName("sigil_bounce"), + new ItemSigil(new SigilFrost(), "frost").setRegistryName("sigil_frost"), + new ItemEnum<>(ComponentType.class, "component").setRegistryName("component"), + new ItemEnum<>(ReagentType.class, "reagent").setRegistryName("reagent"), new ItemDemonCrystal().setRegistryName("item_demon_crystal"), new ItemTelepositionFocus().setRegistryName("teleposition_focus"), new ItemExperienceBook().setRegistryName("experience_tome"), @@ -201,16 +205,17 @@ public class RegistrarBloodMagicItems { new ItemPotionFlask().setRegistryName("potion_flask") )); - event.getRegistry().registerAll(items.toArray(new Item[0])); + registry.registerAll(items.toArray(new Item[0])); } @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void registerRenders(ModelRegistryEvent event) { + public static void registerModels() { items.stream().filter(i -> i instanceof IVariantProvider).forEach(i -> { IVariantProvider variantProvider = (IVariantProvider) i; - for (Pair variant : variantProvider.getVariants()) - ModelLoader.setCustomModelResourceLocation(i, variant.getLeft(), new ModelResourceLocation(i.getRegistryName(), variant.getRight())); + Int2ObjectMap variants = new Int2ObjectOpenHashMap<>(); + variantProvider.populateVariants(variants); + for (Int2ObjectMap.Entry variant : variants.int2ObjectEntrySet()) + ModelLoader.setCustomModelResourceLocation(i, variant.getIntKey(), new ModelResourceLocation(i.getRegistryName(), variant.getValue())); }); items.stream().filter(i -> i instanceof IMeshProvider).forEach(i -> { @@ -218,7 +223,10 @@ public class RegistrarBloodMagicItems { ResourceLocation loc = mesh.getCustomLocation(); if (loc == null) loc = i.getRegistryName(); - for (String variant : mesh.getVariants()) + + List variants = Lists.newArrayList(); + mesh.populateVariants(variants); + for (String variant : variants) ModelLoader.registerItemVariants(i, new ModelResourceLocation(loc, variant)); ModelLoader.setCustomMeshDefinition(i, mesh.getMeshDefinition()); @@ -226,8 +234,10 @@ public class RegistrarBloodMagicItems { RegistrarBloodMagicBlocks.blocks.stream().filter(b -> b instanceof IVariantProvider).forEach(b -> { IVariantProvider variantProvider = (IVariantProvider) b; - for (Pair variant : variantProvider.getVariants()) - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(b), variant.getLeft(), new ModelResourceLocation(b.getRegistryName(), variant.getRight())); + Int2ObjectMap variants = new Int2ObjectOpenHashMap<>(); + variantProvider.populateVariants(variants); + for (Int2ObjectMap.Entry variant : variants.int2ObjectEntrySet()) + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(b), variant.getIntKey(), new ModelResourceLocation(b.getRegistryName(), variant.getValue())); }); final ResourceLocation holdingLoc = SIGIL_HOLDING.getRegistryName(); diff --git a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicRecipes.java b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicRecipes.java new file mode 100644 index 00000000..c2fabada --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicRecipes.java @@ -0,0 +1,140 @@ +package WayofTime.bloodmagic.core; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.altar.EnumAltarTier; +import WayofTime.bloodmagic.api.registry.OrbRegistry; +import WayofTime.bloodmagic.api.ritual.EnumRuneType; +import WayofTime.bloodmagic.api.soul.EnumDemonWillType; +import WayofTime.bloodmagic.api_impl.BloodMagicRecipeRegistrar; +import WayofTime.bloodmagic.apiv2.IBloodMagicRecipeRegistrar; +import WayofTime.bloodmagic.block.BlockLifeEssence; +import WayofTime.bloodmagic.item.ItemDemonCrystal; +import WayofTime.bloodmagic.item.alchemy.ItemCuttingFluid; +import WayofTime.bloodmagic.item.soul.ItemSoulGem; +import WayofTime.bloodmagic.item.types.ComponentType; +import WayofTime.bloodmagic.item.types.ReagentType; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.oredict.OreIngredient; +import net.minecraftforge.oredict.ShapelessOreRecipe; +import net.minecraftforge.registries.IForgeRegistry; + +public class RegistrarBloodMagicRecipes { + + public static void registerCrafting(IForgeRegistry registry) { + for (int i = 0; i < ItemSoulGem.names.length; i++) { + for (EnumDemonWillType willType : EnumDemonWillType.values()) { + ItemStack baseGemStack = new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, i); + ItemStack newGemStack = new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, i); + + ((ItemSoulGem) RegistrarBloodMagicItems.SOUL_GEM).setCurrentType(willType, newGemStack); + ShapelessOreRecipe shapeless = new ShapelessOreRecipe(new ResourceLocation(BloodMagic.MODID, "soul_gem"), newGemStack, baseGemStack, willType.getStack()); + registry.register(shapeless.setRegistryName("soul_gem_" + willType.getName())); + } + } + } + + public static void registerAltarRecipes(IBloodMagicRecipeRegistrar registrar) { + // ONE + registrar.addBloodAltar(new OreIngredient("gemDiamond"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK), EnumAltarTier.ONE.ordinal(), 2000, 2, 1); + registrar.addBloodAltar(new OreIngredient("stone"), new ItemStack(RegistrarBloodMagicItems.SLATE), EnumAltarTier.ONE.ordinal(), 1000, 5, 5); + registrar.addBloodAltar(Ingredient.fromItem(Items.BUCKET), FluidUtil.getFilledBucket(new FluidStack(BlockLifeEssence.getLifeEssence(), Fluid.BUCKET_VOLUME)), EnumAltarTier.ONE.ordinal(), 1000, 5, 0); + registrar.addBloodAltar(Ingredient.fromItem(Items.BOOK), new ItemStack(RegistrarBloodMagicItems.SANGUINE_BOOK), EnumAltarTier.ONE.ordinal(), 1000, 20, 0); + + // TWO + registrar.addBloodAltar(new OreIngredient("blockRedstone"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_APPRENTICE), EnumAltarTier.TWO.ordinal(), 5000, 5, 5); + registrar.addBloodAltar(Ingredient.fromItem(RegistrarBloodMagicItems.SLATE), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), EnumAltarTier.TWO.ordinal(), 2000, 5, 5); + registrar.addBloodAltar(Ingredient.fromItem(Items.IRON_SWORD), new ItemStack(RegistrarBloodMagicItems.DAGGER_OF_SACRIFICE), EnumAltarTier.TWO.ordinal(), 3000, 5, 5); + + // THREE + registrar.addBloodAltar(new OreIngredient("blockGold"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MAGICIAN), EnumAltarTier.THREE.ordinal(), 25000, 20, 20); + registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1)), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), EnumAltarTier.THREE.ordinal(), 5000, 15, 10); + registrar.addBloodAltar(new OreIngredient("obsidian"), EnumRuneType.EARTH.getScribeStack(), EnumAltarTier.THREE.ordinal(), 1000, 5, 5); + registrar.addBloodAltar(new OreIngredient("blockLapis"), EnumRuneType.WATER.getScribeStack(), EnumAltarTier.THREE.ordinal(), 1000, 5, 5); + registrar.addBloodAltar(Ingredient.fromItem(Items.MAGMA_CREAM), EnumRuneType.FIRE.getScribeStack(), EnumAltarTier.THREE.ordinal(), 1000, 5, 5); + registrar.addBloodAltar(Ingredient.fromItem(Items.GHAST_TEAR), EnumRuneType.AIR.getScribeStack(), EnumAltarTier.THREE.ordinal(), 1000, 5, 5); + registrar.addBloodAltar(Ingredient.fromItem(RegistrarBloodMagicItems.LAVA_CRYSTAL), new ItemStack(RegistrarBloodMagicItems.ACTIVATION_CRYSTAL), EnumAltarTier.THREE.ordinal(), 10000, 20, 10); + + // FOUR + registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD)), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MASTER), EnumAltarTier.FOUR.ordinal(), 25000, 30, 50); + registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2)), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), EnumAltarTier.FOUR.ordinal(), 15000, 20, 20); + registrar.addBloodAltar(new OreIngredient("blockCoal"), EnumRuneType.DUSK.getScribeStack(), EnumAltarTier.FOUR.ordinal(), 2000, 20, 10); + registrar.addBloodAltar(new OreIngredient("enderpearl"), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS), EnumAltarTier.FOUR.ordinal(), 2000, 10, 10); + registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS)), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS, 1, 1), EnumAltarTier.FOUR.ordinal(), 10000, 20, 10); + + // FIVE + registrar.addBloodAltar(new OreIngredient("netherStar"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_ARCHMAGE), EnumAltarTier.FIVE.ordinal(), 80000, 50, 100); + registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3)), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 4), EnumAltarTier.FIVE.ordinal(), 30000, 40, 100); + + // SIX + registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK, 1, 2)), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_TRANSCENDENT), EnumAltarTier.SIX.ordinal(), 200000, 100, 200); + registrar.addBloodAltar(new OreIngredient("glowstone"), EnumRuneType.DAWN.getScribeStack(), EnumAltarTier.SIX.ordinal(), 200000, 100, 200); + } + + public static void registerAlchemyTableRecipes(IBloodMagicRecipeRegistrar registrar) { + + } + + public static void registerTartaricForgeRecipes(BloodMagicRecipeRegistrar registrar) { + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), 1, 1, "dustRedstone", "ingotGold", "blockGlass", "dyeBlue"); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), 60, 20, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), "gemDiamond", "blockRedstone", "blockLapis"); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 2), 240, 50, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), "gemDiamond", "blockGold", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2)); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 3), 1000, 100, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 2), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD), EnumDemonWillType.DEFAULT.getStack()); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 4), 4000, 500, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 3), Items.NETHER_STAR); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_SWORD), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_SWORD)); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_AXE), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_AXE)); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_PICKAXE), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_PICKAXE)); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_SHOVEL), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_SHOVEL)); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_BOW), 70, 0, new ItemStack(Items.BOW), new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), "string", "string"); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES), 0, 0, "dustRedstone", "dyeWhite", "gunpowder", Items.COAL); + registrar.addTartaricForge(ReagentType.REAGENT_WATER.getStack(), 10, 3, new ItemStack(Items.SUGAR), new ItemStack(Items.WATER_BUCKET), new ItemStack(Items.WATER_BUCKET)); + registrar.addTartaricForge(ReagentType.REAGENT_LAVA.getStack(), 32, 10, Items.LAVA_BUCKET, "dustRedstone", "cobblestone", "blockCoal"); + registrar.addTartaricForge(ReagentType.REAGENT_VOID.getStack(), 64, 10, Items.BUCKET, "string", "string", "gunpowder"); + registrar.addTartaricForge(ReagentType.REAGENT_GROWTH.getStack(), 128, 20, "treeSapling", "treeSapling", "sugarcane", Items.SUGAR); + registrar.addTartaricForge(ReagentType.REAGENT_AIR.getStack(), 128, 20, Items.GHAST_TEAR, "feather", "feather"); + registrar.addTartaricForge(ReagentType.REAGENT_SIGHT.getStack(), 64, 0, RegistrarBloodMagicItems.SIGIL_DIVINATION, "blockGlass", "blockGlass", "dustGlowstone"); + registrar.addTartaricForge(ReagentType.REAGENT_HOLDING.getStack(), 64, 20, "chestWood", "leather", "string", "string"); + registrar.addTartaricForge(ReagentType.REAGENT_FASTMINER.getStack(), 128, 10, Items.IRON_PICKAXE, Items.IRON_AXE, Items.IRON_SHOVEL, Items.GUNPOWDER); + registrar.addTartaricForge(ReagentType.REAGENT_AFFINITY.getStack(), 300, 30, RegistrarBloodMagicItems.SIGIL_WATER, RegistrarBloodMagicItems.SIGIL_AIR, RegistrarBloodMagicItems.SIGIL_LAVA, Blocks.OBSIDIAN); + registrar.addTartaricForge(ReagentType.REAGENT_SUPPRESSION.getStack(), 500, 50, RegistrarBloodMagicBlocks.TELEPOSER, Items.WATER_BUCKET, Items.LAVA_BUCKET, Items.BLAZE_ROD); + registrar.addTartaricForge(ReagentType.REAGENT_BINDING.getStack(), 400, 10, "dustGlowstone", "dustRedstone", "nuggetGold", Items.GUNPOWDER); + registrar.addTartaricForge(ReagentType.REAGENT_BLOODLIGHT.getStack(), 300, 10, "glowstone", Blocks.TORCH, "dustRedstone", "dustRedstone"); + registrar.addTartaricForge(ReagentType.REAGENT_MAGNETISM.getStack(), 600, 10, "string", "ingotGold", "blockIron", "ingotGold"); + registrar.addTartaricForge(ReagentType.REAGENT_HASTE.getStack(), 1400, 100, Items.COOKIE, Items.SUGAR, Items.COOKIE, "stone"); + registrar.addTartaricForge(ReagentType.REAGENT_BRIDGE.getStack(), 600, 50, Blocks.SOUL_SAND, Blocks.SOUL_SAND, "stone", Blocks.OBSIDIAN); + registrar.addTartaricForge(ReagentType.REAGENT_SEVERANCE.getStack(), 800, 70, Items.ENDER_EYE, Items.ENDER_PEARL, "ingotGold", "ingotGold"); + registrar.addTartaricForge(ReagentType.REAGENT_COMPRESSION.getStack(), 2000, 200, "blockIron", "blockGold", Blocks.OBSIDIAN, "cobblestone"); + registrar.addTartaricForge(ReagentType.REAGENT_TELEPOSITION.getStack(), 1500, 200, RegistrarBloodMagicBlocks.TELEPOSER, "glowstone", "blockRedstone", "ingotGold"); + registrar.addTartaricForge(ReagentType.REAGENT_TRANSPOSITION.getStack(), 1500, 200, RegistrarBloodMagicBlocks.TELEPOSER, "gemDiamond", Items.ENDER_PEARL, Blocks.OBSIDIAN); + registrar.addTartaricForge(ReagentType.REAGENT_CLAW.getStack(), 800, 120, Items.FLINT, Items.FLINT, ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC)); + registrar.addTartaricForge(ReagentType.REAGENT_BOUNCE.getStack(), 200, 20, Blocks.SLIME_BLOCK, Blocks.SLIME_BLOCK, Items.LEATHER, "string"); + registrar.addTartaricForge(ReagentType.REAGENT_FROST.getStack(), 80, 10, Blocks.ICE, Items.SNOWBALL, Items.SNOWBALL, "dustRedstone"); + + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_ARMOUR_GEM), 240, 150, Items.DIAMOND_CHESTPLATE, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), Blocks.IRON_BLOCK, Blocks.OBSIDIAN); + + registrar.addTartaricForge(ComponentType.FRAME_PART.getStack(), 400, 10, "blockGlass", "stone", new ItemStack(RegistrarBloodMagicItems.SLATE)); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.NODE_ROUTER), 400, 5, "stickWood", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), "gemLapis", "gemLapis"); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE), 400, 5, "dustGlowstone", "dustRedstone", "blockGlass", "stone"); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.OUTPUT_ROUTING_NODE), 400, 25, "dustGlowstone", "dustRedstone", "ingotIron", new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE)); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE), 400, 25, "dustGlowstone", "dustRedstone", "ingotGold", new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE)); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.MASTER_ROUTING_NODE), 400, 200, "blockIron", "gemDiamond", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2)); + + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 0), 1200, 100, EnumDemonWillType.DEFAULT.getStack(), EnumDemonWillType.DEFAULT.getStack(), EnumDemonWillType.DEFAULT.getStack(), EnumDemonWillType.DEFAULT.getStack()); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 1), 1200, 100, EnumDemonWillType.CORROSIVE.getStack(), EnumDemonWillType.CORROSIVE.getStack(), EnumDemonWillType.CORROSIVE.getStack(), EnumDemonWillType.CORROSIVE.getStack()); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 2), 1200, 100, EnumDemonWillType.DESTRUCTIVE.getStack(), EnumDemonWillType.DESTRUCTIVE.getStack(), EnumDemonWillType.DESTRUCTIVE.getStack(), EnumDemonWillType.DESTRUCTIVE.getStack()); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 3), 1200, 100, EnumDemonWillType.VENGEFUL.getStack(), EnumDemonWillType.VENGEFUL.getStack(), EnumDemonWillType.VENGEFUL.getStack(), EnumDemonWillType.VENGEFUL.getStack()); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 4), 1200, 100, EnumDemonWillType.STEADFAST.getStack(), EnumDemonWillType.STEADFAST.getStack(), EnumDemonWillType.STEADFAST.getStack(), EnumDemonWillType.STEADFAST.getStack()); + + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRUCIBLE), 400, 100, Items.CAULDRON, "stone", "gemLapis", "gemDiamond"); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_PYLON), 400, 50, "blockIron", "stone", "gemLapis", RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTALLIZER), 500, 100, RegistrarBloodMagicBlocks.SOUL_FORGE, "stone", "gemLapis", "blockGlass"); + registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.DEMON_WILL_GAUGE), 400, 50, "ingotGold", "dustRedstone", "blockGlass", RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/fuel/FuelHandler.java b/src/main/java/WayofTime/bloodmagic/fuel/FuelHandler.java deleted file mode 100644 index aae512d7..00000000 --- a/src/main/java/WayofTime/bloodmagic/fuel/FuelHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.bloodmagic.fuel; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.ItemComponent; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.IFuelHandler; - -public class FuelHandler implements IFuelHandler { - @Override - public int getBurnTime(ItemStack fuel) { - if (fuel != null && fuel.getItem() == RegistrarBloodMagicItems.COMPONENT && fuel.getMetadata() == ItemComponent.getStack(ItemComponent.SAND_COAL).getMetadata()) { - return 1600; - } - - return 0; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java index c0560ec7..a045bcbf 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.item; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.ItemStack; @@ -50,12 +51,10 @@ public class ItemActivationCrystal extends ItemBindableBase implements IVariantP } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=weak")); - ret.add(new ImmutablePair(1, "type=demonic")); - ret.add(new ImmutablePair(2, "type=creative")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=weak"); + variants.put(1, "type=demonic"); + variants.put(2, "type=creative"); } public int getCrystalLevel(ItemStack stack) { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java b/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java index 442ecd96..7501b5fc 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java @@ -12,6 +12,7 @@ import WayofTime.bloodmagic.util.ChatUtil; import WayofTime.bloodmagic.util.helper.NumeralHelper; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.state.IBlockState; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; @@ -90,10 +91,8 @@ public class ItemAltarMaker extends Item implements IAltarManipulator, IVariantP } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=altarmaker")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=altarmaker"); } public void setTierToBuild(EnumAltarTier tierToBuild) { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemArcaneAshes.java b/src/main/java/WayofTime/bloodmagic/item/ItemArcaneAshes.java index 4734f6f9..11d010ca 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemArcaneAshes.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemArcaneAshes.java @@ -5,6 +5,7 @@ import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; import WayofTime.bloodmagic.tile.TileAlchemyArray; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -61,9 +62,7 @@ public class ItemArcaneAshes extends Item implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=arcaneashes")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=arcaneashes"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java b/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java index 46f441da..0b7311a5 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java @@ -94,7 +94,7 @@ public class ItemBloodOrb extends ItemBindableBase implements IBloodOrb, IBindab BloodOrb orb = getOrb(stack); if (flag.isAdvanced() && orb != null) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.orb.owner", orb.getRegistryName())); + tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.orb.owner", orb.getRegistryName().getResourceDomain())); super.addInformation(stack, world, tooltip, flag); } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBloodShard.java b/src/main/java/WayofTime/bloodmagic/item/ItemBloodShard.java index acbf2214..cdcda8d3 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBloodShard.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBloodShard.java @@ -2,6 +2,7 @@ package WayofTime.bloodmagic.item; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.client.IVariantProvider; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -41,10 +42,8 @@ public class ItemBloodShard extends Item implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=weak")); - ret.add(new ImmutablePair(1, "type=demonic")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=weak"); + variants.put(1, "type=demonic"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java index 26831f4c..ee4cdde1 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java @@ -4,7 +4,6 @@ import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.ItemStackWrapper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; @@ -12,7 +11,6 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockLeaves; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -22,17 +20,12 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Enchantments; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -116,24 +109,4 @@ public class ItemBoundAxe extends ItemBoundTool implements IMeshProvider { } return multimap; } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionActivatable("bound_axe"); - } - - @Nullable - @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - List ret = new ArrayList(); - ret.add("active=true"); - ret.add("active=false"); - return ret; - } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java index bc2c47f3..21c7a231 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java @@ -4,14 +4,12 @@ import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.ItemStackWrapper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -21,17 +19,12 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Enchantments; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -129,24 +122,4 @@ public class ItemBoundPickaxe extends ItemBoundTool implements IMeshProvider { } return multimap; } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionActivatable("bound_pickaxe"); - } - - @Nullable - @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - List ret = new ArrayList(); - ret.add("active=true"); - ret.add("active=false"); - return ret; - } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java index c122d617..fd643888 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java @@ -4,14 +4,12 @@ import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.ItemStackWrapper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -21,17 +19,12 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Enchantments; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -115,24 +108,4 @@ public class ItemBoundShovel extends ItemBoundTool implements IMeshProvider { } return multimap; } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionActivatable("bound_shovel"); - } - - @Nullable - @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - List ret = new ArrayList(); - ret.add("active=true"); - ret.add("active=false"); - return ret; - } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java index cf6a8809..183d72ef 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java @@ -30,14 +30,11 @@ import net.minecraft.item.ItemSword; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.NonNullList; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.List; public class ItemBoundSword extends ItemSword implements IBindable, IActivatable, IMeshProvider { @@ -133,18 +130,10 @@ public class ItemBoundSword extends ItemSword implements IBindable, IActivatable return new CustomMeshDefinitionActivatable("bound_sword"); } - @Nullable @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - List ret = new ArrayList(); - ret.add("active=true"); - ret.add("active=false"); - return ret; + public void populateVariants(List variants) { + variants.add("active=true"); + variants.add("active=false"); } // IBindable diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java index 0bbcea86..5c830bde 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java @@ -9,6 +9,8 @@ import WayofTime.bloodmagic.api.iface.IBindable; import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import WayofTime.bloodmagic.client.IMeshProvider; +import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; import WayofTime.bloodmagic.util.Utils; import WayofTime.bloodmagic.util.helper.TextHelper; @@ -19,6 +21,7 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Multiset; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; @@ -45,7 +48,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -public class ItemBoundTool extends ItemTool implements IBindable, IActivatable { +public class ItemBoundTool extends ItemTool implements IBindable, IActivatable, IMeshProvider { public final int chargeTime = 30; protected final String tooltipBase; private final String name; @@ -250,6 +253,20 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable { return null; } + // IMeshProvider + + @Override + @SideOnly(Side.CLIENT) + public ItemMeshDefinition getMeshDefinition() { + return new CustomMeshDefinitionActivatable("bound_" + name); + } + + @Override + public void populateVariants(List variants) { + variants.add("active=true"); + variants.add("active=false"); + } + public String getTooltipBase() { return tooltipBase; } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java b/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java deleted file mode 100644 index 4363715e..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemComponent.java +++ /dev/null @@ -1,137 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.ArrayList; -import java.util.List; - -public class ItemComponent extends Item implements IVariantProvider { - public static final String REAGENT_WATER = "reagentWater"; - public static final String REAGENT_LAVA = "reagentLava"; - public static final String REAGENT_AIR = "reagentAir"; - public static final String REAGENT_FASTMINER = "reagentFastMiner"; - public static final String REAGENT_VOID = "reagentVoid"; - public static final String REAGENT_GROWTH = "reagentGrowth"; - public static final String REAGENT_AFFINITY = "reagentAffinity"; - public static final String REAGENT_SIGHT = "reagentSight"; - public static final String REAGENT_BINDING = "reagentBinding"; - public static final String REAGENT_SUPPRESSION = "reagentSuppression"; - public static final String COMPONENT_FRAME_PART = "frameParts"; - public static final String REAGENT_BLOODLIGHT = "reagentBloodLight"; - public static final String REAGENT_MAGNETISM = "reagentMagnetism"; - public static final String REAGENT_HASTE = "reagentHaste"; - public static final String REAGENT_COMPRESSION = "reagentCompression"; - public static final String REAGENT_BRIDGE = "reagentBridge"; - public static final String REAGENT_SEVERANCE = "reagentSeverance"; - public static final String REAGENT_TELEPOSITION = "reagentTeleposition"; - public static final String REAGENT_TRANSPOSITION = "reagentTransposition"; - public static final String SAND_IRON = "ironSand"; - public static final String SAND_GOLD = "goldSand"; - public static final String SAND_COAL = "coalSand"; - public static final String PLANT_OIL = "plantOil"; - public static final String SULFUR = "sulfur"; - public static final String SALTPETER = "saltpeter"; - public static final String NEURO_TOXIN = "neurotoxin"; - public static final String ANTISEPTIC = "antiseptic"; - public static final String REAGENT_HOLDING = "reagentHolding"; - public static final String CATALYST_LENGTH_1 = "mundaneLength"; - public static final String CATALYST_POWER_1 = "mundanePower"; - public static final String REAGENT_CLAW = "reagentClaw"; - public static final String REAGENT_BOUNCE = "reagentBounce"; - public static final String REAGENT_FROST = "reagentFrost"; - private static ArrayList names = new ArrayList(); - - public ItemComponent() { - super(); - - setUnlocalizedName(BloodMagic.MODID + ".baseComponent."); - setHasSubtypes(true); - setCreativeTab(BloodMagic.TAB_BM); - - buildItemList(); - } - - private void buildItemList() { - names.add(0, REAGENT_WATER); - names.add(1, REAGENT_LAVA); - names.add(2, REAGENT_AIR); - names.add(3, REAGENT_FASTMINER); - names.add(4, REAGENT_VOID); - names.add(5, REAGENT_GROWTH); - names.add(6, REAGENT_AFFINITY); - names.add(7, REAGENT_SIGHT); - names.add(8, REAGENT_BINDING); - names.add(9, REAGENT_SUPPRESSION); - names.add(10, COMPONENT_FRAME_PART); - names.add(11, REAGENT_BLOODLIGHT); - names.add(12, REAGENT_MAGNETISM); - names.add(13, REAGENT_HASTE); - names.add(14, REAGENT_COMPRESSION); - names.add(15, REAGENT_BRIDGE); - names.add(16, REAGENT_SEVERANCE); - names.add(17, REAGENT_TELEPOSITION); - names.add(18, REAGENT_TRANSPOSITION); - names.add(19, SAND_IRON); - names.add(20, SAND_GOLD); - names.add(21, SAND_COAL); - names.add(22, PLANT_OIL); - names.add(23, SULFUR); - names.add(24, SALTPETER); - names.add(25, NEURO_TOXIN); - names.add(26, ANTISEPTIC); - names.add(27, REAGENT_HOLDING); - names.add(28, CATALYST_LENGTH_1); - names.add(29, CATALYST_POWER_1); - names.add(30, REAGENT_CLAW); - names.add(31, REAGENT_BOUNCE); - names.add(32, REAGENT_FROST); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName(stack) + names.get(stack.getItemDamage()); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs creativeTab, NonNullList list) { - if (!isInCreativeTab(creativeTab)) - return; - - for (int i = 0; i < names.size(); i++) - list.add(new ItemStack(this, 1, i)); - } - - @Override - public List> getVariants() { - List> ret = new ArrayList>(); - for (String name : names) - ret.add(new ImmutablePair(names.indexOf(name), "type=" + name)); - return ret; - } - - public static ItemStack getStack(String name) { - return new ItemStack(RegistrarBloodMagicItems.COMPONENT, 1, names.indexOf(name)); - } - - public static ItemStack getStack(String key, int stackSize) { - ItemStack stack = getStack(key); - stack.setCount(stackSize); - - return stack; - } - - public static ArrayList getNames() { - return names; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java index b5cdb49c..0b23856f 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java @@ -6,6 +6,7 @@ import WayofTime.bloodmagic.api.util.helper.PurificationHelper; import WayofTime.bloodmagic.api_impl.BloodMagicAPI; import WayofTime.bloodmagic.client.IVariantProvider; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.IMob; import net.minecraft.entity.passive.EntityAnimal; @@ -76,9 +77,7 @@ public class ItemDaggerOfSacrifice extends Item implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = Lists.newArrayList(); - ret.add(Pair.of(0, "type=normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=normal"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java index bd8143dc..d944bd41 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java @@ -1,64 +1,15 @@ package WayofTime.bloodmagic.item; -import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; import WayofTime.bloodmagic.api.soul.IDiscreteDemonWill; import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import com.google.common.collect.Lists; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Pair; -import java.util.ArrayList; -import java.util.List; - -public class ItemDemonCrystal extends Item implements IDiscreteDemonWill, IVariantProvider { - public static final ArrayList NAMES = Lists.newArrayList(); - - public static final String CRYSTAL_DEFAULT = "crystalDefault"; - public static final String CRYSTAL_CORROSIVE = "crystalCorrosive"; - public static final String CRYSTAL_VENGEFUL = "crystalVengeful"; - public static final String CRYSTAL_DESTRUCTIVE = "crystalDestructive"; - public static final String CRYSTAL_STEADFAST = "crystalSteadfast"; +public class ItemDemonCrystal extends ItemEnum implements IDiscreteDemonWill, IVariantProvider { public ItemDemonCrystal() { - super(); - - setUnlocalizedName(BloodMagic.MODID + ".demonCrystal."); - setHasSubtypes(true); - setCreativeTab(BloodMagic.TAB_BM); - - buildItemList(); - } - - private void buildItemList() { - NAMES.add(0, CRYSTAL_DEFAULT); - NAMES.add(1, CRYSTAL_CORROSIVE); - NAMES.add(2, CRYSTAL_DESTRUCTIVE); - NAMES.add(3, CRYSTAL_VENGEFUL); - NAMES.add(4, CRYSTAL_STEADFAST); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName(stack) + NAMES.get(stack.getItemDamage()); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs creativeTab, NonNullList list) { - if (!isInCreativeTab(creativeTab)) - return; - - for (int i = 0; i < NAMES.size(); i++) - list.add(new ItemStack(this, 1, i)); + super(EnumDemonWillType.class, "demonCrystal"); } @Override @@ -88,16 +39,4 @@ public class ItemDemonCrystal extends Item implements IDiscreteDemonWill, IVaria public EnumDemonWillType getType(ItemStack willStack) { return EnumDemonWillType.values()[MathHelper.clamp(willStack.getMetadata(), 0, EnumDemonWillType.values().length - 1)]; } - - @Override - public List> getVariants() { - List> ret = new ArrayList>(); - for (String name : NAMES) - ret.add(new ImmutablePair(NAMES.indexOf(name), "type=" + name)); - return ret; - } - - public static ItemStack getStack(String name) { - return new ItemStack(RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL, 1, NAMES.indexOf(name)); - } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDemonWillGauge.java b/src/main/java/WayofTime/bloodmagic/item/ItemDemonWillGauge.java index 68dcc7cf..5c3b8927 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDemonWillGauge.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemDemonWillGauge.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.iface.IDemonWillViewer; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -32,10 +33,8 @@ public class ItemDemonWillGauge extends Item implements IVariantProvider, IDemon } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=willgauge")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=willgauge"); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemEnum.java b/src/main/java/WayofTime/bloodmagic/item/ItemEnum.java new file mode 100644 index 00000000..e7ca9173 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/ItemEnum.java @@ -0,0 +1,57 @@ +package WayofTime.bloodmagic.item; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.client.IVariantProvider; +import WayofTime.bloodmagic.item.types.ISubItem; +import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.List; + +public class ItemEnum & ISubItem> extends Item implements IVariantProvider { + + protected final T[] types; + + public ItemEnum(Class enumClass, String baseName) { + super(); + + this.types = enumClass.getEnumConstants(); + + setUnlocalizedName(BloodMagic.MODID + "." + baseName); + setHasSubtypes(types.length > 1); + setCreativeTab(BloodMagic.TAB_BM); + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName(stack) + "." + getItemType(stack).getInternalName(); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(CreativeTabs tab, NonNullList subItems) { + if (!isInCreativeTab(tab)) + return; + + for (T type : types) + subItems.add(new ItemStack(this, 1, type.ordinal())); + } + + public T getItemType(ItemStack stack) { + return types[MathHelper.clamp(stack.getItemDamage(), 0, types.length)]; + } + + @Override + public void populateVariants(Int2ObjectMap variants) { + for (int i = 0; i < types.length; i++) + variants.put(i, "type=" + types[i].getInternalName()); + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java b/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java index 45fad002..1973bb51 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; @@ -59,14 +60,12 @@ public class ItemExperienceBook extends Item implements IVariantProvider { giveOneLevelExpToPlayer(stack, player); } - return new ActionResult(EnumActionResult.SUCCESS, stack); + return new ActionResult<>(EnumActionResult.SUCCESS, stack); } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=experiencetome")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=experiencetome"); } public void giveOneLevelExpToPlayer(ItemStack stack, EntityPlayer player) { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java index 4481c2a2..51186953 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java @@ -7,6 +7,7 @@ import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.block.BlockRitualStone; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.state.IBlockState; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; @@ -102,11 +103,9 @@ public class ItemInscriptionTool extends ItemBindableBase implements IVariantPro } @Override - public List> getVariants() { - List> ret = new ArrayList>(); + public void populateVariants(Int2ObjectMap variants) { for (int i = 1; i < EnumRuneType.values().length; i++) - ret.add(new ImmutablePair(i, "type=" + EnumRuneType.values()[i].name())); - return ret; + variants.put(i, "type=" + EnumRuneType.values()[i].name()); } public EnumRuneType getType(ItemStack stack) { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java index c224ea7d..218f19c8 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java @@ -5,6 +5,7 @@ import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.client.IVariantProvider; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; @@ -53,9 +54,7 @@ public class ItemLavaCrystal extends ItemBindableBase implements IVariantProvide } @Override - public List> getVariants() { - List> ret = Lists.newArrayList(); - ret.add(Pair.of(0, "type=normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=normal"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java b/src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java index 3f5e15ac..4e628304 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java @@ -4,7 +4,6 @@ import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.client.IMeshProvider; import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.Lists; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.client.renderer.block.model.ModelResourceLocation; @@ -24,7 +23,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; import java.util.List; public class ItemPotionFlask extends Item implements IMeshProvider { @@ -131,14 +129,9 @@ public class ItemPotionFlask extends Item implements IMeshProvider { }; } - @Nullable @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - return Lists.newArrayList("full=true", "full=false"); + public void populateVariants(List variants) { + variants.add("full=true"); + variants.add("full=false"); } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java b/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java index 616b01a2..0a8c8e2f 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java @@ -16,6 +16,7 @@ import WayofTime.bloodmagic.util.Utils; import WayofTime.bloodmagic.util.handler.event.ClientHandler; import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.base.Strings; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.util.ITooltipFlag; @@ -332,12 +333,10 @@ public class ItemRitualDiviner extends Item implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=basic")); - ret.add(new ImmutablePair(1, "type=dusk")); - ret.add(new ImmutablePair(2, "type=dawn")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=basic"); + variants.put(1, "type=dusk"); + variants.put(2, "type=dawn"); } public void cycleDirection(ItemStack stack, EntityPlayer player) { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemRitualReader.java b/src/main/java/WayofTime/bloodmagic/item/ItemRitualReader.java index 455e3f1c..dfbae3ec 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemRitualReader.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemRitualReader.java @@ -10,6 +10,7 @@ import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.ChatUtil; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -233,9 +234,7 @@ public class ItemRitualReader extends Item implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=normal"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java index ba46d284..f06cfe2b 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java @@ -30,8 +30,6 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -98,7 +96,7 @@ public class ItemSacrificialDagger extends Item implements IMeshProvider { return new ActionResult(EnumActionResult.SUCCESS, stack); } - int lpAdded = ConfigHandler.sacrificialDaggerConversion * ConfigHandler.sacrificialDaggerDamage; + int lpAdded = ConfigHandler.values.sacrificialDaggerConversion * 2; RayTraceResult rayTrace = rayTrace(world, player, false); if (rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) { @@ -109,14 +107,14 @@ public class ItemSacrificialDagger extends Item implements IMeshProvider { } if (!player.capabilities.isCreativeMode) { - SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, ConfigHandler.sacrificialDaggerDamage, lpAdded); + SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, 2, lpAdded); if (MinecraftForge.EVENT_BUS.post(evt)) return super.onItemRightClick(world, player, hand); if (evt.shouldDrainHealth) { player.hurtResistantTime = 0; player.attackEntityFrom(BloodMagicAPI.damageSource, 0.001F); - player.setHealth(Math.max(player.getHealth() - ConfigHandler.sacrificialDaggerDamage, 0.0001f)); + player.setHealth(Math.max(player.getHealth() - 2, 0.0001f)); if (player.getHealth() <= 0.001f) { player.onDeath(BloodMagicAPI.damageSource); player.setHealth(0); @@ -183,17 +181,9 @@ public class ItemSacrificialDagger extends Item implements IMeshProvider { } @Override - public List getVariants() { - List variants = new ArrayList(); + public void populateVariants(List variants) { variants.add("type=normal"); variants.add("type=creative"); variants.add("type=ceremonial"); - return variants; - } - - @Nullable - @Override - public ResourceLocation getCustomLocation() { - return null; } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSanguineBook.java b/src/main/java/WayofTime/bloodmagic/item/ItemSanguineBook.java index f17328f6..2656aaba 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemSanguineBook.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemSanguineBook.java @@ -11,6 +11,7 @@ import WayofTime.bloodmagic.tile.TileAltar; import WayofTime.bloodmagic.util.ChatUtil; import WayofTime.bloodmagic.util.helper.NumeralHelper; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.state.IBlockState; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; @@ -109,7 +110,7 @@ public class ItemSanguineBook extends Item implements IVariantProvider, IAltarMa // IVariantProvider @Override - public List> getVariants() { - return Collections.singletonList(Pair.of(0, "type=normal")); + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=normal"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java b/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java index b2564ffb..ab68166d 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.item; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -51,13 +52,11 @@ public class ItemSlate extends Item implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=blank")); - ret.add(new ImmutablePair(1, "type=reinforced")); - ret.add(new ImmutablePair(2, "type=imbued")); - ret.add(new ImmutablePair(3, "type=demonic")); - ret.add(new ImmutablePair(4, "type=ethereal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=blank"); + variants.put(1, "type=reinforced"); + variants.put(2, "type=imbued"); + variants.put(3, "type=demonic"); + variants.put(4, "type=ethereal"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java b/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java index 64895638..e1926357 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java @@ -5,6 +5,7 @@ import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; @@ -87,13 +88,11 @@ public class ItemTelepositionFocus extends ItemBindableBase implements IVariantP } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=weak")); - ret.add(new ImmutablePair(1, "type=enhanced")); - ret.add(new ImmutablePair(2, "type=reinforced")); - ret.add(new ImmutablePair(3, "type=demonic")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=weak"); + variants.put(1, "type=enhanced"); + variants.put(2, "type=reinforced"); + variants.put(3, "type=demonic"); } public World getWorld(ItemStack stack) { diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java b/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java index c7bd3f2c..2a7e87b8 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java @@ -8,6 +8,7 @@ import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.item.armour.ItemLivingArmour; import WayofTime.bloodmagic.livingArmour.LivingArmour; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; @@ -96,10 +97,8 @@ public class ItemUpgradeTome extends Item implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=upgradetome")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=upgradetome"); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTrainer.java b/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTrainer.java index f22ac3c0..459b25ef 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTrainer.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTrainer.java @@ -7,6 +7,7 @@ import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; import WayofTime.bloodmagic.api.util.helper.ItemHelper.LivingUpgrades; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -82,9 +83,7 @@ public class ItemUpgradeTrainer extends Item implements IUpgradeTrainer, IVarian } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=upgradetrainer")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=upgradetrainer"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemCuttingFluid.java b/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemCuttingFluid.java index f65f891c..6e5e1e82 100644 --- a/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemCuttingFluid.java +++ b/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemCuttingFluid.java @@ -6,6 +6,7 @@ import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -67,11 +68,9 @@ public class ItemCuttingFluid extends Item implements IVariantProvider, ICustomA } @Override - public List> getVariants() { - List> ret = new ArrayList>(); + public void populateVariants(Int2ObjectMap variants) { for (String name : names) - ret.add(new ImmutablePair(names.indexOf(name), "type=" + name)); - return ret; + variants.put(names.indexOf(name), "type=" + name); } public int getDamageOfFluid(ItemStack stack) { diff --git a/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemLivingArmourPointsUpgrade.java b/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemLivingArmourPointsUpgrade.java index 30e35efd..269587c5 100644 --- a/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemLivingArmourPointsUpgrade.java +++ b/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemLivingArmourPointsUpgrade.java @@ -7,6 +7,7 @@ import WayofTime.bloodmagic.item.armour.ItemLivingArmour; import WayofTime.bloodmagic.livingArmour.LivingArmour; import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.collect.Iterables; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; @@ -118,11 +119,9 @@ public class ItemLivingArmourPointsUpgrade extends Item implements IVariantProvi } @Override - public List> getVariants() { - List> ret = new ArrayList>(); + public void populateVariants(Int2ObjectMap variants) { for (String name : names) - ret.add(new ImmutablePair(names.indexOf(name), "type=" + name)); - return ret; + variants.put(names.indexOf(name), "type=" + name); } public static ItemStack getStack(String name) { diff --git a/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java b/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java index bfd67b55..886202e0 100644 --- a/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java +++ b/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java @@ -9,7 +9,7 @@ import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.client.IMeshProvider; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.ItemComponent; +import WayofTime.bloodmagic.item.types.ReagentType; import WayofTime.bloodmagic.livingArmour.LivingArmour; import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerRepairing; import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeElytra; @@ -44,8 +44,11 @@ import org.lwjgl.input.Keyboard; import javax.annotation.Nullable; import java.lang.reflect.Field; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.UUID; public class ItemLivingArmour extends ItemArmor implements ISpecialArmor, IMeshProvider { public static final boolean useSpecialArmourCalculation = true; @@ -97,7 +100,7 @@ public class ItemLivingArmour extends ItemArmor implements ISpecialArmor, IMeshP @Override public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { - return ItemStack.areItemsEqual(repair, ItemComponent.getStack(ItemComponent.REAGENT_BINDING)); + return ItemStack.areItemsEqual(repair, ReagentType.REAGENT_BINDING.getStack()); } @Override @@ -366,13 +369,11 @@ public class ItemLivingArmour extends ItemArmor implements ISpecialArmor, IMeshP } @Override - public List getVariants() { - List ret = new ArrayList(); - ret.add("armour=head"); - ret.add("armour=body"); - ret.add("armour=leg"); - ret.add("armour=feet"); - return ret; + public void populateVariants(List variants) { + variants.add("armour=head"); + variants.add("armour=body"); + variants.add("armour=leg"); + variants.add("armour=feet"); } public void setLivingArmour(ItemStack stack, LivingArmour armour, boolean forceWrite) { diff --git a/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java b/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java index 962a6272..63662c40 100644 --- a/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java +++ b/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java @@ -33,7 +33,10 @@ import net.minecraftforge.common.ISpecialArmor; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import java.util.*; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; public class ItemSentientArmour extends ItemArmor implements ISpecialArmor, IMeshProvider, IMultiWillTool { public static String[] names = {"helmet", "chest", "legs", "boots"}; @@ -297,18 +300,15 @@ public class ItemSentientArmour extends ItemArmor implements ISpecialArmor, IMes } @Override - public List getVariants() { - List ret = new ArrayList(); + public void populateVariants(List variants) { for (EnumDemonWillType type : EnumDemonWillType.values()) { String additional = "_" + type.getName().toLowerCase(); - ret.add("armour=head" + additional); - ret.add("armour=body" + additional); - ret.add("armour=leg" + additional); - ret.add("armour=feet" + additional); + variants.add("armour=head" + additional); + variants.add("armour=body" + additional); + variants.add("armour=leg" + additional); + variants.add("armour=feet" + additional); } - - return ret; } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockAlchemyTable.java index 6f082408..3370d29f 100644 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockAlchemyTable.java +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockAlchemyTable.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.item.block; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileAlchemyTable; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; @@ -64,7 +65,7 @@ public class ItemBlockAlchemyTable extends ItemBlock implements IVariantProvider } @Override - public List> getVariants() { - return Lists.newArrayList(Pair.of(0, "inventory")); + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "inventory"); } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java index 611c8150..63ac8226 100644 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java @@ -1,7 +1,9 @@ package WayofTime.bloodmagic.item.block; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; +import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileDemonCrystal; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; @@ -14,7 +16,7 @@ import net.minecraft.world.World; import java.util.Locale; -public class ItemBlockDemonCrystal extends ItemBlock { +public class ItemBlockDemonCrystal extends ItemBlock implements IVariantProvider { public ItemBlockDemonCrystal(Block block) { super(block); setHasSubtypes(true); @@ -43,4 +45,10 @@ public class ItemBlockDemonCrystal extends ItemBlock { return false; } + + @Override + public void populateVariants(Int2ObjectMap variants) { + for (EnumDemonWillType type : EnumDemonWillType.values()) + variants.put(type.ordinal(), "age=4,attached=up,type=" + type.getName()); + } } diff --git a/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSacrifice.java index 3abdfdce..bece7301 100644 --- a/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSacrifice.java +++ b/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSacrifice.java @@ -9,6 +9,7 @@ import WayofTime.bloodmagic.api.util.helper.ItemHelper.LPContainer; import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; @@ -76,10 +77,8 @@ public class ItemPackSacrifice extends ItemArmor implements IAltarManipulator, I } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=normal"); } // IFillable diff --git a/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java index 1dd19a4b..9d6c36f8 100644 --- a/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java +++ b/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java @@ -10,6 +10,7 @@ import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; @@ -101,10 +102,8 @@ public class ItemPackSelfSacrifice extends ItemArmor implements IAltarManipulato } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=normal"); } // IFillable diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java b/src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java index 455c44c4..d88f2432 100644 --- a/src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java +++ b/src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java @@ -7,6 +7,7 @@ import WayofTime.bloodmagic.routing.IFluidFilter; import WayofTime.bloodmagic.routing.RoutingFluidFilter; import WayofTime.bloodmagic.util.GhostItemHelper; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -121,10 +122,8 @@ public class ItemFluidRouterFilter extends Item implements IFluidFilterProvider, } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=exact")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=exact"); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/ItemNodeRouter.java b/src/main/java/WayofTime/bloodmagic/item/routing/ItemNodeRouter.java index 3cdb1aa0..4cdc0ae6 100644 --- a/src/main/java/WayofTime/bloodmagic/item/routing/ItemNodeRouter.java +++ b/src/main/java/WayofTime/bloodmagic/item/routing/ItemNodeRouter.java @@ -8,6 +8,7 @@ import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.routing.IMasterRoutingNode; import WayofTime.bloodmagic.routing.IRoutingNode; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -176,10 +177,8 @@ public class ItemNodeRouter extends Item implements INodeRenderer, IVariantProvi } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=normal"); } public BlockPos getBlockPos(ItemStack stack) { diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java b/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java index 76cc2b48..5fa81eed 100644 --- a/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java +++ b/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java @@ -6,6 +6,7 @@ import WayofTime.bloodmagic.item.inventory.ItemInventory; import WayofTime.bloodmagic.routing.*; import WayofTime.bloodmagic.util.GhostItemHelper; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -138,13 +139,11 @@ public class ItemRouterFilter extends Item implements IItemFilterProvider, IVari } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=exact")); - ret.add(new ImmutablePair(1, "type=ignorenbt")); - ret.add(new ImmutablePair(2, "type=moditems")); - ret.add(new ImmutablePair(3, "type=oredict")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=exact"); + variants.put(1, "type=ignorenbt"); + variants.put(2, "type=moditems"); + variants.put(3, "type=oredict"); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java deleted file mode 100644 index 885f02b5..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java +++ /dev/null @@ -1,73 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.iface.ISentientSwordEffectProvider; -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; - -public class ItemSigilAir extends ItemSigilBase implements ISentientSwordEffectProvider { - public ItemSigilAir() { - super("air", 50); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - boolean unusable = isUnusable(stack); - if (world.isRemote && !unusable) { - Vec3d vec = player.getLookVec(); - double wantedVelocity = 1.7; - - // TODO - Revisit after potions - if (player.isPotionActive(RegistrarBloodMagic.BOOST)) { - int amplifier = player.getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); - wantedVelocity += (1 + amplifier) * (0.35); - } - - player.motionX = vec.x * wantedVelocity; - player.motionY = vec.y * wantedVelocity; - player.motionZ = vec.z * wantedVelocity; - world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - } - - if (!world.isRemote) { - if (!player.capabilities.isCreativeMode) - this.setUnusable(stack, !NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed())); - - if (!unusable) - player.fallDistance = 0; - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean applyOnHitEffect(EnumDemonWillType type, ItemStack swordStack, ItemStack providerStack, EntityLivingBase attacker, EntityLivingBase target) { - target.addPotionEffect(new PotionEffect(MobEffects.LEVITATION, 200, 0)); - return true; - } - - @Override - public boolean providesEffectForWill(EnumDemonWillType type) { - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java index 7de088ff..74157b85 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java @@ -6,6 +6,7 @@ import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.base.Strings; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -51,10 +52,8 @@ public class ItemSigilBase extends ItemSigil implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(Pair.of(0, "type=normal")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=normal"); } public String getName() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java deleted file mode 100644 index 5f9fd16a..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java +++ /dev/null @@ -1,82 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.util.helper.NBTHelper; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; - -public class ItemSigilBloodLight extends ItemSigilBase { - public ItemSigilBloodLight() { - super("blood_light", 10); - } - - @Override - public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) { - if (getCooldownRemainder(stack) > 0) - reduceCooldown(stack); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - RayTraceResult mop = this.rayTrace(world, player, false); - - if (getCooldownRemainder(stack) > 0) - return super.onItemRightClick(world, player, hand); - - if (mop != null && mop.typeOfHit == RayTraceResult.Type.BLOCK) { - BlockPos blockPos = mop.getBlockPos().offset(mop.sideHit); - - if (world.isAirBlock(blockPos)) { - world.setBlockState(blockPos, RegistrarBloodMagicBlocks.BLOOD_LIGHT.getDefaultState()); - if (!world.isRemote) - NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()); - resetCooldown(stack); - player.swingArm(hand); - return super.onItemRightClick(world, player, hand); - } - } else { - if (!world.isRemote) { - world.spawnEntity(new EntityBloodLight(world, player)); - NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()); - } - resetCooldown(stack); - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - return oldStack.getItem() != newStack.getItem(); - } - - public int getCooldownRemainder(ItemStack stack) { - return NBTHelper.checkNBT(stack).getTagCompound().getInteger(Constants.NBT.TICKS_REMAINING); - } - - public void reduceCooldown(ItemStack stack) { - NBTHelper.checkNBT(stack).getTagCompound().setInteger(Constants.NBT.TICKS_REMAINING, getCooldownRemainder(stack) - 1); - } - - public void resetCooldown(ItemStack stack) { - NBTHelper.checkNBT(stack).getTagCompound().setInteger(Constants.NBT.TICKS_REMAINING, 10); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java deleted file mode 100644 index 37a6eccb..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class ItemSigilBounce extends ItemSigilToggleableBase { - public ItemSigilBounce() { - super("bounce", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.BOUNCE, 2, 0, true, false)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java deleted file mode 100644 index 44753b5b..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class ItemSigilClaw extends ItemSigilToggleableBase { - public ItemSigilClaw() { - super("claw", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.CLING, 2, 0, true, false)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java deleted file mode 100644 index bc77fa24..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java +++ /dev/null @@ -1,98 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.altar.IBloodAltar; -import WayofTime.bloodmagic.api.iface.IAltarReader; -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.tile.TileIncenseAltar; -import WayofTime.bloodmagic.tile.TileInversionPillar; -import WayofTime.bloodmagic.util.ChatUtil; -import WayofTime.bloodmagic.util.helper.NumeralHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class ItemSigilDivination extends ItemSigilBase implements IAltarReader { - public ItemSigilDivination() { - super("divination"); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { -// if (world instanceof WorldServer) -// { -// System.out.println("Testing..."); -//// BuildTestStructure s = new BuildTestStructure(); -//// s.placeStructureAtPosition(new Random(), Rotation.CLOCKWISE_180, (WorldServer) world, player.getPosition(), 0); -// DungeonTester.testDungeonElementWithOutput((WorldServer) world, player.getPosition()); -// } - -// if (!world.isRemote) -// { -// EntityCorruptedSheep fred = new EntityCorruptedSheep(world, EnumDemonWillType.DESTRUCTIVE); -// fred.setPosition(player.posX, player.posY, player.posZ); -// world.spawnEntityInWorld(fred); -// } - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (!world.isRemote) { - super.onItemRightClick(world, player, hand); - - RayTraceResult position = rayTrace(world, player, false); - - if (position == null) { - int currentEssence = NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).getCurrentEssence(); - List toSend = new ArrayList(); - if (!getOwnerName(stack).equals(PlayerHelper.getUsernameFromPlayer(player))) - toSend.add(new TextComponentTranslation(tooltipBase + "otherNetwork", getOwnerName(stack))); - toSend.add(new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence)); - ChatUtil.sendNoSpam(player, toSend.toArray(new ITextComponent[toSend.size()])); - } else { - if (position.typeOfHit == RayTraceResult.Type.BLOCK) { - TileEntity tile = world.getTileEntity(position.getBlockPos()); - - if (tile != null && tile instanceof IBloodAltar) { - IBloodAltar altar = (IBloodAltar) tile; - int tier = altar.getTier().ordinal() + 1; - int currentEssence = altar.getCurrentBlood(); - int capacity = altar.getCapacity(); - altar.checkTier(); - ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentAltarTier", NumeralHelper.toRoman(tier)), new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence), new TextComponentTranslation(tooltipBase + "currentAltarCapacity", capacity)); - } else if (tile != null && tile instanceof TileIncenseAltar) { - TileIncenseAltar altar = (TileIncenseAltar) tile; - altar.recheckConstruction(); - double tranquility = altar.tranquility; - ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentTranquility", (int) ((100D * (int) (100 * tranquility)) / 100d)), new TextComponentTranslation(tooltipBase + "currentBonus", (int) (100 * altar.incenseAddition))); - } else if (tile != null && tile instanceof TileInversionPillar) { - TileInversionPillar pillar = (TileInversionPillar) tile; - double inversion = pillar.getCurrentInversion(); - ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentInversion", ((int) (10 * inversion)) / 10d)); - } else - - { - int currentEssence = NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).getCurrentEssence(); - ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence)); - } - } - } - } - - return super.onItemRightClick(world, player, hand); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java deleted file mode 100644 index 855c29ab..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java +++ /dev/null @@ -1,30 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.Entity; -import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -import java.util.List; - -public class ItemSigilEnderSeverance extends ItemSigilToggleableBase { - public ItemSigilEnderSeverance() { - super("ender_severance", 200); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - List entityList = world.getEntitiesWithinAABB(Entity.class, new net.minecraft.util.math.AxisAlignedBB(player.posX - 4.5, player.posY - 4.5, player.posZ - 4.5, player.posX + 4.5, player.posY + 4.5, player.posZ + 4.5)); - for (Entity entity : entityList) { - if (entity instanceof EntityEnderman) - ((EntityEnderman) entity).addPotionEffect(new PotionEffect(RegistrarBloodMagic.PLANAR_BINDING, 40, 0)); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java deleted file mode 100644 index 8c6b1a27..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.BloodMagicAPI; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; - -public class ItemSigilFastMiner extends ItemSigilToggleableBase { - public ItemSigilFastMiner() { - super("fast_miner", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - player.addPotionEffect(new PotionEffect(MobEffects.HASTE, 2, 0, true, false)); - } - - @Override - public boolean performArrayEffect(World world, BlockPos pos) { - double radius = 10; - int ticks = 600; - int potionPotency = 2; - - AxisAlignedBB bb = new AxisAlignedBB(pos).grow(radius); - List playerList = world.getEntitiesWithinAABB(EntityPlayer.class, bb); - for (EntityPlayer player : playerList) { - if (!player.isPotionActive(MobEffects.HASTE) || (player.isPotionActive(MobEffects.HASTE) && player.getActivePotionEffect(MobEffects.HASTE).getAmplifier() < potionPotency)) { - player.addPotionEffect(new PotionEffect(MobEffects.HASTE, ticks, potionPotency)); - if (!player.capabilities.isCreativeMode) { - player.hurtResistantTime = 0; - player.attackEntityFrom(BloodMagicAPI.damageSource, 1.0F); - } - } - } - - return false; - } - - @Override - public boolean hasArrayEffect() { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java deleted file mode 100644 index dfaab6cd..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import net.minecraft.enchantment.EnchantmentFrostWalker; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class ItemSigilFrost extends ItemSigilToggleableBase { - public ItemSigilFrost() { - super("frost", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - EnchantmentFrostWalker.freezeNearby(player, world, player.getPosition(), 1); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java deleted file mode 100644 index 842b69ad..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java +++ /dev/null @@ -1,94 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.api_impl.BloodMagicAPI; -import net.minecraft.block.IGrowable; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.player.BonemealEvent; -import net.minecraftforge.fml.common.eventhandler.Event.Result; - -public class ItemSigilGreenGrove extends ItemSigilToggleableBase { - public ItemSigilGreenGrove() { - super("green_grove", 150); - } - - @Override - public boolean onSigilUse(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) { - if (PlayerHelper.isFakePlayer(player)) - return false; - - if (applyBonemeal(world, blockPos, player, stack)) { - if (!world.isRemote) { - world.playEvent(2005, blockPos, 0); - } - return true; - } - - return false; - } - - @Override - public void onSigilUpdate(ItemStack stack, World worldIn, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - int range = 3; - int verticalRange = 2; - int posX = (int) Math.round(player.posX - 0.5f); - int posY = (int) player.posY; - int posZ = (int) Math.round(player.posZ - 0.5f); - - for (int ix = posX - range; ix <= posX + range; ix++) { - for (int iz = posZ - range; iz <= posZ + range; iz++) { - for (int iy = posY - verticalRange; iy <= posY + verticalRange; iy++) { - BlockPos blockPos = new BlockPos(ix, iy, iz); - IBlockState state = worldIn.getBlockState(blockPos); - - if (!BloodMagicAPI.INSTANCE.getBlacklist().getGreenGrove().contains(state)) { - if (state.getBlock() instanceof IGrowable) { - if (worldIn.rand.nextInt(50) == 0) { - IBlockState preBlockState = worldIn.getBlockState(blockPos); - state.getBlock().updateTick(worldIn, blockPos, state, worldIn.rand); - - IBlockState newState = worldIn.getBlockState(blockPos); - if (!newState.equals(preBlockState) && !worldIn.isRemote) - worldIn.playEvent(2005, blockPos, 0); - } - } - } - } - } - } - } - - private boolean applyBonemeal(World worldIn, BlockPos target, EntityPlayer player, ItemStack sigilStack) { - IBlockState iblockstate = worldIn.getBlockState(target); - - BonemealEvent event = new BonemealEvent(player, worldIn, target, iblockstate, EnumHand.MAIN_HAND, sigilStack); - if (MinecraftForge.EVENT_BUS.post(event)) - return false; - else if (event.getResult() == Result.ALLOW) - return true; - - if (iblockstate.getBlock() instanceof IGrowable) { - IGrowable igrowable = (IGrowable) iblockstate.getBlock(); - - if (igrowable.canGrow(worldIn, target, iblockstate, worldIn.isRemote)) { - if (!worldIn.isRemote) { - if (igrowable.canUseBonemeal(worldIn, worldIn.rand, target, iblockstate)) - igrowable.grow(worldIn, worldIn.rand, target, iblockstate); - } - return true; - } - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java deleted file mode 100644 index 02559204..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class ItemSigilHaste extends ItemSigilToggleableBase { - public ItemSigilHaste() { - super("haste", 250); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.BOOST, 2, 0, true, false)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java index da59eee5..5ac4df3f 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java @@ -12,6 +12,7 @@ import WayofTime.bloodmagic.client.key.KeyBindings; import WayofTime.bloodmagic.util.Utils; import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.base.Strings; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -167,8 +168,8 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAl } @Override - public List> getVariants() { - return Collections.emptyList(); + public void populateVariants(Int2ObjectMap variants) { + } public static int next(int mode) { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java deleted file mode 100644 index 919b2dab..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java +++ /dev/null @@ -1,115 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; - -public class ItemSigilLava extends ItemSigilBase { - public ItemSigilLava() { - super("lava", 1000); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (!world.isRemote && !isUnusable(stack)) { - RayTraceResult rayTrace = this.rayTrace(world, player, false); - - if (rayTrace != null) { - ActionResult ret = ForgeEventFactory.onBucketUse(player, world, stack, rayTrace); - if (ret != null) - return ret; - - if (rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) { - BlockPos blockpos = rayTrace.getBlockPos(); - - if (!world.isBlockModifiable(player, blockpos)) { - return super.onItemRightClick(world, player, hand); - } - - if (!player.canPlayerEdit(blockpos.offset(rayTrace.sideHit), rayTrace.sideHit, stack)) { - return super.onItemRightClick(world, player, hand); - } - - BlockPos blockpos1 = blockpos.offset(rayTrace.sideHit); - - if (!player.canPlayerEdit(blockpos1, rayTrace.sideHit, stack)) { - return super.onItemRightClick(world, player, hand); - } - - if (this.canPlaceLava(world, blockpos1) && NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()) && this.tryPlaceLava(world, blockpos1)) { - return super.onItemRightClick(world, player, hand); - } - } - } - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos blockPos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (world.isRemote || player.isSneaking() || isUnusable(stack)) { - return EnumActionResult.FAIL; - } - if (!world.canMineBlockBody(player, blockPos)) { - return EnumActionResult.FAIL; - } - - TileEntity tile = world.getTileEntity(blockPos); - if (tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { - IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); - FluidStack fluid = new FluidStack(FluidRegistry.LAVA, 1000); - int amount = handler.fill(fluid, false); - - if (amount > 0 && NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed())) { - handler.fill(fluid, true); - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - } - - return EnumActionResult.FAIL; - } - - public boolean canPlaceLava(World world, BlockPos blockPos) { - if (!world.isAirBlock(blockPos) && world.getBlockState(blockPos).getBlock().getMaterial(world.getBlockState(blockPos)).isSolid()) { - return false; - } else if ((world.getBlockState(blockPos).getBlock() == Blocks.LAVA || world.getBlockState(blockPos).getBlock() == Blocks.FLOWING_LAVA) && world.getBlockState(blockPos).getBlock().getMetaFromState(world.getBlockState(blockPos)) == 0) { - return false; - } else { - world.setBlockState(blockPos, Blocks.FLOWING_LAVA.getBlockState().getBaseState(), 3); - return true; - } - } - - public boolean tryPlaceLava(World world, BlockPos pos) { - Material material = world.getBlockState(pos).getBlock().getMaterial(world.getBlockState(pos)); - - return world.isAirBlock(pos) && !material.isSolid(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java deleted file mode 100644 index e4fd869f..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java +++ /dev/null @@ -1,90 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.teleport.TeleportQueue; -import WayofTime.bloodmagic.api.util.helper.NBTHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.ritual.portal.Teleports; -import WayofTime.bloodmagic.tile.TileTeleposer; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class ItemSigilTeleposition extends ItemSigilBase { - public ItemSigilTeleposition() { - super("teleposition"); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - super.addInformation(stack, world, tooltip, flag); - - if (!stack.hasTagCompound()) - return; - NBTTagCompound tag = stack.getTagCompound(); - - if (tag != null && stack.getTagCompound().hasKey(Constants.NBT.DIMENSION_ID) && stack.getTagCompound().hasKey(Constants.NBT.X_COORD) && stack.getTagCompound().hasKey(Constants.NBT.Y_COORD) && stack.getTagCompound().hasKey(Constants.NBT.Z_COORD)) { - tooltip.add(" "); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.telepositionFocus.coords", getValue(tag, Constants.NBT.X_COORD), getValue(tag, Constants.NBT.Y_COORD), getValue(tag, Constants.NBT.Z_COORD))); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.telepositionFocus.dimension", getValue(tag, Constants.NBT.DIMENSION_ID))); - } - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (!world.isRemote && NBTHelper.checkNBT(stack) != null && stack.getTagCompound().hasKey(Constants.NBT.DIMENSION_ID) && stack.getTagCompound().hasKey(Constants.NBT.X_COORD) && stack.getTagCompound().hasKey(Constants.NBT.Y_COORD) && stack.getTagCompound().hasKey(Constants.NBT.Z_COORD)) { - BlockPos blockPos = new BlockPos(getValue(stack.getTagCompound(), Constants.NBT.X_COORD), getValue(stack.getTagCompound(), Constants.NBT.Y_COORD), getValue(stack.getTagCompound(), Constants.NBT.Z_COORD)).up(); - if (world.provider.getDimension() == getValue(stack.getTagCompound(), Constants.NBT.DIMENSION_ID)) { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportSameDim(blockPos, player, getOwnerUUID(stack), true)); - } else { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(blockPos, player, getOwnerUUID(stack), world, getValue(stack.getTagCompound(), Constants.NBT.DIMENSION_ID), true)); - } - } - return super.onItemRightClick(world, player, hand); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return EnumActionResult.FAIL; - - if (!world.isRemote && player.isSneaking() && NBTHelper.checkNBT(stack) != null) { - if (world.getTileEntity(pos) != null && world.getTileEntity(pos) instanceof TileTeleposer) { - stack.getTagCompound().setInteger(Constants.NBT.DIMENSION_ID, world.provider.getDimension()); - stack.getTagCompound().setInteger(Constants.NBT.X_COORD, pos.getX()); - stack.getTagCompound().setInteger(Constants.NBT.Y_COORD, pos.getY()); - stack.getTagCompound().setInteger(Constants.NBT.Z_COORD, pos.getZ()); - - return EnumActionResult.SUCCESS; - } - } - return EnumActionResult.FAIL; - } - - public int getValue(NBTTagCompound tag, String key) { - return tag.getInteger(key); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java index 7590fc19..fed28625 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java @@ -10,14 +10,10 @@ import com.google.common.base.Strings; import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import org.apache.commons.lang3.text.WordUtils; -import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -53,18 +49,9 @@ public class ItemSigilToggleableBase extends ItemSigilToggleable implements IMes return new CustomMeshDefinitionActivatable("sigil_" + name.toLowerCase(Locale.ROOT)); } - @Nullable @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - List ret = new ArrayList(); - ret.add("active=false"); - ret.add("active=true"); - - return ret; + public void populateVariants(List variants) { + variants.add("active=false"); + variants.add("active=true"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java deleted file mode 100644 index ac8429f4..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java +++ /dev/null @@ -1,143 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.BlockStack; -import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.util.helper.NBTHelper; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.api_impl.BloodMagicAPI; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntityMobSpawner; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.ForgeRegistries; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class ItemSigilTransposition extends ItemSigilBase { - public ItemSigilTransposition() { - super("transposition", 1000); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - super.addInformation(stack, world, tooltip, flag); - - if (!stack.hasTagCompound()) - return; - NBTTagCompound tag = stack.getTagCompound(); - - if (tag.hasKey(Constants.NBT.CONTAINED_BLOCK_NAME) && tag.hasKey(Constants.NBT.CONTAINED_BLOCK_META)) { - tooltip.add(" "); - BlockStack blockStack = new BlockStack(Block.getBlockFromName(tag.getString(Constants.NBT.CONTAINED_BLOCK_NAME)), tag.getByte(Constants.NBT.CONTAINED_BLOCK_META)); - tooltip.add(blockStack.getItemStack().getDisplayName()); - } - } - - @Override - public String getItemStackDisplayName(ItemStack stack) { - stack = NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - if (tag.hasKey(Constants.NBT.CONTAINED_BLOCK_NAME) && tag.hasKey(Constants.NBT.CONTAINED_BLOCK_META)) { - BlockStack blockStack = new BlockStack(ForgeRegistries.BLOCKS.getValue(new ResourceLocation(tag.getString(Constants.NBT.CONTAINED_BLOCK_NAME))), tag.getByte(Constants.NBT.CONTAINED_BLOCK_META)); - if (blockStack.getItemStack() != null && blockStack.getItemStack().getItem() != null) //TODO: Figure out why it's a null item. This is a patchwork solution. - { - return super.getItemStackDisplayName(stack) + " (" + blockStack.getItemStack().getDisplayName() + ")"; - } - - } - return super.getItemStackDisplayName(stack); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos blockPos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return EnumActionResult.FAIL; - - stack = NBTHelper.checkNBT(stack); - - IBlockState state = world.getBlockState(blockPos); - if (!world.isRemote) { - if (BloodMagicAPI.INSTANCE.getBlacklist().getTransposition().contains(state)) - return EnumActionResult.FAIL; - - if (player.isSneaking() && (!stack.getTagCompound().hasKey(Constants.NBT.CONTAINED_BLOCK_NAME) || !stack.getTagCompound().hasKey(Constants.NBT.CONTAINED_BLOCK_META))) { - if (state.getPlayerRelativeBlockHardness(player, world, blockPos) >= 0 && state.getBlockHardness(world, blockPos) >= 0) { - int cost = getLpUsed(); - - NBTTagCompound tileNBTTag = new NBTTagCompound(); - String blockName = state.getBlock().getRegistryName().toString(); - byte metadata = (byte) state.getBlock().getMetaFromState(state); - - if (world.getTileEntity(blockPos) != null) { - cost *= 5; - world.getTileEntity(blockPos).writeToNBT(tileNBTTag); - - if (world.getTileEntity(blockPos) instanceof TileEntityMobSpawner) { - cost *= 6; - } - } - - stack.getTagCompound().setString(Constants.NBT.CONTAINED_BLOCK_NAME, blockName); - stack.getTagCompound().setByte(Constants.NBT.CONTAINED_BLOCK_META, metadata); - stack.getTagCompound().setTag(Constants.NBT.CONTAINED_TILE_ENTITY, tileNBTTag); - - NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, cost); - - world.removeTileEntity(blockPos); - world.setBlockToAir(blockPos); - - return EnumActionResult.SUCCESS; - } - } else if (stack.getTagCompound().hasKey(Constants.NBT.CONTAINED_BLOCK_NAME) && stack.getTagCompound().hasKey(Constants.NBT.CONTAINED_BLOCK_META)) { - IBlockState iblockstate = world.getBlockState(blockPos); - Block block = iblockstate.getBlock(); - BlockStack blockToPlace = new BlockStack(Block.getBlockFromName(stack.getTagCompound().getString(Constants.NBT.CONTAINED_BLOCK_NAME)), stack.getTagCompound().getByte(Constants.NBT.CONTAINED_BLOCK_META)); - - if (!block.isReplaceable(world, blockPos)) { - blockPos = blockPos.offset(side); - } - - if (!stack.isEmpty() && player.canPlayerEdit(blockPos, side, stack) && world.mayPlace(blockToPlace.getBlock(), blockPos, false, side, player)) { - if (world.setBlockState(blockPos, blockToPlace.getState(), 3)) { - blockToPlace.getBlock().onBlockPlacedBy(world, blockPos, blockToPlace.getState(), player, blockToPlace.getItemStack()); -// world.playSound((double) ((float) blockPos.getX() + 0.5F), (double) ((float) blockPos.getY() + 0.5F), (double) ((float) blockPos.getZ() + 0.5F), blockToPlace.getBlock().getStepSound().getPlaceSound(), (blockToPlace.getBlock().getStepSound().getVolume() + 1.0F) / 2.0F, blockToPlace.getBlock().getStepSound().getPitch() * 0.8F); - - if (stack.getTagCompound().hasKey(Constants.NBT.CONTAINED_TILE_ENTITY) && blockToPlace.getBlock().hasTileEntity(blockToPlace.getState())) { - NBTTagCompound tag = stack.getTagCompound().getCompoundTag(Constants.NBT.CONTAINED_TILE_ENTITY); - tag.setInteger("x", blockPos.getX()); - tag.setInteger("y", blockPos.getY()); - tag.setInteger("z", blockPos.getZ()); - world.getTileEntity(blockPos).readFromNBT(tag); - } - world.notifyBlockUpdate(blockPos, state, state, 3); - - stack.getTagCompound().removeTag(Constants.NBT.CONTAINED_BLOCK_NAME); - stack.getTagCompound().removeTag(Constants.NBT.CONTAINED_BLOCK_META); - stack.getTagCompound().removeTag(Constants.NBT.CONTAINED_TILE_ENTITY); - - return EnumActionResult.SUCCESS; - } - } - } - } - return EnumActionResult.FAIL; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java deleted file mode 100644 index 8fa03754..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java +++ /dev/null @@ -1,132 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import net.minecraft.block.BlockCauldron; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; - -public class ItemSigilWater extends ItemSigilBase { - public ItemSigilWater() { - super("water", 100); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (!world.isRemote && !isUnusable(stack)) { - RayTraceResult rayTrace = this.rayTrace(world, player, false); - - if (rayTrace != null) { - ActionResult ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(player, world, stack, rayTrace); - if (ret != null) - return ret; - - if (rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) { - BlockPos blockpos = rayTrace.getBlockPos(); - - if (!world.isBlockModifiable(player, blockpos)) - return super.onItemRightClick(world, player, hand); - - if (!player.canPlayerEdit(blockpos.offset(rayTrace.sideHit), rayTrace.sideHit, stack)) - return super.onItemRightClick(world, player, hand); - - BlockPos blockpos1 = blockpos.offset(rayTrace.sideHit); - - if (!player.canPlayerEdit(blockpos1, rayTrace.sideHit, stack)) - return super.onItemRightClick(world, player, hand); - - if (this.canPlaceWater(world, blockpos1) && NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()) && this.tryPlaceWater(world, blockpos1)) - return super.onItemRightClick(world, player, hand); - } - } - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos blockPos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (world.isRemote || player.isSneaking() || isUnusable(stack)) - return EnumActionResult.FAIL; - - if (!world.canMineBlockBody(player, blockPos)) - return EnumActionResult.FAIL; - - TileEntity tile = world.getTileEntity(blockPos); - if (tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { - IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); - FluidStack fluid = new FluidStack(FluidRegistry.WATER, 1000); - int amount = handler.fill(fluid, false); - - if (amount > 0 && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) { - handler.fill(fluid, true); - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - } - - if (world.getBlockState(blockPos).getBlock() == Blocks.CAULDRON && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) { - world.setBlockState(blockPos, Blocks.CAULDRON.getDefaultState().withProperty(BlockCauldron.LEVEL, 3)); - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - } - - public boolean canPlaceWater(World world, BlockPos blockPos) { - if (!world.isAirBlock(blockPos) && world.getBlockState(blockPos).getBlock().getMaterial(world.getBlockState(blockPos)).isSolid()) - return false; - else if ((world.getBlockState(blockPos).getBlock() == Blocks.WATER || world.getBlockState(blockPos).getBlock() == Blocks.FLOWING_WATER) && world.getBlockState(blockPos).getBlock().getMetaFromState(world.getBlockState(blockPos)) == 0) - return false; - else - return true; - } - - public boolean tryPlaceWater(World worldIn, BlockPos pos) { - - Material material = worldIn.getBlockState(pos).getBlock().getMaterial(worldIn.getBlockState(pos)); - boolean notSolid = !material.isSolid(); - - if (!worldIn.isAirBlock(pos) && !notSolid) { - return false; - } else { - if (worldIn.provider.doesWaterVaporize()) { - int i = pos.getX(); - int j = pos.getY(); - int k = pos.getZ(); - worldIn.playSound(null, i, j, k, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F); - - for (int l = 0; l < 8; ++l) - worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, (double) i + Math.random(), (double) j + Math.random(), (double) k + Math.random(), 0.0D, 0.0D, 0.0D, 0); - } else { - if (!worldIn.isRemote && notSolid && !material.isLiquid()) - worldIn.destroyBlock(pos, true); - - worldIn.setBlockState(pos, Blocks.FLOWING_WATER.getDefaultState(), 3); - } - - return true; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ISigil.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ISigil.java new file mode 100644 index 00000000..ddee7954 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ISigil.java @@ -0,0 +1,51 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.iface.IBindable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +public interface ISigil extends IBindable { + + @Nonnull + default EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + return EnumActionResult.PASS; + } + + default EnumActionResult onInteract(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumFacing side, @Nonnull EnumHand hand) { + return EnumActionResult.PASS; + } + + @Nonnegative + int getCost(); + + interface Toggle extends ISigil { + + default void onToggle(boolean active, @Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + + } + + default void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnegative int itemSlot, boolean isHeld) { + + } + } + + interface Holding extends ISigil { + + int getSize(ItemStack stack); + + int getEquippedSigil(ItemStack stack); + + NonNullList getHeldSigils(ItemStack stack); + + void setHeldSigils(ItemStack stack, NonNullList inventory); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigil.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigil.java new file mode 100644 index 00000000..df087bf3 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigil.java @@ -0,0 +1,142 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.iface.IBindable; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import WayofTime.bloodmagic.client.IMeshProvider; +import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + +public class ItemSigil extends Item implements IBindable, IMeshProvider { + + private final ISigil sigil; + + public ItemSigil(ISigil sigil, String name) { + this.sigil = sigil; + + setCreativeTab(BloodMagic.TAB_BM); + setUnlocalizedName(BloodMagic.MODID + ".sigil." + name); + setMaxStackSize(1); + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { + if (PlayerHelper.isFakePlayer(player)) + return ActionResult.newResult(EnumActionResult.FAIL, player.getHeldItem(hand)); + + ItemStack sigilStack = getSigilStack(player, hand); + if (getOwnerUUID(sigilStack) == null) + return ActionResult.newResult(EnumActionResult.FAIL, player.getHeldItem(hand)); + + if (sigil instanceof ISigil.Toggle && player.isSneaking()) { + boolean newState = toggleState(sigilStack); + ((ISigil.Toggle) sigil).onToggle(newState, sigilStack, player, world, hand); + return ActionResult.newResult(EnumActionResult.SUCCESS, player.getHeldItem(hand)); + } + + return ActionResult.newResult(sigil.onRightClick(sigilStack, player, world, hand), player.getHeldItem(hand)); + } + + @Override + public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + if (PlayerHelper.isFakePlayer(player)) + return EnumActionResult.FAIL; + + return sigil.onInteract(getSigilStack(player, hand), player, world, pos, facing, hand); + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { + if (!(entity instanceof EntityPlayer) || PlayerHelper.isFakePlayer((EntityPlayer) entity)) + return; + + ItemStack sigilStack = stack; + if (sigil instanceof ISigil.Holding) { + ISigil.Holding holding = (ISigil.Holding) sigil; + int current = holding.getEquippedSigil(stack); + sigilStack = holding.getHeldSigils(stack).get(current); + } + + if (sigil instanceof ISigil.Toggle && isActive(sigilStack)) { + ((ISigil.Toggle) sigil).onUpdate(sigilStack, (EntityPlayer) entity, world, itemSlot, isSelected); + if (entity.ticksExisted % 100 == 0) + NetworkHelper.getSoulNetwork(getOwnerUUID(sigilStack)).syphonAndDamage((EntityPlayer) entity, sigil.getCost()); + } + } + + @Override + public String getOwnerName(ItemStack stack) { + return sigil.getOwnerName(stack); + } + + @Override + public String getOwnerUUID(ItemStack stack) { + return sigil.getOwnerUUID(stack); + } + + public boolean toggleState(ItemStack stack) { + if (!stack.hasTagCompound()) + return false; + + boolean newState = !isActive(stack); + stack.getTagCompound().setBoolean("active", newState); + return newState; + } + + public boolean isActive(ItemStack stack) { + return stack.hasTagCompound() && stack.getTagCompound().getBoolean("active"); + } + + // TODO - Need to get ISigil from holding stack + public ItemStack getSigilStack(EntityPlayer player, EnumHand hand) { + ItemStack held = player.getHeldItem(hand); + + if (sigil instanceof ISigil.Holding) { + ISigil.Holding holding = (ISigil.Holding) sigil; + int current = holding.getEquippedSigil(held); + return holding.getHeldSigils(held).get(current); + } + + return held; + } + + @Override + public boolean onBind(EntityPlayer player, ItemStack stack) { + return sigil.onBind(player, stack); + } + + @SideOnly(Side.CLIENT) + @Override + public ItemMeshDefinition getMeshDefinition() { + return s -> { + if (!(sigil instanceof ISigil.Toggle)) + return new ModelResourceLocation(s.getItem().getRegistryName(), "inventory"); + + return new ModelResourceLocation(s.getItem().getRegistryName(), "active=" + isActive(s)); + }; + } + + @Override + public void populateVariants(List variants) { + if (sigil instanceof ISigil.Toggle) { + variants.add("active=true"); + variants.add("active=false"); + } else + variants.add("inventory"); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilDivination.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilDivination.java new file mode 100644 index 00000000..517a96f8 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilDivination.java @@ -0,0 +1,81 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.altar.IBloodAltar; +import WayofTime.bloodmagic.api.iface.IAltarReader; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import WayofTime.bloodmagic.tile.TileIncenseAltar; +import WayofTime.bloodmagic.tile.TileInversionPillar; +import WayofTime.bloodmagic.util.ChatUtil; +import WayofTime.bloodmagic.util.Utils; +import WayofTime.bloodmagic.util.helper.NumeralHelper; +import com.google.common.collect.Lists; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; +import java.util.List; + +public class ItemSigilDivination extends ItemSigil implements IAltarReader { + + public ItemSigilDivination() { + super(new SigilDivination(), "divination"); + } + + public static class SigilDivination implements ISigil { + + @Nonnull + @Override + public EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + RayTraceResult rayTrace = Utils.rayTrace(player, false); + if (rayTrace == null || rayTrace.typeOfHit == RayTraceResult.Type.MISS) { + printNetworkInformation(stack, player); + } else if (rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) { + TileEntity tile = world.getTileEntity(rayTrace.getBlockPos()); + + String tooltipBase = "tooltip.bloodmagic.sigil.divination."; + if (tile != null && tile instanceof IBloodAltar) { + IBloodAltar altar = (IBloodAltar) tile; + int tier = altar.getTier().ordinal() + 1; + int currentEssence = altar.getCurrentBlood(); + int capacity = altar.getCapacity(); + altar.checkTier(); + ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentAltarTier", NumeralHelper.toRoman(tier)), new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence), new TextComponentTranslation(tooltipBase + "currentAltarCapacity", capacity)); + } else if (tile != null && tile instanceof TileIncenseAltar) { + TileIncenseAltar altar = (TileIncenseAltar) tile; + altar.recheckConstruction(); + double tranquility = altar.tranquility; + ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentTranquility", (int) ((100D * (int) (100 * tranquility)) / 100d)), new TextComponentTranslation(tooltipBase + "currentBonus", (int) (100 * altar.incenseAddition))); + } else if (tile != null && tile instanceof TileInversionPillar) { + TileInversionPillar pillar = (TileInversionPillar) tile; + double inversion = pillar.getCurrentInversion(); + ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentInversion", ((int) (10 * inversion)) / 10d)); + } else { + printNetworkInformation(stack, player); + } + } + return EnumActionResult.PASS; + } + + @Override + public int getCost() { + return 0; + } + + private void printNetworkInformation(ItemStack sigilStack, EntityPlayer player) { + int currentEssence = NetworkHelper.getSoulNetwork(getOwnerUUID(sigilStack)).getCurrentEssence(); + List toSend = Lists.newArrayList(); + if (getOwnerName(sigilStack) != null && !getOwnerName(sigilStack).equals(PlayerHelper.getUsernameFromPlayer(player))) + toSend.add(new TextComponentTranslation("tooltip.bloodmagic.sigil.divination.otherNetwork", getOwnerName(sigilStack))); + toSend.add(new TextComponentTranslation("tooltip.bloodmagic.sigil.divination.currentEssence", currentEssence)); + ChatUtil.sendNoSpam(player, toSend.toArray(new ITextComponent[0])); + } + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilTeleposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilTeleposition.java new file mode 100644 index 00000000..c3228ab2 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilTeleposition.java @@ -0,0 +1,90 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.teleport.ITeleport; +import WayofTime.bloodmagic.api.teleport.TeleportQueue; +import WayofTime.bloodmagic.ritual.portal.Teleports; +import WayofTime.bloodmagic.tile.TileTeleposer; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; + +public class ItemSigilTeleposition extends ItemSigil { + + public ItemSigilTeleposition() { + super(new SigilTeleposition(), "teleposition"); + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { + super.addInformation(stack, worldIn, tooltip, flagIn); + + if (!stack.hasTagCompound() || !stack.getTagCompound().hasKey("dim")) + return; + + NBTTagCompound tag = stack.getTagCompound(); + BlockPos pos = BlockPos.fromLong(tag.getLong("pos")); + + tooltip.add(""); + tooltip.add(I18n.format("tooltip.bloodmagic.telepositionFocus.coords", pos.getX(), pos.getY(), pos.getZ())); + tooltip.add(I18n.format("tooltip.bloodmagic.telepositionFocus.dimension", tag.getInteger("dim"))); + } + + public static class SigilTeleposition implements ISigil { + + @Override + public int getCost() { + return 0; + } + + @Nonnull + @Override + public EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + if (world.isRemote || !stack.hasTagCompound() || !stack.getTagCompound().hasKey("dim")) + return EnumActionResult.PASS; + + NBTTagCompound tag = stack.getTagCompound(); + BlockPos pos = BlockPos.fromLong(tag.getLong("pos")); + int dimension = tag.getInteger("dim"); + + ITeleport teleport; + if (world.provider.getDimension() == dimension) + teleport = new Teleports.TeleportSameDim(pos, player, getOwnerUUID(stack), true); + else + teleport = new Teleports.TeleportToDim(pos, player, getOwnerUUID(stack), world, dimension, true); + + TeleportQueue.getInstance().addITeleport(teleport); + + return EnumActionResult.SUCCESS; + } + + @Override + public EnumActionResult onInteract(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumFacing side, @Nonnull EnumHand hand) { + if (!stack.hasTagCompound()) + stack.setTagCompound(new NBTTagCompound()); + + if (!(world.getTileEntity(pos) instanceof TileTeleposer)) + return EnumActionResult.FAIL; + + NBTTagCompound tag = stack.getTagCompound(); + tag.setLong("pos", pos.toLong()); + tag.setInteger("dim", world.provider.getDimension()); + + + return EnumActionResult.SUCCESS; + } + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilTransposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilTransposition.java new file mode 100644 index 00000000..58120ac2 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilTransposition.java @@ -0,0 +1,145 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.api_impl.BloodMagicAPI; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; + +public class ItemSigilTransposition extends ItemSigil { + + public ItemSigilTransposition() { + super(new SigilTransposition(), "transposition"); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { + super.addInformation(stack, worldIn, tooltip, flagIn); + + if (!stack.hasTagCompound()) + return; + + NBTTagCompound tag = stack.getTagCompound(); + if (!tag.hasKey("stored")) + return; + + IBlockState state = NBTUtil.readBlockState(tag.getCompoundTag("stored")); + ItemStack blockStack = new ItemStack(state.getBlock().getItemDropped(state, null, 0), 1, state.getBlock().damageDropped(state)); + tooltip.add(blockStack.isEmpty() ? I18n.format(state.getBlock().getUnlocalizedName()) : blockStack.getDisplayName()); + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + if (!stack.hasTagCompound()) + return super.getItemStackDisplayName(stack); + + NBTTagCompound tag = stack.getTagCompound(); + if (!tag.hasKey("stored")) + return super.getItemStackDisplayName(stack); + + IBlockState state = NBTUtil.readBlockState(tag.getCompoundTag("stored")); + ItemStack blockStack = new ItemStack(state.getBlock().getItemDropped(state, null, 0), 1, state.getBlock().damageDropped(state)); + String blockName = blockStack.isEmpty() ? net.minecraft.util.text.translation.I18n.translateToLocal(state.getBlock().getUnlocalizedName()) : blockStack.getDisplayName(); + + return super.getItemStackDisplayName(stack) + " (" + blockName + ")"; + } + + @Nullable + @Override + public NBTTagCompound getNBTShareTag(ItemStack stack) { + if (!stack.hasTagCompound() || !stack.getTagCompound().hasKey("stored")) + return null; + + NBTTagCompound justTheState = stack.getTagCompound().copy(); + justTheState.getCompoundTag("stored").removeTag("tile"); + return justTheState; + } + + public static class SigilTransposition implements ISigil { + + @Override + public int getCost() { + return 1000; + } + + @Override + public EnumActionResult onInteract(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumFacing side, @Nonnull EnumHand hand) { + IBlockState state = world.getBlockState(pos); + if (world.isRemote || BloodMagicAPI.INSTANCE.getBlacklist().getTransposition().contains(state)) + return EnumActionResult.FAIL; + + NBTTagCompound tag = stack.getTagCompound(); + if (player.isSneaking() && (!stack.hasTagCompound() || !tag.hasKey("stored"))) { + if (state.getPlayerRelativeBlockHardness(player, world, pos) >= 0 && state.getBlockHardness(world, pos) >= 0) { + int cost = getCost(); + + NBTTagCompound stored = new NBTTagCompound(); + NBTUtil.writeBlockState(stored, state); + + TileEntity tile = world.getTileEntity(pos); + if (tile != null) { + NBTTagCompound tileTag = new NBTTagCompound(); + tile.writeToNBT(tileTag); + stored.setTag("tile", tileTag); + cost *= 5; + + if (tile instanceof TileEntityMobSpawner) + cost *= 6; + } + + tag.setTag("stored", stored); + + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, cost); + world.setBlockToAir(pos); + world.removeTileEntity(pos); + } + } else if (stack.hasTagCompound() && stack.getTagCompound().hasKey("stored")) { + IBlockState placeAtState = world.getBlockState(pos); + + // If the block we clicked isn't replaceable, try to offset to the side we clicked on + if (!placeAtState.getBlock().isReplaceable(world, pos)) + placeAtState = world.getBlockState(pos = pos.offset(side)); + + // If we still can't place here, just cancel out. + if (!placeAtState.getBlock().isReplaceable(world, pos)) + return EnumActionResult.FAIL; + + NBTTagCompound stored = stack.getTagCompound().getCompoundTag("stored"); + IBlockState toPlace = NBTUtil.readBlockState(stored); + if (player.canPlayerEdit(pos, side, stack) && world.mayPlace(toPlace.getBlock(), pos, false, side, player)) { + ItemStack placeStack = new ItemStack(state.getBlock().getItemDropped(state, null, 0), 1, state.getBlock().damageDropped(state)); + toPlace.getBlock().onBlockPlacedBy(world, pos, toPlace, player, placeStack); + + if (stored.hasKey("tile")) { + NBTTagCompound tileTag = stored.getCompoundTag("tile"); + tileTag.setInteger("x", pos.getX()); + tileTag.setInteger("y", pos.getY()); + tileTag.setInteger("z", pos.getZ()); + world.getTileEntity(pos).readFromNBT(tileTag); + } + + world.notifyBlockUpdate(pos, state, state, 3); + + stack.getTagCompound().removeTag("stored"); + } + } + + return EnumActionResult.SUCCESS; + } + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilAir.java new file mode 100644 index 00000000..66557822 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilAir.java @@ -0,0 +1,52 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.core.RegistrarBloodMagic; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilAir implements ISigil { + + @Nonnull + @Override + public EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + if (world.isRemote) { + Vec3d vec = player.getLookVec(); + double wantedVelocity = 1.7D; + + if (player.isPotionActive(RegistrarBloodMagic.BOOST)) { + int amplifier = player.getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); + wantedVelocity += (1.0D + amplifier) * 0.35D; + } + + player.motionX = vec.x * wantedVelocity; + player.motionY = vec.y * wantedVelocity; + player.motionZ = vec.z * wantedVelocity; + world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + } + + if (!world.isRemote) { + boolean unusable = false; + if (!player.capabilities.isCreativeMode) + unusable = !NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getCost()); + + if (!unusable) + player.fallDistance = 0; + } + + return EnumActionResult.SUCCESS; + } + + @Override + public int getCost() { + return 50; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBloodLight.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBloodLight.java new file mode 100644 index 00000000..4f871fd8 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBloodLight.java @@ -0,0 +1,55 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; +import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; +import WayofTime.bloodmagic.util.Utils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.CooldownTracker; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilBloodLight implements ISigil { + + @Nonnull + @Override + public EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + Item item = stack.getItem(); + RayTraceResult mop = Utils.rayTrace(player, false); + + CooldownTracker cooldownTracker = player.getCooldownTracker(); + if (mop != null && mop.typeOfHit == RayTraceResult.Type.BLOCK) { + BlockPos blockPos = mop.getBlockPos().offset(mop.sideHit); + + if (world.getBlockState(blockPos).getBlock().isReplaceable(world, blockPos)) { + world.setBlockState(blockPos, RegistrarBloodMagicBlocks.BLOOD_LIGHT.getDefaultState()); + if (!world.isRemote) + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getCost()); + player.swingArm(hand); + cooldownTracker.setCooldown(item, 10); + return EnumActionResult.SUCCESS; + } + } else { + if (!world.isRemote) { + world.spawnEntity(new EntityBloodLight(world, player)); + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getCost()); + } + cooldownTracker.setCooldown(item, 10); + return EnumActionResult.SUCCESS; + } + + return EnumActionResult.PASS; + } + + @Override + public int getCost() { + return 10; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBounce.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBounce.java new file mode 100644 index 00000000..1d145cc6 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBounce.java @@ -0,0 +1,22 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.core.RegistrarBloodMagic; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilBounce implements ISigil.Toggle { + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.BOUNCE, 2, 0, true, false)); + } + + @Override + public int getCost() { + return 100; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilClaw.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilClaw.java new file mode 100644 index 00000000..eb6aaf12 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilClaw.java @@ -0,0 +1,22 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.core.RegistrarBloodMagic; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilClaw implements ISigil.Toggle { + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.CLING, 2, 0, true, false)); + } + + @Override + public int getCost() { + return 100; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilElementalAffinity.java similarity index 52% rename from src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java rename to src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilElementalAffinity.java index e28a310f..fac14b7e 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilElementalAffinity.java @@ -1,25 +1,25 @@ -package WayofTime.bloodmagic.item.sigil; +package WayofTime.bloodmagic.item.sigil.sigil; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; -public class ItemSigilElementalAffinity extends ItemSigilToggleableBase { - public ItemSigilElementalAffinity() { - super("elemental_affinity", 200); - } +import javax.annotation.Nonnull; + +public class SigilElementalAffinity implements ISigil.Toggle { @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { player.fallDistance = 0; player.extinguish(); player.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 2, 1, true, false)); player.addPotionEffect(new PotionEffect(MobEffects.WATER_BREATHING, 2, 0, true, false)); } + + @Override + public int getCost() { + return 200; + } } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilEnderSeverance.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilEnderSeverance.java new file mode 100644 index 00000000..cceff8d8 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilEnderSeverance.java @@ -0,0 +1,26 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.core.RegistrarBloodMagic; +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; +import java.util.List; + +public class SigilEnderSeverance implements ISigil.Toggle { + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + List entityList = world.getEntitiesWithinAABB(Entity.class, new net.minecraft.util.math.AxisAlignedBB(player.posX - 4.5, player.posY - 4.5, player.posZ - 4.5, player.posX + 4.5, player.posY + 4.5, player.posZ + 4.5)); + entityList.stream().filter(e -> e instanceof EntityEnderman).forEach(e -> ((EntityEnderman) e).addPotionEffect(new PotionEffect(RegistrarBloodMagic.PLANAR_BINDING, 40, 0))); + } + + @Override + public int getCost() { + return 200; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFastMiner.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFastMiner.java new file mode 100644 index 00000000..e4fdc50c --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFastMiner.java @@ -0,0 +1,48 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilFastMiner implements ISigil.Toggle { + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + player.addPotionEffect(new PotionEffect(MobEffects.HASTE, 2, 0, true, false)); + } + + @Override + public int getCost() { + return 100; + } + +// @Override +// public boolean performArrayEffect(World world, BlockPos pos) { +// double radius = 10; +// int ticks = 600; +// int potionPotency = 2; +// +// AxisAlignedBB bb = new AxisAlignedBB(pos).grow(radius); +// List playerList = world.getEntitiesWithinAABB(EntityPlayer.class, bb); +// for (EntityPlayer player : playerList) { +// if (!player.isPotionActive(MobEffects.HASTE) || (player.isPotionActive(MobEffects.HASTE) && player.getActivePotionEffect(MobEffects.HASTE).getAmplifier() < potionPotency)) { +// player.addPotionEffect(new PotionEffect(MobEffects.HASTE, ticks, potionPotency)); +// if (!player.capabilities.isCreativeMode) { +// player.hurtResistantTime = 0; +// player.attackEntityFrom(BloodMagicAPI.damageSource, 1.0F); +// } +// } +// } +// +// return false; +// } +// +// @Override +// public boolean hasArrayEffect() { +// return true; +// } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFluid.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFluid.java new file mode 100644 index 00000000..82bc1aaf --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFluid.java @@ -0,0 +1,79 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper; +import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper; + +import javax.annotation.Nonnull; + +public class SigilFluid implements ISigil { + + private final Fluid fluid; + + public SigilFluid(Fluid fluid) { + this.fluid = fluid; + } + + @Override + public int getCost() { + return 1000; + } + + @Override + public EnumActionResult onInteract(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumFacing side, @Nonnull EnumHand hand) { + if (world.isRemote) + return EnumActionResult.FAIL; + + TileEntity tile = world.getTileEntity(pos); + if (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { + IFluidHandler fluidHandler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); + FluidStack fluid = new FluidStack(this.fluid, 1000); + int amount = fluidHandler.fill(fluid, false); + if (amount > 0 && NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getCost())) { + fluidHandler.fill(fluid, true); + return EnumActionResult.SUCCESS; + } + } + + if (fluid.getBlock() == null) + return EnumActionResult.FAIL; + + IBlockState placeAtState = world.getBlockState(pos); + if (!placeAtState.getBlock().isReplaceable(world, pos)) + placeAtState = world.getBlockState(pos = pos.offset(side)); + + if (!placeAtState.getBlock().isReplaceable(world, pos)) + return EnumActionResult.FAIL; + + Block fluidBlock = fluid.getBlock(); + IFluidHandler fluidHandler = null; + if (fluidBlock instanceof IFluidBlock) + fluidHandler = new FluidBlockWrapper((IFluidBlock) fluidBlock, world, pos); + else if (fluidBlock instanceof BlockLiquid) + fluidHandler = new BlockLiquidWrapper((BlockLiquid) fluidBlock, world, pos); + + if (fluidHandler != null) { + fluidHandler.fill(new FluidStack(fluid, Fluid.BUCKET_VOLUME), true); + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getCost()); + return EnumActionResult.SUCCESS; + } + + return EnumActionResult.FAIL; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFrost.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFrost.java new file mode 100644 index 00000000..607a447c --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFrost.java @@ -0,0 +1,21 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import net.minecraft.enchantment.EnchantmentFrostWalker; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilFrost implements ISigil.Toggle { + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + EnchantmentFrostWalker.freezeNearby(player, world, player.getPosition(), 1); + } + + @Override + public int getCost() { + return 100; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilGreenGrove.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilGreenGrove.java new file mode 100644 index 00000000..19fb9f2f --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilGreenGrove.java @@ -0,0 +1,91 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api_impl.BloodMagicAPI; +import net.minecraft.block.IGrowable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.BonemealEvent; +import net.minecraftforge.fml.common.eventhandler.Event; + +import javax.annotation.Nonnull; + +public class SigilGreenGrove implements ISigil.Toggle { + + private static final int RANGE_HORIZONTAL = 3; + private static final int RANGE_VERTICAL = 2; + + @Override + public int getCost() { + return 150; + } + + @Override + public EnumActionResult onInteract(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumFacing side, @Nonnull EnumHand hand) { + if (applyBonemeal(world, pos, player, stack, hand)) { + if (!world.isRemote) + world.playEvent(2005, pos, 0); + + return EnumActionResult.SUCCESS; + } + + return EnumActionResult.FAIL; + } + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + int posX = (int) Math.round(player.posX - 0.5f); + int posY = (int) player.posY; + int posZ = (int) Math.round(player.posZ - 0.5f); + + for (int ix = posX - RANGE_HORIZONTAL; ix <= posX + RANGE_HORIZONTAL; ix++) { + for (int iz = posZ - RANGE_HORIZONTAL; iz <= posZ + RANGE_HORIZONTAL; iz++) { + for (int iy = posY - RANGE_VERTICAL; iy <= posY + RANGE_VERTICAL; iy++) { + BlockPos blockPos = new BlockPos(ix, iy, iz); + IBlockState state = world.getBlockState(blockPos); + + if (!BloodMagicAPI.INSTANCE.getBlacklist().getGreenGrove().contains(state)) { + if (state.getBlock() instanceof IGrowable) { + if (world.rand.nextInt(50) == 0) { + state.getBlock().updateTick(world, blockPos, state, world.rand); + IBlockState newState = world.getBlockState(blockPos); + + if (!newState.equals(state) && !world.isRemote) + world.playEvent(2005, blockPos, 0); + } + } + } + } + } + } + } + + private boolean applyBonemeal(World world, BlockPos target, EntityPlayer player, ItemStack sigilStack, EnumHand hand) { + IBlockState state = world.getBlockState(target); + + BonemealEvent event = new BonemealEvent(player, world, target, state, hand, sigilStack); + if (MinecraftForge.EVENT_BUS.post(event)) + return false; + else if (event.getResult() == Event.Result.ALLOW) + return true; + + if (state.getBlock() instanceof IGrowable) { + IGrowable growable = (IGrowable) state.getBlock(); + + if (growable.canGrow(world, target, state, world.isRemote)) { + if (!world.isRemote && growable.canUseBonemeal(world, world.rand, target, state)) + growable.grow(world, world.rand, target, state); + + return true; + } + } + + return false; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilHaste.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilHaste.java new file mode 100644 index 00000000..4486ebfa --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilHaste.java @@ -0,0 +1,22 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.core.RegistrarBloodMagic; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilHaste implements ISigil.Toggle { + + @Override + public int getCost() { + return 250; + } + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.BOOST, 2, 0, true, false)); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilHolding.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilHolding.java new file mode 100644 index 00000000..c9827081 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilHolding.java @@ -0,0 +1,53 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; + +public class SigilHolding implements ISigil.Holding { + + @Override + public int getCost() { + return 0; + } + + @Override + public int getSize(ItemStack stack) { + return 5; + } + + @Override + public int getEquippedSigil(ItemStack stack) { + if (!stack.hasTagCompound() || !stack.getTagCompound().hasKey("current")) + return -1; + + return stack.getTagCompound().getInteger("current"); + } + + @Override + public NonNullList getHeldSigils(ItemStack stack) { + NonNullList inventory = NonNullList.withSize(getSize(stack), ItemStack.EMPTY); + if (!stack.hasTagCompound() || !stack.getTagCompound().hasKey("inv")) + return inventory; + + NBTTagList invTag = stack.getTagCompound().getTagList("inv", 10); + for (int i = 0; i < invTag.tagCount(); i++) + inventory.set(i, new ItemStack(invTag.getCompoundTagAt(i))); + + return inventory; + } + + @Override + public void setHeldSigils(ItemStack stack, NonNullList inventory) { + NBTTagList invTag = new NBTTagList(); + for (ItemStack invStack : inventory) + if (!invStack.isEmpty()) + invTag.appendTag(invStack.writeToNBT(new NBTTagCompound())); + + if (!stack.hasTagCompound()) + stack.setTagCompound(new NBTTagCompound()); + + stack.getTagCompound().setTag("inv", invTag); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemMonsterSoul.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemMonsterSoul.java index 3be9b4be..ed35d92d 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemMonsterSoul.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemMonsterSoul.java @@ -7,6 +7,7 @@ import WayofTime.bloodmagic.api.soul.IDemonWill; import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -105,13 +106,9 @@ public class ItemMonsterSoul extends Item implements IDemonWill, IVariantProvide } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - for (int i = 0; i < names.length; i++) { - String name = names[i]; - ret.add(new ImmutablePair(i, "type=" + name)); - } - return ret; + public void populateVariants(Int2ObjectMap variants) { + for (int i = 0; i < names.length; i++) + variants.put(i, "type=" + names[i]); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientArmourGem.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientArmourGem.java index e25ae539..3c1e9fc6 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientArmourGem.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientArmourGem.java @@ -5,19 +5,20 @@ import WayofTime.bloodmagic.api.soul.EnumDemonWillType; import WayofTime.bloodmagic.api.soul.PlayerDemonWillHandler; import WayofTime.bloodmagic.client.IMeshProvider; import WayofTime.bloodmagic.item.armour.ItemSentientArmour; -import com.google.common.collect.Lists; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.*; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; import java.util.List; public class ItemSentientArmourGem extends Item implements IMeshProvider { @@ -53,7 +54,7 @@ public class ItemSentientArmourGem extends Item implements IMeshProvider { ItemSentientArmour.convertPlayerArmour(type, will, player); } - return new ActionResult(EnumActionResult.PASS, player.getHeldItem(hand)); + return new ActionResult<>(EnumActionResult.PASS, player.getHeldItem(hand)); } @SideOnly(Side.CLIENT) @@ -62,24 +63,17 @@ public class ItemSentientArmourGem extends Item implements IMeshProvider { return stack -> { boolean flag = false; NonNullList armourInventory = Minecraft.getMinecraft().player.inventory.armorInventory; - for (ItemStack armourStack : armourInventory) { - if (armourStack != null && armourStack.getItem() instanceof ItemSentientArmour) { + for (ItemStack armourStack : armourInventory) + if (!armourStack.isEmpty() && armourStack.getItem() instanceof ItemSentientArmour) flag = true; - } - } return new ModelResourceLocation(stack.getItem().getRegistryName(), "type=" + (flag ? "" : "de") + "activated"); }; } @Override - public List getVariants() { - return Lists.newArrayList("type=activated", "type=deactivated"); - } - - @Nullable - @Override - public ResourceLocation getCustomLocation() { - return null; + public void populateVariants(List variants) { + variants.add("type=activated"); + variants.add("type=deactivated"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java index c2b82f28..24298f2a 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java @@ -36,13 +36,11 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; import java.util.*; public class ItemSentientAxe extends ItemAxe implements IDemonWillWeapon, IMeshProvider, IMultiWillTool, ISentientTool { @@ -300,20 +298,10 @@ public class ItemSentientAxe extends ItemAxe implements IDemonWillWeapon, IMeshP return new CustomMeshDefinitionMultiWill("sentient_axe"); } - @Nullable @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - List ret = new ArrayList(); - for (EnumDemonWillType type : EnumDemonWillType.values()) { - ret.add("type=" + type.getName().toLowerCase()); - } - - return ret; + public void populateVariants(List variants) { + for (EnumDemonWillType type : EnumDemonWillType.values()) + variants.add("type=" + type.getName().toLowerCase()); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java index 97b87625..00c29dec 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java @@ -12,6 +12,7 @@ import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow; import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -253,8 +254,8 @@ public class ItemSentientBow extends ItemBow implements IMultiWillTool, ISentien } @Override - public List> getVariants() { - return Lists.newArrayList(Pair.of(0, "inventory")); + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "inventory"); } public EntityTippedArrow getArrowEntity(World world, ItemStack stack, EntityLivingBase target, EntityLivingBase user, float velocity) { diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java index 05c51b19..07d8690f 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java @@ -36,13 +36,11 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; import java.util.*; public class ItemSentientPickaxe extends ItemPickaxe implements IDemonWillWeapon, IMeshProvider, IMultiWillTool, ISentientTool { @@ -299,20 +297,10 @@ public class ItemSentientPickaxe extends ItemPickaxe implements IDemonWillWeapon return new CustomMeshDefinitionMultiWill("sentient_pickaxe"); } - @Nullable @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - List ret = new ArrayList(); - for (EnumDemonWillType type : EnumDemonWillType.values()) { - ret.add("type=" + type.getName().toLowerCase()); - } - - return ret; + public void populateVariants(List variants) { + for (EnumDemonWillType type : EnumDemonWillType.values()) + variants.add("type=" + type.getName().toLowerCase()); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java index 2edd2b73..e6888e5d 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java @@ -36,13 +36,11 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; import java.util.*; public class ItemSentientShovel extends ItemSpade implements IDemonWillWeapon, IMeshProvider, IMultiWillTool, ISentientTool { @@ -300,20 +298,10 @@ public class ItemSentientShovel extends ItemSpade implements IDemonWillWeapon, I return new CustomMeshDefinitionMultiWill("sentient_shovel"); } - @Nullable @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - List ret = new ArrayList(); - for (EnumDemonWillType type : EnumDemonWillType.values()) { - ret.add("type=" + type.getName().toLowerCase()); - } - - return ret; + public void populateVariants(List variants) { + for (EnumDemonWillType type : EnumDemonWillType.values()) + variants.add("type=" + type.getName().toLowerCase()); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java index 4753c957..a7a0066f 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java @@ -34,13 +34,11 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; import java.util.*; public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IMeshProvider, IMultiWillTool, ISentientTool { @@ -275,20 +273,10 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IM return new CustomMeshDefinitionMultiWill("sentient_shovel"); } - @Nullable @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - List ret = new ArrayList(); - for (EnumDemonWillType type : EnumDemonWillType.values()) { - ret.add("type=" + type.getName().toLowerCase()); - } - - return ret; + public void populateVariants(List variants) { + for (EnumDemonWillType type : EnumDemonWillType.values()) + variants.add("type=" + type.getName().toLowerCase()); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java index a4095e15..6dde869a 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java @@ -18,14 +18,15 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.*; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -55,7 +56,7 @@ public class ItemSoulGem extends Item implements IDemonWillGem, IMeshProvider, I double filled = PlayerDemonWillHandler.addDemonWill(type, player, drain, stack); this.drainWill(type, stack, filled, true); - return new ActionResult(EnumActionResult.PASS, stack); + return new ActionResult<>(EnumActionResult.PASS, stack); } @Override @@ -64,24 +65,15 @@ public class ItemSoulGem extends Item implements IDemonWillGem, IMeshProvider, I return new CustomMeshDefinitionWillGem("soul_gem"); } - @Nullable @Override - public ResourceLocation getCustomLocation() { - return null; - } - - @Override - public List getVariants() { - List ret = new ArrayList(); + public void populateVariants(List variants) { for (EnumDemonWillType type : EnumDemonWillType.values()) { - ret.add("type=petty_" + type.getName().toLowerCase()); - ret.add("type=lesser_" + type.getName().toLowerCase()); - ret.add("type=common_" + type.getName().toLowerCase()); - ret.add("type=greater_" + type.getName().toLowerCase()); - ret.add("type=grand_" + type.getName().toLowerCase()); + variants.add("type=petty_" + type.getName().toLowerCase()); + variants.add("type=lesser_" + type.getName().toLowerCase()); + variants.add("type=common_" + type.getName().toLowerCase()); + variants.add("type=greater_" + type.getName().toLowerCase()); + variants.add("type=grand_" + type.getName().toLowerCase()); } - - return ret; } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java index e6d76d8c..9842603b 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.entity.projectile.EntitySoulSnare; import WayofTime.bloodmagic.util.helper.TextHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; @@ -75,9 +76,7 @@ public class ItemSoulSnare extends Item implements IVariantProvider { } @Override - public List> getVariants() { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "type=soulsnare")); - return ret; + public void populateVariants(Int2ObjectMap variants) { + variants.put(0, "type=soulsnare"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/types/ComponentType.java b/src/main/java/WayofTime/bloodmagic/item/types/ComponentType.java new file mode 100644 index 00000000..c7dc721f --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/types/ComponentType.java @@ -0,0 +1,35 @@ +package WayofTime.bloodmagic.item.types; + +import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; +import net.minecraft.item.ItemStack; + +import javax.annotation.Nonnull; +import java.util.Locale; + +public enum ComponentType implements ISubItem { + + FRAME_PART, + SAND_IRON, + SAND_GOLD, + SAND_COAL, + PLANT_OIL, + SULFUR, + SALTPETER, + NEURO_TOXIN, + ANTISEPTIC, + CATALYST_LENGTH_1, + CATALYST_POWER_1, + ; + + @Nonnull + @Override + public String getInternalName() { + return name().toLowerCase(Locale.ROOT); + } + + @Nonnull + @Override + public ItemStack getStack(int count) { + return new ItemStack(RegistrarBloodMagicItems.COMPONENT, count, ordinal()); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/types/ISubItem.java b/src/main/java/WayofTime/bloodmagic/item/types/ISubItem.java new file mode 100644 index 00000000..27204050 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/types/ISubItem.java @@ -0,0 +1,19 @@ +package WayofTime.bloodmagic.item.types; + +import net.minecraft.item.ItemStack; + +import javax.annotation.Nonnull; + +public interface ISubItem { + + @Nonnull + String getInternalName(); + + @Nonnull + default ItemStack getStack() { + return getStack(1); + } + + @Nonnull + ItemStack getStack(int count); +} diff --git a/src/main/java/WayofTime/bloodmagic/item/types/ReagentType.java b/src/main/java/WayofTime/bloodmagic/item/types/ReagentType.java new file mode 100644 index 00000000..9f2504d5 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/types/ReagentType.java @@ -0,0 +1,46 @@ +package WayofTime.bloodmagic.item.types; + +import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; +import net.minecraft.item.ItemStack; + +import javax.annotation.Nonnull; +import java.util.Locale; + +public enum ReagentType implements ISubItem { + + REAGENT_WATER, + REAGENT_LAVA, + REAGENT_AIR, + REAGENT_FASTMINER, + REAGENT_VOID, + REAGENT_GROWTH, + REAGENT_AFFINITY, + REAGENT_SIGHT, + REAGENT_BINDING, + REAGENT_SUPPRESSION, + REAGENT_BLOODLIGHT, + REAGENT_MAGNETISM, + REAGENT_HASTE, + REAGENT_COMPRESSION, + REAGENT_BRIDGE, + REAGENT_SEVERANCE, + REAGENT_TELEPOSITION, + REAGENT_TRANSPOSITION, + REAGENT_CLAW, + REAGENT_BOUNCE, + REAGENT_FROST, + REAGENT_HOLDING, + ; + + @Nonnull + @Override + public String getInternalName() { + return name().toLowerCase(Locale.ROOT); + } + + @Nonnull + @Override + public ItemStack getStack(int count) { + return new ItemStack(RegistrarBloodMagicItems.REAGENT, count, ordinal()); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java index 1c482c0d..5a24233f 100644 --- a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java +++ b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java @@ -29,7 +29,7 @@ public class MeteorConfigHandler { public static void handleMeteors(boolean checkNewVersion) { if (meteorDir == null) { - BloodMagic.instance.logger.error("Attempted to handle meteor config but the folder has not been initialized. Was this run too early?"); + BloodMagic.LOGGER.error("Attempted to handle meteor config but the folder has not been initialized. Was this run too early?"); return; } @@ -63,7 +63,7 @@ public class MeteorConfigHandler { reader.close(); } - if (checkNewVersion && ConfigHandler.config.getBoolean("resyncOnVersionChange", "Meteors", true, "Should the default meteors be regenerated if the mod has updated them")) { + if (checkNewVersion && ConfigHandler.values.shouldResyncMeteors) { Set discoveredDefaults = Sets.newHashSet(); // Check existing defaults for new version @@ -93,8 +93,6 @@ public class MeteorConfigHandler { } catch (Exception e) { e.printStackTrace(); } - - ConfigHandler.config.save(); } private static List> getDefaultMeteors() { @@ -138,14 +136,14 @@ public class MeteorConfigHandler { Meteor diamondMeteor = new Meteor(new ItemStack(Blocks.DIAMOND_BLOCK), diamondMeteorList, 10, 3); diamondMeteor.setVersion(3); - holders.add(Pair.of("IronMeteor", ironMeteor)); - DEFAULT_METEORS.put("IronMeteor", ironMeteor); + holders.add(Pair.of("iron", ironMeteor)); + DEFAULT_METEORS.put("iron", ironMeteor); - holders.add(Pair.of("GoldMeteor", goldMeteor)); - DEFAULT_METEORS.put("GoldMeteor", goldMeteor); + holders.add(Pair.of("gold", goldMeteor)); + DEFAULT_METEORS.put("gold", goldMeteor); - holders.add(Pair.of("DiamondMeteor", diamondMeteor)); - DEFAULT_METEORS.put("DiamondMeteor", diamondMeteor); + holders.add(Pair.of("diamond", diamondMeteor)); + DEFAULT_METEORS.put("diamond", diamondMeteor); return holders; } diff --git a/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java b/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java index 27911f00..a393cb53 100644 --- a/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java +++ b/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java @@ -1,5 +1,6 @@ package WayofTime.bloodmagic.potion; +import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.event.SacrificeKnifeUsedEvent; import WayofTime.bloodmagic.core.RegistrarBloodMagic; import net.minecraft.entity.Entity; @@ -18,7 +19,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.List; -@Mod.EventBusSubscriber +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) public class PotionEventHandlers { @SubscribeEvent diff --git a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java index 3d9d0233..d0a496c1 100644 --- a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java +++ b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java @@ -3,8 +3,6 @@ package WayofTime.bloodmagic.proxy; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.soul.DemonWillHolder; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.client.helper.ShaderHelper; import WayofTime.bloodmagic.client.hud.HUDElementDemonWillAura; import WayofTime.bloodmagic.client.hud.HUDElementHolding; @@ -21,15 +19,11 @@ import WayofTime.bloodmagic.entity.projectile.EntitySoulSnare; import WayofTime.bloodmagic.tile.*; import WayofTime.bloodmagic.tile.routing.TileRoutingNode; import com.google.common.collect.ImmutableMap; -import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.RenderPlayer; -import net.minecraft.item.Item; import net.minecraft.potion.PotionUtils; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.client.model.ModelLoaderRegistry; import net.minecraftforge.client.model.animation.AnimationTESR; import net.minecraftforge.client.model.obj.OBJLoader; @@ -39,7 +33,6 @@ import net.minecraftforge.common.model.animation.IAnimationStateMachine; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.client.registry.RenderingRegistry; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; -import org.apache.commons.lang3.tuple.Pair; import java.awt.Color; import java.util.Map; @@ -120,42 +113,15 @@ public class ClientProxy extends CommonProxy { new HUDElementDemonWillAura(); } - @Override - public void tryHandleBlockModel(Block block, String name) { - if (block instanceof IVariantProvider) { - IVariantProvider variantProvider = (IVariantProvider) block; - for (Pair variant : variantProvider.getVariants()) - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), variant.getLeft(), new ModelResourceLocation(new ResourceLocation(BloodMagic.MODID, name), variant.getRight())); - } - } - - @Override - public void tryHandleItemModel(Item item, String name) { - if (item instanceof IMeshProvider) { - IMeshProvider meshProvider = (IMeshProvider) item; - ModelLoader.setCustomMeshDefinition(item, meshProvider.getMeshDefinition()); - ResourceLocation resourceLocation = meshProvider.getCustomLocation(); - if (resourceLocation == null) - resourceLocation = new ResourceLocation(BloodMagic.MODID, "item/" + name); - for (String variant : meshProvider.getVariants()) - ModelLoader.registerItemVariants(item, new ModelResourceLocation(resourceLocation, variant)); - } else if (item instanceof IVariantProvider) { - IVariantProvider variantProvider = (IVariantProvider) item; - for (Pair variant : variantProvider.getVariants()) - ModelLoader.setCustomModelResourceLocation(item, variant.getLeft(), new ModelResourceLocation(new ResourceLocation(BloodMagic.MODID, "item/" + name), variant.getRight())); - } - } - private void addElytraLayer() { RenderManager renderManager = Minecraft.getMinecraft().getRenderManager(); try { Map skinMap = ObfuscationReflectionHelper.getPrivateValue(RenderManager.class, renderManager, "skinMap", "field_178636_l"); skinMap.get("default").addLayer(new LayerBloodElytra(skinMap.get("default"))); skinMap.get("slim").addLayer(new LayerBloodElytra(skinMap.get("slim"))); - BloodMagic.instance.logger.info("Elytra layer added"); + BloodMagic.LOGGER.info("Elytra layer added"); } catch (Exception e) { - BloodMagic.instance.logger.error("Failed to set custom Elytra Layer for Elytra Living Armour Upgrade."); - BloodMagic.instance.logger.error(e.getLocalizedMessage()); + BloodMagic.LOGGER.error("Failed to set custom Elytra Layer for Elytra Living Armour Upgrade."); } } diff --git a/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java b/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java index 636310a4..1dbea0c8 100644 --- a/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java +++ b/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java @@ -3,22 +3,17 @@ package WayofTime.bloodmagic.proxy; import WayofTime.bloodmagic.api.ritual.CapabilityRuneType; import WayofTime.bloodmagic.api.ritual.IRitualStone; import WayofTime.bloodmagic.api.teleport.TeleportQueue; -import WayofTime.bloodmagic.fuel.FuelHandler; import com.google.common.collect.ImmutableMap; -import net.minecraft.block.Block; -import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.animation.ITimeValue; import net.minecraftforge.common.capabilities.CapabilityManager; import net.minecraftforge.common.model.animation.IAnimationStateMachine; -import net.minecraftforge.fml.common.registry.GameRegistry; public class CommonProxy { public void preInit() { MinecraftForge.EVENT_BUS.register(TeleportQueue.getInstance()); - GameRegistry.registerFuelHandler(new FuelHandler()); registerRenderers(); } @@ -39,14 +34,6 @@ public class CommonProxy { return null; } - public void tryHandleBlockModel(Block block, String name) { - // NO-OP - } - - public void tryHandleItemModel(Item item, String name) { - // NO-OP - } - public IAnimationStateMachine load(ResourceLocation location, ImmutableMap parameters) { return null; } diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java index 30cde112..c1e46a44 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java @@ -1,74 +1,51 @@ package WayofTime.bloodmagic.registry; import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.alchemyArray.*; -import WayofTime.bloodmagic.api.altar.EnumAltarTier; import WayofTime.bloodmagic.api.compress.CompressionRegistry; import WayofTime.bloodmagic.api.iface.ISigil; import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.api.orb.BloodOrb; -import WayofTime.bloodmagic.api.orb.IBloodOrb; import WayofTime.bloodmagic.api.recipe.AlchemyTableCustomRecipe; import WayofTime.bloodmagic.api.registry.*; -import WayofTime.bloodmagic.api.ritual.EnumRuneType; -import WayofTime.bloodmagic.block.enums.EnumBloodRune; import WayofTime.bloodmagic.client.render.alchemyArray.*; import WayofTime.bloodmagic.compress.AdvancedCompressionHandler; import WayofTime.bloodmagic.compress.BaseCompressionHandler; import WayofTime.bloodmagic.compress.StorageBlockCraftingManager; import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.ItemComponent; -import WayofTime.bloodmagic.item.ItemDemonCrystal; import WayofTime.bloodmagic.item.alchemy.ItemCuttingFluid; import WayofTime.bloodmagic.item.alchemy.ItemLivingArmourPointsUpgrade; -import WayofTime.bloodmagic.item.soul.ItemSoulGem; +import WayofTime.bloodmagic.item.types.ComponentType; +import WayofTime.bloodmagic.item.types.ReagentType; import WayofTime.bloodmagic.livingArmour.downgrade.*; import WayofTime.bloodmagic.potion.BMPotionUtils; import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTableDyeableRecipe; import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTablePotionRecipe; -import WayofTime.bloodmagic.tile.TileBloodTank; import WayofTime.bloodmagic.util.Utils; import com.google.common.base.Stopwatch; -import com.google.common.collect.ImmutableMap; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.init.MobEffects; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentTranslation; -import net.minecraftforge.common.ForgeModContainer; -import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.OreDictionary; import org.apache.commons.lang3.tuple.Pair; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; import java.util.*; import java.util.Map.Entry; public class ModRecipes { - private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); - private static final Set USED_OD_NAMES = new TreeSet<>(); public static ArrayList addedOreRecipeList = new ArrayList(); - static ItemStack mundaneLengtheningStack = ItemComponent.getStack(ItemComponent.CATALYST_LENGTH_1); - static ItemStack mundanePowerStack = ItemComponent.getStack(ItemComponent.CATALYST_POWER_1); - private static File RECIPE_DIR = null; + static final ItemStack MUNDANE_LENGTHENING_STACK = ComponentType.CATALYST_LENGTH_1.getStack(); + static final ItemStack MUNDANE_POWER_STACK = ComponentType.CATALYST_POWER_1.getStack(); public static void init() { initOreDict(); addFurnaceRecipes(); -// addCraftingRecipes(); addAltarRecipes(); addAlchemyArrayRecipes(); addSoulForgeRecipes(); @@ -79,209 +56,52 @@ public class ModRecipes { } public static void initOreDict() { - OreDictionary.registerOre("dustIron", ItemComponent.getStack(ItemComponent.SAND_IRON)); - OreDictionary.registerOre("dustGold", ItemComponent.getStack(ItemComponent.SAND_GOLD)); - OreDictionary.registerOre("dustCoal", ItemComponent.getStack(ItemComponent.SAND_COAL)); + OreDictionary.registerOre("dustIron", ComponentType.SAND_IRON.getStack()); + OreDictionary.registerOre("dustGold", ComponentType.SAND_GOLD.getStack()); + OreDictionary.registerOre("dustCoal", ComponentType.SAND_COAL.getStack()); } public static void addFurnaceRecipes() { - FurnaceRecipes.instance().addSmeltingRecipe(ItemComponent.getStack(ItemComponent.SAND_IRON), new ItemStack(Items.IRON_INGOT), (float) 0.15); - FurnaceRecipes.instance().addSmeltingRecipe(ItemComponent.getStack(ItemComponent.SAND_GOLD), new ItemStack(Items.GOLD_INGOT), (float) 0.15); - } - - public static void addCraftingRecipes() { - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.SOUL_FORGE), "i i", "sgs", "sos", 'i', "ingotIron", 's', "stone", 'g', "ingotGold", 'o', "blockIron"); - addShapedRecipe(new ItemStack(RegistrarBloodMagicItems.SACRIFICIAL_DAGGER), "aaa", " ba", "c a", 'a', "blockGlass", 'b', "ingotGold", 'c', "ingotIron"); - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.ALTAR), "a a", "aba", "cdc", 'a', "stone", 'b', Blocks.FURNACE, 'c', "ingotGold", 'd', new ItemStack(RegistrarBloodMagicItems.MONSTER_SOUL)); - addShapedRecipe(new ItemStack(RegistrarBloodMagicItems.PACK_SELF_SACRIFICE), "aba", "cdc", "aea", 'a', "blockGlass", 'b', Items.BUCKET, 'c', Items.FLINT, 'd', Items.LEATHER_CHESTPLATE, 'e', RegistrarBloodMagicItems.SLATE); - addShapedRecipe(new ItemStack(RegistrarBloodMagicItems.PACK_SACRIFICE), "aba", "cdc", "aea", 'a', "blockGlass", 'b', Items.BUCKET, 'c', "ingotIron", 'd', Items.LEATHER_CHESTPLATE, 'e', RegistrarBloodMagicItems.SLATE); - addShapedRecipe(new ItemStack(RegistrarBloodMagicItems.RITUAL_DIVINER), "dfd", "ase", "dwd", 'f', EnumRuneType.FIRE.getScribeStack(), 'a', EnumRuneType.AIR.getScribeStack(), 'w', EnumRuneType.WATER.getScribeStack(), 'e', EnumRuneType.EARTH.getScribeStack(), 'd', "gemDiamond", 's', "stickWood"); - addShapedRecipe(new ItemStack(RegistrarBloodMagicItems.RITUAL_DIVINER, 1, 1), " S ", "tdt", " S ", 'S', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), 't', EnumRuneType.DUSK.getScribeStack(), 'd', new ItemStack(RegistrarBloodMagicItems.RITUAL_DIVINER)); - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK, 4, 1), "aa", "aa", 'a', new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK)); - addShapelessRecipe(new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK, 16), "stone", new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD)); - addShapelessRecipe(new ItemStack(RegistrarBloodMagicItems.ACTIVATION_CRYSTAL, 1, 1), new ItemStack(Items.NETHER_STAR), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_ARCHMAGE)); - addShapedRecipe(new ItemStack(RegistrarBloodMagicItems.SOUL_SNARE, 4, 0), "sis", "iri", "sis", 's', "string", 'i', "ingotIron", 'r', "dustRedstone"); - - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_TANK), "RBR", "G G", "RRR", 'R', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 'B', RegistrarBloodMagicBlocks.DECORATIVE_BRICK, 'G', "blockGlass"); - for (int i = 1; i < TileBloodTank.CAPACITIES.length; i++) - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_TANK, 1, i), "RBR", "T T", "RRR", 'R', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 'B', RegistrarBloodMagicBlocks.DECORATIVE_BRICK, 'T', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_TANK, 1, i - 1)); - - addShapelessRecipe(new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS, 1, 2), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS, 1, 1), new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD)); - addShapelessRecipe(new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS, 1, 3), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS, 1, 2), new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD, 1, 1)); - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.TELEPOSER), "ggg", "efe", "ggg", 'g', "ingotGold", 'e', new ItemStack(Items.ENDER_PEARL), 'f', RegistrarBloodMagicItems.TELEPOSITION_FOCUS); - -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicItems.LAVA_CRYSTAL), "aba", "bcb", "ded", 'a', "blockGlass", 'b', Items.LAVA_BUCKET, 'c', OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK), 'd', Blocks.OBSIDIAN, 'e', "gemDiamond")); -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), "aaa", "bcb", "aaa", 'a', "stone", 'b', RegistrarBloodMagicItems.SLATE, 'c', OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK))); - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 1), "aba", "cdc", "aba", 'a', "stone", 'b', RegistrarBloodMagicItems.SLATE, 'c', Items.SUGAR, 'd', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE)); //Speed -// addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.bloodRune, 1, 2), "aba", "cdc", "aba", 'a', "stone", 'b', RegistrarBloodMagicItems.slate, 'c', Items.sugar, 'd', new ItemStack(RegistrarBloodMagicBlocks.bloodRune))); //Efficiency -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 3), "aba", "cdc", "aea", 'a', "stone", 'b', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), 'c', "ingotGold", 'd', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 'e', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_APPRENTICE))); //Sacrifice -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 4), "aba", "cdc", "aea", 'a', "stone", 'b', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), 'c', "dustGlowstone", 'd', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 'e', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_APPRENTICE))); //Self-Sacrifice - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 5), "aba", "bcb", "ada", 'a', "stone", 'b', Items.WATER_BUCKET, 'c', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 'd', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2)); //Displacement - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 6), "aba", "bcb", "ada", 'a', "stone", 'b', Items.BUCKET, 'c', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 'd', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2)); //Capacity -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 7), "aba", "cdc", "aea", 'a', Blocks.OBSIDIAN, 'b', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), 'c', Items.BUCKET, 'd', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 6), 'e', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MASTER))); //Augmented Capacity -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 8), "aba", "cdc", "aba", 'a', "stone", 'b', OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK), 'c', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 'd', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MASTER))); //Orb -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 9), "aba", "cdc", "aea", 'a', Items.BUCKET, 'b', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), 'c', "ingotGold", 'd', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 1), 'e', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MASTER))); //Acceleration -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 10), "RsR", "GrG", "ReR", 'G', "glowstone", 's', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), 'R', "dustRedstone", 'r', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1), 'e', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MASTER))); //Charging -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.RITUAL_STONE, 4), "aba", "bcb", "aba", 'a', Blocks.OBSIDIAN, 'b', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), 'c', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_APPRENTICE))); -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER), "aba", "bcb", "aba", 'a', Blocks.OBSIDIAN, 'b', RegistrarBloodMagicBlocks.RITUAL_STONE, 'c', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MAGICIAN))); -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER, 1, 1), "aba", "bcb", "aba", 'a', Blocks.OBSIDIAN, 'b', "stone", 'c', OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK))); - addShapelessRecipe(new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER, 1, 2), new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER), new ItemStack(Blocks.REDSTONE_TORCH), new ItemStack(RegistrarBloodMagicItems.SLATE)); - addShapelessRecipe(new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER), new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER, 1, 2)); - - addShapedRecipe(new ItemStack(RegistrarBloodMagicItems.BASE_ITEM_FILTER, 1, 0), "sgs", "gfg", "sgs", 'f', ItemComponent.getStack(ItemComponent.COMPONENT_FRAME_PART), 'g', "blockGlass", 's', "stickWood"); - addShapedRecipe(new ItemStack(RegistrarBloodMagicItems.BASE_ITEM_FILTER, 1, 1), "sgs", "gfg", "sgs", 'f', ItemComponent.getStack(ItemComponent.COMPONENT_FRAME_PART), 'g', "dyeYellow", 's', "stickWood"); - addShapedRecipe(new ItemStack(RegistrarBloodMagicItems.BASE_ITEM_FILTER, 1, 2), "sgs", "gfg", "sgs", 'f', ItemComponent.getStack(ItemComponent.COMPONENT_FRAME_PART), 'g', "dyeGreen", 's', "stickWood"); - addShapedRecipe(new ItemStack(RegistrarBloodMagicItems.BASE_ITEM_FILTER, 1, 3), "sgs", "gfg", "sgs", 'f', ItemComponent.getStack(ItemComponent.COMPONENT_FRAME_PART), 'g', "dyePurple", 's', "stickWood"); - -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicItems.UPGRADE_TRAINER), "ngn", "ioi", "ngn", 'o', OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MASTER), 'i', "ingotIron", 'n', "nuggetGold", 'g', "ingotGold")); - -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.INCENSE_ALTAR), "s s", "shs", "coc", 'o', OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK), 's', "stone", 'c', "cobblestone", 'h', new ItemStack(Items.COAL, 1, 1))); -// GameRegistry.addRecipe(new ShapelessBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.PATH, 4, 0), "plankWood", "plankWood", "plankWood", "plankWood", OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_APPRENTICE))); - addShapelessRecipe(new ItemStack(RegistrarBloodMagicBlocks.PATH, 4, 1), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 0), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 0), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 0), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 0)); -// GameRegistry.addRecipe(new ShapelessBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.PATH, 4, 2), "stone", "stone", "stone", "stone", OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MAGICIAN))); - addShapelessRecipe(new ItemStack(RegistrarBloodMagicBlocks.PATH, 4, 3), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 2), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 2), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 2), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 2)); -// GameRegistry.addRecipe(new ShapelessBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.PATH, 4, 4), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 2), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 2), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 2), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 2), OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MASTER))); - addShapelessRecipe(new ItemStack(RegistrarBloodMagicBlocks.PATH, 4, 5), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 4), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 4), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 4), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 4)); -// GameRegistry.addRecipe(new ShapelessBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.PATH, 4, 6), Blocks.OBSIDIAN, Blocks.OBSIDIAN, Blocks.OBSIDIAN, Blocks.OBSIDIAN, OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_ARCHMAGE))); - addShapelessRecipe(new ItemStack(RegistrarBloodMagicBlocks.PATH, 4, 7), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 6), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 6), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 6), new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 6)); - -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicItems.EXPERIENCE_TOME), "ses", "lbl", "gog", 'o', OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MAGICIAN), 'e', Blocks.LAPIS_BLOCK, 'l', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), 'b', Items.ENCHANTED_BOOK, 's', "string", 'g', "ingotGold")); -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicItems.RITUAL_READER), "gog", "isi", " s ", 's', new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), 'g', "blockGlass", 'i', "ingotGold", 'o', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MASTER))); -// -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.ALCHEMY_TABLE), "sss", "wbw", "gog", 's', "stone", 'w', "plankWood", 'b', Items.BLAZE_ROD, 'g', "ingotGold", 'o', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_WEAK))); - - for (int i = 1; i < EnumBloodRune.values().length; i++) - addShapelessRecipe(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, i)); - - for (int i = 0; i < ItemSoulGem.names.length; i++) { - for (int j = 0; j < ItemDemonCrystal.NAMES.size(); j++) { - ItemStack baseGemStack = new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, i); - ItemStack newGemStack = new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, i); - - ItemStack crystalStack = new ItemStack(RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL, 1, j); - - ((ItemSoulGem) RegistrarBloodMagicItems.SOUL_GEM).setCurrentType(((ItemDemonCrystal) RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL).getType(crystalStack), newGemStack); - addShapelessRecipe(newGemStack, baseGemStack, crystalStack); - } - } - -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.MIMIC, 4, 0), "b b", " r ", "bob", 'b', new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK), 'r', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 'o', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MAGICIAN))); -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.MIMIC, 4, 1), "bsb", "srs", "bob", 'b', new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK), 'r', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 's', "stone", 'o', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MAGICIAN))); -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.MIMIC, 4, 2), "bsb", "srs", "bob", 'b', new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK), 'r', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 's', "blockGlass", 'o', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MAGICIAN))); -// GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(RegistrarBloodMagicBlocks.MIMIC, 2, 3), "bnb", "trt", "bob", 'b', new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK), 'r', new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE), 'n', "glowstone", 't', "torch", 'o', OrbRegistry.getOrbStack(RegistrarBloodMagicItems.ORB_MAGICIAN))); - - for (int i = 0; i < 5; i++) { - ItemStack crystalStack = new ItemStack(RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL, 1, i); - ItemStack baseStoneStack = new ItemStack(RegistrarBloodMagicBlocks.DEMON_EXTRAS, 1, i); - ItemStack baseStoneStackCrafted = new ItemStack(RegistrarBloodMagicBlocks.DEMON_EXTRAS, 16, i); - ItemStack polishedStoneStack = new ItemStack(RegistrarBloodMagicBlocks.DEMON_EXTRAS, 1, i + 5); - ItemStack willBrickStack = new ItemStack(RegistrarBloodMagicBlocks.DEMON_BRICK_1, 1, i); - ItemStack willBrickStackCrafted = new ItemStack(RegistrarBloodMagicBlocks.DEMON_BRICK_1, 4, i); - - ItemStack willSmallBrickStack = new ItemStack(RegistrarBloodMagicBlocks.DEMON_BRICK_2, 1, i); - ItemStack willSmallBrickStackCrafted = new ItemStack(RegistrarBloodMagicBlocks.DEMON_BRICK_2, 1, i); - ItemStack pillarStack = new ItemStack(RegistrarBloodMagicBlocks.DEMON_PILLAR_1, 1, i); - ItemStack pillarStackCrafted = new ItemStack(RegistrarBloodMagicBlocks.DEMON_PILLAR_1, 6, i); - - addShapelessRecipe(baseStoneStackCrafted, crystalStack, "stone", "stone", "stone", "stone", "stone", "stone", "stone", "stone"); - addShapedRecipe(willBrickStackCrafted, "ss", "ss", 's', baseStoneStack); - addShapedRecipe(willSmallBrickStackCrafted, "ss", "ss", 's', willBrickStack); - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_BRICK_2, 9, i + 5), "scs", "ccc", "scs", 's', baseStoneStack, 'c', willBrickStack); - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_BRICK_2, 9, i + 10), "scs", "coc", "scs", 's', baseStoneStack, 'c', willBrickStack, 'o', crystalStack); - addShapedRecipe(pillarStackCrafted, "ss", "ss", "ss", 's', polishedStoneStack); - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_PILLAR_2, 8, i), "ppp", "pcp", "ppp", 'p', pillarStack, 'c', crystalStack); - - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_WALL_1, 6, i), "sss", "sss", 's', willBrickStack); - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_WALL_1, 6, i + 5), "sss", "sss", 's', willSmallBrickStack); - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_WALL_1, 6, i + 10), "sss", "sss", 's', polishedStoneStack); - - addShapedRecipe(new ItemStack(i < 2 ? RegistrarBloodMagicBlocks.DEMON_STAIRS_1 : (i < 4 ? RegistrarBloodMagicBlocks.DEMON_STAIRS_2 : RegistrarBloodMagicBlocks.DEMON_STAIRS_3), 8, i % 2), "s ", "ss ", "sss", 's', polishedStoneStack); - addShapedRecipe(new ItemStack(i < 2 ? RegistrarBloodMagicBlocks.DEMON_PILLAR_CAP_1 : (i < 4 ? RegistrarBloodMagicBlocks.DEMON_PILLAR_CAP_2 : RegistrarBloodMagicBlocks.DEMON_PILLAR_CAP_3), 6, i % 2), "sss", "sss", 's', pillarStack); - - addShapedRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_LIGHT, 5, i), "sgs", "ggg", "sgs", 's', polishedStoneStack, 'g', Blocks.GLOWSTONE); - - GameRegistry.addSmelting(baseStoneStack, polishedStoneStack, 0.15f); - } - - generateConstants(); + FurnaceRecipes.instance().addSmeltingRecipe(ComponentType.SAND_IRON.getStack(), new ItemStack(Items.IRON_INGOT), (float) 0.15); + FurnaceRecipes.instance().addSmeltingRecipe(ComponentType.SAND_GOLD.getStack(), new ItemStack(Items.GOLD_INGOT), (float) 0.15); } public static void addAltarRecipes() { - // ONE - AltarRecipeRegistry.registerFillRecipe(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK), EnumAltarTier.ONE, RegistrarBloodMagic.ORB_WEAK.getCapacity(), 2, 1); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Items.DIAMOND), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK), EnumAltarTier.ONE, 2000, 2, 1)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Blocks.STONE), new ItemStack(RegistrarBloodMagicItems.SLATE), EnumAltarTier.ONE, 1000, 5, 5)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Items.BUCKET), new ItemStack(ForgeModContainer.getInstance().universalBucket), EnumAltarTier.ONE, 1000, 5, 0)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Items.BOOK), new ItemStack(RegistrarBloodMagicItems.SANGUINE_BOOK), EnumAltarTier.ONE, 1000, 20, 0)); - - // TWO - AltarRecipeRegistry.registerFillRecipe(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_APPRENTICE), EnumAltarTier.TWO, RegistrarBloodMagic.ORB_APPRENTICE.getCapacity(), 5, 5); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Blocks.REDSTONE_BLOCK), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_APPRENTICE), EnumAltarTier.TWO, 5000, 5, 5)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(RegistrarBloodMagicItems.SLATE), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), EnumAltarTier.TWO, 2000, 5, 5)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Items.IRON_SWORD), new ItemStack(RegistrarBloodMagicItems.DAGGER_OF_SACRIFICE), EnumAltarTier.TWO, 3000, 5, 5)); - - // THREE - AltarRecipeRegistry.registerFillRecipe(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MAGICIAN), EnumAltarTier.THREE, RegistrarBloodMagic.ORB_MAGICIAN.getCapacity(), 15, 15); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Blocks.GOLD_BLOCK), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MAGICIAN), EnumAltarTier.THREE, 25000, 20, 20)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), EnumAltarTier.THREE, 5000, 15, 10)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Blocks.OBSIDIAN), EnumRuneType.EARTH.getScribeStack(), EnumAltarTier.THREE, 1000, 5, 5)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Blocks.LAPIS_BLOCK), EnumRuneType.WATER.getScribeStack(), EnumAltarTier.THREE, 1000, 5, 5)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Items.MAGMA_CREAM), EnumRuneType.FIRE.getScribeStack(), EnumAltarTier.THREE, 1000, 5, 5)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Items.GHAST_TEAR), EnumRuneType.AIR.getScribeStack(), EnumAltarTier.THREE, 1000, 5, 5)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(RegistrarBloodMagicItems.LAVA_CRYSTAL), new ItemStack(RegistrarBloodMagicItems.ACTIVATION_CRYSTAL), EnumAltarTier.THREE, 10000, 20, 10)); - - // FOUR - AltarRecipeRegistry.registerFillRecipe(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MASTER), EnumAltarTier.FOUR, RegistrarBloodMagic.ORB_MASTER.getCapacity(), 25, 25); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MASTER), EnumAltarTier.FOUR, 25000, 30, 50)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), EnumAltarTier.FOUR, 15000, 20, 20)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Blocks.COAL_BLOCK), EnumRuneType.DUSK.getScribeStack(), EnumAltarTier.FOUR, 2000, 20, 10)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Items.ENDER_PEARL), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS), EnumAltarTier.FOUR, 2000, 10, 10)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS, 1, 1), EnumAltarTier.FOUR, 10000, 20, 10)); - - // FIVE - AltarRecipeRegistry.registerFillRecipe(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_ARCHMAGE), EnumAltarTier.FIVE, RegistrarBloodMagic.ORB_ARCHMAGE.getCapacity(), 50, 50); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Items.NETHER_STAR), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_ARCHMAGE), EnumAltarTier.FIVE, 80000, 50, 100)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 4), EnumAltarTier.FIVE, 30000, 40, 100)); - - // SIX - AltarRecipeRegistry.registerFillRecipe(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_TRANSCENDENT), EnumAltarTier.SIX, RegistrarBloodMagic.ORB_TRANSCENDENT.getCapacity(), 50, 50); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK, 1, 2), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_TRANSCENDENT), EnumAltarTier.SIX, 200000, 100, 200)); - AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Blocks.GLOWSTONE), EnumRuneType.DAWN.getScribeStack(), EnumAltarTier.SIX, 200000, 100, 200)); } public static void addAlchemyArrayRecipes() { - AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), new ItemStack(Items.DIAMOND_SWORD), new AlchemyArrayEffectBinding("boundSword", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_SWORD))), new BindingAlchemyCircleRenderer()); - AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), new ItemStack(Items.DIAMOND_AXE), new AlchemyArrayEffectBinding("boundAxe", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_AXE)))); - AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), new ItemStack(Items.DIAMOND_PICKAXE), new AlchemyArrayEffectBinding("boundPickaxe", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_PICKAXE)))); - AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), new ItemStack(Items.DIAMOND_SHOVEL), new AlchemyArrayEffectBinding("boundShovel", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_SHOVEL)))); - AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), new ItemStack(Items.IRON_HELMET), new AlchemyArrayEffectBinding("livingHelmet", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET))); - AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), new ItemStack(Items.IRON_CHESTPLATE), new AlchemyArrayEffectBinding("livingChest", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST))); - AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), new ItemStack(Items.IRON_LEGGINGS), new AlchemyArrayEffectBinding("livingLegs", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_LEGGINGS))); - AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), new ItemStack(Items.IRON_BOOTS), new AlchemyArrayEffectBinding("livingBoots", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_BOOTS))); + AlchemyArrayRecipeRegistry.registerRecipe(ReagentType.REAGENT_BINDING.getStack(), new ItemStack(Items.DIAMOND_SWORD), new AlchemyArrayEffectBinding("boundSword", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_SWORD))), new BindingAlchemyCircleRenderer()); + AlchemyArrayRecipeRegistry.registerRecipe(ReagentType.REAGENT_BINDING.getStack(), new ItemStack(Items.DIAMOND_AXE), new AlchemyArrayEffectBinding("boundAxe", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_AXE)))); + AlchemyArrayRecipeRegistry.registerRecipe(ReagentType.REAGENT_BINDING.getStack(), new ItemStack(Items.DIAMOND_PICKAXE), new AlchemyArrayEffectBinding("boundPickaxe", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_PICKAXE)))); + AlchemyArrayRecipeRegistry.registerRecipe(ReagentType.REAGENT_BINDING.getStack(), new ItemStack(Items.DIAMOND_SHOVEL), new AlchemyArrayEffectBinding("boundShovel", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_SHOVEL)))); + AlchemyArrayRecipeRegistry.registerRecipe(ReagentType.REAGENT_BINDING.getStack(), new ItemStack(Items.IRON_HELMET), new AlchemyArrayEffectBinding("livingHelmet", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET))); + AlchemyArrayRecipeRegistry.registerRecipe(ReagentType.REAGENT_BINDING.getStack(), new ItemStack(Items.IRON_CHESTPLATE), new AlchemyArrayEffectBinding("livingChest", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST))); + AlchemyArrayRecipeRegistry.registerRecipe(ReagentType.REAGENT_BINDING.getStack(), new ItemStack(Items.IRON_LEGGINGS), new AlchemyArrayEffectBinding("livingLegs", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_LEGGINGS))); + AlchemyArrayRecipeRegistry.registerRecipe(ReagentType.REAGENT_BINDING.getStack(), new ItemStack(Items.IRON_BOOTS), new AlchemyArrayEffectBinding("livingBoots", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_BOOTS))); AlchemyArrayRecipeRegistry.registerCraftingRecipe(new ItemStack(Items.REDSTONE), new ItemStack(RegistrarBloodMagicItems.SLATE), new ItemStack(RegistrarBloodMagicItems.SIGIL_DIVINATION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/DivinationSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_WATER), new ItemStack(RegistrarBloodMagicItems.SLATE), new ItemStack(RegistrarBloodMagicItems.SIGIL_WATER), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WaterSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_LAVA), new ItemStack(RegistrarBloodMagicItems.SLATE), new ItemStack(RegistrarBloodMagicItems.SIGIL_LAVA), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/LavaSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_AIR), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_AIR), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/AirSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_FASTMINER), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_FAST_MINER), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/FastMinerSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_VOID), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_VOID), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/VoidSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_GROWTH), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_GREEN_GROVE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/GrowthSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_AFFINITY), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SIGIL_ELEMENTAL_AFFINITY), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/ElementalAffinitySigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_SIGHT), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_SEER), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SightSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_HOLDING), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SIGIL_HOLDING), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BLOODLIGHT), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SIGIL_BLOOD_LIGHT), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/LightSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_MAGNETISM), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SIGIL_MAGNETISM), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MagnetismSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_SUPPRESSION), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_SUPPRESSION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SuppressionSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_HASTE), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_HASTE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BRIDGE), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_PHANTOM_BRIDGE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_COMPRESSION), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_COMPRESSION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_SEVERANCE), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_ENDER_SEVERANCE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_TELEPOSITION), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_TELEPOSITION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_TRANSPOSITION), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_TRANSPOSITION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_CLAW), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SIGIL_CLAW), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BOUNCE), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_BOUNCE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_FROST), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_FROST), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_WATER.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE), new ItemStack(RegistrarBloodMagicItems.SIGIL_WATER), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WaterSigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_LAVA.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE), new ItemStack(RegistrarBloodMagicItems.SIGIL_LAVA), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/LavaSigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_AIR.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_AIR), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/AirSigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_FASTMINER.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_FAST_MINER), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/FastMinerSigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_VOID.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_VOID), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/VoidSigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_GROWTH.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_GREEN_GROVE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/GrowthSigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_AFFINITY.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SIGIL_ELEMENTAL_AFFINITY), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/ElementalAffinitySigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_SIGHT.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_SEER), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SightSigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_HOLDING.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SIGIL_HOLDING), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_BLOODLIGHT.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SIGIL_BLOOD_LIGHT), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/LightSigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_MAGNETISM.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SIGIL_MAGNETISM), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MagnetismSigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_SUPPRESSION.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_SUPPRESSION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SuppressionSigil.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_HASTE.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_HASTE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_BRIDGE.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_PHANTOM_BRIDGE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_COMPRESSION.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_COMPRESSION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_SEVERANCE.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_ENDER_SEVERANCE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_TELEPOSITION.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_TELEPOSITION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_TRANSPOSITION.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.SIGIL_TRANSPOSITION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_CLAW.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2), new ItemStack(RegistrarBloodMagicItems.SIGIL_CLAW), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_BOUNCE.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_BOUNCE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); + AlchemyArrayRecipeRegistry.registerCraftingRecipe(ReagentType.REAGENT_FROST.getStack(), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), new ItemStack(RegistrarBloodMagicItems.SIGIL_FROST), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ROTTEN_FLESH), new ItemStack(Items.ROTTEN_FLESH), new AlchemyArrayEffectAttractor("attractor"), new AttractorAlchemyCircleRenderer()); AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.FEATHER), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectMovement("movement"), new StaticAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png"))); @@ -290,7 +110,8 @@ public class ModRecipes { AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ARROW), new ItemStack(Items.FEATHER), new AlchemyArrayEffectSkeletonTurret("skeletonTurret"), new DualAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret2.png"))); - AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_FASTMINER), new ItemStack(Items.IRON_PICKAXE), new AlchemyArrayEffectSigil("fastMiner", (ISigil) RegistrarBloodMagicItems.SIGIL_FAST_MINER), new SingleAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/FastMinerSigil.png"))); + // FIXME +// AlchemyArrayRecipeRegistry.registerRecipe(ReagentType.REAGENT_FASTMINER.getStack(), new ItemStack(Items.IRON_PICKAXE), new AlchemyArrayEffectSigil("fastMiner", (ISigil) RegistrarBloodMagicItems.SIGIL_FAST_MINER), new SingleAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/FastMinerSigil.png"))); } @@ -304,63 +125,10 @@ public class ModRecipes { CompressionRegistry.registerItemThreshold(new ItemStack(Blocks.COBBLESTONE), 64); stopwatch.stop(); - BloodMagic.instance.logger.info("Added compression recipes in {}", stopwatch); + BloodMagic.LOGGER.info("Added compression recipes in {}", stopwatch); } public static void addSoulForgeRecipes() { - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), 1, 1, "dustRedstone", "ingotGold", "blockGlass", "dyeBlue"); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), 60, 20, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), "gemDiamond", "blockRedstone", "blockLapis"); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 2), 240, 50, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), "gemDiamond", "blockGold", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 3), 1000, 100, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 2), new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3), new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 4), 4000, 500, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 3), Items.NETHER_STAR); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SENTIENT_SWORD), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_SWORD)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SENTIENT_AXE), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_AXE)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SENTIENT_PICKAXE), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_PICKAXE)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SENTIENT_SHOVEL), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_SHOVEL)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SENTIENT_BOW), 70, 0, new ItemStack(Items.BOW), new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), "string", "string"); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES), 0, 0, "dustRedstone", "dyeWhite", "gunpowder", Items.COAL); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_WATER), 10, 3, new ItemStack(Items.SUGAR), new ItemStack(Items.WATER_BUCKET), new ItemStack(Items.WATER_BUCKET)); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_LAVA), 32, 10, Items.LAVA_BUCKET, "dustRedstone", "cobblestone", "blockCoal"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_VOID), 64, 10, Items.BUCKET, "string", "string", "gunpowder"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_GROWTH), 128, 20, "treeSapling", "treeSapling", "sugarcane", Items.SUGAR); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_AIR), 128, 20, Items.GHAST_TEAR, "feather", "feather"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_SIGHT), 64, 0, RegistrarBloodMagicItems.SIGIL_DIVINATION, "blockGlass", "blockGlass", "dustGlowstone"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_HOLDING), 64, 20, "chestWood", "leather", "string", "string"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_FASTMINER), 128, 10, Items.IRON_PICKAXE, Items.IRON_AXE, Items.IRON_SHOVEL, Items.GUNPOWDER); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_AFFINITY), 300, 30, RegistrarBloodMagicItems.SIGIL_WATER, RegistrarBloodMagicItems.SIGIL_AIR, RegistrarBloodMagicItems.SIGIL_LAVA, Blocks.OBSIDIAN); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_SUPPRESSION), 500, 50, RegistrarBloodMagicBlocks.TELEPOSER, Items.WATER_BUCKET, Items.LAVA_BUCKET, Items.BLAZE_ROD); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), 400, 10, "dustGlowstone", "dustRedstone", "nuggetGold", Items.GUNPOWDER); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BLOODLIGHT), 300, 10, "glowstone", Blocks.TORCH, "dustRedstone", "dustRedstone"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_MAGNETISM), 600, 10, "string", "ingotGold", "blockIron", "ingotGold"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_HASTE), 1400, 100, Items.COOKIE, Items.SUGAR, Items.COOKIE, "stone"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BRIDGE), 600, 50, Blocks.SOUL_SAND, Blocks.SOUL_SAND, "stone", Blocks.OBSIDIAN); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_SEVERANCE), 800, 70, Items.ENDER_EYE, Items.ENDER_PEARL, "ingotGold", "ingotGold"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_COMPRESSION), 2000, 200, "blockIron", "blockGold", Blocks.OBSIDIAN, "cobblestone"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_TELEPOSITION), 1500, 200, RegistrarBloodMagicBlocks.TELEPOSER, "glowstone", "blockRedstone", "ingotGold"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_TRANSPOSITION), 1500, 200, RegistrarBloodMagicBlocks.TELEPOSER, "gemDiamond", Items.ENDER_PEARL, Blocks.OBSIDIAN); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_CLAW), 800, 120, Items.FLINT, Items.FLINT, ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC)); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BOUNCE), 200, 20, Blocks.SLIME_BLOCK, Blocks.SLIME_BLOCK, Items.LEATHER, "string"); - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_FROST), 80, 10, Blocks.ICE, Items.SNOWBALL, Items.SNOWBALL, "dustRedstone"); - - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.SENTIENT_ARMOUR_GEM), 240, 150, Items.DIAMOND_CHESTPLATE, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), Blocks.IRON_BLOCK, Blocks.OBSIDIAN); - - TartaricForgeRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.COMPONENT_FRAME_PART), 400, 10, "blockGlass", "stone", new ItemStack(RegistrarBloodMagicItems.SLATE)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.NODE_ROUTER), 400, 5, "stickWood", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1), "gemLapis", "gemLapis"); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE), 400, 5, "dustGlowstone", "dustRedstone", "blockGlass", "stone"); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.OUTPUT_ROUTING_NODE), 400, 25, "dustGlowstone", "dustRedstone", "ingotIron", new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE), 400, 25, "dustGlowstone", "dustRedstone", "ingotGold", new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.MASTER_ROUTING_NODE), 400, 200, "blockIron", "gemDiamond", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2)); - - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 0), 1200, 100, ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DEFAULT)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 1), 1200, 100, ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_CORROSIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_CORROSIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_CORROSIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_CORROSIVE)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 2), 1200, 100, ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DESTRUCTIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DESTRUCTIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DESTRUCTIVE), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_DESTRUCTIVE)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 3), 1200, 100, ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_VENGEFUL), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_VENGEFUL), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_VENGEFUL), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_VENGEFUL)); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 4), 1200, 100, ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_STEADFAST), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_STEADFAST), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_STEADFAST), ItemDemonCrystal.getStack(ItemDemonCrystal.CRYSTAL_STEADFAST)); - - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRUCIBLE), 400, 100, Items.CAULDRON, "stone", "gemLapis", "gemDiamond"); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_PYLON), 400, 50, "blockIron", "stone", "gemLapis", RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTALLIZER), 500, 100, RegistrarBloodMagicBlocks.SOUL_FORGE, "stone", "gemLapis", "blockGlass"); - TartaricForgeRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.DEMON_WILL_GAUGE), 400, 50, "ingotGold", "dustRedstone", "blockGlass", RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL); } public static void addAlchemyTableRecipes() { @@ -376,16 +144,16 @@ public class ModRecipes { AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Blocks.CLAY, 5), 200, 200, 1, Items.WATER_BUCKET, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY); AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Blocks.OBSIDIAN), 50, 50, 1, Items.WATER_BUCKET, Items.LAVA_BUCKET); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.SULFUR, 8), 0, 100, 0, Items.LAVA_BUCKET); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.SALTPETER, 4), 0, 100, 0, ItemComponent.getStack(ItemComponent.PLANT_OIL), ItemComponent.getStack(ItemComponent.PLANT_OIL), "dustCoal"); - AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Items.GUNPOWDER, 3), 0, 100, 0, ItemComponent.getStack(ItemComponent.SALTPETER), ItemComponent.getStack(ItemComponent.SULFUR), new ItemStack(Items.COAL, 1, 1)); + AlchemyTableRecipeRegistry.registerRecipe(ComponentType.SULFUR.getStack(8), 0, 100, 0, Items.LAVA_BUCKET); + AlchemyTableRecipeRegistry.registerRecipe(ComponentType.SALTPETER.getStack(4), 0, 100, 0, ComponentType.PLANT_OIL.getStack(), ComponentType.PLANT_OIL.getStack(), "dustCoal"); + AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(Items.GUNPOWDER, 3), 0, 100, 0, ComponentType.SALTPETER.getStack(), ComponentType.SULFUR.getStack(), new ItemStack(Items.COAL, 1, 1)); - AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_COAL, 4), 100, 100, 1, new ItemStack(Items.COAL, 1, 0), new ItemStack(Items.COAL, 1, 0), Items.FLINT)); + AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ComponentType.SAND_COAL.getStack(4), 100, 100, 1, new ItemStack(Items.COAL, 1, 0), new ItemStack(Items.COAL, 1, 0), Items.FLINT)); - AlchemyTableRecipeRegistry.registerRecipe(ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC), 1000, 400, 1, "dustCoal", "gunpowder", Items.REDSTONE, Items.SUGAR, ItemComponent.getStack(ItemComponent.PLANT_OIL), new ItemStack(Items.POTIONITEM)); + AlchemyTableRecipeRegistry.registerRecipe(ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC), 1000, 400, 1, "dustCoal", "gunpowder", Items.REDSTONE, Items.SUGAR, ComponentType.PLANT_OIL.getStack(), new ItemStack(Items.POTIONITEM)); - AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_IRON, 2), 400, 200, 1, "oreIron", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC))); - AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ItemComponent.getStack(ItemComponent.SAND_GOLD, 2), 400, 200, 1, "oreGold", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC))); + AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ComponentType.SAND_IRON.getStack(2), 400, 200, 1, "oreIron", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC))); + AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(ComponentType.SAND_GOLD.getStack(2), 400, 200, 1, "oreGold", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC))); AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(new ItemStack(Items.REDSTONE, 8), 400, 200, 1, "oreRedstone", ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC))); @@ -397,21 +165,21 @@ public class ModRecipes { AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(new ItemStack(Blocks.GRAVEL), 50, 50, 1, "cobblestone", ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE))); AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableCustomRecipe(new ItemStack(Blocks.SAND), 50, 50, 1, Blocks.GRAVEL, ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE))); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, "cropCarrot", "cropCarrot", "cropCarrot", new ItemStack(Items.DYE, 1, 15)); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, "cropPotato", "cropPotato", new ItemStack(Items.DYE, 1, 15)); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, "cropWheat", "cropWheat", new ItemStack(Items.DYE, 1, 15)); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.BEETROOT, Items.BEETROOT, Items.BEETROOT, new ItemStack(Items.DYE, 1, 15)); + AlchemyTableRecipeRegistry.registerRecipe(ComponentType.PLANT_OIL.getStack(), 100, 100, 1, "cropCarrot", "cropCarrot", "cropCarrot", new ItemStack(Items.DYE, 1, 15)); + AlchemyTableRecipeRegistry.registerRecipe(ComponentType.PLANT_OIL.getStack(), 100, 100, 1, "cropPotato", "cropPotato", new ItemStack(Items.DYE, 1, 15)); + AlchemyTableRecipeRegistry.registerRecipe(ComponentType.PLANT_OIL.getStack(), 100, 100, 1, "cropWheat", "cropWheat", new ItemStack(Items.DYE, 1, 15)); + AlchemyTableRecipeRegistry.registerRecipe(ComponentType.PLANT_OIL.getStack(), 100, 100, 1, Items.BEETROOT, Items.BEETROOT, Items.BEETROOT, new ItemStack(Items.DYE, 1, 15)); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.NEURO_TOXIN), 1000, 100, 2, new ItemStack(Items.FISH, 1, 3)); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.ANTISEPTIC, 2), 1000, 200, 2, ItemComponent.getStack(ItemComponent.PLANT_OIL), "nuggetGold", "cropWheat", Items.SUGAR, Blocks.BROWN_MUSHROOM, Blocks.RED_MUSHROOM); + AlchemyTableRecipeRegistry.registerRecipe(ComponentType.NEURO_TOXIN.getStack(), 1000, 100, 2, new ItemStack(Items.FISH, 1, 3)); + AlchemyTableRecipeRegistry.registerRecipe(ComponentType.ANTISEPTIC.getStack(2), 1000, 200, 2, ComponentType.PLANT_OIL.getStack(), "nuggetGold", "cropWheat", Items.SUGAR, Blocks.BROWN_MUSHROOM, Blocks.RED_MUSHROOM); - AlchemyTableRecipeRegistry.registerRecipe(ItemLivingArmourPointsUpgrade.getStack(ItemLivingArmourPointsUpgrade.DRAFT_ANGELUS), 20000, 400, 3, ItemComponent.getStack(ItemComponent.NEURO_TOXIN), ItemComponent.getStack(ItemComponent.ANTISEPTIC), "dustGold", Items.FERMENTED_SPIDER_EYE, new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD, 1, 0), Items.GHAST_TEAR); + AlchemyTableRecipeRegistry.registerRecipe(ItemLivingArmourPointsUpgrade.getStack(ItemLivingArmourPointsUpgrade.DRAFT_ANGELUS), 20000, 400, 3, ComponentType.NEURO_TOXIN.getStack(), ComponentType.ANTISEPTIC.getStack(), "dustGold", Items.FERMENTED_SPIDER_EYE, new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD, 1, 0), Items.GHAST_TEAR); AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableDyeableRecipe(0, 100, 0, new ItemStack(RegistrarBloodMagicItems.SIGIL_HOLDING))); AlchemyTableRecipeRegistry.registerRecipe(new ItemStack(RegistrarBloodMagicItems.POTION_FLASK), 1000, 200, 2, new ItemStack(Items.POTIONITEM), "cropNetherWart", "dustRedstone", "dustGlowstone"); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.CATALYST_LENGTH_1), 1000, 100, 2, "gunpowder", "cropNetherWart", "gemLapis"); - AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.CATALYST_POWER_1), 1000, 100, 2, "gunpowder", "cropNetherWart", "dustRedstone"); + AlchemyTableRecipeRegistry.registerRecipe(ComponentType.CATALYST_LENGTH_1.getStack(), 1000, 100, 2, "gunpowder", "cropNetherWart", "gemLapis"); + AlchemyTableRecipeRegistry.registerRecipe(ComponentType.CATALYST_POWER_1.getStack(), 1000, 100, 2, "gunpowder", "cropNetherWart", "dustRedstone"); } public static void addOreDoublingAlchemyRecipes() { @@ -463,12 +231,12 @@ public class ModRecipes { List lengtheningList = new ArrayList(); lengtheningList.add(inputStack); - lengtheningList.add(mundaneLengtheningStack); + lengtheningList.add(MUNDANE_LENGTHENING_STACK); AlchemyTableRecipeRegistry.registerRecipe(BMPotionUtils.getLengthAugmentRecipe(lpDrained, 100, tier, lengtheningList, baseEffect, 1)); List powerList = new ArrayList(); powerList.add(inputStack); - powerList.add(mundanePowerStack); + powerList.add(MUNDANE_POWER_STACK); AlchemyTableRecipeRegistry.registerRecipe(BMPotionUtils.getPowerAugmentRecipe(lpDrained, 100, tier, powerList, baseEffect, 1)); } @@ -556,165 +324,4 @@ public class ModRecipes { LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, Items.NETHER_STAR, "gemDiamond", "gemDiamond", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 4)); } } - - private static void setupDir() { - if (RECIPE_DIR == null) { - RECIPE_DIR = ConfigHandler.config.getConfigFile().toPath().resolve("../recipes/").toFile(); - } - - if (!RECIPE_DIR.exists()) { - RECIPE_DIR.mkdir(); - } - } - - private static void addShapedRecipe(ItemStack result, Object... components) { - setupDir(); - - // GameRegistry.addShapedRecipe(result, components); - - Map json = new HashMap<>(); - - List pattern = new ArrayList<>(); - int i = 0; - while (i < components.length && components[i] instanceof String) { - pattern.add((String) components[i]); - i++; - } - json.put("pattern", pattern); - - boolean isOreDict = false; - Map> key = new HashMap<>(); - Character curKey = null; - for (; i < components.length; i++) { - Object o = components[i]; - if (o instanceof Character) { - if (curKey != null) - throw new IllegalArgumentException("Provided two char keys in a row"); - curKey = (Character) o; - } else { - if (curKey == null) - throw new IllegalArgumentException("Providing object without a char key"); - if (o instanceof String) - isOreDict = true; - key.put(Character.toString(curKey), serializeItem(o)); - curKey = null; - } - } - json.put("key", key); - json.put("type", isOreDict ? "forge:ore_shaped" : "minecraft:crafting_shaped"); - json.put("result", serializeItem(result)); - - // names the json the same name as the output's registry name - // repeatedly adds _alt if a file already exists - // janky I know but it works - String suffix = result.getItem().getHasSubtypes() ? "_" + result.getItemDamage() : ""; - File f = new File(RECIPE_DIR, result.getItem().getRegistryName().getResourcePath() + suffix + ".json"); - - while (f.exists()) { - suffix += "_alt"; - f = new File(RECIPE_DIR, result.getItem().getRegistryName().getResourcePath() + suffix + ".json"); - } - - try (FileWriter w = new FileWriter(f)) { - GSON.toJson(json, w); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private static void addShapelessRecipe(ItemStack result, Object... components) { - setupDir(); - - // addShapelessRecipe(result, components); - - Map json = new HashMap<>(); - - boolean isOreDict = false; - List> ingredients = new ArrayList<>(); - for (Object o : components) { - if (o instanceof String) - isOreDict = true; - ingredients.add(serializeItem(o)); - } - json.put("ingredients", ingredients); - json.put("type", isOreDict ? "forge:ore_shapeless" : "minecraft:crafting_shapeless"); - json.put("result", serializeItem(result)); - - // names the json the same name as the output's registry name - // repeatedly adds _alt if a file already exists - // janky I know but it works - String suffix = result.getItem().getHasSubtypes() ? "_" + result.getItemDamage() : ""; - File f = new File(RECIPE_DIR, result.getItem().getRegistryName().getResourcePath() + suffix + ".json"); - - while (f.exists()) { - suffix += "_alt"; - f = new File(RECIPE_DIR, result.getItem().getRegistryName().getResourcePath() + suffix + ".json"); - } - - - try (FileWriter w = new FileWriter(f)) { - GSON.toJson(json, w); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private static Map serializeItem(Object thing) { - if (thing instanceof Item) { - return serializeItem(new ItemStack((Item) thing)); - } - if (thing instanceof Block) { - return serializeItem(new ItemStack((Block) thing)); - } - if (thing instanceof ItemStack) { - ItemStack stack = (ItemStack) thing; - - if (stack.getItem() instanceof IBloodOrb) { - Map ret = new HashMap<>(); - BloodOrb orb = ((IBloodOrb) stack.getItem()).getOrb(stack); - ret.put("orb", orb == null ? RegistrarBloodMagic.ORB_WEAK.getRegistryName().toString() : orb.getRegistryName().toString()); - return ret; - } - - Map ret = new HashMap<>(); - ret.put("item", stack.getItem().getRegistryName().toString()); - if (stack.getItem().getHasSubtypes() || stack.getItemDamage() != 0) { - ret.put("data", stack.getItemDamage()); - } - if (stack.getCount() > 1) { - ret.put("count", stack.getCount()); - } - - if (stack.hasTagCompound()) { - throw new IllegalArgumentException("nbt not implemented"); - } - - return ret; - } - if (thing instanceof String) { - Map ret = new HashMap<>(); - USED_OD_NAMES.add((String) thing); - ret.put("item", "#" + ((String) thing).toUpperCase(Locale.ROOT)); - return ret; - } - - throw new IllegalArgumentException("Not a block, item, stack, or od name"); - } - - private static void generateConstants() { - List> json = new ArrayList<>(); - for (String s : USED_OD_NAMES) { - Map entry = new HashMap<>(); - entry.put("name", s.toUpperCase(Locale.ROOT)); - entry.put("ingredient", ImmutableMap.of("type", "forge:ore_dict", "ore", s)); - json.add(entry); - } - - try (FileWriter w = new FileWriter(new File(RECIPE_DIR, "_constants.json"))) { - GSON.toJson(json, w); - } catch (IOException e) { - e.printStackTrace(); - - } - } } diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java b/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java index ad026e23..3d0def9a 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java @@ -42,7 +42,6 @@ public class ModRituals { public static Ritual forsakenSoulRitual; public static Ritual crystalHarvestRitual; - // public static Ritual cobblestoneRitual; public static Ritual placerRitual; public static Ritual fellingRitual; public static Ritual pumpRitual; @@ -60,68 +59,64 @@ public class ModRituals { public static void initRituals() { waterRitual = new RitualWater(); - RitualRegistry.registerRitual(waterRitual, ConfigHandler.ritualWater); + RitualRegistry.registerRitual(waterRitual, ConfigHandler.rituals.ritualWater); lavaRitual = new RitualLava(); - RitualRegistry.registerRitual(lavaRitual, ConfigHandler.ritualLava); + RitualRegistry.registerRitual(lavaRitual, ConfigHandler.rituals.ritualLava); greenGroveRitual = new RitualGreenGrove(); - RitualRegistry.registerRitual(greenGroveRitual, ConfigHandler.ritualGreenGrove); + RitualRegistry.registerRitual(greenGroveRitual, ConfigHandler.rituals.ritualGreenGrove); jumpRitual = new RitualJumping(); - RitualRegistry.registerRitual(jumpRitual, ConfigHandler.ritualJumping); + RitualRegistry.registerRitual(jumpRitual, ConfigHandler.rituals.ritualJumping); sufferingRitual = new RitualWellOfSuffering(); - RitualRegistry.registerRitual(sufferingRitual, ConfigHandler.ritualWellOfSuffering); + RitualRegistry.registerRitual(sufferingRitual, ConfigHandler.rituals.ritualWellOfSuffering); featheredKnifeRitual = new RitualFeatheredKnife(); - RitualRegistry.registerRitual(featheredKnifeRitual, ConfigHandler.ritualFeatheredKnife); + RitualRegistry.registerRitual(featheredKnifeRitual, ConfigHandler.rituals.ritualFeatheredKnife); regenerationRitual = new RitualRegeneration(); - RitualRegistry.registerRitual(regenerationRitual, ConfigHandler.ritualRegeneration); + RitualRegistry.registerRitual(regenerationRitual, ConfigHandler.rituals.ritualRegeneration); animalGrowthRitual = new RitualAnimalGrowth(); - RitualRegistry.registerRitual(animalGrowthRitual, ConfigHandler.ritualAnimalGrowth); + RitualRegistry.registerRitual(animalGrowthRitual, ConfigHandler.rituals.ritualAnimalGrowth); harvestRitual = new RitualHarvest(); - RitualRegistry.registerRitual(harvestRitual, ConfigHandler.ritualHarvest); + RitualRegistry.registerRitual(harvestRitual, ConfigHandler.rituals.ritualHarvest); initHarvestHandlers(); magneticRitual = new RitualMagnetic(); - RitualRegistry.registerRitual(magneticRitual, ConfigHandler.ritualMagnetic); + RitualRegistry.registerRitual(magneticRitual, ConfigHandler.rituals.ritualMagnetic); crushingRitual = new RitualCrushing(); - RitualRegistry.registerRitual(crushingRitual, ConfigHandler.ritualCrushing); + RitualRegistry.registerRitual(crushingRitual, ConfigHandler.rituals.ritualCrushing); stomachRitual = new RitualFullStomach(); - RitualRegistry.registerRitual(stomachRitual, ConfigHandler.ritualFullStomach); + RitualRegistry.registerRitual(stomachRitual, ConfigHandler.rituals.ritualFullStomach); interdictionRitual = new RitualInterdiction(); - RitualRegistry.registerRitual(interdictionRitual, ConfigHandler.ritualInterdiction); + RitualRegistry.registerRitual(interdictionRitual, ConfigHandler.rituals.ritualInterdiction); containmentRitual = new RitualContainment(); - RitualRegistry.registerRitual(containmentRitual, ConfigHandler.ritualContainment); + RitualRegistry.registerRitual(containmentRitual, ConfigHandler.rituals.ritualContainment); speedRitual = new RitualSpeed(); - RitualRegistry.registerRitual(speedRitual, ConfigHandler.ritualSpeed); + RitualRegistry.registerRitual(speedRitual, ConfigHandler.rituals.ritualSpeed); suppressionRitual = new RitualSuppression(); - RitualRegistry.registerRitual(suppressionRitual, ConfigHandler.ritualSuppression); + RitualRegistry.registerRitual(suppressionRitual, ConfigHandler.rituals.ritualSuppression); zephyrRitual = new RitualZephyr(); - RitualRegistry.registerRitual(zephyrRitual, ConfigHandler.ritualZephyr); + RitualRegistry.registerRitual(zephyrRitual, ConfigHandler.rituals.ritualZephyr); expulsionRitual = new RitualExpulsion(); - RitualRegistry.registerRitual(expulsionRitual, ConfigHandler.ritualExpulsion); + RitualRegistry.registerRitual(expulsionRitual, ConfigHandler.rituals.ritualExpulsion); upgradeRemoveRitual = new RitualUpgradeRemove(); - RitualRegistry.registerRitual(upgradeRemoveRitual, ConfigHandler.ritualUpgradeRemove); + RitualRegistry.registerRitual(upgradeRemoveRitual, ConfigHandler.rituals.ritualUpgradeRemove); armourEvolveRitual = new RitualArmourEvolve(); - RitualRegistry.registerRitual(armourEvolveRitual, ConfigHandler.ritualArmourEvolve); + RitualRegistry.registerRitual(armourEvolveRitual, ConfigHandler.rituals.ritualArmourEvolve); forsakenSoulRitual = new RitualForsakenSoul(); - RitualRegistry.registerRitual(forsakenSoulRitual, ConfigHandler.ritualForsakenSoul); + RitualRegistry.registerRitual(forsakenSoulRitual, ConfigHandler.rituals.ritualForsakenSoul); crystalHarvestRitual = new RitualCrystalHarvest(); - RitualRegistry.registerRitual(crystalHarvestRitual, ConfigHandler.ritualCrystalHarvest); - -// cobblestoneRitual = new RitualCobblestone(); -// RitualRegistry.registerRitual(cobblestoneRitual, ConfigHandler.cobblestoneRitual); + RitualRegistry.registerRitual(crystalHarvestRitual, ConfigHandler.rituals.ritualCrystalHarvest); placerRitual = new RitualPlacer(); - RitualRegistry.registerRitual(placerRitual, ConfigHandler.placerRitual); + RitualRegistry.registerRitual(placerRitual, ConfigHandler.rituals.ritualPlacer); fellingRitual = new RitualFelling(); - RitualRegistry.registerRitual(fellingRitual, ConfigHandler.fellingRitual); + RitualRegistry.registerRitual(fellingRitual, ConfigHandler.rituals.ritualFelling); pumpRitual = new RitualPump(); - RitualRegistry.registerRitual(pumpRitual, ConfigHandler.pumpRitual); + RitualRegistry.registerRitual(pumpRitual, ConfigHandler.rituals.ritualPump); altarBuilderRitual = new RitualAltarBuilder(); - RitualRegistry.registerRitual(altarBuilderRitual, ConfigHandler.altarBuilderRitual); + RitualRegistry.registerRitual(altarBuilderRitual, ConfigHandler.rituals.ritualAltarBuilder); portalRitual = new RitualPortal(); - RitualRegistry.registerRitual(portalRitual, ConfigHandler.portalRitual); + RitualRegistry.registerRitual(portalRitual, ConfigHandler.rituals.ritualPortal); meteorRitual = new RitualMeteor(); - RitualRegistry.registerRitual(meteorRitual, ConfigHandler.meteorRitual); - + RitualRegistry.registerRitual(meteorRitual, ConfigHandler.rituals.ritualMeteor); downgradeRitual = new RitualLivingArmourDowngrade(); - RitualRegistry.registerRitual(downgradeRitual, ConfigHandler.downgradeRitual); + RitualRegistry.registerRitual(downgradeRitual, ConfigHandler.rituals.ritualDowngrade); RitualCrushing.registerCuttingFluid(ItemCuttingFluid.getStack(ItemCuttingFluid.BASIC), 250, 0.5); RitualCrushing.registerCuttingFluid(ItemCuttingFluid.getStack(ItemCuttingFluid.EXPLOSIVE), 25, 0.05); @@ -129,13 +124,13 @@ public class ModRituals { public static void initImperfectRituals() { imperfectNight = new ImperfectRitualNight(); - ImperfectRitualRegistry.registerRitual(imperfectNight, ConfigHandler.imperfectRitualNight); + ImperfectRitualRegistry.registerRitual(imperfectNight, ConfigHandler.rituals.imperfect.imperfectRitualNight); imperfectRain = new ImperfectRitualRain(); - ImperfectRitualRegistry.registerRitual(imperfectRain, ConfigHandler.imperfectRitualRain); + ImperfectRitualRegistry.registerRitual(imperfectRain, ConfigHandler.rituals.imperfect.imperfectRitualRain); imperfectResistance = new ImperfectRitualResistance(); - ImperfectRitualRegistry.registerRitual(imperfectResistance, ConfigHandler.imperfectRitualResistance); + ImperfectRitualRegistry.registerRitual(imperfectResistance, ConfigHandler.rituals.imperfect.imperfectRitualResistance); imperfectZombie = new ImperfectRitualZombie(); - ImperfectRitualRegistry.registerRitual(imperfectZombie, ConfigHandler.imperfectRitualZombie); + ImperfectRitualRegistry.registerRitual(imperfectZombie, ConfigHandler.rituals.imperfect.imperfectRitualZombie); } public static void initHarvestHandlers() { diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualCobblestone.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualCobblestone.java index 2a8be8aa..d5a01382 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualCobblestone.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualCobblestone.java @@ -2,7 +2,7 @@ package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.ritual.*; -import WayofTime.bloodmagic.item.ItemComponent; +import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; import WayofTime.bloodmagic.tile.TileAlchemyArray; import net.minecraft.block.Block; import net.minecraft.init.Blocks; @@ -40,7 +40,7 @@ public class RitualCobblestone extends Ritual { if (tileEntity != null && tileEntity instanceof TileAlchemyArray) { TileAlchemyArray alchemyArray = (TileAlchemyArray) tileEntity; - if (!alchemyArray.getStackInSlot(0).isEmpty() && alchemyArray.getStackInSlot(0).getItem() instanceof ItemComponent) { + if (!alchemyArray.getStackInSlot(0).isEmpty() && alchemyArray.getStackInSlot(0).getItem() == RegistrarBloodMagicItems.COMPONENT) { switch (alchemyArray.getStackInSlot(0).getItemDamage()) { case 0: block = Blocks.OBSIDIAN; diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java index 60dce160..38a5b4fb 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualFeatheredKnife.java @@ -152,7 +152,7 @@ public class RitualFeatheredKnife extends Ritual { player.setHealth(health - sacrificedHealth); - tileAltar.sacrificialDaggerCall((int) (ConfigHandler.sacrificialDaggerConversion * lpModifier * sacrificedHealth), false); + tileAltar.sacrificialDaggerCall((int) (ConfigHandler.values.sacrificialDaggerConversion * lpModifier * sacrificedHealth), false); totalEffects++; diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java index 55512361..7218dfc1 100644 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java +++ b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java @@ -120,11 +120,11 @@ public class HarvestHandlerPlantable implements IHarvestHandler { HarvestRegistry.registerStandardCrop(crop, crop.getMaxAge()); } } catch (NoSuchMethodException e) { - BloodMagic.instance.logger.error("HarvestCraft integration cancelled; unable to find crop name mapper"); + BloodMagic.LOGGER.error("HarvestCraft integration cancelled; unable to find crop name mapper"); } catch (IllegalAccessException e) { - BloodMagic.instance.logger.error("HarvestCraft integration cancelled; crop name lookup broke"); + BloodMagic.LOGGER.error("HarvestCraft integration cancelled; crop name lookup broke"); } catch (InvocationTargetException e) { - BloodMagic.instance.logger.error("HarvestCraft integration cancelled; crop name lookup broke"); + BloodMagic.LOGGER.error("HarvestCraft integration cancelled; crop name lookup broke"); } } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java b/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java index 7bdf5b3e..3ec94d23 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java @@ -1,12 +1,12 @@ package WayofTime.bloodmagic.tile; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe; -import WayofTime.bloodmagic.api.registry.TartaricForgeRecipeRegistry; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; import WayofTime.bloodmagic.api.soul.IDemonWill; import WayofTime.bloodmagic.api.soul.IDemonWillConduit; import WayofTime.bloodmagic.api.soul.IDemonWillGem; +import WayofTime.bloodmagic.api_impl.BloodMagicAPI; +import WayofTime.bloodmagic.api_impl.recipe.RecipeTartaricForge; import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -79,14 +79,15 @@ public class TileSoulForge extends TileInventory implements ITickable, IDemonWil } } - TartaricForgeRecipe recipe = TartaricForgeRecipeRegistry.getMatchingRecipe(inputList, getWorld(), getPos()); + RecipeTartaricForge recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForge(inputList); +// TartaricForgeRecipe recipe = TartaricForgeRecipeRegistry.getMatchingRecipe(inputList, getWorld(), getPos()); if (recipe != null && (soulsInGem >= recipe.getMinimumSouls() || burnTime > 0)) { if (canCraft(recipe)) { burnTime++; if (burnTime == ticksRequired) { if (!getWorld().isRemote) { - double requiredSouls = recipe.getSoulsDrained(); + double requiredSouls = recipe.getSoulDrain(); if (requiredSouls > 0) { if (!getWorld().isRemote && soulsInGem >= recipe.getMinimumSouls()) { consumeSouls(EnumDemonWillType.DEFAULT, requiredSouls); @@ -113,12 +114,12 @@ public class TileSoulForge extends TileInventory implements ITickable, IDemonWil return ((double) burnTime) / ticksRequired; } - private boolean canCraft(TartaricForgeRecipe recipe) { + private boolean canCraft(RecipeTartaricForge recipe) { if (recipe == null) { return false; } - ItemStack outputStack = recipe.getRecipeOutput(); + ItemStack outputStack = recipe.getOutput(); ItemStack currentOutputStack = getStackInSlot(outputSlot); if (outputStack.isEmpty()) return false; @@ -131,9 +132,9 @@ public class TileSoulForge extends TileInventory implements ITickable, IDemonWil } - public void craftItem(TartaricForgeRecipe recipe) { + public void craftItem(RecipeTartaricForge recipe) { if (this.canCraft(recipe)) { - ItemStack outputStack = recipe.getRecipeOutput(); + ItemStack outputStack = recipe.getOutput(); ItemStack currentOutputStack = getStackInSlot(outputSlot); if (currentOutputStack.isEmpty()) { diff --git a/src/main/java/WayofTime/bloodmagic/util/BloodMagicIsntReadyYetStopTryingToUseItAndJustWaitForMeToFinishPleaseAndThankYou.java b/src/main/java/WayofTime/bloodmagic/util/BloodMagicIsntReadyYetStopTryingToUseItAndJustWaitForMeToFinishPleaseAndThankYou.java new file mode 100644 index 00000000..70cc23f0 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/util/BloodMagicIsntReadyYetStopTryingToUseItAndJustWaitForMeToFinishPleaseAndThankYou.java @@ -0,0 +1,12 @@ +package WayofTime.bloodmagic.util; + +public class BloodMagicIsntReadyYetStopTryingToUseItAndJustWaitForMeToFinishPleaseAndThankYou extends Error { + public BloodMagicIsntReadyYetStopTryingToUseItAndJustWaitForMeToFinishPleaseAndThankYou() { + super("Blood Magic isn't ready yet. Stop trying to use it and just wait for me to finish. Please and thank you."); + } + + @Override + public synchronized Throwable fillInStackTrace() { + return this; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/util/Utils.java b/src/main/java/WayofTime/bloodmagic/util/Utils.java index b30a0ab0..ae3b50ef 100644 --- a/src/main/java/WayofTime/bloodmagic/util/Utils.java +++ b/src/main/java/WayofTime/bloodmagic/util/Utils.java @@ -1,6 +1,5 @@ package WayofTime.bloodmagic.util; -import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.altar.EnumAltarComponent; @@ -36,17 +35,12 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.*; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.ISpecialArmor; import net.minecraftforge.common.ISpecialArmor.ArmorProperties; -import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fluids.IFluidBlock; -import net.minecraftforge.fml.common.discovery.ASMDataTable; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; @@ -922,19 +916,6 @@ public class Utils { return largerStack ? stack : ItemStack.EMPTY; } - public static void registerHandlers(Set eventHandlers) { - for (ASMDataTable.ASMData data : eventHandlers) { - try { - Class handlerClass = Class.forName(data.getClassName()); - Object handlerImpl = handlerClass.newInstance(); - MinecraftForge.EVENT_BUS.register(handlerImpl); - BloodMagic.instance.logger.debug("Registering event handler for class {}", data.getClassName()); - } catch (Exception e) { - // No-op - } - } - } - public static boolean hasUUID(ItemStack stack) { return stack.hasTagCompound() && stack.getTagCompound().hasKey(Constants.NBT.MOST_SIG) && stack.getTagCompound().hasKey(Constants.NBT.LEAST_SIG); } @@ -956,4 +937,24 @@ public class Utils { stack.getTagCompound().setLong(Constants.NBT.LEAST_SIG, itemUUID.getLeastSignificantBits()); } } + + public static RayTraceResult rayTrace(EntityPlayer player, boolean useLiquids) { + float pitch = player.rotationPitch; + float yaw = player.rotationYaw; + Vec3d eyePosition = new Vec3d(player.posX, player.posY + (double) player.getEyeHeight(), player.posZ); + + float f2 = MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI); + float f3 = MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI); + float f4 = -MathHelper.cos(-pitch * 0.017453292F); + float f5 = MathHelper.sin(-pitch * 0.017453292F); + float f6 = f3 * f4; + float f7 = f2 * f4; + + double reachDistance = 5.0D; + if (player instanceof EntityPlayerMP) + reachDistance = ((EntityPlayerMP)player).interactionManager.getBlockReachDistance(); + + Vec3d reachPosition = eyePosition.addVector((double) f6 * reachDistance, (double) f5 * reachDistance, (double) f7 * reachDistance); + return player.getEntityWorld().rayTraceBlocks(eyePosition, reachPosition, useLiquids, !useLiquids, false); + } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java index c92e1267..e1ad1e37 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java @@ -2,7 +2,6 @@ package WayofTime.bloodmagic.util.handler.event; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.annot.Handler; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.registry.RitualRegistry; import WayofTime.bloodmagic.api.ritual.Ritual; @@ -41,6 +40,7 @@ import net.minecraftforge.client.event.sound.PlaySoundEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.InputEvent; import net.minecraftforge.fml.relauncher.ReflectionHelper; @@ -50,7 +50,7 @@ import org.lwjgl.opengl.GL11; import java.util.*; -@Handler +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) @SideOnly(Side.CLIENT) public class ClientHandler { // Quick toggle for error suppression. Set to false if you wish to hide model errors. @@ -76,7 +76,7 @@ public class ClientHandler { private static boolean mrsHoloDisplay; @SubscribeEvent - public void onTooltipEvent(ItemTooltipEvent event) { + public static void onTooltipEvent(ItemTooltipEvent event) { ItemStack stack = event.getItemStack(); if (stack.isEmpty()) { return; @@ -93,7 +93,7 @@ public class ClientHandler { } @SubscribeEvent - public void onSoundEvent(PlaySoundEvent event) { + public static void onSoundEvent(PlaySoundEvent event) { EntityPlayer player = Minecraft.getMinecraft().player; if (player != null && player.isPotionActive(RegistrarBloodMagic.DEAFNESS)) { event.setResultSound(null); @@ -101,7 +101,7 @@ public class ClientHandler { } @SubscribeEvent - public void onTextureStitch(TextureStitchEvent.Pre event) { + public static void onTextureStitch(TextureStitchEvent.Pre event) { final String BLOCKS = "blocks"; ritualStoneBlank = forName(event.getMap(), "RitualStone", BLOCKS); @@ -121,7 +121,7 @@ public class ClientHandler { } @SubscribeEvent - public void render(RenderWorldLastEvent event) { + public static void render(RenderWorldLastEvent event) { EntityPlayerSP player = minecraft.player; World world = player.getEntityWorld(); @@ -146,7 +146,7 @@ public class ClientHandler { } @SubscribeEvent - public void onMouseEvent(MouseEvent event) { + public static void onMouseEvent(MouseEvent event) { EntityPlayerSP player = Minecraft.getMinecraft().player; if (event.getDwheel() != 0 && player != null && player.isSneaking()) { @@ -164,7 +164,7 @@ public class ClientHandler { } @SubscribeEvent - public void onKey(InputEvent event) { + public static void onKey(InputEvent event) { if (!minecraft.inGameHasFocus) return; @@ -174,7 +174,7 @@ public class ClientHandler { } @SubscribeEvent - public void onHudRender(RenderGameOverlayEvent.Pre event) { + public static void onHudRender(RenderGameOverlayEvent.Pre event) { for (HUDElement element : hudElements) if (element.getElementType() == event.getType() && element.shouldRender(minecraft)) element.render(minecraft, event.getResolution(), event.getPartialTicks()); @@ -182,7 +182,7 @@ public class ClientHandler { // Stolen from Chisel @SubscribeEvent - public void onModelBake(ModelBakeEvent event) { + public static void onModelBake(ModelBakeEvent event) { if (BloodMagic.IS_DEV && SUPPRESS_ASSET_ERRORS) return; @@ -210,15 +210,15 @@ public class ClientHandler { missingVariants.removeAll(missing); if (errored.size() > 0) - BloodMagic.instance.logger.info("Suppressed {} model errors from Blood Magic.", errored.size()); + BloodMagic.LOGGER.info("Suppressed {} model errors from Blood Magic.", errored.size()); if (missing.size() > 0) - BloodMagic.instance.logger.info("Suppressed {} variant errors from Blood Magic.", missing.size()); - BloodMagic.instance.logger.debug("Suppressed discovered model/variant errors in {}", stopwatch.stop()); + BloodMagic.LOGGER.info("Suppressed {} variant errors from Blood Magic.", missing.size()); + BloodMagic.LOGGER.debug("Suppressed discovered model/variant errors in {}", stopwatch.stop()); } // For some reason, we need some bad textures to be listed in the Crystal and Node models. This will hide that from the end user. @SubscribeEvent - public void onTextureStitch(TextureStitchEvent.Post event) { + public static void onTextureStitch(TextureStitchEvent.Post event) { if (BloodMagic.IS_DEV && SUPPRESS_ASSET_ERRORS) return; @@ -246,10 +246,10 @@ public class ClientHandler { missingTextures.keySet().remove(mc); badTextureDomains.remove(mc); } - BloodMagic.instance.logger.debug("Suppressed required texture errors in {}", stopwatch.stop()); + BloodMagic.LOGGER.debug("Suppressed required texture errors in {}", stopwatch.stop()); } - private void renderRitualStones(EntityPlayerSP player, float partialTicks) { + private static void renderRitualStones(EntityPlayerSP player, float partialTicks) { World world = player.getEntityWorld(); ItemRitualDiviner ritualDiviner = (ItemRitualDiviner) player.inventory.getCurrentItem().getItem(); EnumFacing direction = ritualDiviner.getDirection(player.inventory.getCurrentItem()); @@ -311,7 +311,7 @@ public class ClientHandler { public static void cycleSigil(ItemStack stack, EntityPlayer player, int dWheel) { int mode = dWheel; - if (!ConfigHandler.sigilHoldingSkipsEmptySlots) { + if (!ConfigHandler.client.sigilHoldingSkipsEmptySlots) { mode = ItemSigilHolding.getCurrentItemOrdinal(stack); mode = dWheel < 0 ? ItemSigilHolding.next(mode) : ItemSigilHolding.prev(mode); } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/CraftingHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/CraftingHandler.java index 366c9c1f..3c9ca214 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/CraftingHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/CraftingHandler.java @@ -1,8 +1,6 @@ package WayofTime.bloodmagic.util.handler.event; import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.annot.Handler; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.event.AltarCraftedEvent; import WayofTime.bloodmagic.api.iface.IUpgradeTrainer; @@ -22,17 +20,18 @@ import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.ArrayList; import java.util.List; -@Handler +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) public class CraftingHandler { // Sets the uses of crafted Inscription Tools to 10 @SubscribeEvent - public void onAltarCrafted(AltarCraftedEvent event) { + public static void onAltarCrafted(AltarCraftedEvent event) { if (event.getOutput() == null) { return; } @@ -50,20 +49,21 @@ public class CraftingHandler { // Handles crafting of: Revealing Upgrade Tome, Elytra Upgrade Tome, Combining Upgrade Tomes, Setting Upgrade for Trainer @SubscribeEvent - public void onAnvil(AnvilUpdateEvent event) { - if (ConfigHandler.thaumcraftGogglesUpgrade) { - if (event.getLeft().getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET && event.getRight().getItem() == Constants.Compat.THAUMCRAFT_GOGGLES && !event.getRight().isItemDamaged()) { - ItemStack output = new ItemStack(RegistrarBloodMagicItems.UPGRADE_TOME); - output = NBTHelper.checkNBT(output); - ItemHelper.LivingUpgrades.setKey(output, BloodMagic.MODID + ".upgrade.revealing"); - ItemHelper.LivingUpgrades.setLevel(output, 1); - event.setCost(1); - - event.setOutput(output); - - return; - } - } + public static void onAnvil(AnvilUpdateEvent event) { + // TODO - Azanor come back :( +// if (ConfigHandler.thaumcraftGogglesUpgrade) { +// if (event.getLeft().getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET && event.getRight().getItem() == Constants.Compat.THAUMCRAFT_GOGGLES && !event.getRight().isItemDamaged()) { +// ItemStack output = new ItemStack(RegistrarBloodMagicItems.UPGRADE_TOME); +// output = NBTHelper.checkNBT(output); +// ItemHelper.LivingUpgrades.setKey(output, BloodMagic.MODID + ".upgrade.revealing"); +// ItemHelper.LivingUpgrades.setLevel(output, 1); +// event.setCost(1); +// +// event.setOutput(output); +// +// return; +// } +// } if (event.getLeft().getItem() == RegistrarBloodMagicItems.SIGIL_HOLDING) { if (event.getRight().getItem() == Items.NAME_TAG) { diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java index 74d75c62..6e1f3098 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java @@ -2,7 +2,6 @@ package WayofTime.bloodmagic.util.handler.event; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.annot.Handler; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.event.ItemBindEvent; import WayofTime.bloodmagic.api.event.SacrificeKnifeUsedEvent; @@ -38,6 +37,7 @@ import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.base.Strings; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.resources.I18n; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -55,6 +55,7 @@ import net.minecraft.init.MobEffects; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumHand; import net.minecraft.util.EnumParticleTypes; @@ -69,10 +70,12 @@ import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.entity.player.PlayerPickupXpEvent; import net.minecraftforge.event.world.ExplosionEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.Event.Result; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -85,7 +88,7 @@ import java.util.List; import java.util.Map; import java.util.Random; -@Handler +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) public class GenericHandler { public static Map bounceMap = new HashMap(); public static Map filledHandMap = new HashMap(); @@ -93,7 +96,7 @@ public class GenericHandler { private static Map attackTaskMap = new HashMap(); @SubscribeEvent - public void onEntityFall(LivingFallEvent event) { + public static void onEntityFall(LivingFallEvent event) { if (event.getEntityLiving() instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.getEntityLiving(); if (player.isPotionActive(RegistrarBloodMagic.BOUNCE) && !player.isSneaking() && event.getDistance() > 2) { @@ -112,7 +115,7 @@ public class GenericHandler { } @SubscribeEvent - public void playerTickPost(TickEvent.PlayerTickEvent event) { + public static void playerTickPost(TickEvent.PlayerTickEvent event) { if (event.phase == TickEvent.Phase.END && bounceMap.containsKey(event.player)) { event.player.motionY = bounceMap.remove(event.player); } @@ -130,7 +133,7 @@ public class GenericHandler { } @SubscribeEvent - public void onPlayerClick(PlayerInteractEvent event) { + public static void onPlayerClick(PlayerInteractEvent event) { if (event.isCancelable() && event.getEntityPlayer().isPotionActive(RegistrarBloodMagic.CONSTRICT)) { EntityPlayer player = event.getEntityPlayer(); int level = player.getActivePotionEffect(RegistrarBloodMagic.CONSTRICT).getAmplifier(); @@ -141,7 +144,7 @@ public class GenericHandler { } @SubscribeEvent - public void onPlayerDropItem(ItemTossEvent event) { + public static void onPlayerDropItem(ItemTossEvent event) { EntityItem itemEntity = event.getEntityItem(); if (itemEntity != null) { ItemStack stack = itemEntity.getItem(); @@ -155,7 +158,7 @@ public class GenericHandler { } @SubscribeEvent - public void onExplosion(ExplosionEvent.Start event) { + public static void onExplosion(ExplosionEvent.Start event) { World world = event.getWorld(); Explosion exp = event.getExplosion(); Vec3d position = exp.getPosition(); @@ -174,7 +177,7 @@ public class GenericHandler { } @SubscribeEvent - public void onEntityHurt(LivingHurtEvent event) { + public static void onEntityHurt(LivingHurtEvent event) { if (event.getEntity().getEntityWorld().isRemote) return; @@ -186,7 +189,7 @@ public class GenericHandler { boolean shouldSyphon = pack.getStoredLP(player.getItemStackFromSlot(EntityEquipmentSlot.CHEST)) < pack.CAPACITY; float damageDone = event.getEntityLiving().getHealth() < event.getAmount() ? event.getAmount() - event.getEntityLiving().getHealth() : event.getAmount(); - int totalLP = Math.round(damageDone * ConfigHandler.sacrificialPackConversion); + int totalLP = Math.round(damageDone * ConfigHandler.values.coatOfArmsConversion); if (shouldSyphon) ItemHelper.LPContainer.addLPToItem(player.getItemStackFromSlot(EntityEquipmentSlot.CHEST), totalLP, pack.CAPACITY); @@ -208,7 +211,7 @@ public class GenericHandler { // Handles sending the client the Demon Will Aura updates @SubscribeEvent - public void onLivingUpdate(LivingUpdateEvent event) { + public static void onLivingUpdate(LivingUpdateEvent event) { if (!event.getEntityLiving().getEntityWorld().isRemote) { EntityLivingBase entity = event.getEntityLiving(); if (entity instanceof EntityPlayer && entity.ticksExisted % 50 == 0) //TODO: Change to an incremental counter @@ -284,7 +287,7 @@ public class GenericHandler { } // @SideOnly(Side.SERVER) - public void sendPlayerDemonWillAura(EntityPlayer player) { + public static void sendPlayerDemonWillAura(EntityPlayer player) { if (player instanceof EntityPlayerMP) { BlockPos pos = player.getPosition(); DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(player.getEntityWorld().provider.getDimension(), pos.getX() >> 4, pos.getZ() >> 4); @@ -298,7 +301,7 @@ public class GenericHandler { // Handles destroying altar @SubscribeEvent - public void harvestEvent(PlayerEvent.HarvestCheck event) { + public static void harvestEvent(PlayerEvent.HarvestCheck event) { IBlockState state = event.getTargetBlock(); Block block = state.getBlock(); if (block instanceof BlockAltar && event.getEntityPlayer() != null && event.getEntityPlayer() instanceof EntityPlayerMP && !event.getEntityPlayer().getHeldItemMainhand().isEmpty() && event.getEntityPlayer().getHeldItemMainhand().getItem() instanceof ItemAltarMaker) { @@ -309,14 +312,14 @@ public class GenericHandler { // Handle Teleposer block blacklist @SubscribeEvent - public void onTelepose(TeleposeEvent event) { + public static void onTelepose(TeleposeEvent event) { if (BloodMagicAPI.INSTANCE.getBlacklist().getTeleposer().contains(event.initialState) || BloodMagicAPI.INSTANCE.getBlacklist().getTeleposer().contains(event.finalState)) event.setCanceled(true); } // Handle Teleposer entity blacklist @SubscribeEvent - public void onTeleposeEntity(TeleposeEvent.Ent event) { + public static void onTeleposeEntity(TeleposeEvent.Ent event) { EntityEntry entry = EntityRegistry.getEntry(event.entity.getClass()); if (BloodMagicAPI.INSTANCE.getBlacklist().getTeleposerEntities().contains(entry.getRegistryName())) event.setCanceled(true); @@ -324,13 +327,13 @@ public class GenericHandler { // Sets teleport cooldown for Teleposed entities to 5 ticks (1/4 second) instead of 150 (7.5 seconds) @SubscribeEvent - public void onTeleposeEntityPost(TeleposeEvent.Ent.Post event) { + public static void onTeleposeEntityPost(TeleposeEvent.Ent.Post event) { event.entity.timeUntilPortal = 5; } // Handles binding of IBindable's as well as setting a player's highest orb tier @SubscribeEvent - public void onInteract(PlayerInteractEvent.RightClickItem event) { + public static void onInteract(PlayerInteractEvent.RightClickItem event) { if (event.getWorld().isRemote) return; @@ -340,22 +343,8 @@ public class GenericHandler { return; ItemStack held = event.getItemStack(); - if (!held.isEmpty() && held.getItem() instanceof IBindable) { - held = NBTHelper.checkNBT(held); - IBindable bindable = (IBindable) held.getItem(); - if (Strings.isNullOrEmpty(bindable.getOwnerUUID(held))) { - if (bindable.onBind(player, held)) { - String uuid = PlayerHelper.getUUIDFromPlayer(player).toString(); - ItemBindEvent toPost = new ItemBindEvent(player, uuid, held); - if (MinecraftForge.EVENT_BUS.post(toPost) || toPost.getResult() == Result.DENY) - return; - - BindableHelper.setItemOwnerUUID(held, uuid); - BindableHelper.setItemOwnerName(held, player.getDisplayNameString()); - } - } else if (bindable.getOwnerUUID(held).equals(PlayerHelper.getUUIDFromPlayer(player).toString()) && !bindable.getOwnerName(held).equals(player.getDisplayNameString())) - BindableHelper.setItemOwnerName(held, player.getDisplayNameString()); - } + if (!held.isEmpty() && held.getItem() instanceof IBindable) + bindItem(held, player); if (!held.isEmpty() && held.getItem() instanceof IBloodOrb) { held = NBTHelper.checkNBT(held); @@ -371,8 +360,47 @@ public class GenericHandler { } } + // Handles binding of IBindable's @SubscribeEvent - public void selfSacrificeEvent(SacrificeKnifeUsedEvent event) { + public static void onInteractBlock(PlayerInteractEvent.RightClickBlock event) { + if (event.getWorld().isRemote) + return; + + if (PlayerHelper.isFakePlayer(event.getEntityPlayer())) + return; + + if (!event.getItemStack().isEmpty() && event.getItemStack().getItem() instanceof IBindable) + bindItem(event.getItemStack(), event.getEntityPlayer()); + } + + private static void bindItem(ItemStack stack, EntityPlayer player) { + IBindable bindable = (IBindable) stack.getItem(); + if (Strings.isNullOrEmpty(bindable.getOwnerUUID(stack))) { + if (!stack.hasTagCompound()) + stack.setTagCompound(new NBTTagCompound()); + + if (bindable.onBind(player, stack)) { + String uuid = PlayerHelper.getUUIDFromPlayer(player).toString(); + ItemBindEvent toPost = new ItemBindEvent(player, uuid, stack); + if (MinecraftForge.EVENT_BUS.post(toPost) || toPost.getResult() == Result.DENY) + return; + + BindableHelper.setItemOwnerUUID(stack, uuid); + BindableHelper.setItemOwnerName(stack, player.getDisplayNameString()); + } + } else if (bindable.getOwnerUUID(stack).equals(PlayerHelper.getUUIDFromPlayer(player).toString()) && !bindable.getOwnerName(stack).equals(player.getDisplayNameString())) + BindableHelper.setItemOwnerName(stack, player.getDisplayNameString()); + } + + @SubscribeEvent(priority = EventPriority.HIGH) + public static void onTooltip(ItemTooltipEvent event) { + if (event.getItemStack().getItem() instanceof IBindable) + if (((IBindable) event.getItemStack().getItem()).getOwnerUUID(event.getItemStack()) != null) + event.getToolTip().add(I18n.format("tooltip.bloodmagic.currentOwner", PlayerHelper.getUsernameFromStack(event.getItemStack()))); + } + + @SubscribeEvent + public static void selfSacrificeEvent(SacrificeKnifeUsedEvent event) { EntityPlayer player = event.player; if (LivingArmour.hasFullSet(player)) { @@ -393,7 +421,7 @@ public class GenericHandler { // Drop Blood Shards @SubscribeEvent - public void onLivingDrops(LivingDropsEvent event) { + public static void onLivingDrops(LivingDropsEvent event) { EntityLivingBase attackedEntity = event.getEntityLiving(); DamageSource source = event.getSource(); Entity entity = source.getTrueSource(); @@ -411,7 +439,7 @@ public class GenericHandler { // Experience Tome @SubscribeEvent(priority = EventPriority.LOWEST) - public void onExperiencePickup(PlayerPickupXpEvent event) { + public static void onExperiencePickup(PlayerPickupXpEvent event) { EntityPlayer player = event.getEntityPlayer(); ItemStack itemstack = EnchantmentHelper.getEnchantedItem(Enchantments.MENDING, player); @@ -432,11 +460,11 @@ public class GenericHandler { } } - private int xpToDurability(int xp) { + private static int xpToDurability(int xp) { return xp * 2; } - private int durabilityToXp(int durability) { + private static int durabilityToXp(int durability) { return durability / 2; } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java index 903d77e9..a82dd6a0 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java @@ -1,7 +1,6 @@ package WayofTime.bloodmagic.util.handler.event; import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.annot.Handler; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; import WayofTime.bloodmagic.core.RegistrarBloodMagic; @@ -35,14 +34,16 @@ import net.minecraftforge.event.entity.living.LivingHealEvent; import net.minecraftforge.event.entity.player.ArrowLooseEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -@Handler +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) public class LivingArmourHandler { + @SubscribeEvent - public void onEntityHealed(LivingHealEvent event) { + public static void onEntityHealed(LivingHealEvent event) { if (event.getEntityLiving() instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.getEntity(); if (LivingArmour.hasFullSet(player)) { @@ -65,7 +66,7 @@ public class LivingArmourHandler { } @SubscribeEvent - public void onMiningSpeedCheck(PlayerEvent.BreakSpeed event) { + public static void onMiningSpeedCheck(PlayerEvent.BreakSpeed event) { EntityPlayer player = event.getEntityPlayer(); if (LivingArmour.hasFullSet(player)) { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); @@ -85,7 +86,7 @@ public class LivingArmourHandler { // Applies: Storm Trooper @SubscribeEvent - public void onEntityJoinedWorld(EntityJoinWorldEvent event) { + public static void onEntityJoinedWorld(EntityJoinWorldEvent event) { Entity owner = null; if (event.getEntity() instanceof EntityArrow) { owner = ((EntityArrow) event.getEntity()).shootingEntity; @@ -115,7 +116,7 @@ public class LivingArmourHandler { } @SubscribeEvent - public void onPlayerClick(PlayerInteractEvent event) { + public static void onPlayerClick(PlayerInteractEvent event) { if (event.isCancelable()) { EntityPlayer player = event.getEntityPlayer(); @@ -148,7 +149,7 @@ public class LivingArmourHandler { // Applies: Grim Reaper @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onEntityDeath(LivingDeathEvent event) { + public static void onEntityDeath(LivingDeathEvent event) { if (event.getEntityLiving() instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.getEntityLiving(); @@ -174,7 +175,7 @@ public class LivingArmourHandler { // Applies: Jump @SubscribeEvent - public void onJumpEvent(LivingEvent.LivingJumpEvent event) { + public static void onJumpEvent(LivingEvent.LivingJumpEvent event) { if (event.getEntityLiving() instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.getEntityLiving(); @@ -198,7 +199,7 @@ public class LivingArmourHandler { // Applies: Step Assist, Speed Boost @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onEntityUpdate(LivingEvent.LivingUpdateEvent event) { + public static void onEntityUpdate(LivingEvent.LivingUpdateEvent event) { if (event.getEntityLiving() instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.getEntityLiving(); boolean hasAssist = false; @@ -253,7 +254,7 @@ public class LivingArmourHandler { // Applies: Arrow Shot // Tracks: Arrow Shot @SubscribeEvent - public void onArrowFire(ArrowLooseEvent event) { + public static void onArrowFire(ArrowLooseEvent event) { World world = event.getEntityPlayer().getEntityWorld(); ItemStack stack = event.getBow(); EntityPlayer player = event.getEntityPlayer(); diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java index 78b03262..8aee28b8 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java @@ -1,7 +1,6 @@ package WayofTime.bloodmagic.util.handler.event; import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.annot.Handler; import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; import WayofTime.bloodmagic.item.armour.ItemLivingArmour; import WayofTime.bloodmagic.item.armour.ItemSentientArmour; @@ -24,17 +23,18 @@ import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.event.entity.player.PlayerPickupXpEvent; import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -@Handler +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) public class StatTrackerHandler { private static float lastPlayerSwingStrength = 0; // Tracks: Digging, DigSlowdown @SubscribeEvent - public void blockBreakEvent(BlockEvent.BreakEvent event) { + public static void blockBreakEvent(BlockEvent.BreakEvent event) { EntityPlayer player = event.getPlayer(); if (player != null) { if (LivingArmour.hasFullSet(player)) { @@ -53,7 +53,7 @@ public class StatTrackerHandler { // Tracks: Health Boost @SubscribeEvent - public void onEntityHealed(LivingHealEvent event) { + public static void onEntityHealed(LivingHealEvent event) { EntityLivingBase healedEntity = event.getEntityLiving(); if (!(healedEntity instanceof EntityPlayer)) { return; @@ -74,13 +74,13 @@ public class StatTrackerHandler { } @SubscribeEvent - public void onLivingAttack(AttackEntityEvent event) { + public static void onLivingAttack(AttackEntityEvent event) { lastPlayerSwingStrength = event.getEntityPlayer().getCooledAttackStrength(0); } // Tracks: Fall Protect, Arrow Protect, Physical Protect, Grave Digger, Sprint Attack, Critical Strike, Nocturnal Prowess @SubscribeEvent - public void entityHurt(LivingHurtEvent event) { + public static void entityHurt(LivingHurtEvent event) { DamageSource source = event.getSource(); Entity sourceEntity = event.getSource().getTrueSource(); EntityLivingBase attackedEntity = event.getEntityLiving(); @@ -153,7 +153,7 @@ public class StatTrackerHandler { // Tracks: Experienced @SubscribeEvent(priority = EventPriority.LOW) - public void onExperiencePickup(PlayerPickupXpEvent event) { + public static void onExperiencePickup(PlayerPickupXpEvent event) { EntityPlayer player = event.getEntityPlayer(); if (LivingArmour.hasFullSet(player)) { diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java index 6fc490c9..4857c90e 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java @@ -1,6 +1,6 @@ package WayofTime.bloodmagic.util.handler.event; -import WayofTime.bloodmagic.annot.Handler; +import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.soul.*; import WayofTime.bloodmagic.core.RegistrarBloodMagic; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; @@ -25,6 +25,7 @@ import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.player.EntityItemPickupEvent; import net.minecraftforge.event.world.ChunkDataEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; @@ -33,14 +34,14 @@ import java.util.HashMap; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; -@Handler +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) public class WillHandler { - private final HashMap serverTicks = new HashMap(); + private static final HashMap SERVER_TICKS = new HashMap(); // Adds Will to player @SubscribeEvent - public void onItemPickup(EntityItemPickupEvent event) { + public static void onItemPickup(EntityItemPickupEvent event) { ItemStack stack = event.getItem().getItem(); if (stack.getItem() instanceof IDemonWill) { EntityPlayer player = event.getEntityPlayer(); @@ -55,7 +56,7 @@ public class WillHandler { } @SubscribeEvent - public void onEntityAttacked(LivingDeathEvent event) { + public static void onEntityAttacked(LivingDeathEvent event) { if (event.getSource() instanceof EntityDamageSourceIndirect) { Entity sourceEntity = event.getSource().getImmediateSource(); @@ -67,7 +68,7 @@ public class WillHandler { // Add/Drop Demon Will for Player @SubscribeEvent - public void onLivingDrops(LivingDropsEvent event) { + public static void onLivingDrops(LivingDropsEvent event) { EntityLivingBase attackedEntity = event.getEntityLiving(); DamageSource source = event.getSource(); Entity entity = source.getTrueSource(); @@ -106,16 +107,16 @@ public class WillHandler { } @SubscribeEvent - public void onServerWorldTick(TickEvent.WorldTickEvent event) { + public static void onServerWorldTick(TickEvent.WorldTickEvent event) { if (event.world.isRemote) return; int dim = event.world.provider.getDimension(); if (event.phase == TickEvent.Phase.END) { - if (!this.serverTicks.containsKey(dim)) - this.serverTicks.put(dim, 0); + if (!SERVER_TICKS.containsKey(dim)) + SERVER_TICKS.put(dim, 0); - int ticks = (this.serverTicks.get(dim)); + int ticks = (SERVER_TICKS.get(dim)); if (ticks % 20 == 0) { CopyOnWriteArrayList dirtyChunks = WorldDemonWillHandler.dirtyChunks.get(dim); @@ -127,13 +128,13 @@ public class WillHandler { } } - this.serverTicks.put(dim, ticks + 1); + SERVER_TICKS.put(dim, ticks + 1); } } @SubscribeEvent - public void chunkSave(ChunkDataEvent.Save event) { + public static void chunkSave(ChunkDataEvent.Save event) { int dim = event.getWorld().provider.getDimension(); ChunkPos loc = event.getChunk().getPos(); @@ -150,7 +151,7 @@ public class WillHandler { } @SubscribeEvent - public void chunkLoad(ChunkDataEvent.Load event) { + public static void chunkLoad(ChunkDataEvent.Load event) { int dim = event.getWorld().provider.getDimension(); if (event.getData().getCompoundTag("BloodMagic").hasKey("base")) { NBTTagCompound nbt = event.getData().getCompoundTag("BloodMagic"); diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java deleted file mode 100644 index 069246a9..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import WayofTime.bloodmagic.api.recipe.TartaricForgeRecipe; -import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry; -import WayofTime.bloodmagic.api.registry.TartaricForgeRecipeRegistry; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraftforge.fml.common.registry.ForgeRegistries; - -public class RecipeHelper { - public static IRecipe getRecipeForOutput(ItemStack stack) { - for (IRecipe recipe : ForgeRegistries.RECIPES.getValues()) { - if (recipe != null) { - ItemStack resultStack = recipe.getRecipeOutput(); - if (!resultStack.isEmpty()) { - if (resultStack.getItem() == stack.getItem() && resultStack.getItemDamage() == stack.getItemDamage()) { - return recipe; - } - } - } - } - - return null; - } - - public static AltarRecipeRegistry.AltarRecipe getAltarRecipeForOutput(ItemStack stack) { - for (AltarRecipeRegistry.AltarRecipe recipe : AltarRecipeRegistry.getRecipes().values()) { - if (recipe != null && !recipe.isFillable()) { - ItemStack resultStack = recipe.getOutput(); - if (!resultStack.isEmpty()) { - if (resultStack.getItem() == stack.getItem() && resultStack.getItemDamage() == stack.getItemDamage()) { - return recipe; - } - } - } - } - - return null; - } - - public static TartaricForgeRecipe getForgeRecipeForOutput(ItemStack stack) { - for (TartaricForgeRecipe recipe : TartaricForgeRecipeRegistry.getRecipeList()) { - if (recipe != null) { - ItemStack resultStack = recipe.getRecipeOutput(); - if (!resultStack.isEmpty()) { - if (resultStack.getItem() == stack.getItem() && resultStack.getItemDamage() == stack.getItemDamage()) { - return recipe; - } - } - } - } - - return null; - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/component.json b/src/main/resources/assets/bloodmagic/blockstates/component.json index eb690f3b..435f0f9a 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/component.json +++ b/src/main/resources/assets/bloodmagic/blockstates/component.json @@ -6,117 +6,27 @@ }, "variants": { "type": { - "reagentwater": { - "textures": { - "layer0": "bloodmagic:items/ReagentWater" - } - }, - "reagentlava": { - "textures": { - "layer0": "bloodmagic:items/ReagentLava" - } - }, - "reagentair": { - "textures": { - "layer0": "bloodmagic:items/ReagentAir" - } - }, - "reagentfastminer": { - "textures": { - "layer0": "bloodmagic:items/ReagentFastMiner" - } - }, - "reagentvoid": { - "textures": { - "layer0": "bloodmagic:items/ReagentVoid" - } - }, - "reagentgrowth": { - "textures": { - "layer0": "bloodmagic:items/ReagentGrowth" - } - }, - "reagentaffinity": { - "textures": { - "layer0": "bloodmagic:items/ReagentAffinity" - } - }, - "reagentsight": { - "textures": { - "layer0": "bloodmagic:items/ReagentSight" - } - }, - "reagentbinding": { - "textures": { - "layer0": "bloodmagic:items/ReagentBinding" - } - }, - "reagentsuppression": { - "textures": { - "layer0": "bloodmagic:items/ReagentSuppression" - } - }, - "frameparts": { + "frame_part": { "textures": { "layer0": "bloodmagic:items/ComponentFrameParts" } }, - "reagentbloodlight": { - "textures": { - "layer0": "bloodmagic:items/ReagentBloodLight" - } - }, - "reagentmagnetism": { - "textures": { - "layer0": "bloodmagic:items/ReagentMagnetism" - } - }, - "reagenthaste": { - "textures": { - "layer0": "bloodmagic:items/ReagentHaste" - } - }, - "reagentcompression": { - "textures": { - "layer0": "bloodmagic:items/ReagentCompression" - } - }, - "reagentbridge": { - "textures": { - "layer0": "bloodmagic:items/ReagentBridge" - } - }, - "reagentseverance": { - "textures": { - "layer0": "bloodmagic:items/ReagentSeverance" - } - }, - "reagentteleposition": { - "textures": { - "layer0": "bloodmagic:items/ReagentTeleposition" - } - }, - "reagenttransposition": { - "textures": { - "layer0": "bloodmagic:items/ReagentTransposition" - } - }, - "ironsand": { + "sand_iron": { "textures": { "layer0": "bloodmagic:items/IronSand" } }, - "goldsand": { + "sand_gold": { "textures": { "layer0": "bloodmagic:items/GoldSand" } }, - "coalsand": { + "sand_coal": { "textures": { "layer0": "bloodmagic:items/CoalSand" } }, - "plantoil": { + "plant_oil": { "textures": { "layer0": "bloodmagic:items/PlantOil" } @@ -131,7 +41,7 @@ "layer0": "bloodmagic:items/Saltpeter" } }, - "neurotoxin": { + "neuro_toxin": { "textures": { "layer0": "bloodmagic:items/NeuroToxin" } @@ -141,35 +51,15 @@ "layer0": "bloodmagic:items/Antiseptic" } }, - "reagentholding": { - "textures": { - "layer0": "bloodmagic:items/ReagentHolding" - } - }, - "mundanelength": { + "catalyst_length_1": { "textures": { "layer0": "bloodmagic:items/MundaneLengtheningCatalyst" } }, - "mundanepower": { + "catalyst_power_1": { "textures": { "layer0": "bloodmagic:items/MundanePowerCatalyst" } - }, - "reagentclaw": { - "textures": { - "layer0": "bloodmagic:items/ReagentClaw" - } - }, - "reagentbounce": { - "textures": { - "layer0": "bloodmagic:items/ReagentBounce" - } - }, - "reagentfrost": { - "textures": { - "layer0": "bloodmagic:items/ReagentFrost" - } } } } diff --git a/src/main/resources/assets/bloodmagic/blockstates/reagent.json b/src/main/resources/assets/bloodmagic/blockstates/reagent.json new file mode 100644 index 00000000..ed82a929 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/reagent.json @@ -0,0 +1,121 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "builtin/generated", + "transform": "forge:default-item" + }, + "variants": { + "type": { + "reagent_water": { + "textures": { + "layer0": "bloodmagic:items/ReagentWater" + } + }, + "reagent_lava": { + "textures": { + "layer0": "bloodmagic:items/ReagentLava" + } + }, + "reagent_air": { + "textures": { + "layer0": "bloodmagic:items/ReagentAir" + } + }, + "reagent_fastminer": { + "textures": { + "layer0": "bloodmagic:items/ReagentFastMiner" + } + }, + "reagent_void": { + "textures": { + "layer0": "bloodmagic:items/ReagentVoid" + } + }, + "reagent_growth": { + "textures": { + "layer0": "bloodmagic:items/ReagentGrowth" + } + }, + "reagent_affinity": { + "textures": { + "layer0": "bloodmagic:items/ReagentAffinity" + } + }, + "reagent_sight": { + "textures": { + "layer0": "bloodmagic:items/ReagentSight" + } + }, + "reagent_binding": { + "textures": { + "layer0": "bloodmagic:items/ReagentBinding" + } + }, + "reagent_suppression": { + "textures": { + "layer0": "bloodmagic:items/ReagentSuppression" + } + }, + "reagent_bloodlight": { + "textures": { + "layer0": "bloodmagic:items/ReagentBloodLight" + } + }, + "reagent_magnetism": { + "textures": { + "layer0": "bloodmagic:items/ReagentMagnetism" + } + }, + "reagent_haste": { + "textures": { + "layer0": "bloodmagic:items/ReagentHaste" + } + }, + "reagent_compression": { + "textures": { + "layer0": "bloodmagic:items/ReagentCompression" + } + }, + "reagent_bridge": { + "textures": { + "layer0": "bloodmagic:items/ReagentBridge" + } + }, + "reagent_severance": { + "textures": { + "layer0": "bloodmagic:items/ReagentSeverance" + } + }, + "reagent_teleposition": { + "textures": { + "layer0": "bloodmagic:items/ReagentTeleposition" + } + }, + "reagent_transposition": { + "textures": { + "layer0": "bloodmagic:items/ReagentTransposition" + } + }, + "reagent_holding": { + "textures": { + "layer0": "bloodmagic:items/ReagentHolding" + } + }, + "reagent_claw": { + "textures": { + "layer0": "bloodmagic:items/ReagentClaw" + } + }, + "reagent_bounce": { + "textures": { + "layer0": "bloodmagic:items/ReagentBounce" + } + }, + "reagent_frost": { + "textures": { + "layer0": "bloodmagic:items/ReagentFrost" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_air.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_air.json index 32f44849..caaa2b92 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_air.json +++ b/src/main/resources/assets/bloodmagic/blockstates/sigil_air.json @@ -5,12 +5,10 @@ "transform": "forge:default-item" }, "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/AirSigil" - } + "inventory": [{ + "textures": { + "layer0": "bloodmagic:items/AirSigil" } - } + }] } } \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_blood_light.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_blood_light.json index dc5b4f19..c82ae4de 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_blood_light.json +++ b/src/main/resources/assets/bloodmagic/blockstates/sigil_blood_light.json @@ -5,12 +5,10 @@ "transform": "forge:default-item" }, "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/BloodLightSigil" - } + "inventory": [{ + "textures": { + "layer0": "bloodmagic:items/BloodLightSigil" } - } + }] } } \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_divination.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_divination.json index 184354d6..161209bd 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_divination.json +++ b/src/main/resources/assets/bloodmagic/blockstates/sigil_divination.json @@ -5,12 +5,10 @@ "transform": "forge:default-item" }, "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/DivinationSigil" - } + "inventory": [{ + "textures": { + "layer0": "bloodmagic:items/DivinationSigil" } - } + }] } } \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_lava.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_lava.json index fde7dbbc..3e264e84 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_lava.json +++ b/src/main/resources/assets/bloodmagic/blockstates/sigil_lava.json @@ -5,12 +5,10 @@ "transform": "forge:default-item" }, "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/LavaSigil" - } + "inventory": [{ + "textures": { + "layer0": "bloodmagic:items/lavasigil" } - } + }] } } \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_teleposition.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_teleposition.json index 84d1fe93..c46bdb91 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_teleposition.json +++ b/src/main/resources/assets/bloodmagic/blockstates/sigil_teleposition.json @@ -5,12 +5,10 @@ "transform": "forge:default-item" }, "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/TelepositionSigil" - } + "inventory": [{ + "textures": { + "layer0": "bloodmagic:items/telepositionsigil" } - } + }] } } \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_transposition.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_transposition.json index bb09cc7d..616df1e8 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_transposition.json +++ b/src/main/resources/assets/bloodmagic/blockstates/sigil_transposition.json @@ -5,12 +5,10 @@ "transform": "forge:default-item" }, "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/TranspositionSigil" - } + "inventory": [{ + "textures": { + "layer0": "bloodmagic:items/transpositionsigil" } - } + }] } } \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_water.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_water.json index 9f76d28b..81b7c857 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_water.json +++ b/src/main/resources/assets/bloodmagic/blockstates/sigil_water.json @@ -5,12 +5,10 @@ "transform": "forge:default-item" }, "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/WaterSigil" - } + "inventory": [{ + "textures": { + "layer0": "bloodmagic:items/watersigil" } - } + }] } } \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 1c8ac9bf..bc712392 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -66,47 +66,44 @@ item.bloodmagic.reagent.potentia.name=Potentia item.bloodmagic.bloodShard.weak.name=Weak Blood Shard item.bloodmagic.bloodShard.demon.name=Demon Blood Shard -item.bloodmagic.baseComponent.reagentWater.name=Water Reagent -item.bloodmagic.baseComponent.reagentLava.name=Lava Reagent -item.bloodmagic.baseComponent.reagentAir.name=Air Reagent -item.bloodmagic.baseComponent.reagentFastMiner.name=Mining Reagent -item.bloodmagic.baseComponent.reagentVoid.name=Void Reagent -item.bloodmagic.baseComponent.reagentGrowth.name=Growth Reagent -item.bloodmagic.baseComponent.reagentAffinity.name=Elemental Affinity Reagent -item.bloodmagic.baseComponent.reagentSight.name=Sight Reagent -item.bloodmagic.baseComponent.reagentBinding.name=Binding Reagent -item.bloodmagic.baseComponent.reagentSuppression.name=Suppression Reagent -item.bloodmagic.baseComponent.frameParts.name=Frame Parts -item.bloodmagic.baseComponent.reagentBloodLight.name=Blood Lamp Reagent -item.bloodmagic.baseComponent.reagentMagnetism.name=Magnetism Reagent -item.bloodmagic.baseComponent.reagentHaste.name=Haste Reagent -item.bloodmagic.baseComponent.reagentBridge.name=Phantom Bridge Reagent -item.bloodmagic.baseComponent.reagentCompression.name=Compression Reagent -item.bloodmagic.baseComponent.reagentSeverance.name=Severance Reagent -item.bloodmagic.baseComponent.reagentHolding.name=Holding Reagent -item.bloodmagic.baseComponent.reagentClaw.name=Claw Reagent -item.bloodmagic.baseComponent.reagentBounce.name=Elasticity Reagent -item.bloodmagic.baseComponent.reagentFrost.name=Frost Reagent +item.bloodmagic.reagent.reagent_water.name=Water Reagent +item.bloodmagic.reagent.reagent_lava.name=Lava Reagent +item.bloodmagic.reagent.reagent_air.name=Air Reagent +item.bloodmagic.reagent.reagent_fastMiner.name=Mining Reagent +item.bloodmagic.reagent.reagent_void.name=Void Reagent +item.bloodmagic.reagent.reagent_growth.name=Growth Reagent +item.bloodmagic.reagent.reagent_affinity.name=Elemental Affinity Reagent +item.bloodmagic.reagent.reagent_sight.name=Sight Reagent +item.bloodmagic.reagent.reagent_binding.name=Binding Reagent +item.bloodmagic.reagent.reagent_suppression.name=Suppression Reagent +item.bloodmagic.reagent.reagent_bloodlight.name=Blood Lamp Reagent +item.bloodmagic.reagent.reagent_magnetism.name=Magnetism Reagent +item.bloodmagic.reagent.reagent_haste.name=Haste Reagent +item.bloodmagic.reagent.reagent_bridge.name=Phantom Bridge Reagent +item.bloodmagic.reagent.reagent_compression.name=Compression Reagent +item.bloodmagic.reagent.reagent_severance.name=Severance Reagent +item.bloodmagic.reagent.reagent_holding.name=Holding Reagent +item.bloodmagic.reagent.reagent_claw.name=Claw Reagent +item.bloodmagic.reagent.reagent_bounce.name=Elasticity Reagent +item.bloodmagic.reagent.reagent_frost.name=Frost Reagent +item.bloodmagic.reagent.reagent_teleposition.name=Teleposition Reagent +item.bloodmagic.reagent.reagent_transposition.name=Transposition Reagent -item.bloodmagic.baseComponent.reagentTeleposition.name=Teleposition Reagent -item.bloodmagic.baseComponent.reagentTransposition.name=Transposition Reagent - -item.bloodmagic.baseComponent.ironSand.name=Iron Sand -item.bloodmagic.baseComponent.goldSand.name=Gold Sand -item.bloodmagic.baseComponent.coalSand.name=Coal Sand -item.bloodmagic.baseComponent.plantOil.name=Plant Oil -item.bloodmagic.baseComponent.sulfur.name=Sulfur -item.bloodmagic.baseComponent.saltpeter.name=Saltpeter -item.bloodmagic.baseComponent.neurotoxin.name=Neuro Toxin -item.bloodmagic.baseComponent.antiseptic.name=Antiseptic +item.bloodmagic.component.frame_part.name=Frame Parts +item.bloodmagic.component.sand_iron.name=Iron Sand +item.bloodmagic.component.sand_gold.name=Gold Sand +item.bloodmagic.component.sand_coal.name=Coal Sand +item.bloodmagic.component.plant_oil.name=Plant Oil +item.bloodmagic.component.sulfur.name=Sulfur +item.bloodmagic.component.saltpeter.name=Saltpeter +item.bloodmagic.component.neuro_toxin.name=Neuro Toxin +item.bloodmagic.component.antiseptic.name=Antiseptic +item.bloodmagic.component.catalyst_length_1.name=Simple Lengthening Catalyst +item.bloodmagic.component.catalyst_power_1.name=Simple Power Catalyst item.bloodmagic.cuttingFluid.basicCuttingFluid.name=Basic Cutting Fluid item.bloodmagic.cuttingFluid.explosive.name=Explosive Powder -item.bloodmagic.baseComponent.mundaneLength.name=Simple Lengthening Catalyst -item.bloodmagic.baseComponent.mundanePower.name=Simple Power Catalyst - - item.bloodmagic.demonCrystal.crystalDefault.name=Demon Will Crystal item.bloodmagic.demonCrystal.crystalCorrosive.name=Corrosive Will Crystal item.bloodmagic.demonCrystal.crystalDestructive.name=Destructive Will Crystal diff --git a/src/main/resources/assets/bloodmagic/recipes/_constants.json b/src/main/resources/assets/bloodmagic/recipes/_constants.json new file mode 100644 index 00000000..4685f9ef --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/_constants.json @@ -0,0 +1,128 @@ +[ + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "blockGlass" + }, + "name": "BLOCKGLASS" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "blockIron" + }, + "name": "BLOCKIRON" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "cobblestone" + }, + "name": "COBBLESTONE" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "dustGlowstone" + }, + "name": "DUSTGLOWSTONE" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + }, + "name": "DUSTREDSTONE" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "dyeGreen" + }, + "name": "DYEGREEN" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "dyePurple" + }, + "name": "DYEPURPLE" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "dyeYellow" + }, + "name": "DYEYELLOW" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "gemDiamond" + }, + "name": "GEMDIAMOND" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "glowstone" + }, + "name": "GLOWSTONE" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "ingotGold" + }, + "name": "INGOTGOLD" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "ingotIron" + }, + "name": "INGOTIRON" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "nuggetGold" + }, + "name": "NUGGETGOLD" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "plankWood" + }, + "name": "PLANKWOOD" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "name": "STICKWOOD" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "stone" + }, + "name": "STONE" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "string" + }, + "name": "STRING" + }, + { + "ingredient": { + "type": "forge:ore_dict", + "ore": "torch" + }, + "name": "TORCH" + } +] \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/activation_crystal.json b/src/main/resources/assets/bloodmagic/recipes/activation_crystal.json new file mode 100644 index 00000000..3f376baa --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/activation_crystal.json @@ -0,0 +1,16 @@ +{ + "result": { + "item": "bloodmagic:activation_crystal", + "data": 1 + }, + "ingredients": [ + { + "item": "minecraft:nether_star" + }, + { + "type": "bloodmagic:orb", + "orb": "bloodmagic:archmage" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/alchemy_table.json b/src/main/resources/assets/bloodmagic/recipes/alchemy_table.json new file mode 100644 index 00000000..ab2cc8c2 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/alchemy_table.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "bloodmagic:alchemy_table" + }, + "pattern": [ + "sss", + "wbw", + "gog" + ], + "type": "forge:ore_shaped", + "key": { + "b": { + "item": "minecraft:blaze_rod" + }, + "s": { + "item": "#STONE" + }, + "w": { + "item": "#PLANKWOOD" + }, + "g": { + "item": "#INGOTGOLD" + }, + "o": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:weak" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/altar.json b/src/main/resources/assets/bloodmagic/recipes/altar.json new file mode 100644 index 00000000..f346a26f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/altar.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:altar" + }, + "pattern": [ + "a a", + "aba", + "cdc" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#STONE" + }, + "b": { + "item": "minecraft:furnace" + }, + "c": { + "item": "#INGOTGOLD" + }, + "d": { + "item": "bloodmagic:monster_soul", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/base_item_filter_0.json b/src/main/resources/assets/bloodmagic/recipes/base_item_filter_0.json new file mode 100644 index 00000000..1655e10c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/base_item_filter_0.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "bloodmagic:base_item_filter", + "data": 0 + }, + "pattern": [ + "sgs", + "gfg", + "sgs" + ], + "type": "forge:ore_shaped", + "key": { + "s": { + "item": "#STICKWOOD" + }, + "f": { + "item": "bloodmagic:component", + "data": 10 + }, + "g": { + "item": "#BLOCKGLASS" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/base_item_filter_1.json b/src/main/resources/assets/bloodmagic/recipes/base_item_filter_1.json new file mode 100644 index 00000000..6f529b90 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/base_item_filter_1.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "bloodmagic:base_item_filter", + "data": 1 + }, + "pattern": [ + "sgs", + "gfg", + "sgs" + ], + "type": "forge:ore_shaped", + "key": { + "s": { + "item": "#STICKWOOD" + }, + "f": { + "item": "bloodmagic:component", + "data": 10 + }, + "g": { + "item": "#DYEYELLOW" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/base_item_filter_2.json b/src/main/resources/assets/bloodmagic/recipes/base_item_filter_2.json new file mode 100644 index 00000000..8f82c2f4 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/base_item_filter_2.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "bloodmagic:base_item_filter", + "data": 2 + }, + "pattern": [ + "sgs", + "gfg", + "sgs" + ], + "type": "forge:ore_shaped", + "key": { + "s": { + "item": "#STICKWOOD" + }, + "f": { + "item": "bloodmagic:component", + "data": 10 + }, + "g": { + "item": "#DYEGREEN" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/base_item_filter_3.json b/src/main/resources/assets/bloodmagic/recipes/base_item_filter_3.json new file mode 100644 index 00000000..a7459853 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/base_item_filter_3.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "bloodmagic:base_item_filter", + "data": 3 + }, + "pattern": [ + "sgs", + "gfg", + "sgs" + ], + "type": "forge:ore_shaped", + "key": { + "s": { + "item": "#STICKWOOD" + }, + "f": { + "item": "bloodmagic:component", + "data": 10 + }, + "g": { + "item": "#DYEPURPLE" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_acceleration.json b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_acceleration.json new file mode 100644 index 00000000..885311d0 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_acceleration.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "bloodmagic:blood_rune", + "data": 9 + }, + "pattern": [ + "aba", + "cdc", + "aea" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "minecraft:bucket" + }, + "b": { + "item": "bloodmagic:slate", + "data": 3 + }, + "c": { + "item": "#INGOTGOLD" + }, + "d": { + "item": "bloodmagic:blood_rune", + "data": 1 + }, + "e": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:master" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_augcapacity.json b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_augcapacity.json new file mode 100644 index 00000000..2c63c590 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_augcapacity.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "bloodmagic:blood_rune", + "data": 7 + }, + "pattern": [ + "aba", + "cdc", + "aea" + ], + "type": "minecraft:crafting_shaped", + "key": { + "a": { + "item": "minecraft:obsidian" + }, + "b": { + "item": "bloodmagic:slate", + "data": 3 + }, + "c": { + "item": "minecraft:bucket" + }, + "d": { + "item": "bloodmagic:blood_rune", + "data": 6 + }, + "e": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:master" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_blank.json b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_blank.json new file mode 100644 index 00000000..1a354301 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_blank.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "pattern": [ + "aaa", + "bcb", + "aaa" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#STONE" + }, + "b": { + "item": "bloodmagic:slate", + "data": 0 + }, + "c": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:weak" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_capacity.json b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_capacity.json new file mode 100644 index 00000000..e3b8a876 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_capacity.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "bloodmagic:blood_rune", + "data": 6 + }, + "pattern": [ + "aba", + "bcb", + "ada" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#STONE" + }, + "b": { + "item": "minecraft:bucket" + }, + "c": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "d": { + "item": "bloodmagic:slate", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_charging.json b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_charging.json new file mode 100644 index 00000000..7ebc7383 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_charging.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "bloodmagic:blood_rune", + "data": 10 + }, + "pattern": [ + "RsR", + "GrG", + "ReR" + ], + "type": "forge:ore_shaped", + "key": { + "R": { + "item": "#DUSTREDSTONE" + }, + "r": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "s": { + "item": "bloodmagic:slate", + "data": 3 + }, + "e": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:master" + }, + "G": { + "item": "#GLOWSTONE" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_displacement.json b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_displacement.json new file mode 100644 index 00000000..54b8c8c4 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_displacement.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "bloodmagic:blood_rune", + "data": 5 + }, + "pattern": [ + "aba", + "bcb", + "ada" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#STONE" + }, + "b": { + "item": "minecraft:water_bucket" + }, + "c": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "d": { + "item": "bloodmagic:slate", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_orb.json b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_orb.json new file mode 100644 index 00000000..9f76c1a9 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_orb.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "bloodmagic:blood_rune", + "data": 8 + }, + "pattern": [ + "aba", + "cdc", + "aba" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#STONE" + }, + "b": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:weak" + }, + "c": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "d": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:master" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_sacrifice.json b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_sacrifice.json new file mode 100644 index 00000000..70e2c399 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_sacrifice.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "bloodmagic:blood_rune", + "data": 3 + }, + "pattern": [ + "aba", + "cdc", + "aea" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#STONE" + }, + "b": { + "item": "bloodmagic:slate", + "data": 1 + }, + "c": { + "item": "#INGOTGOLD" + }, + "d": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "e": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:apprentice" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_selfsacrifice.json b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_selfsacrifice.json new file mode 100644 index 00000000..af7f3bc3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_selfsacrifice.json @@ -0,0 +1,32 @@ +{ + "result": { + "item": "bloodmagic:blood_rune", + "data": 4 + }, + "pattern": [ + "aba", + "cdc", + "aea" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#STONE" + }, + "b": { + "item": "bloodmagic:slate", + "data": 1 + }, + "c": { + "item": "#DUSTGLOWSTONE" + }, + "d": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "e": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:apprentice" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_speed.json b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_speed.json new file mode 100644 index 00000000..b161a4af --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_speed.json @@ -0,0 +1,28 @@ +{ + "result": { + "item": "bloodmagic:blood_rune", + "data": 1 + }, + "pattern": [ + "aba", + "cdc", + "aba" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#STONE" + }, + "b": { + "item": "bloodmagic:slate", + "data": 0 + }, + "c": { + "item": "minecraft:sugar" + }, + "d": { + "item": "bloodmagic:blood_rune", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_0.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_0.json new file mode 100644 index 00000000..756d43af --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_0.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 0 + }, + "pattern": [ + "RBR", + "G G", + "RRR" + ], + "type": "forge:ore_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "G": { + "item": "#BLOCKGLASS" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_1.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_1.json new file mode 100644 index 00000000..5167464b --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_1.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 1 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_10.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_10.json new file mode 100644 index 00000000..fdf4337f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_10.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 10 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 9 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_11.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_11.json new file mode 100644 index 00000000..1aee0e5e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_11.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 11 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 10 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_12.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_12.json new file mode 100644 index 00000000..ac198a0d --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_12.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 12 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 11 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_13.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_13.json new file mode 100644 index 00000000..7d3511fc --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_13.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 13 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 12 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_14.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_14.json new file mode 100644 index 00000000..057ef84b --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_14.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 14 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 13 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_15.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_15.json new file mode 100644 index 00000000..9c12b336 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_15.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 15 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 14 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_2.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_2.json new file mode 100644 index 00000000..46e11986 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_2.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 2 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 1 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_3.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_3.json new file mode 100644 index 00000000..62d52c96 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_3.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 3 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_4.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_4.json new file mode 100644 index 00000000..88b6b83e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_4.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 4 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 3 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_5.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_5.json new file mode 100644 index 00000000..8d6db55e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_5.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 5 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 4 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_6.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_6.json new file mode 100644 index 00000000..9304a747 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_6.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 6 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 5 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_7.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_7.json new file mode 100644 index 00000000..7decd313 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_7.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 7 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 6 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_8.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_8.json new file mode 100644 index 00000000..8181bfae --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_8.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 8 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 7 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_9.json b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_9.json new file mode 100644 index 00000000..e1237382 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_9.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:blood_tank", + "data": 9 + }, + "pattern": [ + "RBR", + "T T", + "RRR" + ], + "type": "minecraft:crafting_shaped", + "key": { + "R": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "B": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "T": { + "item": "bloodmagic:blood_tank", + "data": 8 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/decorative_brick_bloodstone_brick.json b/src/main/resources/assets/bloodmagic/recipes/decorative_brick_bloodstone_brick.json new file mode 100644 index 00000000..636c8710 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/decorative_brick_bloodstone_brick.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:decorative_brick", + "data": 1, + "count": 4 + }, + "pattern": [ + "aa", + "aa" + ], + "type": "minecraft:crafting_shaped", + "key": { + "a": { + "item": "bloodmagic:decorative_brick", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/decorative_brick_bloodstone_tile.json b/src/main/resources/assets/bloodmagic/recipes/decorative_brick_bloodstone_tile.json new file mode 100644 index 00000000..9dc01b3e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/decorative_brick_bloodstone_tile.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "bloodmagic:decorative_brick", + "data": 0, + "count": 16 + }, + "ingredients": [ + { + "item": "#STONE" + }, + { + "item": "bloodmagic:blood_shard", + "data": 0 + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_corrosive.json new file mode 100644 index 00000000..021815ad --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_corrosive.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_1", + "data": 1, + "count": 4 + }, + "pattern": [ + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 1 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_destructive.json new file mode 100644 index 00000000..ce28a636 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_destructive.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_1", + "data": 2, + "count": 4 + }, + "pattern": [ + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_raw.json new file mode 100644 index 00000000..60a2b525 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_raw.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_1", + "data": 0, + "count": 4 + }, + "pattern": [ + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_steadfast.json new file mode 100644 index 00000000..7aff9cee --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_steadfast.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_1", + "data": 4, + "count": 4 + }, + "pattern": [ + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 4 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_vengeful.json new file mode 100644 index 00000000..4904ae75 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_vengeful.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_1", + "data": 3, + "count": 4 + }, + "pattern": [ + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 3 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_corrosive.json new file mode 100644 index 00000000..11e92c0e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_corrosive.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 1 + }, + "pattern": [ + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_1", + "data": 1 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_destructive.json new file mode 100644 index 00000000..b3956493 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_destructive.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 2 + }, + "pattern": [ + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_1", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_raw.json new file mode 100644 index 00000000..7137a604 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_raw.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 0 + }, + "pattern": [ + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_1", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_steadfast.json new file mode 100644 index 00000000..24142cf4 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_steadfast.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 4 + }, + "pattern": [ + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_1", + "data": 4 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_vengeful.json new file mode 100644 index 00000000..6a889c25 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_vengeful.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 3 + }, + "pattern": [ + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_1", + "data": 3 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_corrosive.json new file mode 100644 index 00000000..cc134c02 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_corrosive.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 6, + "count": 9 + }, + "pattern": [ + "scs", + "ccc", + "scs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 1 + }, + "c": { + "item": "bloodmagic:demon_brick_1", + "data": 1 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_destructive.json new file mode 100644 index 00000000..305ed3a7 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_destructive.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 7, + "count": 9 + }, + "pattern": [ + "scs", + "ccc", + "scs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 2 + }, + "c": { + "item": "bloodmagic:demon_brick_1", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_raw.json new file mode 100644 index 00000000..a9aa5a77 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_raw.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 5, + "count": 9 + }, + "pattern": [ + "scs", + "ccc", + "scs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 0 + }, + "c": { + "item": "bloodmagic:demon_brick_1", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_steadfast.json new file mode 100644 index 00000000..718356e2 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_steadfast.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 9, + "count": 9 + }, + "pattern": [ + "scs", + "ccc", + "scs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 4 + }, + "c": { + "item": "bloodmagic:demon_brick_1", + "data": 4 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_vengeful.json new file mode 100644 index 00000000..caa3ad55 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_vengeful.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 8, + "count": 9 + }, + "pattern": [ + "scs", + "ccc", + "scs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 3 + }, + "c": { + "item": "bloodmagic:demon_brick_1", + "data": 3 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_corrosive.json new file mode 100644 index 00000000..46cc1293 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_corrosive.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 11, + "count": 9 + }, + "pattern": [ + "scs", + "coc", + "scs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 1 + }, + "c": { + "item": "bloodmagic:demon_brick_1", + "data": 1 + }, + "o": { + "item": "bloodmagic:item_demon_crystal", + "data": 1 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_destructive.json new file mode 100644 index 00000000..17bc0d0e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_destructive.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 12, + "count": 9 + }, + "pattern": [ + "scs", + "coc", + "scs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 2 + }, + "c": { + "item": "bloodmagic:demon_brick_1", + "data": 2 + }, + "o": { + "item": "bloodmagic:item_demon_crystal", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_raw.json new file mode 100644 index 00000000..0e6832a4 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_raw.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 10, + "count": 9 + }, + "pattern": [ + "scs", + "coc", + "scs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 0 + }, + "c": { + "item": "bloodmagic:demon_brick_1", + "data": 0 + }, + "o": { + "item": "bloodmagic:item_demon_crystal", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_steadfast.json new file mode 100644 index 00000000..d221cbe8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_steadfast.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 14, + "count": 9 + }, + "pattern": [ + "scs", + "coc", + "scs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 4 + }, + "c": { + "item": "bloodmagic:demon_brick_1", + "data": 4 + }, + "o": { + "item": "bloodmagic:item_demon_crystal", + "data": 4 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_vengeful.json new file mode 100644 index 00000000..32fbbeec --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_vengeful.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "bloodmagic:demon_brick_2", + "data": 13, + "count": 9 + }, + "pattern": [ + "scs", + "coc", + "scs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 3 + }, + "c": { + "item": "bloodmagic:demon_brick_1", + "data": 3 + }, + "o": { + "item": "bloodmagic:item_demon_crystal", + "data": 3 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_corrosive.json new file mode 100644 index 00000000..28bf109a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_corrosive.json @@ -0,0 +1,38 @@ +{ + "result": { + "item": "bloodmagic:demon_extras", + "data": 1, + "count": 16 + }, + "ingredients": [ + { + "item": "bloodmagic:item_demon_crystal", + "data": 1 + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_destructive.json new file mode 100644 index 00000000..b190c56f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_destructive.json @@ -0,0 +1,38 @@ +{ + "result": { + "item": "bloodmagic:demon_extras", + "data": 2, + "count": 16 + }, + "ingredients": [ + { + "item": "bloodmagic:item_demon_crystal", + "data": 2 + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_raw.json new file mode 100644 index 00000000..aeb276b6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_raw.json @@ -0,0 +1,38 @@ +{ + "result": { + "item": "bloodmagic:demon_extras", + "data": 0, + "count": 16 + }, + "ingredients": [ + { + "item": "bloodmagic:item_demon_crystal", + "data": 0 + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_steadfast.json new file mode 100644 index 00000000..a03834f8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_steadfast.json @@ -0,0 +1,38 @@ +{ + "result": { + "item": "bloodmagic:demon_extras", + "data": 4, + "count": 16 + }, + "ingredients": [ + { + "item": "bloodmagic:item_demon_crystal", + "data": 4 + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_vengeful.json new file mode 100644 index 00000000..86e63596 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_vengeful.json @@ -0,0 +1,38 @@ +{ + "result": { + "item": "bloodmagic:demon_extras", + "data": 3, + "count": 16 + }, + "ingredients": [ + { + "item": "bloodmagic:item_demon_crystal", + "data": 3 + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_corrosive.json new file mode 100644 index 00000000..6396fc8f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_corrosive.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "bloodmagic:demon_light", + "data": 1, + "count": 5 + }, + "pattern": [ + "sgs", + "ggg", + "sgs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 6 + }, + "g": { + "item": "minecraft:glowstone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_destructive.json new file mode 100644 index 00000000..d7d99aa5 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_destructive.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "bloodmagic:demon_light", + "data": 2, + "count": 5 + }, + "pattern": [ + "sgs", + "ggg", + "sgs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 7 + }, + "g": { + "item": "minecraft:glowstone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_raw.json new file mode 100644 index 00000000..8817d3ad --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_raw.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "bloodmagic:demon_light", + "data": 0, + "count": 5 + }, + "pattern": [ + "sgs", + "ggg", + "sgs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 5 + }, + "g": { + "item": "minecraft:glowstone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_steadfast.json new file mode 100644 index 00000000..cf27ceb3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_steadfast.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "bloodmagic:demon_light", + "data": 4, + "count": 5 + }, + "pattern": [ + "sgs", + "ggg", + "sgs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 9 + }, + "g": { + "item": "minecraft:glowstone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_vengeful.json new file mode 100644 index 00000000..dfcf5d75 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_vengeful.json @@ -0,0 +1,22 @@ +{ + "result": { + "item": "bloodmagic:demon_light", + "data": 3, + "count": 5 + }, + "pattern": [ + "sgs", + "ggg", + "sgs" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 8 + }, + "g": { + "item": "minecraft:glowstone" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_corrosive.json new file mode 100644 index 00000000..4448dbfe --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_corrosive.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_1", + "data": 1, + "count": 6 + }, + "pattern": [ + "ss", + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 6 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_destructive.json new file mode 100644 index 00000000..c7ae8aed --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_destructive.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_1", + "data": 2, + "count": 6 + }, + "pattern": [ + "ss", + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 7 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_raw.json new file mode 100644 index 00000000..afee6a8d --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_raw.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_1", + "data": 0, + "count": 6 + }, + "pattern": [ + "ss", + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 5 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_steadfast.json new file mode 100644 index 00000000..fbf5d7e0 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_steadfast.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_1", + "data": 4, + "count": 6 + }, + "pattern": [ + "ss", + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 9 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_vengeful.json new file mode 100644 index 00000000..f9f079d6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_vengeful.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_1", + "data": 3, + "count": 6 + }, + "pattern": [ + "ss", + "ss", + "ss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 8 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_corrosive.json new file mode 100644 index 00000000..e74a80a8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_corrosive.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_2", + "data": 1, + "count": 8 + }, + "pattern": [ + "ppp", + "pcp", + "ppp" + ], + "type": "minecraft:crafting_shaped", + "key": { + "p": { + "item": "bloodmagic:demon_pillar_1", + "data": 1 + }, + "c": { + "item": "bloodmagic:item_demon_crystal", + "data": 1 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_destructive.json new file mode 100644 index 00000000..8869bc5f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_destructive.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_2", + "data": 2, + "count": 8 + }, + "pattern": [ + "ppp", + "pcp", + "ppp" + ], + "type": "minecraft:crafting_shaped", + "key": { + "p": { + "item": "bloodmagic:demon_pillar_1", + "data": 2 + }, + "c": { + "item": "bloodmagic:item_demon_crystal", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_raw.json new file mode 100644 index 00000000..cdc818ac --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_raw.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_2", + "data": 0, + "count": 8 + }, + "pattern": [ + "ppp", + "pcp", + "ppp" + ], + "type": "minecraft:crafting_shaped", + "key": { + "p": { + "item": "bloodmagic:demon_pillar_1", + "data": 0 + }, + "c": { + "item": "bloodmagic:item_demon_crystal", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_steadfast.json new file mode 100644 index 00000000..fab79b32 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_steadfast.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_2", + "data": 4, + "count": 8 + }, + "pattern": [ + "ppp", + "pcp", + "ppp" + ], + "type": "minecraft:crafting_shaped", + "key": { + "p": { + "item": "bloodmagic:demon_pillar_1", + "data": 4 + }, + "c": { + "item": "bloodmagic:item_demon_crystal", + "data": 4 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_vengeful.json new file mode 100644 index 00000000..2b65e834 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_vengeful.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_2", + "data": 3, + "count": 8 + }, + "pattern": [ + "ppp", + "pcp", + "ppp" + ], + "type": "minecraft:crafting_shaped", + "key": { + "p": { + "item": "bloodmagic:demon_pillar_1", + "data": 3 + }, + "c": { + "item": "bloodmagic:item_demon_crystal", + "data": 3 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_1_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_1_corrosive.json new file mode 100644 index 00000000..7f711d0c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_1_corrosive.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_cap_1", + "data": 1, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_pillar_1", + "data": 1 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_1_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_1_raw.json new file mode 100644 index 00000000..ba1305d5 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_1_raw.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_cap_1", + "data": 0, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_pillar_1", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_2_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_2_destructive.json new file mode 100644 index 00000000..4b1f890a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_2_destructive.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_cap_2", + "data": 0, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_pillar_1", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_2_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_2_vengeful.json new file mode 100644 index 00000000..7a19d3cf --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_2_vengeful.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_cap_2", + "data": 1, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_pillar_1", + "data": 3 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_3_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_3_steadfast.json new file mode 100644 index 00000000..a0f4f58e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_3_steadfast.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "bloodmagic:demon_pillar_cap_3", + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_pillar_1", + "data": 4 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_1_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_1_corrosive.json new file mode 100644 index 00000000..0d2824b6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_1_corrosive.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "bloodmagic:demon_stairs_1", + "data": 1, + "count": 8 + }, + "pattern": [ + "s ", + "ss ", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 6 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_1_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_1_raw.json new file mode 100644 index 00000000..3e4ff319 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_1_raw.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "bloodmagic:demon_stairs_1", + "data": 0, + "count": 8 + }, + "pattern": [ + "s ", + "ss ", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 5 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_2_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_2_destructive.json new file mode 100644 index 00000000..6d6a96f5 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_2_destructive.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "bloodmagic:demon_stairs_2", + "data": 0, + "count": 8 + }, + "pattern": [ + "s ", + "ss ", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 7 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_2_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_2_vengeful.json new file mode 100644 index 00000000..77527b86 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_2_vengeful.json @@ -0,0 +1,19 @@ +{ + "result": { + "item": "bloodmagic:demon_stairs_2", + "data": 1, + "count": 8 + }, + "pattern": [ + "s ", + "ss ", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 8 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_3_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_3_steadfast.json new file mode 100644 index 00000000..9fcdcbf9 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_3_steadfast.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_stairs_3", + "count": 8 + }, + "pattern": [ + "s ", + "ss ", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 9 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_corrosive.json new file mode 100644 index 00000000..7b48b030 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_corrosive.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 1, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_1", + "data": 1 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_destructive.json new file mode 100644 index 00000000..e1b23e21 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_destructive.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 2, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_1", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_raw.json new file mode 100644 index 00000000..25b47dec --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_raw.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 0, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_1", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_steadfast.json new file mode 100644 index 00000000..e7967dfa --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_steadfast.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 4, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_1", + "data": 4 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_vengeful.json new file mode 100644 index 00000000..98d5ec24 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_vengeful.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 3, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_1", + "data": 3 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_corrosive.json new file mode 100644 index 00000000..62ea247b --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_corrosive.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 11, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 6 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_destructive.json new file mode 100644 index 00000000..e00e4198 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_destructive.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 12, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 7 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_raw.json new file mode 100644 index 00000000..791bdb5c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_raw.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 10, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 5 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_steadfast.json new file mode 100644 index 00000000..16a07805 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_steadfast.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 14, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 9 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_vengeful.json new file mode 100644 index 00000000..33031c4d --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_vengeful.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 13, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_extras", + "data": 8 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_corrosive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_corrosive.json new file mode 100644 index 00000000..32bc21f7 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_corrosive.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 6, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_2", + "data": 1 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_destructive.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_destructive.json new file mode 100644 index 00000000..2f4fbf18 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_destructive.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 7, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_2", + "data": 2 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_raw.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_raw.json new file mode 100644 index 00000000..8c42b8c9 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_raw.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 5, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_2", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_steadfast.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_steadfast.json new file mode 100644 index 00000000..b94df87c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_steadfast.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 9, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_2", + "data": 4 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_vengeful.json b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_vengeful.json new file mode 100644 index 00000000..15ecb860 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_vengeful.json @@ -0,0 +1,18 @@ +{ + "result": { + "item": "bloodmagic:demon_wall_1", + "data": 8, + "count": 6 + }, + "pattern": [ + "sss", + "sss" + ], + "type": "minecraft:crafting_shaped", + "key": { + "s": { + "item": "bloodmagic:demon_brick_2", + "data": 3 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/experience_tome.json b/src/main/resources/assets/bloodmagic/recipes/experience_tome.json new file mode 100644 index 00000000..12dbe103 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/experience_tome.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "bloodmagic:experience_tome" + }, + "pattern": [ + "ses", + "lbl", + "gog" + ], + "type": "forge:ore_shaped", + "key": { + "b": { + "item": "minecraft:enchanted_book" + }, + "s": { + "item": "#STRING" + }, + "e": { + "item": "minecraft:lapis_block" + }, + "g": { + "item": "#INGOTGOLD" + }, + "l": { + "item": "bloodmagic:slate", + "data": 2 + }, + "o": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:magician" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/incense_altar.json b/src/main/resources/assets/bloodmagic/recipes/incense_altar.json new file mode 100644 index 00000000..4748c205 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/incense_altar.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "bloodmagic:incense_altar" + }, + "pattern": [ + "s s", + "shs", + "coc" + ], + "type": "forge:ore_shaped", + "key": { + "s": { + "item": "#STONE" + }, + "c": { + "item": "#COBBLESTONE" + }, + "h": { + "item": "minecraft:coal", + "data": 1 + }, + "o": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:weak" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/lava_crystal.json b/src/main/resources/assets/bloodmagic/recipes/lava_crystal.json new file mode 100644 index 00000000..e0311e8f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/lava_crystal.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "bloodmagic:lava_crystal" + }, + "pattern": [ + "aba", + "bcb", + "ded" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#BLOCKGLASS" + }, + "b": { + "item": "minecraft:lava_bucket" + }, + "c": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:weak" + }, + "d": { + "item": "minecraft:obsidian" + }, + "e": { + "item": "#GEMDIAMOND" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/mimic_nohitbox.json b/src/main/resources/assets/bloodmagic/recipes/mimic_nohitbox.json new file mode 100644 index 00000000..361f9ed3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/mimic_nohitbox.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "bloodmagic:mimic", + "data": 0, + "count": 4 + }, + "pattern": [ + "b b", + " r ", + "bob" + ], + "type": "minecraft:crafting_shaped", + "key": { + "b": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "r": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "o": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:magician" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/mimic_solidclear.json b/src/main/resources/assets/bloodmagic/recipes/mimic_solidclear.json new file mode 100644 index 00000000..a14fa6e0 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/mimic_solidclear.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "bloodmagic:mimic", + "data": 2, + "count": 4 + }, + "pattern": [ + "bsb", + "srs", + "bob" + ], + "type": "forge:ore_shaped", + "key": { + "b": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "r": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "s": { + "item": "#BLOCKGLASS" + }, + "o": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:magician" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/mimic_solidlight.json b/src/main/resources/assets/bloodmagic/recipes/mimic_solidlight.json new file mode 100644 index 00000000..7db4b442 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/mimic_solidlight.json @@ -0,0 +1,33 @@ +{ + "result": { + "item": "bloodmagic:mimic", + "data": 3, + "count": 2 + }, + "pattern": [ + "bnb", + "trt", + "bob" + ], + "type": "forge:ore_shaped", + "key": { + "b": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "r": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "t": { + "item": "#TORCH" + }, + "n": { + "item": "#GLOWSTONE" + }, + "o": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:magician" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/mimic_solidopaque.json b/src/main/resources/assets/bloodmagic/recipes/mimic_solidopaque.json new file mode 100644 index 00000000..4c281089 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/mimic_solidopaque.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "bloodmagic:mimic", + "data": 1, + "count": 4 + }, + "pattern": [ + "bsb", + "srs", + "bob" + ], + "type": "forge:ore_shaped", + "key": { + "b": { + "item": "bloodmagic:decorative_brick", + "data": 0 + }, + "r": { + "item": "bloodmagic:blood_rune", + "data": 0 + }, + "s": { + "item": "#STONE" + }, + "o": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:magician" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/pack_sacrifice.json b/src/main/resources/assets/bloodmagic/recipes/pack_sacrifice.json new file mode 100644 index 00000000..e82cd67e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/pack_sacrifice.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "bloodmagic:pack_sacrifice" + }, + "pattern": [ + "aba", + "cdc", + "aea" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#BLOCKGLASS" + }, + "b": { + "item": "minecraft:bucket" + }, + "c": { + "item": "#INGOTIRON" + }, + "d": { + "item": "minecraft:leather_chestplate" + }, + "e": { + "item": "bloodmagic:slate", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/pack_self_sacrifice.json b/src/main/resources/assets/bloodmagic/recipes/pack_self_sacrifice.json new file mode 100644 index 00000000..138ba293 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/pack_self_sacrifice.json @@ -0,0 +1,29 @@ +{ + "result": { + "item": "bloodmagic:pack_self_sacrifice" + }, + "pattern": [ + "aba", + "cdc", + "aea" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#BLOCKGLASS" + }, + "b": { + "item": "minecraft:bucket" + }, + "c": { + "item": "minecraft:flint" + }, + "d": { + "item": "minecraft:leather_chestplate" + }, + "e": { + "item": "bloodmagic:slate", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/path/path_obsidian.json b/src/main/resources/assets/bloodmagic/recipes/path/path_obsidian.json new file mode 100644 index 00000000..2898208a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/path/path_obsidian.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:path", + "data": 6, + "count": 4 + }, + "ingredients": [ + { + "item": "minecraft:obsidian" + }, + { + "item": "minecraft:obsidian" + }, + { + "item": "minecraft:obsidian" + }, + { + "item": "minecraft:obsidian" + }, + { + "type": "bloodmagic:orb", + "orb": "bloodmagic:archmage" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/path/path_obsidiantile.json b/src/main/resources/assets/bloodmagic/recipes/path/path_obsidiantile.json new file mode 100644 index 00000000..e235db72 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/path/path_obsidiantile.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:path", + "data": 7, + "count": 4 + }, + "ingredients": [ + { + "item": "bloodmagic:path", + "data": 6 + }, + { + "item": "bloodmagic:path", + "data": 6 + }, + { + "item": "bloodmagic:path", + "data": 6 + }, + { + "item": "bloodmagic:path", + "data": 6 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/path/path_stone.json b/src/main/resources/assets/bloodmagic/recipes/path/path_stone.json new file mode 100644 index 00000000..0503ed1c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/path/path_stone.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:path", + "data": 2, + "count": 4 + }, + "ingredients": [ + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "item": "#STONE" + }, + { + "type": "bloodmagic:orb", + "orb": "bloodmagic:magician" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/path/path_stonetile.json b/src/main/resources/assets/bloodmagic/recipes/path/path_stonetile.json new file mode 100644 index 00000000..5cf9c223 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/path/path_stonetile.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:path", + "data": 3, + "count": 4 + }, + "ingredients": [ + { + "item": "bloodmagic:path", + "data": 2 + }, + { + "item": "bloodmagic:path", + "data": 2 + }, + { + "item": "bloodmagic:path", + "data": 2 + }, + { + "item": "bloodmagic:path", + "data": 2 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/path/path_wood.json b/src/main/resources/assets/bloodmagic/recipes/path/path_wood.json new file mode 100644 index 00000000..fcb33fd3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/path/path_wood.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:path", + "data": 0, + "count": 4 + }, + "ingredients": [ + { + "item": "#PLANKWOOD" + }, + { + "item": "#PLANKWOOD" + }, + { + "item": "#PLANKWOOD" + }, + { + "item": "#PLANKWOOD" + }, + { + "type": "bloodmagic:orb", + "orb": "bloodmagic:apprentice" + } + ], + "type": "forge:ore_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/path/path_woodtile.json b/src/main/resources/assets/bloodmagic/recipes/path/path_woodtile.json new file mode 100644 index 00000000..90b26af1 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/path/path_woodtile.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:path", + "data": 1, + "count": 4 + }, + "ingredients": [ + { + "item": "bloodmagic:path", + "data": 0 + }, + { + "item": "bloodmagic:path", + "data": 0 + }, + { + "item": "bloodmagic:path", + "data": 0 + }, + { + "item": "bloodmagic:path", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/path/path_wornstone.json b/src/main/resources/assets/bloodmagic/recipes/path/path_wornstone.json new file mode 100644 index 00000000..86e114b7 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/path/path_wornstone.json @@ -0,0 +1,30 @@ +{ + "result": { + "item": "bloodmagic:path", + "data": 4, + "count": 4 + }, + "ingredients": [ + { + "item": "bloodmagic:path", + "data": 2 + }, + { + "item": "bloodmagic:path", + "data": 2 + }, + { + "item": "bloodmagic:path", + "data": 2 + }, + { + "item": "bloodmagic:path", + "data": 2 + }, + { + "type": "bloodmagic:orb", + "orb": "bloodmagic:master" + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/path/path_wornstonetile.json b/src/main/resources/assets/bloodmagic/recipes/path/path_wornstonetile.json new file mode 100644 index 00000000..2b66ed18 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/path/path_wornstonetile.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:path", + "data": 5, + "count": 4 + }, + "ingredients": [ + { + "item": "bloodmagic:path", + "data": 4 + }, + { + "item": "bloodmagic:path", + "data": 4 + }, + { + "item": "bloodmagic:path", + "data": 4 + }, + { + "item": "bloodmagic:path", + "data": 4 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/ritual_controller_imperfect.json b/src/main/resources/assets/bloodmagic/recipes/ritual_controller_imperfect.json new file mode 100644 index 00000000..17bfdac9 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/ritual_controller_imperfect.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "bloodmagic:ritual_controller", + "data": 1 + }, + "pattern": [ + "aba", + "bcb", + "aba" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "minecraft:obsidian" + }, + "b": { + "item": "#STONE" + }, + "c": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:weak" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/ritual_controller_inverted.json b/src/main/resources/assets/bloodmagic/recipes/ritual_controller_inverted.json new file mode 100644 index 00000000..d712efbe --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/ritual_controller_inverted.json @@ -0,0 +1,20 @@ +{ + "result": { + "item": "bloodmagic:ritual_controller", + "data": 2 + }, + "ingredients": [ + { + "item": "bloodmagic:ritual_controller", + "data": 0 + }, + { + "item": "minecraft:redstone_torch" + }, + { + "item": "bloodmagic:slate", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/ritual_controller_master.json b/src/main/resources/assets/bloodmagic/recipes/ritual_controller_master.json new file mode 100644 index 00000000..74e1458c --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/ritual_controller_master.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "bloodmagic:ritual_controller", + "data": 0 + }, + "pattern": [ + "aba", + "bcb", + "aba" + ], + "type": "minecraft:crafting_shaped", + "key": { + "a": { + "item": "minecraft:obsidian" + }, + "b": { + "item": "bloodmagic:ritual_stone", + "data": 0 + }, + "c": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:magician" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/ritual_controller_master_alt.json b/src/main/resources/assets/bloodmagic/recipes/ritual_controller_master_alt.json new file mode 100644 index 00000000..5b55815a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/ritual_controller_master_alt.json @@ -0,0 +1,13 @@ +{ + "result": { + "item": "bloodmagic:ritual_controller", + "data": 0 + }, + "ingredients": [ + { + "item": "bloodmagic:ritual_controller", + "data": 2 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/ritual_diviner_0.json b/src/main/resources/assets/bloodmagic/recipes/ritual_diviner_0.json new file mode 100644 index 00000000..9b48c652 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/ritual_diviner_0.json @@ -0,0 +1,36 @@ +{ + "result": { + "item": "bloodmagic:ritual_diviner", + "data": 0 + }, + "pattern": [ + "dfd", + "ase", + "dwd" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "bloodmagic:inscription_tool", + "data": 4 + }, + "s": { + "item": "#STICKWOOD" + }, + "d": { + "item": "#GEMDIAMOND" + }, + "e": { + "item": "bloodmagic:inscription_tool", + "data": 3 + }, + "f": { + "item": "bloodmagic:inscription_tool", + "data": 2 + }, + "w": { + "item": "bloodmagic:inscription_tool", + "data": 1 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/ritual_diviner_1.json b/src/main/resources/assets/bloodmagic/recipes/ritual_diviner_1.json new file mode 100644 index 00000000..ca45383a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/ritual_diviner_1.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:ritual_diviner", + "data": 1 + }, + "pattern": [ + " S ", + "tdt", + " S " + ], + "type": "minecraft:crafting_shaped", + "key": { + "S": { + "item": "bloodmagic:slate", + "data": 3 + }, + "t": { + "item": "bloodmagic:inscription_tool", + "data": 5 + }, + "d": { + "item": "bloodmagic:ritual_diviner", + "data": 0 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/ritual_reader.json b/src/main/resources/assets/bloodmagic/recipes/ritual_reader.json new file mode 100644 index 00000000..cbf3f52a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/ritual_reader.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "bloodmagic:ritual_reader" + }, + "pattern": [ + "gog", + "isi", + " s " + ], + "type": "forge:ore_shaped", + "key": { + "s": { + "item": "bloodmagic:slate", + "data": 3 + }, + "g": { + "item": "#BLOCKGLASS" + }, + "i": { + "item": "#INGOTGOLD" + }, + "o": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:master" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/ritual_stone_blank.json b/src/main/resources/assets/bloodmagic/recipes/ritual_stone_blank.json new file mode 100644 index 00000000..7e321bb2 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/ritual_stone_blank.json @@ -0,0 +1,26 @@ +{ + "result": { + "item": "bloodmagic:ritual_stone", + "data": 0, + "count": 4 + }, + "pattern": [ + "aba", + "bcb", + "aba" + ], + "type": "minecraft:crafting_shaped", + "key": { + "a": { + "item": "minecraft:obsidian" + }, + "b": { + "item": "bloodmagic:slate", + "data": 1 + }, + "c": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:apprentice" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/ritual_stone_reset.json b/src/main/resources/assets/bloodmagic/recipes/ritual_stone_reset.json new file mode 100644 index 00000000..439ad7d2 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/ritual_stone_reset.json @@ -0,0 +1,13 @@ +{ + "result": { + "item": "bloodmagic:ritual_stone", + "data": 0 + }, + "ingredients": [ + { + "item": "bloodmagic:ritual_stone", + "data": 32767 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/sacrificial_dagger.json b/src/main/resources/assets/bloodmagic/recipes/sacrificial_dagger.json new file mode 100644 index 00000000..f622ef14 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/sacrificial_dagger.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:sacrificial_dagger", + "data": 0 + }, + "pattern": [ + "aaa", + " ba", + "c a" + ], + "type": "forge:ore_shaped", + "key": { + "a": { + "item": "#BLOCKGLASS" + }, + "b": { + "item": "#INGOTGOLD" + }, + "c": { + "item": "#INGOTIRON" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/soul_forge.json b/src/main/resources/assets/bloodmagic/recipes/soul_forge.json new file mode 100644 index 00000000..7dfd9961 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/soul_forge.json @@ -0,0 +1,25 @@ +{ + "result": { + "item": "bloodmagic:soul_forge" + }, + "pattern": [ + "i i", + "sgs", + "sos" + ], + "type": "forge:ore_shaped", + "key": { + "s": { + "item": "#STONE" + }, + "g": { + "item": "#INGOTGOLD" + }, + "i": { + "item": "#INGOTIRON" + }, + "o": { + "item": "#BLOCKIRON" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/soul_snare.json b/src/main/resources/assets/bloodmagic/recipes/soul_snare.json new file mode 100644 index 00000000..20a518c5 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/soul_snare.json @@ -0,0 +1,24 @@ +{ + "result": { + "item": "bloodmagic:soul_snare", + "data": 0, + "count": 4 + }, + "pattern": [ + "sis", + "iri", + "sis" + ], + "type": "forge:ore_shaped", + "key": { + "r": { + "item": "#DUSTREDSTONE" + }, + "s": { + "item": "#STRING" + }, + "i": { + "item": "#INGOTIRON" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/teleposer.json b/src/main/resources/assets/bloodmagic/recipes/teleposer.json new file mode 100644 index 00000000..388d0153 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/teleposer.json @@ -0,0 +1,23 @@ +{ + "result": { + "item": "bloodmagic:teleposer" + }, + "pattern": [ + "ggg", + "efe", + "ggg" + ], + "type": "forge:ore_shaped", + "key": { + "e": { + "item": "minecraft:ender_pearl" + }, + "f": { + "item": "bloodmagic:teleposition_focus", + "data": 0 + }, + "g": { + "item": "#INGOTGOLD" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/teleposition_focus_2.json b/src/main/resources/assets/bloodmagic/recipes/teleposition_focus_2.json new file mode 100644 index 00000000..16212c4f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/teleposition_focus_2.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "bloodmagic:teleposition_focus", + "data": 2 + }, + "ingredients": [ + { + "item": "bloodmagic:teleposition_focus", + "data": 1 + }, + { + "item": "bloodmagic:blood_shard", + "data": 0 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/teleposition_focus_3.json b/src/main/resources/assets/bloodmagic/recipes/teleposition_focus_3.json new file mode 100644 index 00000000..9be6ba08 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/teleposition_focus_3.json @@ -0,0 +1,17 @@ +{ + "result": { + "item": "bloodmagic:teleposition_focus", + "data": 3 + }, + "ingredients": [ + { + "item": "bloodmagic:teleposition_focus", + "data": 2 + }, + { + "item": "bloodmagic:blood_shard", + "data": 1 + } + ], + "type": "minecraft:crafting_shapeless" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/recipes/upgrade_trainer.json b/src/main/resources/assets/bloodmagic/recipes/upgrade_trainer.json new file mode 100644 index 00000000..d540e3e4 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/recipes/upgrade_trainer.json @@ -0,0 +1,27 @@ +{ + "result": { + "item": "bloodmagic:upgrade_trainer", + "data": 0 + }, + "pattern": [ + "ngn", + "ioi", + "ngn" + ], + "type": "forge:ore_shaped", + "key": { + "g": { + "item": "#INGOTGOLD" + }, + "i": { + "item": "#INGOTIRON" + }, + "n": { + "item": "#NUGGETGOLD" + }, + "o": { + "type": "bloodmagic:orb", + "orb": "bloodmagic:master" + } + } +} \ No newline at end of file