From 1d99b70f146851baea28e392f8b85b4345c383cf Mon Sep 17 00:00:00 2001 From: WayofTime Date: Thu, 9 Oct 2014 07:48:45 -0400 Subject: [PATCH] Pushing before merging --- .../AlchemicalWizardry.java | 6 +- .../common/AlchemicalWizardryEventHooks.java | 12 ++ .../common/block/ImperfectRitualStone.java | 13 +- .../entity/projectile/EntityMeteor.java | 37 +++- .../common/items/BoundArmour.java | 10 +- .../common/items/BoundPickaxe.java | 5 + .../common/items/EnergyItems.java | 10 + .../common/items/ItemBlockCrystalBelljar.java | 5 - .../renderer/model/ModelOmegaArmour.java | 185 +++++++++++++++++- .../common/rituals/RitualEffectFlight.java | 2 +- .../rituals/RitualEffectFullStomach.java | 131 +++++++++++++ .../common/rituals/RitualEffectGrowth.java | 13 +- .../common/rituals/RitualEffectHarvest.java | 14 +- .../common/rituals/RitualEffectHealing.java | 13 +- .../rituals/RitualEffectItemSuction.java | 17 +- .../common/rituals/RitualEffectJumping.java | 15 +- .../common/rituals/RitualEffectLava.java | 94 ++++----- .../common/rituals/RitualEffectLeap.java | 15 +- .../rituals/RitualEffectLifeConduit.java | 13 +- .../common/rituals/RitualEffectMagnetic.java | 15 +- .../common/rituals/RitualEffectSoulBound.java | 14 +- .../common/rituals/RitualEffectSpawnWard.java | 13 +- .../rituals/RitualEffectSummonMeteor.java | 44 +++-- .../rituals/RitualEffectSupression.java | 14 +- .../common/rituals/RitualEffectUnbinding.java | 13 +- .../rituals/RitualEffectVeilOfEvil.java | 13 +- .../rituals/RitualEffectWellOfSuffering.java | 15 +- .../summoning/meteor/MeteorParadigm.java | 92 ++++++++- .../summoning/meteor/MeteorRegistry.java | 4 +- .../common/tileEntity/TETeleposer.java | 3 + .../models/armor/BloodArmour_WIP.png | Bin 15448 -> 18319 bytes 31 files changed, 588 insertions(+), 262 deletions(-) create mode 100644 1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFullStomach.java diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index c5faab7e..25b4f55e 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -162,7 +162,7 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.GameRegistry; -@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v1.2.0Beta22") +@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v1.2.0Beta25") //@NetworkMod(clientSideRequired = true, serverSideRequired = false, channels = {"BloodAltar", "particle", "SetLifeEssence", "GetLifeEssence", "Ritual", "GetAltarEssence", "TESocket", "TEWritingTable", "CustomParticle", "SetPlayerVel", "SetPlayerPos", "TEPedestal", "TEPlinth", "TETeleposer", "InfiniteLPPath", "TEOrientor"}, packetHandler = PacketHandler.class) public class AlchemicalWizardry @@ -1005,8 +1005,8 @@ public class AlchemicalWizardry AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.feather), AlchemicalWizardry.customPotionFlight.id, 1 * 60 * 20); AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.arrow), AlchemicalWizardry.customPotionReciprocation.id, 1 * 60 * 20); AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.ender_pearl),AlchemicalWizardry.customPotionPlanarBinding.id,1*60*20); - AlchemicalPotionCreationHandler.addPotion(new ItemStack(Blocks.soul_sand),AlchemicalWizardry.customPotionSoulFray.id,30*20); - AlchemicalPotionCreationHandler.addPotion(new ItemStack(ModItems.baseItems,1,16),AlchemicalWizardry.customPotionSoulHarden.id,30*20); + AlchemicalPotionCreationHandler.addPotion(new ItemStack(Blocks.soul_sand),AlchemicalWizardry.customPotionSoulFray.id,60*20); + AlchemicalPotionCreationHandler.addPotion(new ItemStack(ModItems.baseItems,1,16),AlchemicalWizardry.customPotionSoulHarden.id,60*20); AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.slime_ball),AlchemicalWizardry.customPotionDeaf.id,60*20); } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java index 1a5c3e00..c3ed52af 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java @@ -44,6 +44,18 @@ public class AlchemicalWizardryEventHooks public static Map> respawnMap = new HashMap(); public static Map> forceSpawnMap = new HashMap(); + @SubscribeEvent + public void onPlayerDamageEvent(LivingAttackEvent event) + { + if(event.source.isProjectile()) + { + if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionProjProt) && event.isCancelable()) + { + event.setCanceled(true); + } + } + } + @SubscribeEvent public void onLivingSpawnEvent(CheckSpawn event) { diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/ImperfectRitualStone.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/ImperfectRitualStone.java index 8100c7b2..224f4d55 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/ImperfectRitualStone.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/ImperfectRitualStone.java @@ -46,10 +46,9 @@ public class ImperfectRitualStone extends Block if (block == Blocks.water) { - if (!player.capabilities.isCreativeMode && world.isRemote) + if (!player.capabilities.isCreativeMode && !world.isRemote) { - - //PacketDispatcher.sendPacketToServer(PacketHandler.getPacket(SpellHelper.getUsername(player) , -5000, 0)); + EnergyItems.drainPlayerNetwork(player, 5000); } if (!world.isRemote) @@ -74,7 +73,7 @@ public class ImperfectRitualStone extends Block return true; } else if (block == Blocks.coal_block) { - if (!player.capabilities.isCreativeMode && world.isRemote) + if (!player.capabilities.isCreativeMode && !world.isRemote) { EnergyItems.drainPlayerNetwork(player, 5000); } @@ -104,7 +103,7 @@ public class ImperfectRitualStone extends Block return true; } else if (block== Blocks.lapis_block) { - if (!player.capabilities.isCreativeMode && world.isRemote) + if (!player.capabilities.isCreativeMode && !world.isRemote) { EnergyItems.drainPlayerNetwork(player, 5000); } @@ -120,9 +119,9 @@ public class ImperfectRitualStone extends Block } } else if (block == Blocks.bedrock) { - if (!player.capabilities.isCreativeMode && world.isRemote) + if (!player.capabilities.isCreativeMode && !world.isRemote) { - EnergyItems.drainPlayerNetwork(player, 5000); + EnergyItems.drainPlayerNetwork(player, 5000); } if (!world.isRemote) diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java index 26a26062..a1f6bc9b 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java @@ -1,6 +1,7 @@ package WayofTime.alchemicalWizardry.common.entity.projectile; import net.minecraft.entity.Entity; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; @@ -9,6 +10,12 @@ import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorRegistry; public class EntityMeteor extends EnergyBlastProjectile { private int meteorID; + + public boolean hasTerrae; + public boolean hasOrbisTerrae; + public boolean hasCrystallos; + public boolean hasIncendium; + public boolean hasTennebrae; public EntityMeteor(World par1World) { @@ -21,6 +28,32 @@ public class EntityMeteor extends EnergyBlastProjectile super(par1World, par2, par4, par6); this.meteorID = meteorID; } + + @Override + public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeEntityToNBT(par1NBTTagCompound); + + par1NBTTagCompound.setInteger("meteorID", meteorID); + par1NBTTagCompound.setBoolean("hasTerrae", hasTerrae); + par1NBTTagCompound.setBoolean("hasOrbisTerrae", hasOrbisTerrae); + par1NBTTagCompound.setBoolean("hasCrystallos", hasCrystallos); + par1NBTTagCompound.setBoolean("hasIncendium", hasIncendium); + par1NBTTagCompound.setBoolean("hasTennebrae", hasTennebrae); + } + + @Override + public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readEntityFromNBT(par1NBTTagCompound); + + meteorID = par1NBTTagCompound.getInteger("meteorID"); + hasTerrae = par1NBTTagCompound.getBoolean("hasTerrae"); + hasOrbisTerrae = par1NBTTagCompound.getBoolean("hasOrbisTerrae"); + hasIncendium = par1NBTTagCompound.getBoolean("hasIncendium"); + hasCrystallos = par1NBTTagCompound.getBoolean("hasCrystallos"); + hasTennebrae = par1NBTTagCompound.getBoolean("hasTennebrae"); + } @Override public DamageSource getDamageSource() @@ -41,7 +74,7 @@ public class EntityMeteor extends EnergyBlastProjectile this.onImpact(mop.entityHit); } else if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { - MeteorRegistry.createMeteorImpact(worldObj, mop.blockX, mop.blockY, mop.blockZ, this.meteorID); + MeteorRegistry.createMeteorImpact(worldObj, mop.blockX, mop.blockY, mop.blockZ, this.meteorID, new boolean[]{hasTerrae, hasOrbisTerrae, hasCrystallos, hasIncendium, hasTennebrae}); } this.setDead(); @@ -50,7 +83,7 @@ public class EntityMeteor extends EnergyBlastProjectile @Override public void onImpact(Entity mop) { - MeteorRegistry.createMeteorImpact(worldObj, (int) this.posX, (int) this.posY, (int) this.posZ, meteorID); + MeteorRegistry.createMeteorImpact(worldObj, (int) this.posX, (int) this.posY, (int) this.posZ, meteorID, new boolean[]{hasTerrae, hasOrbisTerrae, hasCrystallos, hasIncendium, hasTennebrae}); this.setDead(); } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundArmour.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundArmour.java index 550878a8..cbb3bdc2 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundArmour.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundArmour.java @@ -42,7 +42,7 @@ public class BoundArmour extends ItemArmor implements IAlchemyGoggles,ISpecialAr private static IIcon leggingsIcon; private static IIcon bootsIcon; - private static final boolean tryComplexRendering = false; + private static final boolean tryComplexRendering = true; public BoundArmour(int armorType) { @@ -177,7 +177,11 @@ public class BoundArmour extends ItemArmor implements IAlchemyGoggles,ISpecialAr double damageAmount = 0.25; - if(!player.isPotionActive(AlchemicalWizardry.customPotionSoulHarden)) + if(player.isPotionActive(AlchemicalWizardry.customPotionSoulHarden)) + { + int i = player.getActivePotionEffect(AlchemicalWizardry.customPotionSoulHarden).getAmplifier() + 1; + damageAmount /= (1 - i*0.1); + }else { damageAmount *= 0.9; } @@ -216,7 +220,7 @@ public class BoundArmour extends ItemArmor implements IAlchemyGoggles,ISpecialAr { if (source.isUnblockable()) { - return new ArmorProperties(-1, damageAmount * 0.8d, maxAbsorption); + return new ArmorProperties(-1, damageAmount * 0.9d, maxAbsorption); } return new ArmorProperties(-1, damageAmount, maxAbsorption); diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java index 9385d7ce..8eaa883c 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundPickaxe.java @@ -137,6 +137,11 @@ public class BoundPickaxe extends ItemPickaxe implements IBindable return par1ItemStack; } + if(par2World.isRemote) + { + return par1ItemStack; + } + Vec3 blockVec = SpellHelper.getEntityBlockVector(par3EntityPlayer); int posX = (int)(blockVec.xCoord); int posY = (int)(blockVec.yCoord); diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/EnergyItems.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/EnergyItems.java index 80bc638a..88b7ef89 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/EnergyItems.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/EnergyItems.java @@ -228,6 +228,16 @@ public class EnergyItems extends Item implements IBindable initializePlayer(player); } + + public static void setItemOwner(ItemStack item, String ownerName) + { + if (item.stackTagCompound == null) + { + item.setTagCompound(new NBTTagCompound()); + } + + item.stackTagCompound.setString("ownerName", ownerName); + } public static void checkAndSetItemOwner(ItemStack item, String ownerName) { diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/ItemBlockCrystalBelljar.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/ItemBlockCrystalBelljar.java index b4745e90..0f1ac64f 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/ItemBlockCrystalBelljar.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/ItemBlockCrystalBelljar.java @@ -80,11 +80,6 @@ public class ItemBlockCrystalBelljar extends ItemBlock @Override public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) { - System.out.println("I am calling placeBlockAt"); - if(stack.getTagCompound() == null) - { - System.out.println("I have no NBT."); - } if (!world.setBlock(x, y, z, field_150939_a, metadata, 3)) { return false; diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaArmour.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaArmour.java index 04a51fa0..790bb9e1 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaArmour.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelOmegaArmour.java @@ -12,6 +12,25 @@ public class ModelOmegaArmour extends ModelBiped // ModelRenderer leftarm; // ModelRenderer rightleg; // ModelRenderer leftleg; + ModelRenderer leftFacePlate; + ModelRenderer rightFacePlate; + ModelRenderer facePlate1; + ModelRenderer facePlate2; + ModelRenderer facePlate3; + ModelRenderer leftWingPlate1; + ModelRenderer leftWingPlate2; + ModelRenderer rightWingPlate1; + ModelRenderer rightWingPlate2; + ModelRenderer topPlate1; + ModelRenderer topPlate2; + ModelRenderer topPlate3; + ModelRenderer backPlate1; + ModelRenderer backPlate2; + ModelRenderer backPlate3; + ModelRenderer backPlate4; + ModelRenderer backPlate5; + ModelRenderer backPlate6; + ModelRenderer eyePlate; ModelRenderer rightArmMain; ModelRenderer rightKnucklePlate; ModelRenderer rightKnuckleBrace; @@ -118,6 +137,148 @@ public class ModelOmegaArmour extends ModelBiped // setRotation(leftleg, 0F, 0F, 0F); } + /* Helmet */ + { + leftFacePlate = new ModelRenderer(this, 66, 52); + leftFacePlate.addBox(-2F, -5F, -5F, 5, 4, 1); + leftFacePlate.setRotationPoint(0F, 0F, 0F); + leftFacePlate.setTextureSize(128, 128); + leftFacePlate.mirror = true; + setRotation(leftFacePlate, 0.296706F, -0.3490659F, -0.0872665F); + + rightFacePlate = new ModelRenderer(this, 66, 52); + rightFacePlate.addBox(-3F, -5F, -5F, 5, 4, 1); + rightFacePlate.setRotationPoint(0F, 0F, 0F); + rightFacePlate.setTextureSize(128, 128); + rightFacePlate.mirror = true; + setRotation(rightFacePlate, 0.296706F, 0.3490659F, 0.0872665F); + rightFacePlate.mirror = false; + + facePlate1 = new ModelRenderer(this, 79, 52); + facePlate1.addBox(-5F, -8F, -5F, 10, 3, 1); + facePlate1.setRotationPoint(0F, 0F, 0F); + facePlate1.setTextureSize(128, 128); + facePlate1.mirror = true; + setRotation(facePlate1, 0F, 0F, 0F); + + facePlate2 = new ModelRenderer(this, 79, 57); + facePlate2.addBox(-1F, -5F, -5F, 2, 1, 1); + facePlate2.setRotationPoint(0F, 0F, 0F); + facePlate2.setTextureSize(128, 128); + facePlate2.mirror = true; + setRotation(facePlate2, 0F, 0F, 0F); + + facePlate3 = new ModelRenderer(this, 79, 60); + facePlate3.addBox(-3F, -4F, -5F, 6, 1, 1); + facePlate3.setRotationPoint(0F, 0F, 0F); + facePlate3.setTextureSize(128, 128); + facePlate3.mirror = true; + setRotation(facePlate3, 0F, 0F, 0F); + + leftWingPlate1 = new ModelRenderer(this, 66, 58); + leftWingPlate1.addBox(5F, -5F, -2.5F, 1, 5, 8); + leftWingPlate1.setRotationPoint(0F, 0F, 0F); + leftWingPlate1.setTextureSize(128, 128); + leftWingPlate1.mirror = true; + setRotation(leftWingPlate1, 0.2617994F, 0.1745329F, 0F); + + leftWingPlate2 = new ModelRenderer(this, 66, 72); + leftWingPlate2.addBox(5F, -8F, -2F, 1, 3, 10); + leftWingPlate2.setRotationPoint(0F, 0F, 0F); + leftWingPlate2.setTextureSize(128, 128); + leftWingPlate2.mirror = true; + setRotation(leftWingPlate2, 0.2617994F, 0.1745329F, 0F); + + rightWingPlate1 = new ModelRenderer(this, 66, 58); + rightWingPlate1.addBox(-6F, -5F, -2.5F, 1, 5, 8); + rightWingPlate1.setRotationPoint(0F, 0F, 0F); + rightWingPlate1.setTextureSize(128, 128); + rightWingPlate1.mirror = true; + setRotation(rightWingPlate1, 0.2617994F, -0.1745329F, 0F); + rightWingPlate1.mirror = false; + + rightWingPlate2 = new ModelRenderer(this, 66, 72); + rightWingPlate2.addBox(-6F, -8F, -2F, 1, 3, 10); + rightWingPlate2.setRotationPoint(0F, 0F, 0F); + rightWingPlate2.setTextureSize(128, 128); + rightWingPlate2.mirror = true; + setRotation(rightWingPlate2, 0.2617994F, -0.1745329F, 0F); + rightWingPlate2.mirror = false; + + topPlate1 = new ModelRenderer(this, 79, 72); + topPlate1.addBox(-5F, -9F, -0.5F, 10, 1, 5); + topPlate1.setRotationPoint(0F, 0F, 0F); + topPlate1.setTextureSize(128, 128); + topPlate1.mirror = true; + setRotation(topPlate1, 0.4363323F, 0F, 0F); + + topPlate2 = new ModelRenderer(this, 79, 72); + topPlate2.addBox(-5F, -8F, 1.5F, 10, 1, 5); + topPlate2.setRotationPoint(0F, 0F, 0F); + topPlate2.setTextureSize(128, 128); + topPlate2.mirror = true; + setRotation(topPlate2, 0.4363323F, 0F, 0F); + + topPlate3 = new ModelRenderer(this, 79, 72); + topPlate3.addBox(-5F, -7F, 3.5F, 10, 1, 5); + topPlate3.setRotationPoint(0F, 0F, 0F); + topPlate3.setTextureSize(128, 128); + topPlate3.mirror = true; + setRotation(topPlate3, 0.4363323F, 0F, 0F); + + backPlate1 = new ModelRenderer(this, 66, 86); + backPlate1.addBox(-4.5F, -7F, 6F, 6, 4, 1); + backPlate1.setRotationPoint(0F, 0F, 0F); + backPlate1.setTextureSize(128, 128); + backPlate1.mirror = true; + setRotation(backPlate1, 0.2617994F, -0.2617994F, 0F); + backPlate1.mirror = false; + + backPlate2 = new ModelRenderer(this, 66, 86); + backPlate2.addBox(-4.5F, -6.5F, 6F, 6, 4, 1); + backPlate2.setRotationPoint(0F, 2F, 0F); + backPlate2.setTextureSize(128, 128); + backPlate2.mirror = true; + setRotation(backPlate2, 0.2617994F, -0.2617994F, 0F); + backPlate2.mirror = false; + + backPlate3 = new ModelRenderer(this, 66, 86); + backPlate3.addBox(-4.5F, -6F, 6F, 6, 4, 1); + backPlate3.setRotationPoint(0F, 4F, 0F); + backPlate3.setTextureSize(128, 128); + backPlate3.mirror = true; + setRotation(backPlate3, 0.2617994F, -0.2617994F, 0F); + backPlate3.mirror = false; + + backPlate4 = new ModelRenderer(this, 66, 86); + backPlate4.addBox(-1.5F, -7F, 6F, 6, 4, 1); + backPlate4.setRotationPoint(0F, 0F, 0F); + backPlate4.setTextureSize(128, 128); + backPlate4.mirror = true; + setRotation(backPlate4, 0.2617994F, 0.2617994F, 0F); + + backPlate5 = new ModelRenderer(this, 66, 86); + backPlate5.addBox(-1.5F, -7F, 6F, 6, 4, 1); + backPlate5.setRotationPoint(0F, 2.5F, 0F); + backPlate5.setTextureSize(128, 128); + backPlate5.mirror = true; + setRotation(backPlate5, 0.2617994F, 0.2617994F, 0F); + + backPlate6 = new ModelRenderer(this, 66, 86); + backPlate6.addBox(-1.5F, -7F, 6F, 6, 4, 1); + backPlate6.setRotationPoint(0F, 5F, 0F); + backPlate6.setTextureSize(128, 128); + backPlate6.mirror = true; + setRotation(backPlate6, 0.2617994F, 0.2617994F, 0F); + + eyePlate = new ModelRenderer(this, 63, 38); + eyePlate.addBox(-4F, -5F, -4.5F, 8, 2, 1); + eyePlate.setRotationPoint(0F, 0F, 0F); + eyePlate.setTextureSize(128, 128); + eyePlate.mirror = true; + setRotation(eyePlate, 0F, 0F, 0F); + } + /* Right arm */ { rightArmMain = new ModelRenderer(this, 0, 33); @@ -431,14 +592,14 @@ public class ModelOmegaArmour extends ModelBiped /* Left leg */ { - leftLegSidePlate = new ModelRenderer(this, 31, 71); + leftLegSidePlate = new ModelRenderer(this, 40, 93); leftLegSidePlate.addBox(-0.5F, 12F, -3F, 1, 6, 6); leftLegSidePlate.setRotationPoint(-2F, -12F, 0F); leftLegSidePlate.setTextureSize(128, 128); leftLegSidePlate.mirror = true; setRotation(leftLegSidePlate, 0F, 0F, -0.3490659F); - leftLegMain = new ModelRenderer(this, 53, 62); + leftLegMain = new ModelRenderer(this, 40, 93); leftLegMain.addBox(-0.5F, 11F, -2.5F, 5, 9, 5); leftLegMain.setRotationPoint(-2F, -12F, 0F); leftLegMain.setTextureSize(128, 128); @@ -523,7 +684,25 @@ public class ModelOmegaArmour extends ModelBiped this.bipedHeadwear.cubeList.clear(); if(addHelmet) { - + this.bipedHead.addChild(this.leftFacePlate); + this.bipedHead.addChild(this.rightFacePlate); + this.bipedHead.addChild(this.facePlate1); + this.bipedHead.addChild(this.facePlate2); + this.bipedHead.addChild(this.facePlate3); + this.bipedHead.addChild(this.leftWingPlate1); + this.bipedHead.addChild(this.leftWingPlate2); + this.bipedHead.addChild(this.rightWingPlate1); + this.bipedHead.addChild(this.rightWingPlate2); + this.bipedHead.addChild(this.topPlate1); + this.bipedHead.addChild(this.topPlate2); + this.bipedHead.addChild(this.topPlate3); + this.bipedHead.addChild(this.backPlate1); + this.bipedHead.addChild(this.backPlate2); + this.bipedHead.addChild(this.backPlate3); + this.bipedHead.addChild(this.backPlate4); + this.bipedHead.addChild(this.backPlate5); + this.bipedHead.addChild(this.backPlate6); + this.bipedHead.addChild(this.eyePlate); } this.bipedBody.cubeList.clear(); diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java index c625db2f..302441b3 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java @@ -64,7 +64,7 @@ public class RitualEffectFlight extends RitualEffect { continue; } - entity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFlight.id, hasAether ? 100 : 20, 0)); + entity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFlight.id, hasAether ? 30*20 : 20, 0)); entityCount ++; } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFullStomach.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFullStomach.java new file mode 100644 index 00000000..8828d78a --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFullStomach.java @@ -0,0 +1,131 @@ +package WayofTime.alchemicalWizardry.common.rituals; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.FoodStats; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; +import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; +import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; + +public class RitualEffectFullStomach extends RitualEffect +{ + + @Override + public void performEffect(IMasterRitualStone ritualStone) + { + String owner = ritualStone.getOwner(); + + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); + World world = ritualStone.getWorld(); + int x = ritualStone.getXCoord(); + int y = ritualStone.getYCoord(); + int z = ritualStone.getZCoord(); + + if (world.getWorldTime() % 20 != 0) + { + return; + } + + double horizRange = 5; + double vertRange = 5; + + List playerList = SpellHelper.getPlayersInRange(world, x+0.5, y+0.5, z+0.5, horizRange, vertRange); + + if(playerList == null) + { + return; + } + + if (currentEssence < this.getCostPerRefresh() * playerList.size()) + { + SoulNetworkHandler.causeNauseaToPlayer(owner); + } else + { + TileEntity tile = world.getTileEntity(x, y+1, z); + IInventory inventory = null; + if(tile instanceof IInventory) + { + inventory = (IInventory)tile; + }else + { + tile = world.getTileEntity(x, y-1, z); + if(tile instanceof IInventory) + { + inventory = (IInventory)tile; + } + } + + int count = 0; + + if(inventory != null) + { + for(EntityPlayer player : playerList) + { + FoodStats foodStats = player.getFoodStats(); + float satLevel = foodStats.getSaturationLevel(); + + for(int i=0; i getRitualComponentList() + { + ArrayList animalGrowthRitual = new ArrayList(); + animalGrowthRitual.add(new RitualComponent(0, 0, 2, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(2, 0, 0, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(0, 0, -2, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(-2, 0, 0, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(0, 0, 1, RitualComponent.WATER)); + animalGrowthRitual.add(new RitualComponent(1, 0, 0, RitualComponent.WATER)); + animalGrowthRitual.add(new RitualComponent(0, 0, -1, RitualComponent.WATER)); + animalGrowthRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.WATER)); + animalGrowthRitual.add(new RitualComponent(1, 0, 2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(1, 0, -2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(2, 0, 1, RitualComponent.AIR)); + animalGrowthRitual.add(new RitualComponent(2, 0, -1, RitualComponent.AIR)); + animalGrowthRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR)); + animalGrowthRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR)); + return animalGrowthRitual; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java index 8b2ec9b3..91d24751 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java @@ -28,16 +28,8 @@ public class RitualEffectGrowth extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -105,8 +97,7 @@ public class RitualEffectGrowth extends RitualEffect if(hasVirtus) this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); - data.currentEssence = currentEssence - this.getCostPerRefresh()*flag; - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()*flag); } } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHarvest.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHarvest.java index 4882a6e5..f85d611e 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHarvest.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHarvest.java @@ -16,6 +16,7 @@ import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectHarvest extends RitualEffect @@ -24,16 +25,8 @@ public class RitualEffectHarvest extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -78,8 +71,7 @@ public class RitualEffectHarvest extends RitualEffect if (flag > 0) { - data.currentEssence = currentEssence - this.getCostPerRefresh() * Math.min(maxCount, flag); - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * Math.min(maxCount, flag)); } } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java index 2071cc91..a0c86f27 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java @@ -29,16 +29,8 @@ public class RitualEffectHealing extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -128,8 +120,7 @@ public class RitualEffectHealing extends RitualEffect { this.canDrainReagent(ritualStone, ReagentRegistry.praesidiumReagent, praesidiumDrain, true); } - data.currentEssence = currentEssence - cost * entityCount; - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, cost * entityCount); } } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java index 913d385d..bc585a82 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemSuction.java @@ -27,22 +27,14 @@ public class RitualEffectItemSuction extends RitualEffect { public static final int reductusDrain = 1; - public static final int timeDelayMin = 10; + public static final int timeDelayMin = 60; @Override public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); @@ -150,8 +142,7 @@ public class RitualEffectItemSuction extends RitualEffect if(count>0) { - data.currentEssence = currentEssence - this.getCostPerRefresh()*Math.min(count, 100); - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()*Math.min(count, 100)); return; } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java index e1689bad..69ffe1a0 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java @@ -26,16 +26,8 @@ public class RitualEffectJumping extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -87,7 +79,7 @@ public class RitualEffectJumping extends RitualEffect { if(!livingEntity.isPotionActive(AlchemicalWizardry.customPotionFeatherFall)) { - livingEntity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFeatherFall.id, 3 * 20, 0)); + livingEntity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFeatherFall.id, 5 * 20, 0)); this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true); } } @@ -95,8 +87,7 @@ public class RitualEffectJumping extends RitualEffect if (flag > 0) { - data.currentEssence = currentEssence - this.getCostPerRefresh()*flag; - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()*flag); } } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java index 9ad15e77..96576e8b 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java @@ -37,63 +37,13 @@ public class RitualEffectLava extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); - Block block = world.getBlock(x, y + 1, z); - - if (world.isAirBlock(x, y + 1, z) && !(block instanceof BlockSpectralContainer)) - { - if (currentEssence < this.getCostPerRefresh()) - { - SoulNetworkHandler.causeNauseaToPlayer(owner); - } else - { - for (int i = 0; i < 10; i++) - { - SpellHelper.sendIndexedParticleToAllAround(world, x, y, z, 20, world.provider.dimensionId, 3, x, y, z); - } - - world.setBlock(x, y + 1, z, Blocks.lava, 0, 3); - data.currentEssence = currentEssence - this.getCostPerRefresh(); - data.markDirty(); - } - }else - { - boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); - if(!hasSanctus) - { - return; - } - TileEntity tile = world.getTileEntity(x, y + 1, z); - if(tile instanceof IFluidHandler) - { - int amount = ((IFluidHandler) tile).fill(ForgeDirection.DOWN, new FluidStack(FluidRegistry.LAVA, 1000), false); - if(amount >= 1000) - { - ((IFluidHandler) tile).fill(ForgeDirection.DOWN, new FluidStack(FluidRegistry.LAVA, 1000), true); - - this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); - - data.currentEssence = currentEssence - this.getCostPerRefresh(); - data.markDirty(); - } - } - } - - if(this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, false) && SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, fireFuseCost)) { @@ -120,6 +70,7 @@ public class RitualEffectLava extends RitualEffect continue; } } + entity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFireFuse.id,100,0)); this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, true); SoulNetworkHandler.syphonFromNetwork(owner, fireFuseCost); @@ -127,6 +78,47 @@ public class RitualEffectLava extends RitualEffect } } + Block block = world.getBlock(x, y + 1, z); + + if (world.isAirBlock(x, y + 1, z) && !(block instanceof BlockSpectralContainer)) + { + if (currentEssence < this.getCostPerRefresh()) + { + SoulNetworkHandler.causeNauseaToPlayer(owner); + } else + { + for (int i = 0; i < 10; i++) + { + SpellHelper.sendIndexedParticleToAllAround(world, x, y, z, 20, world.provider.dimensionId, 3, x, y, z); + } + + world.setBlock(x, y + 1, z, Blocks.lava, 0, 3); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); + } + }else + { + boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); + if(!hasSanctus) + { + return; + } + TileEntity tile = world.getTileEntity(x, y + 1, z); + if(tile instanceof IFluidHandler) + { + int amount = ((IFluidHandler) tile).fill(ForgeDirection.DOWN, new FluidStack(FluidRegistry.LAVA, 1000), false); + if(amount >= 1000) + { + ((IFluidHandler) tile).fill(ForgeDirection.DOWN, new FluidStack(FluidRegistry.LAVA, 1000), true); + + this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); + + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); + } + } + } + + + } @Override diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java index a70e8a81..cde539ff 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java @@ -30,16 +30,8 @@ public class RitualEffectLeap extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -82,7 +74,7 @@ public class RitualEffectLeap extends RitualEffect double motionY = hasTerrae ? 0.6 : 1.2; double speed = hasAether ? 6.0 : 3.0; - if (!(hasTenebrae || hasSanctus) && livingEntity instanceof EntityPlayer) + if (!(hasTenebrae || hasSanctus)|| livingEntity instanceof EntityPlayer) { livingEntity.motionY = motionY; livingEntity.fallDistance = 0; @@ -173,8 +165,7 @@ public class RitualEffectLeap extends RitualEffect if (flag > 0) { - data.currentEssence = currentEssence - this.getCostPerRefresh() * flag; - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * flag); } } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java index b7b93f4d..fab7e120 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLifeConduit.java @@ -15,6 +15,7 @@ import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; @@ -24,16 +25,8 @@ public class RitualEffectLifeConduit extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -90,7 +83,7 @@ public class RitualEffectLifeConduit extends RitualEffect { entityOwner.setHealth(2.0f); } - data.currentEssence = currentEssence - fillAmount*2; + SoulNetworkHandler.syphonFromNetwork(owner, fillAmount*2); } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java index a9eeaf71..01e289eb 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java @@ -31,16 +31,8 @@ public class RitualEffectMagnetic extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -114,8 +106,7 @@ public class RitualEffectMagnetic extends RitualEffect //TODO //Allow swapping code. This means the searched block is an ore. BlockTeleposer.swapBlocks(world, world, x + i, j, z + k, xRep, yRep, zRep); - data.currentEssence = currentEssence - this.getCostPerRefresh(); - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); if(hasPotentia) { diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java index 99c60d07..2099ca3d 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSoulBound.java @@ -19,6 +19,7 @@ import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectSoulBound extends RitualEffect @@ -27,16 +28,8 @@ public class RitualEffectSoulBound extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -91,8 +84,7 @@ public class RitualEffectSoulBound extends RitualEffect } } - data.currentEssence = currentEssence - this.getCostPerRefresh(); - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, getCostPerRefresh()); } else { ritualStone.setCooldown(ritualStone.getCooldown() - 1); diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSpawnWard.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSpawnWard.java index b7162373..0d69aa0e 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSpawnWard.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSpawnWard.java @@ -24,16 +24,8 @@ public class RitualEffectSpawnWard extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -91,8 +83,7 @@ public class RitualEffectSpawnWard extends RitualEffect } - data.currentEssence = currentEssence - this.getCostPerRefresh(); - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonMeteor.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonMeteor.java index 2ec9a0f6..70985878 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonMeteor.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonMeteor.java @@ -10,10 +10,12 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.entity.projectile.EntityMeteor; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorRegistry; @@ -24,16 +26,8 @@ public class RitualEffectSummonMeteor extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -70,20 +64,36 @@ public class RitualEffectSummonMeteor extends RitualEffect int meteorID = MeteorRegistry.getParadigmIDForItem(entityItem.getEntityItem()); EntityMeteor meteor = new EntityMeteor(world, x + 0.5f, 257, z + 0.5f, meteorID); meteor.motionY = -1.0f; + + if(this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, 1000, true)) + { + meteor.hasTerrae = true; + } + if(this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, 1000, true)) + { + meteor.hasOrbisTerrae = true; + } + if(this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, 1000, true)) + { + meteor.hasCrystallos = true; + } + if(this.canDrainReagent(ritualStone, ReagentRegistry.incendiumReagent, 1000, true)) + { + meteor.hasIncendium = true; + } + if(this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, 1000, true)) + { + meteor.hasTennebrae = true; + } + entityItem.setDead(); world.spawnEntityInWorld(meteor); ritualStone.setActive(false); break; } } - -// EnergyBlastProjectile proj = new EnergyBlastProjectile(world, x, y+20, z); -// proj.motionX = 0.0d; -// proj.motionZ = 0.0d; -// proj.motionY = -1.0d; -// world.spawnEntityInWorld(proj); - data.currentEssence = currentEssence - this.getCostPerRefresh(); - data.markDirty(); + + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSupression.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSupression.java index 7eb5296e..9a93eb98 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSupression.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSupression.java @@ -16,6 +16,7 @@ import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; import WayofTime.alchemicalWizardry.common.tileEntity.TESpectralContainer; @@ -28,16 +29,8 @@ public class RitualEffectSupression extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -105,8 +98,7 @@ public class RitualEffectSupression extends RitualEffect } - data.currentEssence = currentEssence - this.getCostPerRefresh()*costMod; - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()*costMod); if(world.getWorldTime() % 100 == 0) { diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java index cb4d3168..0c4b3455 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectUnbinding.java @@ -33,16 +33,8 @@ public class RitualEffectUnbinding extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -171,8 +163,7 @@ public class RitualEffectUnbinding extends RitualEffect if(drain) { - data.currentEssence = currentEssence - this.getCostPerRefresh(); - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectVeilOfEvil.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectVeilOfEvil.java index d6232bc1..362b608f 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectVeilOfEvil.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectVeilOfEvil.java @@ -24,16 +24,8 @@ public class RitualEffectVeilOfEvil extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -91,8 +83,7 @@ public class RitualEffectVeilOfEvil extends RitualEffect } - data.currentEssence = currentEssence - this.getCostPerRefresh(); - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh()); } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java index 2f6bef8f..7ec6e98b 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java @@ -30,16 +30,8 @@ public class RitualEffectWellOfSuffering extends RitualEffect public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); - World worldSave = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); - - if (data == null) - { - data = new LifeEssenceNetwork(owner); - worldSave.setItemData(owner, data); - } - - int currentEssence = data.currentEssence; + + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); @@ -99,8 +91,7 @@ public class RitualEffectWellOfSuffering extends RitualEffect } } - data.currentEssence = currentEssence - this.getCostPerRefresh() * entityCount; - data.markDirty(); + SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * entityCount); } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorParadigm.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorParadigm.java index 5d3fcb7b..56a615e6 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorParadigm.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorParadigm.java @@ -2,6 +2,7 @@ package WayofTime.alchemicalWizardry.common.summoning.meteor; import java.util.ArrayList; import java.util.List; +import java.util.Random; import net.minecraft.block.Block; import net.minecraft.init.Blocks; @@ -16,6 +17,8 @@ public class MeteorParadigm public ItemStack focusStack; public int radius; public static int maxChance = 1000; + + public static Random rand = new Random(); public MeteorParadigm(ItemStack focusStack, int radius) { @@ -34,17 +37,51 @@ public class MeteorParadigm } } - public void createMeteorImpact(World world, int x, int y, int z) + public void createMeteorImpact(World world, int x, int y, int z, boolean[] flags) { - world.createExplosion(null, x, y, z, radius * 4, AlchemicalWizardry.doMeteorsDestroyBlocks); - - for (int i = -radius; i <= radius; i++) + boolean hasTerrae = false; + boolean hasOrbisTerrae = false; + boolean hasCrystallos = false; + boolean hasIncendium = false; + boolean hasTennebrae = false; + + if(flags != null && flags.length >= 5) { - for (int j = -radius; j <= radius; j++) + hasTerrae = flags[0]; + hasOrbisTerrae = flags[1]; + hasCrystallos = flags[2]; + hasIncendium = flags[3]; + hasTennebrae = flags[4]; + } + + int newRadius = radius; + int chance = maxChance; + + if(hasOrbisTerrae) + { + newRadius += 2; + chance += 200; + }else if(hasTerrae) + { + newRadius += 1; + chance += 100; + } + + world.createExplosion(null, x, y, z, newRadius * 4, AlchemicalWizardry.doMeteorsDestroyBlocks); + + float iceChance = hasCrystallos ? 1 : 0; + float soulChance = hasIncendium ? 1 : 0; + float obsidChance = hasTennebrae ? 1 : 0; + + float totalChance = iceChance + soulChance + obsidChance; + + for (int i = -newRadius; i <= newRadius; i++) + { + for (int j = -newRadius; j <= newRadius; j++) { - for (int k = -radius; k <= radius; k++) + for (int k = -newRadius; k <= newRadius; k++) { - if (i * i + j * j + k * k >= (radius + 0.50f) * (radius + 0.50f)) + if (i * i + j * j + k * k >= (newRadius + 0.50f) * (newRadius + 0.50f)) { continue; } @@ -54,7 +91,7 @@ public class MeteorParadigm continue; } - int randNum = world.rand.nextInt(maxChance); + int randNum = world.rand.nextInt(chance); boolean hasPlacedBlock = false; for (MeteorParadigmComponent mpc : componentList) @@ -77,7 +114,44 @@ public class MeteorParadigm if (!hasPlacedBlock) { - world.setBlock(x + i, y + j, z + k, Blocks.stone, 0, 3); + float randChance = rand.nextFloat() * totalChance; + + if(randChance < iceChance) + { + world.setBlock(x + i, y + j, z + k, Blocks.ice, 0, 3); + }else + { + randChance-=iceChance; + + if(randChance < soulChance) + { + switch(rand.nextInt(3)) + { + case 0: + world.setBlock(x + i, y + j, z + k, Blocks.soul_sand, 0, 3); + break; + case 1: + world.setBlock(x + i, y + j, z + k, Blocks.glowstone, 0, 3); + break; + case 2: + world.setBlock(x + i, y + j, z + k, Blocks.netherrack, 0, 3); + break; + } + }else + { + randChance-=soulChance; + + if(randChance < obsidChance) + { + world.setBlock(x + i, y + j, z + k, Blocks.obsidian, 0, 3); + }else + { + randChance-=obsidChance; + + world.setBlock(x + i, y + j, z + k, Blocks.stone, 0, 3); + } + } + } } } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorRegistry.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorRegistry.java index 4df585c1..eb26421a 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorRegistry.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/summoning/meteor/MeteorRegistry.java @@ -26,11 +26,11 @@ public class MeteorRegistry } } - public static void createMeteorImpact(World world, int x, int y, int z, int paradigmID) + public static void createMeteorImpact(World world, int x, int y, int z, int paradigmID, boolean[] flags) { if (paradigmID < paradigmList.size()) { - paradigmList.get(paradigmID).createMeteorImpact(world, x, y, z); + paradigmList.get(paradigmID).createMeteorImpact(world, x, y, z, flags); } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java index 0113303f..946b1ddb 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java @@ -191,6 +191,7 @@ public class TETeleposer extends TileEntity implements IInventory public void updateEntity() { super.updateEntity(); + EntityPlayer d; if (worldObj.isRemote) { @@ -281,6 +282,7 @@ public class TETeleposer extends TileEntity implements IInventory entityplayer1 = (EntityLivingBase) iterator1.next(); entityplayer1.worldObj = worldF; entityplayer1.setPositionAndUpdate(entityplayer1.posX - this.xCoord + xf, entityplayer1.posY - this.yCoord + yf, entityplayer1.posZ - this.zCoord + zf); + //entityplayer1.travelToDimension(worldF.provider.dimensionId); } while (iterator2.hasNext()) @@ -288,6 +290,7 @@ public class TETeleposer extends TileEntity implements IInventory entityplayer2 = (EntityLivingBase) iterator2.next(); entityplayer2.worldObj = worldF; entityplayer2.setPositionAndUpdate(entityplayer2.posX + this.xCoord - xf, entityplayer2.posY + this.yCoord - yf, entityplayer2.posZ + this.zCoord - zf); + //entityplayer2.travelToDimension(worldObj.provider.dimensionId); } } } diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/models/armor/BloodArmour_WIP.png b/1.7.10/main/resources/assets/alchemicalwizardry/models/armor/BloodArmour_WIP.png index 0225c61ebba1b6ffe17b115d6582766ed801fa5f..9b19c5fc0cd1c053517a828fba01563d3390c6a4 100644 GIT binary patch literal 18319 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 HGY