Initial commit

This commit is contained in:
Electroblob
2018-01-19 20:33:04 +00:00
commit da6b007a3a
945 changed files with 60616 additions and 0 deletions
@@ -0,0 +1,23 @@
package electroblob.wizardry.potion;
import net.minecraft.world.World;
/**
* Interface for potion effects that spawn custom particles instead of (or as well as) the vanilla 'swirly' particles.
* @author Electroblob
* @since Wizardry 1.2
*/
// TODO: Backport.
public interface ICustomPotionParticles {
/**
* Called from the event handler to spawn a <b>single</b> custom potion particle. To get an instance of
* <code>Random</code> inside this method, use <code>world.rand</code>.
* @param world The world to spawn the particle in.
* @param x The x coordinate of the particle, already set to a random value within the entity's bounding box.
* @param y The y coordinate of the particle, already set to a random value within the entity's bounding box.
* @param z The z coordinate of the particle, already set to a random value within the entity's bounding box.
*/
void spawnCustomParticle(World world, double x, double y, double z);
}
@@ -0,0 +1,53 @@
package electroblob.wizardry.potion;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.constants.Constants;
import electroblob.wizardry.util.WizardryUtilities;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class PotionDecay extends Potion {
private static final ResourceLocation ICON = new ResourceLocation(Wizardry.MODID, "textures/gui/decay_icon.png");
public PotionDecay(boolean isBadEffect, int liquidColour) {
super(isBadEffect, liquidColour);
// This needs to be here because registerPotionAttributeModifier doesn't like it if the potion has no name yet.
this.setPotionName("potion.wizardry:decay");
this.registerPotionAttributeModifier(SharedMonsterAttributes.MOVEMENT_SPEED, "85602e0b-4801-4a87-94f3-bf617c97014e", -Constants.DECAY_SLOWNESS_PER_LEVEL, 2);
}
@Override
public boolean isReady(int p_76397_1_, int p_76397_2_) {
// Copied from the vanilla wither effect. It does the timing stuff. 25 is the number of ticks between hits at
// amplifier 0
int k = 25 >> p_76397_2_;
return k > 0 ? p_76397_1_ % k == 0 : true;
}
@Override
public void performEffect(EntityLivingBase entitylivingbase, int strength) {
entitylivingbase.attackEntityFrom(DamageSource.wither, 1);
}
@Override
@SideOnly(Side.CLIENT)
public void renderInventoryEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc) {
mc.renderEngine.bindTexture(ICON);
WizardryUtilities.drawTexturedRect(x + 6, y + 7, 0, 0, 18, 18, 18, 18);
}
@Override
@SideOnly(Side.CLIENT)
public void renderHUDEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc, float alpha) {
mc.renderEngine.bindTexture(ICON);
WizardryUtilities.drawTexturedRect(x + 3, y + 3, 0, 0, 18, 18, 18, 18);
}
}
@@ -0,0 +1,53 @@
package electroblob.wizardry.potion;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.constants.Constants;
import electroblob.wizardry.util.WizardryParticleType;
import electroblob.wizardry.util.WizardryUtilities;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class PotionFrost extends Potion implements ICustomPotionParticles {
private static final ResourceLocation ICON = new ResourceLocation(Wizardry.MODID, "textures/gui/frost_icon.png");
public PotionFrost(boolean isBadEffect, int liquidColour) {
super(isBadEffect, liquidColour);
// This needs to be here because registerPotionAttributeModifier doesn't like it if the potion has no name yet.
this.setPotionName("potion.wizardry:frost");
// With -0.5 as the 'amount', frost 1 slows the entity down by a half and frost 2 roots it to the spot
this.registerPotionAttributeModifier(SharedMonsterAttributes.MOVEMENT_SPEED, "35dded48-2f19-4541-8510-b29e2dc2cd51", -Constants.FROST_SLOWNESS_PER_LEVEL, 2);
// More UUIDs: 85602e0b-4801-4a87-94f3-bf617c97014e
}
@Override
public void performEffect(EntityLivingBase entitylivingbase, int strength) {
// Nothing here because this potion works on attribute modifiers.
}
@Override
public void spawnCustomParticle(World world, double x, double y, double z) {
Wizardry.proxy.spawnParticle(WizardryParticleType.SNOW, world, x, y, z, 0, -0.02, 0, 15 + world.rand.nextInt(5));
}
@Override
@SideOnly(Side.CLIENT)
public void renderInventoryEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc) {
mc.renderEngine.bindTexture(ICON);
WizardryUtilities.drawTexturedRect(x + 6, y + 7, 0, 0, 18, 18, 18, 18);
}
@Override
@SideOnly(Side.CLIENT)
public void renderHUDEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc, float alpha) {
mc.renderEngine.bindTexture(ICON);
WizardryUtilities.drawTexturedRect(x + 3, y + 3, 0, 0, 18, 18, 18, 18);
}
}
@@ -0,0 +1,42 @@
package electroblob.wizardry.potion;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.util.WizardryUtilities;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/** Class for all potions that work on events only. */
public class PotionMagicEffect extends Potion {
private static final ResourceLocation ICONS = new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icons.png");
private final int textureIndex;
public PotionMagicEffect(boolean isBadEffect, int liquidColour, int textureIndex) {
super(isBadEffect, liquidColour);
this.textureIndex = textureIndex;
}
@Override
public void performEffect(EntityLivingBase entitylivingbase, int strength) {
// Nothing here because this potion works on events.
}
@Override
@SideOnly(Side.CLIENT)
public void renderInventoryEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc){
mc.renderEngine.bindTexture(ICONS);
WizardryUtilities.drawTexturedRect(x + 6, y + 7, 18*(textureIndex%4), 18*(textureIndex/4), 18, 18, 72, 72);
}
@Override
@SideOnly(Side.CLIENT)
public void renderHUDEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc, float alpha) {
mc.renderEngine.bindTexture(ICONS);
WizardryUtilities.drawTexturedRect(x + 3, y + 3, 18*(textureIndex%4), 18*(textureIndex/4), 18, 18, 72, 72);
}
}
@@ -0,0 +1,11 @@
package electroblob.wizardry.potion;
/** Same as {@link PotionMagicEffect}, but also implements {@link ICustomPotionParticles} to allow anonymous classes
* to extend it and add their own particles. */
public abstract class PotionMagicEffectParticles extends PotionMagicEffect implements ICustomPotionParticles {
public PotionMagicEffectParticles(boolean isBadEffect, int liquidColour, int textureIndex){
super(isBadEffect, liquidColour, textureIndex);
}
}