Leaving this unfinished since I really don't feel like doing much more today.

This commit is contained in:
Lizbeth Rika committed 2014-11-24 19:35:21 +00:00
1 parent d0041babdd
commit d03d1f1ced
8 files changed
+208

No files matched your search

@@ -82,6 +82,7 @@ public final class BotaniaCreativeTab extends CreativeTabs {
addItem(ModItems.fireRod);
addItem(ModItems.diviningRod);
addItem(ModItems.gravityRod);
addItem(ModItems.missileRod);
addItem(ModItems.virus);
addItem(ModItems.slingshot);
addItem(ModItems.vineBall);
@@ -0,0 +1,115 @@
/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under a
* Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License
* (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB)
*
* File Created @ [Nov 24, 2014, 5:58:22 PM (GMT)]
*/
package vazkii.botania.common.entity;
import java.util.List;
import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.api.mana.IManaCollisionGhost;
import vazkii.botania.common.Botania;
import vazkii.botania.common.core.helper.Vector3;
import net.minecraft.block.Block;
import net.minecraft.block.BlockBush;
import net.minecraft.block.BlockLeaves;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.IMob;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
public class EntityMagicMissile extends EntityThrowable {
EntityLivingBase target;
public EntityMagicMissile(World world) {
super(world);
setSize(0F, 0F);
}
@Override
public void onUpdate() {
super.onUpdate();
if(!worldObj.isRemote && !getTarget()) {
setDead();
return;
}
Vector3 thisVec = Vector3.fromEntityCenter(this);
Vector3 oldPos = new Vector3(lastTickPosX, lastTickPosY, lastTickPosZ);
Vector3 diff = thisVec.copy().sub(oldPos);
Vector3 step = diff.copy().normalize().multiply(0.05);
int steps = (int) (diff.mag() / step.mag());
Vector3 particlePos = oldPos.copy();
for(int i = 0; i < steps; i++) {
Botania.proxy.sparkleFX(worldObj, particlePos.x, particlePos.y, particlePos.z, 1F, 0.4F, 1F, 0.8F, 2);
if(worldObj.rand.nextInt(steps) <= 1)
Botania.proxy.sparkleFX(worldObj, particlePos.x + (Math.random() - 0.5) * 0.4, particlePos.y + (Math.random() - 0.5) * 0.4, particlePos.z + (Math.random() - 0.5) * 0.4, 1F, 0.4F, 1F, 0.8F, 2);
particlePos.add(step);
}
if(!worldObj.isRemote) {
Vector3 targetVec = Vector3.fromEntityCenter(target);
Vector3 motionVec = targetVec.copy().sub(thisVec).normalize().multiply(0.6);
motionX = motionVec.x;
motionY = motionVec.y;
if(ticksExisted < 10)
motionY = Math.abs(motionY);
motionZ = motionVec.z;
List<EntityLivingBase> targetList = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(posX - 0.5, posY - 0.5, posZ - 0.5, posX + 0.5, posY + 0.5, posZ + 0.5));
if(targetList.contains(target) && target != null) {
EntityLivingBase thrower = getThrower();
EntityPlayer player = thrower instanceof EntityPlayer ? (EntityPlayer) thrower : null;
target.attackEntityFrom(player == null ? DamageSource.generic : DamageSource.causePlayerDamage(player), 5);
setDead();
}
}
}
public boolean getTarget() {
if(target != null && target.getHealth() > 0 && !target.isDead && worldObj.getLoadedEntityList().contains(target))
return true;
target = null;
double range = 12;
List<IMob> entities = worldObj.getEntitiesWithinAABB(IMob.class, AxisAlignedBB.getBoundingBox(posX - range, posY - range, posZ - range, posX + range, posY + range, posZ + range));
while(entities.size() > 0) {
IMob mob = entities.get(worldObj.rand.nextInt(entities.size()));
if(!(mob instanceof EntityLivingBase)) { // Just in case...
entities.remove(mob);
continue;
}
target = (EntityLivingBase) mob;
break;
}
return target != null;
}
@Override
protected void onImpact(MovingObjectPosition pos) {
Block block = worldObj.getBlock(pos.blockX, pos.blockY, pos.blockZ);
if(!(block instanceof BlockBush) && !(block instanceof BlockLeaves) && (pos.entityHit == null || target == pos.entityHit))
setDead();
}
}
@@ -19,6 +19,7 @@ public final class ModEntities {
public static void init() {
int id = 0;
EntityRegistry.registerModEntity(EntityManaBurst.class, LibEntityNames.MANA_BURST, id++, Botania.instance, 64, 10, true);
EntityRegistry.registerModEntity(EntitySignalFlare.class, LibEntityNames.SIGNAL_FLARE, id++, Botania.instance, 2048, 10, false);
EntityRegistry.registerModEntity(EntityPixie.class, LibEntityNames.PIXIE, id++, Botania.instance, 16, 3, true);
@@ -28,6 +29,7 @@ public final class ModEntities {
EntityRegistry.registerModEntity(EntityMagicLandmine.class, LibEntityNames.MAGIC_LANDMINE, id++, Botania.instance, 128, 40, false);
EntityRegistry.registerModEntity(EntitySpark.class, LibEntityNames.SPARK, id++, Botania.instance, 64, 10, false);
EntityRegistry.registerModEntity(EntityThrownItem.class, LibEntityNames.THROWN_ITEM, id++, Botania.instance, 64, 20, true);
EntityRegistry.registerModEntity(EntityMagicMissile.class, LibEntityNames.MAGIC_MISSILE, id++, Botania.instance, 64, 10, true);
}
}
@@ -79,6 +79,7 @@ import vazkii.botania.common.item.rod.ItemDirtRod;
import vazkii.botania.common.item.rod.ItemDiviningRod;
import vazkii.botania.common.item.rod.ItemFireRod;
import vazkii.botania.common.item.rod.ItemGravityRod;
import vazkii.botania.common.item.rod.ItemMissileRod;
import vazkii.botania.common.item.rod.ItemRainbowRod;
import vazkii.botania.common.item.rod.ItemSkyDirtRod;
import vazkii.botania.common.item.rod.ItemTerraformRod;
@@ -180,6 +181,7 @@ public final class ModItems {
public static Item brewVial;
public static Item brewFlask;
public static Item bloodPendant;
public static Item missileRod;
public static void init() {
lexicon = new ItemLexicon();
@@ -274,6 +276,7 @@ public final class ModItems {
brewVial = new ItemBrewVial();
brewFlask = new ItemBrewFlask();
bloodPendant = new ItemBloodPendant();
missileRod = new ItemMissileRod();
OreDictionary.registerOre(LibOreDict.LEXICON, lexicon);
for(int i = 0; i < 16; i++) {
@@ -0,0 +1,85 @@
/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under a
* Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License
* (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB)
*
* File Created @ [Nov 24, 2014, 5:58:16 PM (GMT)]
*/
package vazkii.botania.common.item.rod;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.BlockFlower;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.oredict.OreDictionary;
import vazkii.botania.api.mana.IManaUsingItem;
import vazkii.botania.api.mana.ManaItemHandler;
import vazkii.botania.api.subtile.ISpecialFlower;
import vazkii.botania.common.Botania;
import vazkii.botania.common.entity.EntityMagicMissile;
import vazkii.botania.common.item.ItemMod;
import vazkii.botania.common.item.rod.ItemTerraformRod.CoordsWithBlock;
import vazkii.botania.common.lib.LibItemNames;
import vazkii.botania.common.lib.LibMisc;
public class ItemMissileRod extends ItemMod implements IManaUsingItem {
private static final int COST_PER = 120;
public ItemMissileRod() {
super();
setMaxStackSize(1);
setUnlocalizedName(LibItemNames.MISSILE_ROD);
}
@Override
public EnumAction getItemUseAction(ItemStack par1ItemStack) {
return EnumAction.bow;
}
@Override
public int getMaxItemUseDuration(ItemStack par1ItemStack) {
return 72000;
}
@Override
public void onUsingTick(ItemStack stack, EntityPlayer player, int count) {
if(count != getMaxItemUseDuration(stack) && count % 2 == 0 && !player.worldObj.isRemote && ManaItemHandler.requestManaExact(stack, player, COST_PER, false)) {
EntityMagicMissile missile = new EntityMagicMissile(player.worldObj);
missile.setPosition(player.posX + (Math.random() - 0.5 * 0.1), player.posY + 2.4 + (Math.random() - 0.5 * 0.1), player.posZ + (Math.random() - 0.5 * 0.1));
if(missile.getTarget()) {
player.worldObj.spawnEntityInWorld(missile);
ManaItemHandler.requestManaExact(stack, player, COST_PER, true);
}
Botania.proxy.sparkleFX(player.worldObj, player.posX, player.posY + 2.4, player.posZ, 1F, 0.4F, 1F, 6F, 6);
}
}
@Override
public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) {
par3EntityPlayer.setItemInUse(par1ItemStack, getMaxItemUseDuration(par1ItemStack));
return par1ItemStack;
}
@Override
public boolean isFull3D() {
return true;
}
@Override
public boolean usesMana(ItemStack stack) {
return true;
}
}
@@ -24,5 +24,6 @@ public final class LibEntityNames {
public static final String MAGIC_LANDMINE = LibResources.PREFIX_MOD + "magicLandmine";
public static final String SPARK = LibResources.PREFIX_MOD + "spark";
public static final String THROWN_ITEM = LibResources.PREFIX_MOD + "thrownItem";
public static final String MAGIC_MISSILE = LibResources.PREFIX_MOD + "magicMissile";
}
@@ -106,6 +106,7 @@ public final class LibItemNames {
public static final String BREW_VIAL = "brewVial";
public static final String BREW_FLASK = "brewFlask";
public static final String BLOOD_PENDANT = "bloodPendant";
public static final String MISSILE_ROD = "missileRod";
public static final String[] LENS_NAMES = new String[] {
"lensNormal",