Skip to content

Commit

Permalink
fix mana capability
Browse files Browse the repository at this point in the history
  • Loading branch information
Lothrazar committed Jun 13, 2018
1 parent ecad9fe commit 3dde239
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 99 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package elucent.rootsclassic.capability;

import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.common.util.INBTSerializable;

public class ManaCapabilityProvider implements ICapabilityProvider, INBTSerializable, IManaCapability {

// private EntityPlayer player;
float mana;
float maxMana;

ManaCapabilityProvider(boolean isNew) {
if (isNew) {
mana = 40;
maxMana = 40;
}
}

@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
return RootsCapabilityManager.manaCapability != null && capability == RootsCapabilityManager.manaCapability;
}

@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == RootsCapabilityManager.manaCapability) {
return RootsCapabilityManager.manaCapability.cast(this);
}
return null;
}

@Override
public float getMana() {
return mana;
}

@Override
public float getMaxMana() {
return maxMana;
}

@Override
public void setMana(float mana) {
this.mana = mana;
if (mana < 0) {
this.mana = 0;
}
if (mana > getMaxMana()) {
this.mana = getMaxMana();
}
}

@Override
public void setMaxMana(float maxMana) {
this.maxMana = maxMana;
}

@Override
public NBTBase serializeNBT() {
NBTTagCompound tag = new NBTTagCompound();
tag.setFloat("maxMana", getMaxMana());
tag.setFloat("mana", getMana());
return tag;
}

@Override
public void deserializeNBT(NBTBase nbt) {
if (nbt instanceof NBTTagCompound) {
NBTTagCompound tag = (NBTTagCompound) nbt;
//System.out.println("Loading NBT! Mana=" + tag.getFloat("mana") + "/" + tag.getFloat("maxMana"));
if (tag.hasKey("maxMana")) {
setMaxMana(tag.getFloat("maxMana"));
}
if (tag.hasKey("mana")) {
setMana(tag.getFloat("mana"));
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,10 @@

import elucent.rootsclassic.Const;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.common.util.INBTSerializable;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

Expand All @@ -24,83 +19,11 @@ public static void preInit() {
}

@SubscribeEvent
public void onAddCapabilities(AttachCapabilitiesEvent<EntityPlayer> e) {
class ManaCapabilityProvider implements ICapabilityProvider, INBTSerializable, IManaCapability {

private EntityPlayer player;
float mana;
float maxMana;

ManaCapabilityProvider(boolean isNew) {
if (isNew) {
mana = 40;
maxMana = 40;
}
}

@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
return manaCapability != null && capability == manaCapability;
}

@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == manaCapability) {
return manaCapability.cast(this);
}
return null;
}

@Override
public float getMana() {
return mana;
}

@Override
public float getMaxMana() {
return maxMana;
}

@Override
public void setMana(float mana) {
this.mana = mana;
if (mana < 0) {
this.mana = 0;
}
if (mana > getMaxMana()) {
this.mana = getMaxMana();
}
}

@Override
public void setMaxMana(float maxMana) {
this.maxMana = maxMana;
}

@Override
public NBTBase serializeNBT() {
NBTTagCompound tag = new NBTTagCompound();
tag.setFloat("maxMana", getMaxMana());
tag.setFloat("mana", getMana());
return tag;
}

@Override
public void deserializeNBT(NBTBase nbt) {
if (nbt instanceof NBTTagCompound) {
NBTTagCompound tag = (NBTTagCompound) nbt;
//System.out.println("Loading NBT! Mana=" + tag.getFloat("mana") + "/" + tag.getFloat("maxMana"));
if (tag.hasKey("maxMana")) {
setMaxMana(tag.getFloat("maxMana"));
}
if (tag.hasKey("mana")) {
setMana(tag.getFloat("mana"));
}
}
}
public void onAddCapabilities(AttachCapabilitiesEvent e) {
if (e.getObject() instanceof EntityPlayer) {
// ManaCapabilityProvider provider = new ManaCapabilityProvider(!e.getObject().hasCapability(manaCapability, null));
e.addCapability(new ResourceLocation(Const.MODID, "manacapability"),
new ManaCapabilityProvider(true));
}
ManaCapabilityProvider provider = new ManaCapabilityProvider(!e.getObject().hasCapability(manaCapability, null));
e.addCapability(new ResourceLocation(Const.MODID, "manacapability"), provider);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

public class ComponentSunflower extends ComponentBase {

private static final int POTION_DURATION = 15;
Random random = new Random();

public ComponentSunflower() {
Expand All @@ -24,28 +25,32 @@ public ComponentSunflower() {

@Override
public void doEffect(World world, Entity caster, EnumCastType type, double x, double y, double z, double potency, double duration, double size) {
if (type == EnumCastType.SPELL) {
if (type == EnumCastType.SPELL && caster instanceof EntityLivingBase) {
int damageDealt = 0;
ArrayList<EntityLivingBase> targets = (ArrayList<EntityLivingBase>) world.getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(x - size, y - size, z - size, x + size, y + size, z + size));
EntityLivingBase target;
for (int i = 0; i < targets.size(); i++) {
if (targets.get(i).getUniqueID() != caster.getUniqueID()) {
if (targets.get(i) instanceof EntityPlayer && !world.getMinecraftServer().isPVPEnabled()) {}
else {
targets.get(i).attackEntityFrom(DamageSource.IN_FIRE, (int) (3 + 2 * potency));
targets.get(i).setLastAttackedEntity(caster);
targets.get(i).setRevengeTarget((EntityLivingBase) caster);
damageDealt += (int) (3 + 2 * potency);
if (targets.get(i).isEntityUndead()) {
targets.get(i).attackEntityFrom(DamageSource.IN_FIRE, (int) (5 + 4 * potency));
damageDealt += (int) (5 + 4 * potency);
targets.get(i).setFire((int) (7 + 4 * potency));
targets.get(i).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("minecraft:weakness"), 15, 2 + (int) potency));
targets.get(i).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("minecraft:slowness"), 15, 2 + (int) potency));
}
}
target = targets.get(i);
if (target.getUniqueID() == caster.getUniqueID()) {
continue;//dont hurt self
}
if (target instanceof EntityPlayer && !world.getMinecraftServer().isPVPEnabled()) {
continue;//no pvp allowed
}
if (target.isEntityUndead()) {
damageDealt += (int) (5 + 4 * potency);
target.attackEntityFrom(DamageSource.IN_FIRE, damageDealt);
target.setFire(damageDealt);
target.addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("minecraft:weakness"), POTION_DURATION, 2 + (int) potency));
target.addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("minecraft:slowness"), POTION_DURATION, 2 + (int) potency));
}
else {
damageDealt += (int) (3 + 2 * potency);
}
target.attackEntityFrom(DamageSource.IN_FIRE, damageDealt);
target.setLastAttackedEntity(caster);
target.setRevengeTarget((EntityLivingBase) caster);
}

}
}
}

0 comments on commit 3dde239

Please sign in to comment.