Initial stages of Omega being worked on - binding of human and demon at 5%.

This commit is contained in:
WayofTime 2015-01-11 21:05:28 -05:00
parent c0abd69a2a
commit 316a79fab8
16 changed files with 348 additions and 49 deletions

View file

@ -16,30 +16,40 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.PlayerCapabilities;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Vec3;
import net.minecraftforge.common.ISpecialArmor.ArmorProperties;
import net.minecraftforge.event.AnvilUpdateEvent;
import net.minecraftforge.event.entity.living.EnderTeleportEvent;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.event.entity.living.LivingSpawnEvent.CheckSpawn;
import vazkii.botania.api.internal.IManaBurst;
import WayofTime.alchemicalWizardry.AlchemicalWizardry;
import WayofTime.alchemicalWizardry.BloodMagicConfiguration;
import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent;
import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler;
import WayofTime.alchemicalWizardry.api.spell.APISpellHelper;
import WayofTime.alchemicalWizardry.common.entity.projectile.EnergyBlastProjectile;
import WayofTime.alchemicalWizardry.common.items.armour.BoundArmour;
import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour;
import WayofTime.alchemicalWizardry.common.omega.OmegaParadigm;
import WayofTime.alchemicalWizardry.common.omega.OmegaRegistry;
import WayofTime.alchemicalWizardry.common.omega.ReagentRegenConfiguration;
import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper;
import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone;
import cpw.mods.fml.client.event.ConfigChangedEvent;
import cpw.mods.fml.common.ObfuscationReflectionHelper;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.eventhandler.Event.Result;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent;
import cpw.mods.fml.common.registry.GameRegistry;
@ -57,13 +67,143 @@ public class AlchemicalWizardryEventHooks
@SubscribeEvent
public void onAnvilUpdateEvent(AnvilUpdateEvent event)
{
if(event.isCancelable() && event.left != null && event.left.getItem() instanceof BoundArmour && event.right != null)
if(event.isCancelable() && event.left != null && event.right != null && (event.left.getItem() instanceof BoundArmour || event.right.getItem() instanceof BoundArmour))
{
event.setCanceled(true);
}
}
@SubscribeEvent(priority=EventPriority.HIGHEST)
public void onLivingHurtEvent(LivingHurtEvent event)
{
if(!event.isCanceled() && event.entityLiving instanceof EntityPlayer && !event.entityLiving.worldObj.isRemote)
{
EntityPlayer player = (EntityPlayer)event.entityLiving;
float prevHp = APISpellHelper.getCurrentAdditionalHP((EntityPlayer)event.entityLiving);
if(prevHp > 0) //TODO change the HP values to floats
{
float recalculatedAmount = ArmorProperties.ApplyArmor(player, player.inventory.armorInventory, event.source, event.ammount);
if (recalculatedAmount <= 0) return;
float ratio = recalculatedAmount / event.ammount;
float f1 = recalculatedAmount;
recalculatedAmount = Math.max(recalculatedAmount - player.getAbsorptionAmount(), 0.0F);
player.setAbsorptionAmount(player.getAbsorptionAmount() - (f1 - recalculatedAmount));
if(prevHp > recalculatedAmount)
{
float hp = (prevHp - recalculatedAmount);
if(hp > 0)
{
event.ammount = 0;
}else
{
event.ammount += hp / ratio;
}
APISpellHelper.setCurrentAdditionalHP((EntityPlayer)event.entityLiving, Math.max(0, hp));
System.out.println("HP: " + hp);
APISpellHelper.setCurrentAdditionalHP(player, Math.max(0, hp));
NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(Math.max(0, hp), APISpellHelper.getCurrentAdditionalMaxHP(player)), (EntityPlayerMP)player);
}
}
}
}
@SubscribeEvent
public void omegaUpdateHpEvent(LivingUpdateEvent event)
{
if(event.entityLiving instanceof EntityPlayer && !event.entityLiving.worldObj.isRemote)
{
EntityPlayer player = (EntityPlayer)event.entityLiving;
Reagent reagent = APISpellHelper.getPlayerReagentType(player);
float reagentAmount = APISpellHelper.getPlayerCurrentReagentAmount(player);
boolean hasReagentChanged = false;
if(reagentAmount > 0 && OmegaRegistry.hasParadigm(reagent))
{
OmegaParadigm parad = OmegaRegistry.getParadigmForReagent(reagent);
ReagentRegenConfiguration config = parad.getRegenConfig(player);
if(parad.isPlayerWearingFullSet(player))
{
if(event.entityLiving.worldObj.getWorldTime() % config.tickRate == 0)
{
boolean hasHealthChanged = false;
int maxHealth = parad.getMaxAdditionalHealth();
float health = APISpellHelper.getCurrentAdditionalHP(player);
if(health > maxHealth)
{
health = maxHealth;
hasHealthChanged = true;
}else if(health < maxHealth)
{
float addedAmount = Math.min(Math.min((reagentAmount / config.costPerPoint), config.healPerTick), maxHealth - health);
float drain = addedAmount * config.costPerPoint;
reagentAmount -= drain;
hasReagentChanged = true;
health += addedAmount;
hasHealthChanged = true;
}
if(player instanceof EntityPlayerMP)
{
if(hasHealthChanged)
{
APISpellHelper.setCurrentAdditionalHP(player, health);
NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getAddedHPPacket(health, maxHealth), (EntityPlayerMP)player);
}
}
}
}
//Consumes the amount
float costPerTick = parad.getCostPerTickOfUse(player);
if(reagentAmount > costPerTick)
{
hasReagentChanged = true;
reagentAmount = Math.max(0, reagentAmount - costPerTick);
}else
{
hasReagentChanged = true;
reagentAmount = 0;
}
}
if(reagentAmount <= 0)
{
ItemStack[] armourInventory = player.inventory.armorInventory;
for(ItemStack stack : armourInventory)
{
if(stack != null && stack.getItem() instanceof OmegaArmour)
{
((OmegaArmour)stack.getItem()).revertArmour(player, stack);
}
}
}
if(player instanceof EntityPlayerMP)
{
if(hasReagentChanged)
{
APISpellHelper.setPlayerCurrentReagentAmount(player, reagentAmount);
NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getReagentBarPacket(reagent, reagentAmount, APISpellHelper.getPlayerMaxReagentAmount(player)), (EntityPlayerMP)player);
}
}
}
}
@SubscribeEvent(priority=EventPriority.HIGHEST)
public void onPlayerDamageEvent(LivingAttackEvent event)
{
if (event.source.isProjectile())

View file

@ -288,6 +288,7 @@ public enum NewPacketHandler
{
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
APISpellHelper.setPlayerReagentType(player, msg.reagent);
APISpellHelper.setPlayerCurrentReagentAmount(player, msg.currentAR);
APISpellHelper.setPlayerMaxReagentAmount(player, msg.maxAR);
}
@ -430,8 +431,8 @@ public enum NewPacketHandler
public static class CurrentAddedHPMessage extends BMMessage
{
int currentHP;
int maxHP;
float currentHP;
float maxHP;
}
private class TEAltarCodec extends FMLIndexedMessageToMessageCodec<BMMessage>
@ -673,8 +674,8 @@ public enum NewPacketHandler
break;
case 13:
target.writeInt(((CurrentAddedHPMessage) msg).currentHP);
target.writeInt(((CurrentAddedHPMessage) msg).maxHP);
target.writeFloat(((CurrentAddedHPMessage) msg).currentHP);
target.writeFloat(((CurrentAddedHPMessage) msg).maxHP);
break;
}
@ -906,8 +907,8 @@ public enum NewPacketHandler
break;
case 13:
((CurrentAddedHPMessage) msg).currentHP = dat.readInt();
((CurrentAddedHPMessage) msg).maxHP = dat.readInt();
((CurrentAddedHPMessage) msg).currentHP = dat.readFloat();
((CurrentAddedHPMessage) msg).maxHP = dat.readFloat();
break;
}
@ -1076,11 +1077,11 @@ public enum NewPacketHandler
return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg);
}
public static Packet getAddedHPPacket(int curHP, int maxHP)
public static Packet getAddedHPPacket(float health, float maxHP)
{
CurrentAddedHPMessage msg = new CurrentAddedHPMessage();
msg.index = 13;
msg.currentHP = curHP;
msg.currentHP = health;
msg.maxHP = maxHP;
return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg);

View file

@ -218,7 +218,7 @@ public class BoundArmour extends ItemArmor implements IAlchemyGoggles, ISpecialA
return new ArmorProperties(-1, 0, 0);
}
if (helmet.getItem().equals(ModItems.boundHelmet) && plate.getItem().equals(ModItems.boundPlate) && leggings.getItem().equals(ModItems.boundLeggings) && boots.getItem().equals(ModItems.boundBoots))
if (helmet.getItem() instanceof BoundArmour && plate.getItem() instanceof BoundArmour && leggings.getItem() instanceof BoundArmour && boots.getItem() instanceof BoundArmour)
{
if (source.isUnblockable())
{

View file

@ -39,13 +39,25 @@ public abstract class OmegaArmour extends BoundArmour
public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack)
{
super.onArmorTick(world, player, itemStack);
if(!this.decrementDuration(itemStack))
{
ItemStack stack = this.getContainedArmourStack(itemStack);
player.inventory.armorInventory[3-this.armorType] = stack;
}
//
// if(world.getWorldTime() % 20 == 0 && !world.isRemote)
// {
// NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getReagentBarPacket(ReagentRegistry.aquasalusReagent, this.getDuration(itemStack), 100), (EntityPlayerMP)player);
// }
//
// if(!this.decrementDuration(itemStack))
// {
// ItemStack stack = this.getContainedArmourStack(itemStack);
// player.inventory.armorInventory[3-this.armorType] = stack;
// }
}
public void revertArmour(EntityPlayer player, ItemStack itemStack)
{
ItemStack stack = this.getContainedArmourStack(itemStack);
player.inventory.armorInventory[3-this.armorType] = stack;
}
public ItemStack getSubstituteStack(ItemStack boundStack)
{
ItemStack omegaStack = new ItemStack(this);

View file

@ -13,7 +13,9 @@ public class OmegaParadigm
public OmegaArmour leggings;
public OmegaArmour boots;
public OmegaParadigm(Reagent reagent, OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots)
public ReagentRegenConfiguration config;
public OmegaParadigm(Reagent reagent, OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots, ReagentRegenConfiguration config)
{
this.helmet = helmet;
this.chestPiece = chestPiece;
@ -28,6 +30,8 @@ public class OmegaParadigm
this.chestPiece.setReagent(reagent);
this.leggings.setReagent(reagent);
this.boots.setReagent(reagent);
this.config = new ReagentRegenConfiguration(20, 10, 1);
}
public void convertPlayerArmour(EntityPlayer player)
@ -52,4 +56,31 @@ public class OmegaParadigm
armours[0] = omegaBootsStack;
}
}
public ReagentRegenConfiguration getRegenConfig(EntityPlayer player)
{
return this.config;
}
public int getMaxAdditionalHealth()
{
return 50;
}
public float getCostPerTickOfUse(EntityPlayer player)
{
return 1;
}
public boolean isPlayerWearingFullSet(EntityPlayer player)
{
ItemStack[] armours = player.inventory.armorInventory;
ItemStack helmetStack = armours[3];
ItemStack chestStack = armours[2];
ItemStack leggingsStack = armours[1];
ItemStack bootsStack = armours[0];
return helmetStack != null && helmetStack.getItem() == helmet && chestStack != null && chestStack.getItem() == chestPiece && leggingsStack != null && leggingsStack.getItem() == leggings && bootsStack != null && bootsStack.getItem() == boots;
}
}

View file

@ -0,0 +1,25 @@
package WayofTime.alchemicalWizardry.common.omega;
import net.minecraft.entity.player.EntityPlayer;
import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry;
import WayofTime.alchemicalWizardry.common.items.armour.OmegaArmour;
public class OmegaParadigmWater extends OmegaParadigm
{
public OmegaParadigmWater(OmegaArmour helmet, OmegaArmour chestPiece, OmegaArmour leggings, OmegaArmour boots)
{
super(ReagentRegistry.aquasalusReagent, helmet, chestPiece, leggings, boots, new ReagentRegenConfiguration(50, 10, 100));
}
@Override
public float getCostPerTickOfUse(EntityPlayer player)
{
if(player.isInWater())
{
return 0.5f;
}else
{
return 1;
}
}
}

View file

@ -1,6 +1,25 @@
package WayofTime.alchemicalWizardry.common.omega;
import java.util.HashMap;
import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent;
public class OmegaRegistry
{
public static HashMap<Reagent, OmegaParadigm> omegaList = new HashMap();
public static void registerParadigm(Reagent reagent, OmegaParadigm parad)
{
omegaList.put(reagent, parad);
}
public static OmegaParadigm getParadigmForReagent(Reagent reagent)
{
return omegaList.get(reagent);
}
public static boolean hasParadigm(Reagent reagent)
{
return omegaList.containsKey(reagent);
}
}

View file

@ -0,0 +1,15 @@
package WayofTime.alchemicalWizardry.common.omega;
public class ReagentRegenConfiguration
{
public int tickRate;
public int healPerTick;
public float costPerPoint;
public ReagentRegenConfiguration(int tickRate, int healPerTick, float costPerPoint)
{
this.tickRate = tickRate;
this.healPerTick = healPerTick;
this.costPerPoint = costPerPoint;
}
}

View file

@ -160,20 +160,20 @@ public class RitualEffectCrushing extends RitualEffect
if (copyStack.stackSize > 0)
{
world.spawnEntityInWorld(new EntityItem(world, x + 0.4, y + 2, z + 0.5, copyStack));
}
if (hasOrbisTerrae)
{
this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, true);
}
if (hasPotentia)
{
this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true);
}
if (hasVirtus)
{
this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true);
}
}
}
if (hasOrbisTerrae)
{
this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, true);
}
if (hasPotentia)
{
this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true);
}
if (hasVirtus)
{
this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true);
}
}
}

View file

@ -4,18 +4,22 @@ import java.util.ArrayList;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.world.World;
import WayofTime.alchemicalWizardry.ModItems;
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.SoulNetworkHandler;
import WayofTime.alchemicalWizardry.api.spell.APISpellHelper;
import WayofTime.alchemicalWizardry.common.NewPacketHandler;
import WayofTime.alchemicalWizardry.common.omega.OmegaParadigm;
import WayofTime.alchemicalWizardry.common.omega.OmegaRegistry;
import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper;
public class RitualEffectOmegaTest extends RitualEffect
{
public static final int tickDuration = 1 * 60 * 20;
@Override
public void performEffect(IMasterRitualStone ritualStone)
{
@ -38,8 +42,16 @@ public class RitualEffectOmegaTest extends RitualEffect
for(EntityPlayer player : playerList)
{
OmegaParadigm waterParadigm = new OmegaParadigm(ReagentRegistry.aquasalusReagent, ModItems.boundHelmetWater, ModItems.boundPlateWater, ModItems.boundLeggingsWater, ModItems.boundBootsWater);
// OmegaParadigm waterParadigm = new OmegaParadigm(ReagentRegistry.aquasalusReagent, ModItems.boundHelmetWater, ModItems.boundPlateWater, ModItems.boundLeggingsWater, ModItems.boundBootsWater, new ReagentRegenConfiguration(1, 1, 1));
OmegaParadigm waterParadigm = OmegaRegistry.getParadigmForReagent(ReagentRegistry.aquasalusReagent);
waterParadigm.convertPlayerArmour(player);
APISpellHelper.setPlayerCurrentReagentAmount(player, tickDuration);
APISpellHelper.setPlayerMaxReagentAmount(player, tickDuration);
APISpellHelper.setPlayerReagentType(player, ReagentRegistry.aquasalusReagent);
APISpellHelper.setCurrentAdditionalMaxHP(player, waterParadigm.getMaxAdditionalHealth());
NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getReagentBarPacket(ReagentRegistry.aquasalusReagent, APISpellHelper.getPlayerCurrentReagentAmount(player), APISpellHelper.getPlayerMaxReagentAmount(player)), (EntityPlayerMP)player);
}
}

View file

@ -73,7 +73,7 @@ public class RitualEffectWellOfSuffering extends RitualEffect
{
for (EntityLivingBase livingEntity : list)
{
if (livingEntity instanceof EntityPlayer || AlchemicalWizardry.wellBlacklist.contains(livingEntity.getClass()))
if (!livingEntity.isEntityAlive() || livingEntity instanceof EntityPlayer || AlchemicalWizardry.wellBlacklist.contains(livingEntity.getClass()))
{
continue;
}