From fff793ea7d3c433f81f673a5d20c614296a7601a Mon Sep 17 00:00:00 2001 From: WayofTime Date: Fri, 30 Mar 2018 18:01:23 -0400 Subject: [PATCH] Fixed the Haste sigil and "Quick Feet" so that they work with MC's new movement method. Also added better looking potion effects for a few things Enabled Shard of Laputa array - no book entry yet. --- .../bloodmagic/core/RegistrarBloodMagic.java | 32 ++-- .../bloodmagic/registry/ModRecipes.java | 3 +- .../handler/event/LivingArmourHandler.java | 171 ++++++++++++------ .../bloodmagic/textures/misc/potions.png | Bin 1577 -> 2109 bytes 4 files changed, 135 insertions(+), 71 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java index e9287caf..9b0c4e9a 100644 --- a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java @@ -28,7 +28,8 @@ import net.minecraftforge.registries.RegistryBuilder; @Mod.EventBusSubscriber(modid = BloodMagic.MODID) @GameRegistry.ObjectHolder(BloodMagic.MODID) -public class RegistrarBloodMagic { +public class RegistrarBloodMagic +{ private static final BloodOrb ORB_DEF = new BloodOrb("", 0, 0, 0); @GameRegistry.ObjectHolder("weak") @@ -60,7 +61,8 @@ public class RegistrarBloodMagic { public static IForgeRegistry BLOOD_ORBS = null; @SubscribeEvent - public static void registerBloodOrbs(RegistryEvent.Register event) { + public static void registerBloodOrbs(RegistryEvent.Register event) + { ResourceLocation orb = RegistrarBloodMagicItems.BLOOD_ORB.getRegistryName(); event.getRegistry().registerAll( new BloodOrb("weak", 1, 5000, 2).withModel(new ModelResourceLocation(orb, "type=weak")).setRegistryName("weak"), @@ -69,13 +71,14 @@ public class RegistrarBloodMagic { new BloodOrb("master", 4, 1000000, 25).withModel(new ModelResourceLocation(orb, "type=master")).setRegistryName("master"), new BloodOrb("archmage", 5, 10000000, 50).withModel(new ModelResourceLocation(orb, "type=archmage")).setRegistryName("archmage"), new BloodOrb("transcendent", 6, 30000000, 50).withModel(new ModelResourceLocation(orb, "type=transcendent")).setRegistryName("transcendent") - ); + ); } @SubscribeEvent - public static void registerPotions(RegistryEvent.Register event) { + public static void registerPotions(RegistryEvent.Register event) + { event.getRegistry().registerAll( - new PotionBloodMagic("Boost", false, 0xFFFFFF, 0, 1).setRegistryName("boost"), + new PotionBloodMagic("Boost", false, 0xFFFFFF, 0, 0).setRegistryName("boost"), new PotionBloodMagic("Planar Binding", false, 0, 2, 0).setRegistryName("planar_binding"), new PotionBloodMagic("Soul Snare", false, 0xFFFFFF, 3, 0).setRegistryName("soul_snare"), new PotionBloodMagic("Soul Fray", true, 0xFFFFFF, 4, 0).setRegistryName("soul_fray"), @@ -86,11 +89,12 @@ public class RegistrarBloodMagic { new PotionBloodMagic("Bounce", false, 0x000000, 1, 1).setRegistryName("bounce"), new PotionBloodMagic("Cling", false, 0x000000, 2, 1).setRegistryName("cling"), new PotionBloodMagic("S. Lamb", false, 0x000000, 3, 1).setRegistryName("sacrificial_lamb") - ); + ); } @SubscribeEvent - public static void registerEntities(RegistryEvent.Register event) { + public static void registerEntities(RegistryEvent.Register event) + { int entities = 0; event.getRegistry().registerAll( @@ -104,11 +108,12 @@ public class RegistrarBloodMagic { EntityEntryBuilder.create().id("corrupted_sheep", ++entities).entity(EntityCorruptedSheep.class).name("corrupted_sheep").tracker(16 * 4, 3, true).build(), EntityEntryBuilder.create().id("corrupted_chicken", ++entities).entity(EntityCorruptedChicken.class).name("corrupted_chicken").tracker(16 * 4, 3, true).build(), EntityEntryBuilder.create().id("corrupted_spider", ++entities).entity(EntityCorruptedSpider.class).name("corrupted_spider").tracker(16 * 4, 3, true).build() - ); + ); } @SubscribeEvent - public static void onRegistryCreation(RegistryEvent.NewRegistry event) { + public static void onRegistryCreation(RegistryEvent.NewRegistry event) + { BLOOD_ORBS = new RegistryBuilder() .setName(new ResourceLocation(BloodMagic.MODID, "blood_orb")) .setIDRange(0, Short.MAX_VALUE) @@ -119,8 +124,10 @@ public class RegistrarBloodMagic { @SideOnly(Side.CLIENT) @SubscribeEvent - public static void registerModels(ModelRegistryEvent event) { - for (BloodOrb orb : BLOOD_ORBS) { + public static void registerModels(ModelRegistryEvent event) + { + for (BloodOrb orb : BLOOD_ORBS) + { ModelResourceLocation modelLocation = orb.getModelLocation(); if (modelLocation == null) modelLocation = new ModelResourceLocation(orb.getRegistryName(), "inventory"); @@ -128,7 +135,8 @@ public class RegistrarBloodMagic { ModelLoader.registerItemVariants(RegistrarBloodMagicItems.BLOOD_ORB, modelLocation); } - ModelLoader.setCustomMeshDefinition(RegistrarBloodMagicItems.BLOOD_ORB, stack -> { + ModelLoader.setCustomMeshDefinition(RegistrarBloodMagicItems.BLOOD_ORB, stack -> + { if (!stack.hasTagCompound()) return new ModelResourceLocation(ORB_WEAK.getRegistryName(), "inventory"); diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java index 2e2930e8..d84c7548 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java @@ -24,6 +24,7 @@ import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectAttractor; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBounce; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectFurnaceFuel; +import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectLaputa; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectMovement; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSigil; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSkeletonTurret; @@ -125,7 +126,7 @@ public class ModRecipes AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ENDER_PEARL), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectTeleport("teleport"), new StaticAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/teleportation.png"))); AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.BOW), new ItemStack(Items.ARROW), new AlchemyArrayEffectArrowTurret("turret"), new TurretAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"))); -// AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.APPLE), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectLaputa("laputa"), new AttractorAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/shardoflaputa.png"))); + AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.REDSTONE), new ItemStack(Blocks.LAPIS_BLOCK), new AlchemyArrayEffectLaputa("laputa"), new AttractorAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/shardoflaputa.png"))); AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Blocks.COBBLESTONE), new ItemStack(Items.IRON_INGOT), new AlchemyArrayEffectSpike("spike"), new LowStaticAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/spikearray.png"))); AlchemyArrayRecipeRegistry.registerRecipe(ComponentTypes.REAGENT_FAST_MINER.getStack(), new ItemStack(Items.IRON_PICKAXE), new AlchemyArrayEffectSigil("fastMiner", (ISigil) RegistrarBloodMagicItems.SIGIL_FAST_MINER), new SingleAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/FastMinerSigil.png"))); 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 f78a7e59..456482c3 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java @@ -40,24 +40,31 @@ import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @Mod.EventBusSubscriber(modid = BloodMagic.MODID) -public class LivingArmourHandler { +public class LivingArmourHandler +{ @SubscribeEvent - public static void onEntityHealed(LivingHealEvent event) { - if (event.getEntityLiving() instanceof EntityPlayer) { + public static void onEntityHealed(LivingHealEvent event) + { + if (event.getEntityLiving() instanceof EntityPlayer) + { EntityPlayer player = (EntityPlayer) event.getEntity(); - if (LivingArmour.hasFullSet(player)) { + if (LivingArmour.hasFullSet(player)) + { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { + if (armour != null) + { double modifier = 1; LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.slowHeal", chestStack); - if (upgrade instanceof LivingArmourUpgradeSlowHeal) { + if (upgrade instanceof LivingArmourUpgradeSlowHeal) + { modifier *= ((LivingArmourUpgradeSlowHeal) upgrade).getHealingModifier(); } - if (modifier != 1) { + if (modifier != 1) + { event.setAmount((float) (event.getAmount() * modifier)); } } @@ -66,18 +73,23 @@ public class LivingArmourHandler { } @SubscribeEvent - public static void onMiningSpeedCheck(PlayerEvent.BreakSpeed event) { + public static void onMiningSpeedCheck(PlayerEvent.BreakSpeed event) + { EntityPlayer player = event.getEntityPlayer(); - if (LivingArmour.hasFullSet(player)) { + if (LivingArmour.hasFullSet(player)) + { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { + if (armour != null) + { double modifier = 1; - for (LivingArmourUpgrade upgrade : armour.upgradeMap.values()) { + for (LivingArmourUpgrade upgrade : armour.upgradeMap.values()) + { modifier *= upgrade.getMiningSpeedModifier(player); } - if (modifier != 1) { + if (modifier != 1) + { event.setNewSpeed((float) (event.getOriginalSpeed() * modifier)); } } @@ -86,24 +98,31 @@ public class LivingArmourHandler { // Applies: Storm Trooper @SubscribeEvent - public static void onEntityJoinedWorld(EntityJoinWorldEvent event) { + public static void onEntityJoinedWorld(EntityJoinWorldEvent event) + { Entity owner = null; - if (event.getEntity() instanceof EntityArrow) { + if (event.getEntity() instanceof EntityArrow) + { owner = ((EntityArrow) event.getEntity()).shootingEntity; - } else if (event.getEntity() instanceof EntityThrowable) { + } else if (event.getEntity() instanceof EntityThrowable) + { owner = ((EntityThrowable) event.getEntity()).getThrower(); } - if (owner instanceof EntityPlayer) { + if (owner instanceof EntityPlayer) + { Entity projectile = event.getEntity(); EntityPlayer player = (EntityPlayer) owner; - if (LivingArmour.hasFullSet(player)) { + if (LivingArmour.hasFullSet(player)) + { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { + if (armour != null) + { LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.stormTrooper", chestStack); - if (upgrade instanceof LivingArmourUpgradeStormTrooper) { + if (upgrade instanceof LivingArmourUpgradeStormTrooper) + { float velocityModifier = (float) (((LivingArmourUpgradeStormTrooper) upgrade).getArrowJiggle(player) * Math.sqrt(projectile.motionX * projectile.motionX + projectile.motionY * projectile.motionY + projectile.motionZ * projectile.motionZ)); projectile.motionX += 2 * (event.getWorld().rand.nextDouble() - 0.5) * velocityModifier; @@ -116,29 +135,37 @@ public class LivingArmourHandler { } @SubscribeEvent - public static void onPlayerClick(PlayerInteractEvent event) { - if (event.isCancelable()) { + public static void onPlayerClick(PlayerInteractEvent event) + { + if (event.isCancelable()) + { EntityPlayer player = event.getEntityPlayer(); - if (LivingArmour.hasFullSet(player)) { + if (LivingArmour.hasFullSet(player)) + { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - if (event.getHand() == EnumHand.OFF_HAND) { + if (armour != null) + { + if (event.getHand() == EnumHand.OFF_HAND) + { LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.crippledArm", chestStack); - if (upgrade instanceof LivingArmourUpgradeCrippledArm) { + if (upgrade instanceof LivingArmourUpgradeCrippledArm) + { event.setCanceled(true); } } - if (event.getItemStack().getItemUseAction() == EnumAction.DRINK) { + if (event.getItemStack().getItemUseAction() == EnumAction.DRINK) + { ItemStack drinkStack = event.getItemStack(); //TODO: See if the item is a splash potion? Those should be usable. LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.quenched", chestStack); - if (upgrade instanceof LivingArmourUpgradeQuenched) { + if (upgrade instanceof LivingArmourUpgradeQuenched) + { event.setCanceled(true); } } @@ -149,19 +176,24 @@ public class LivingArmourHandler { // Applies: Grim Reaper @SubscribeEvent(priority = EventPriority.HIGHEST) - public static void onEntityDeath(LivingDeathEvent event) { - if (event.getEntityLiving() instanceof EntityPlayer) { + public static void onEntityDeath(LivingDeathEvent event) + { + if (event.getEntityLiving() instanceof EntityPlayer) + { EntityPlayer player = (EntityPlayer) event.getEntityLiving(); - if (LivingArmour.hasFullSet(player)) { + if (LivingArmour.hasFullSet(player)) + { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { + if (armour != null) + { StatTrackerGrimReaperSprint.incrementCounter(armour); LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.grimReaper", chestStack); - if (upgrade instanceof LivingArmourUpgradeGrimReaperSprint && ((LivingArmourUpgradeGrimReaperSprint) upgrade).canSavePlayer(player)) { + if (upgrade instanceof LivingArmourUpgradeGrimReaperSprint && ((LivingArmourUpgradeGrimReaperSprint) upgrade).canSavePlayer(player)) + { ((LivingArmourUpgradeGrimReaperSprint) upgrade).applyEffectOnRebirth(player); event.setCanceled(true); event.setResult(Event.Result.DENY); @@ -175,20 +207,26 @@ public class LivingArmourHandler { // Applies: Jump @SubscribeEvent - public static void onJumpEvent(LivingEvent.LivingJumpEvent event) { - if (event.getEntityLiving() instanceof EntityPlayer) { + public static void onJumpEvent(LivingEvent.LivingJumpEvent event) + { + if (event.getEntityLiving() instanceof EntityPlayer) + { EntityPlayer player = (EntityPlayer) event.getEntityLiving(); - if (LivingArmour.hasFullSet(player)) { + if (LivingArmour.hasFullSet(player)) + { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { + if (armour != null) + { StatTrackerJump.incrementCounter(armour); - if (!player.isSneaking()) { + if (!player.isSneaking()) + { LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgradeFromNBT(BloodMagic.MODID + ".upgrade.jump", chestStack); - if (upgrade instanceof LivingArmourUpgradeJump) { + if (upgrade instanceof LivingArmourUpgradeJump) + { player.motionY += ((LivingArmourUpgradeJump) upgrade).getJumpModifier(); } } @@ -199,21 +237,28 @@ public class LivingArmourHandler { // Applies: Step Assist, Speed Boost @SubscribeEvent(priority = EventPriority.HIGHEST) - public static void onEntityUpdate(LivingEvent.LivingUpdateEvent event) { - if (event.getEntityLiving() instanceof EntityPlayer) { + public static void onEntityUpdate(LivingEvent.LivingUpdateEvent event) + { + if (event.getEntityLiving() instanceof EntityPlayer) + { EntityPlayer player = (EntityPlayer) event.getEntityLiving(); boolean hasAssist = false; - if (event.getEntityLiving().isPotionActive(RegistrarBloodMagic.BOOST)) { + if (event.getEntityLiving().isPotionActive(RegistrarBloodMagic.BOOST)) + { hasAssist = true; player.stepHeight = Constants.Misc.ALTERED_STEP_HEIGHT; - } else { - if (LivingArmour.hasFullSet(player)) { + } else + { + if (LivingArmour.hasFullSet(player)) + { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); LivingArmour armour = ItemLivingArmour.getLivingArmourFromStack(chestStack); - if (armour != null) { + if (armour != null) + { LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.stepAssist", chestStack); - if (upgrade instanceof LivingArmourUpgradeStepAssist) { + if (upgrade instanceof LivingArmourUpgradeStepAssist) + { player.stepHeight = ((LivingArmourUpgradeStepAssist) upgrade).getStepAssist(); hasAssist = true; } @@ -226,27 +271,32 @@ public class LivingArmourHandler { float percentIncrease = 0; - if (LivingArmour.hasFullSet(player)) { + if (LivingArmour.hasFullSet(player)) + { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); LivingArmour armour = ItemLivingArmour.getLivingArmourFromStack(chestStack); - if (armour != null) { + if (armour != null) + { LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgradeFromNBT(BloodMagic.MODID + ".upgrade.movement", chestStack); - if (upgrade instanceof LivingArmourUpgradeSpeed) { - percentIncrease += 0.1f * ((LivingArmourUpgradeSpeed) upgrade).getSpeedModifier(); + if (upgrade instanceof LivingArmourUpgradeSpeed) + { + percentIncrease += ((LivingArmourUpgradeSpeed) upgrade).getSpeedModifier(); } } } - if (event.getEntityLiving().isPotionActive(RegistrarBloodMagic.BOOST)) { + if (event.getEntityLiving().isPotionActive(RegistrarBloodMagic.BOOST)) + { int i = event.getEntityLiving().getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); { - percentIncrease += (i + 1) * 0.05f; + percentIncrease += (i + 1) * 0.5f; } } - if (percentIncrease > 0 && (player.onGround || player.capabilities.isFlying) && (Math.abs(player.moveForward) > 0 || Math.abs(player.moveStrafing) > 0)) { - player.moveRelative(player.moveStrafing, player.moveForward, player.capabilities.isFlying ? (percentIncrease / 2.0f) : percentIncrease, 0.02F); + if (percentIncrease > 0 && (player.onGround || player.capabilities.isFlying) && (Math.abs(player.moveForward) > 0 || Math.abs(player.moveStrafing) > 0)) + { + player.travel(player.moveStrafing * percentIncrease, 0, player.moveForward * percentIncrease); } } } @@ -254,7 +304,8 @@ public class LivingArmourHandler { // Applies: Arrow Shot // Tracks: Arrow Shot @SubscribeEvent - public static void onArrowFire(ArrowLooseEvent event) { + public static void onArrowFire(ArrowLooseEvent event) + { World world = event.getEntityPlayer().getEntityWorld(); ItemStack stack = event.getBow(); EntityPlayer player = event.getEntityPlayer(); @@ -262,14 +313,17 @@ public class LivingArmourHandler { if (world.isRemote) return; - if (LivingArmour.hasFullSet(player)) { + if (LivingArmour.hasFullSet(player)) + { ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { + if (armour != null) + { StatTrackerArrowShot.incrementCounter(armour); LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.arrowShot", chestStack); - if (upgrade instanceof LivingArmourUpgradeArrowShot) { + if (upgrade instanceof LivingArmourUpgradeArrowShot) + { int charge = event.getCharge(); float velocity = (float) charge / 20.0F; velocity = (velocity * velocity + velocity * 2.0F) / 3.0F; @@ -281,7 +335,8 @@ public class LivingArmourHandler { velocity = 1.0F; int extraArrows = ((LivingArmourUpgradeArrowShot) upgrade).getExtraArrows(); - for (int n = 0; n < extraArrows; n++) { + for (int n = 0; n < extraArrows; n++) + { ItemStack arrowStack = new ItemStack(Items.ARROW); ItemArrow itemarrow = (ItemArrow) ((stack.getItem() instanceof ItemArrow ? arrowStack.getItem() : Items.ARROW)); EntityArrow entityarrow = itemarrow.createArrow(world, arrowStack, player); diff --git a/src/main/resources/assets/bloodmagic/textures/misc/potions.png b/src/main/resources/assets/bloodmagic/textures/misc/potions.png index 49c30a6e3a54c8bedba5f62ceaf3a7727f82fd28..0ceb8f8ba5ae5f4d9983f4ce6bbe059eed5d4039 100644 GIT binary patch delta 1845 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 bcEbMvyHm}gW+aYk00000NkvXXu0mjf^VYIs