Added the Mana Prism.

This commit is contained in:
Lizbeth Rika committed 2015-01-17 21:01:33 +00:00
1 parent 2fab83476d
commit dde7dc7f4d
13 files changed
+254 -6

No files matched your search

@@ -71,6 +71,7 @@ import vazkii.botania.client.render.tile.RenderTileBrewery;
import vazkii.botania.client.render.tile.RenderTileEnchanter;
import vazkii.botania.client.render.tile.RenderTileFloatingFlower;
import vazkii.botania.client.render.tile.RenderTilePool;
import vazkii.botania.client.render.tile.RenderTilePrism;
import vazkii.botania.client.render.tile.RenderTilePylon;
import vazkii.botania.client.render.tile.RenderTileRedString;
import vazkii.botania.client.render.tile.RenderTileRuneAltar;
@@ -94,6 +95,7 @@ import vazkii.botania.common.block.tile.TileStarfield;
import vazkii.botania.common.block.tile.TileTerraPlate;
import vazkii.botania.common.block.tile.TileTinyPotato;
import vazkii.botania.common.block.tile.mana.TilePool;
import vazkii.botania.common.block.tile.mana.TilePrism;
import vazkii.botania.common.block.tile.mana.TileSpreader;
import vazkii.botania.common.block.tile.string.TileRedString;
import vazkii.botania.common.core.handler.ConfigHandler;
@@ -191,7 +193,8 @@ public class ClientProxy extends CommonProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileBrewery.class, new RenderTileBrewery());
ClientRegistry.bindTileEntitySpecialRenderer(TileTerraPlate.class, new RenderTileTerraPlate());
ClientRegistry.bindTileEntitySpecialRenderer(TileRedString.class, new RenderTileRedString());
ClientRegistry.bindTileEntitySpecialRenderer(TilePrism.class, new RenderTilePrism());
if(Loader.instance().getMCVersionString().equals("Minecraft 1.7.10"))
ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySkull.class, new RenderTileSkullOverride());
@@ -0,0 +1,50 @@
/**
* 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 @ [Jan 17, 2015, 8:05:07 PM (GMT)]
*/
package vazkii.botania.client.render.tile;
import org.lwjgl.opengl.GL11;
import vazkii.botania.api.mana.ILens;
import vazkii.botania.client.core.handler.ClientTickHandler;
import vazkii.botania.client.render.item.RenderLens;
import vazkii.botania.common.block.tile.mana.TilePrism;
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
public class RenderTilePrism extends TileEntitySpecialRenderer {
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partTicks) {
TilePrism prism = (TilePrism) tile;
GL11.glPushMatrix();
GL11.glTranslated(x, y, z);
float pos = (float) Math.sin((float) (ClientTickHandler.ticksInGame + partTicks) * 0.05F) * 0.5F * (1F - 1F / 16F) - 0.5F;
ItemStack stack = prism.getStackInSlot(0);
if(stack != null) {
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
ILens lens = (ILens) stack.getItem();
GL11.glPushMatrix();
GL11.glRotatef(90F, 1F, 0F, 0F);
GL11.glTranslatef(0F, 0F, pos);
RenderLens.render(stack, lens.getLensColor(stack));
GL11.glPopMatrix();
}
GL11.glPopMatrix();
}
}
@@ -80,6 +80,7 @@ import vazkii.botania.common.block.mana.BlockForestDrum;
import vazkii.botania.common.block.mana.BlockManaDetector;
import vazkii.botania.common.block.mana.BlockManaVoid;
import vazkii.botania.common.block.mana.BlockPool;
import vazkii.botania.common.block.mana.BlockPrism;
import vazkii.botania.common.block.mana.BlockRFGenerator;
import vazkii.botania.common.block.mana.BlockRuneAltar;
import vazkii.botania.common.block.mana.BlockSpawnerClaw;
@@ -148,6 +149,7 @@ import vazkii.botania.common.block.tile.mana.TileDistributor;
import vazkii.botania.common.block.tile.mana.TileManaDetector;
import vazkii.botania.common.block.tile.mana.TileManaVoid;
import vazkii.botania.common.block.tile.mana.TilePool;
import vazkii.botania.common.block.tile.mana.TilePrism;
import vazkii.botania.common.block.tile.mana.TileRFGenerator;
import vazkii.botania.common.block.tile.mana.TileSpreader;
import vazkii.botania.common.block.tile.mana.TileTurntable;
@@ -217,6 +219,7 @@ public final class ModBlocks {
public static Block redStringRelay;
public static Block floatingSpecialFlower;
public static Block manaFlame;
public static Block prism;
public static Block livingwoodStairs;
public static Block livingwoodSlab;
@@ -346,7 +349,8 @@ public final class ModBlocks {
redStringRelay = new BlockRedStringRelay();
floatingSpecialFlower = new BlockFloatingSpecialFlower();
manaFlame = new BlockManaFlame();
prism = new BlockPrism();
livingwoodStairs = new BlockLivingwoodStairs();
livingwoodSlab = new BlockLivingwoodSlab(false);
livingwoodSlabFull = new BlockLivingwoodSlab(true);
@@ -534,6 +538,7 @@ public final class ModBlocks {
registerTile(TileRedStringRelay.class, LibBlockNames.RED_STRING_RELAY);
registerTile(TileFloatingSpecialFlower.class, LibBlockNames.FLOATING_SPECIAL_FLOWER);
registerTile(TileManaFlame.class, LibBlockNames.MANA_FLAME);
registerTile(TilePrism.class, LibBlockNames.PRISM);
BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_PUREDAISY, SubTilePureDaisy.class);
BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_MANASTAR, SubTileManastar.class);
@@ -105,6 +105,9 @@ public class BlockForestDrum extends BlockMod implements IManaTrigger, ILexicona
@Override
public void onBurstCollision(IManaBurst burst, World world, int x, int y, int z) {
if(burst.isFake())
return;
if(world.getBlockMetadata(x, y, z) == 0)
ItemGrassHorn.breakGrass(world, 0, x, y, z);
else {
@@ -0,0 +1,118 @@
/**
* 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 @ [Jan 17, 2015, 7:16:48 PM (GMT)]
*/
package vazkii.botania.common.block.mana;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import vazkii.botania.api.internal.IManaBurst;
import vazkii.botania.api.mana.ILens;
import vazkii.botania.api.mana.IManaTrigger;
import vazkii.botania.client.core.helper.IconHelper;
import vazkii.botania.common.block.BlockModContainer;
import vazkii.botania.common.block.tile.mana.TilePrism;
import vazkii.botania.common.block.tile.mana.TileSpreader;
import vazkii.botania.common.item.ModItems;
import vazkii.botania.common.lib.LibBlockNames;
public class BlockPrism extends BlockModContainer implements IManaTrigger {
IIcon[] icons;
public BlockPrism() {
super(Material.glass);
setHardness(0.3F);
setStepSound(soundTypeGlass);
setLightLevel(1.0F);
setBlockName(LibBlockNames.PRISM);
float f = 0.25F;
setBlockBounds(f, 0F, f, 1F - f, 1F, 1F - f);
}
@Override
public void registerBlockIcons(IIconRegister par1IconRegister) {
icons = new IIcon[2];
for(int i = 0; i < icons.length; i++)
icons[i] = IconHelper.forBlock(par1IconRegister, this, i);
}
@Override
public IIcon getIcon(int side, int meta) {
return side > 1 ? icons[1] : icons[0];
}
@Override
public int getRenderBlockPass() {
return 1;
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) {
return null;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) {
TileEntity tile = par1World.getTileEntity(par2, par3, par4);
if(!(tile instanceof TilePrism))
return false;
TilePrism prism = (TilePrism) tile;
ItemStack lens = prism.getStackInSlot(0);
ItemStack heldItem = par5EntityPlayer.getCurrentEquippedItem();
boolean isHeldItemLens = heldItem != null && heldItem.getItem() instanceof ILens;
if(lens == null && isHeldItemLens) {
par5EntityPlayer.inventory.setInventorySlotContents(par5EntityPlayer.inventory.currentItem, null);
prism.setInventorySlotContents(0, heldItem.copy());
prism.markDirty();
par1World.setBlockMetadataWithNotify(par2, par3, par4, 1, 1 | 2);
} else if(lens != null) {
ItemStack add = lens.copy();
if(!par5EntityPlayer.inventory.addItemStackToInventory(add))
par5EntityPlayer.dropPlayerItemWithRandomChoice(add, false);
prism.setInventorySlotContents(0, null);
prism.markDirty();
par1World.setBlockMetadataWithNotify(par2, par3, par4, 0, 1 | 2);
}
return true;
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TilePrism();
}
@Override
public void onBurstCollision(IManaBurst burst, World world, int x, int y, int z) {
TileEntity tile = world.getTileEntity(x, y, z);
if(tile != null && tile instanceof TilePrism)
((TilePrism) tile).onBurstCollision(burst);
}
}
@@ -207,7 +207,6 @@ public class BlockSpreader extends BlockModContainer implements IWandable, IWand
super.breakBlock(par1World, par2, par3, par4, par5, par6);
}
@Override
public boolean onUsedByWand(EntityPlayer player, ItemStack stack, World world, int x, int y, int z, int side) {
((TileSpreader) world.getTileEntity(x, y, z)).onWanded(player, stack);
@@ -0,0 +1,64 @@
/**
* 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 @ [Jan 17, 2015, 7:27:04 PM (GMT)]
*/
package vazkii.botania.common.block.tile.mana;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import vazkii.botania.api.internal.IManaBurst;
import vazkii.botania.api.mana.BurstProperties;
import vazkii.botania.api.mana.ILens;
import vazkii.botania.api.mana.IManaCollisionGhost;
import vazkii.botania.common.block.tile.TileSimpleInventory;
import vazkii.botania.common.lib.LibBlockNames;
import codechicken.lib.vec.Vector3;
public class TilePrism extends TileSimpleInventory implements IManaCollisionGhost {
public void onBurstCollision(IManaBurst burst) {
ItemStack lens = getStackInSlot(0);
boolean valid = lens != null && lens.getItem() instanceof ILens;
burst.setSourceLens(valid ? lens.copy() : null);
burst.setColor(0xFFFFFF);
burst.setGravity(0F);
if(valid) {
Entity burstEntity = (Entity) burst;
BurstProperties properties = new BurstProperties(burst.getStartingMana(), burst.getMinManaLoss(), burst.getManaLossPerTick(), burst.getGravity(), 1F, burst.getColor());
((ILens) lens.getItem()).apply(lens, properties);
burst.setColor(properties.color);
burst.setStartingMana(properties.maxMana);
burst.setMinManaLoss(properties.ticksBeforeManaLoss);
burst.setManaLossPerTick(properties.manaLossPerTick);
burst.setGravity(properties.gravity);
burst.setMotion(burstEntity.motionX * properties.motionModifier, burstEntity.motionY * properties.motionModifier,burstEntity.motionZ * properties.motionModifier);
}
}
@Override
public boolean isGhost() {
return true;
}
@Override
public int getSizeInventory() {
return 1;
}
@Override
public String getInventoryName() {
return LibBlockNames.PRISM;
}
}
@@ -263,6 +263,7 @@ public final class BotaniaCreativeTab extends CreativeTabs {
addBlock(ModBlocks.rfGenerator);
addBlock(ModBlocks.spreader);
addBlock(ModBlocks.turntable);
addBlock(ModBlocks.prism);
addItem(ModItems.spark);
addItem(ModItems.sparkUpgrade);
addItem(ModItems.manaGun);
@@ -547,7 +547,7 @@ public class EntityManaBurst extends EntityThrowable implements IManaBurst {
TileEntity tile = worldObj.getTileEntity(movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ);
Block block = worldObj.getBlock(movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ);
if(tile instanceof IManaCollisionGhost && ((IManaCollisionGhost) tile).isGhost() || block instanceof BlockBush || block instanceof BlockLeaves)
if((tile instanceof IManaCollisionGhost && ((IManaCollisionGhost) tile).isGhost() && !(block instanceof IManaTrigger)) || block instanceof BlockBush || block instanceof BlockLeaves)
return;
if(BotaniaAPI.internalHandler.isBuildcraftPipe(tile))
@@ -567,10 +567,13 @@ public class EntityManaBurst extends EntityThrowable implements IManaBurst {
worldObj.markBlockForUpdate(tile.xCoord, tile.yCoord, tile.zCoord);
}
if(!isFake() && block instanceof IManaTrigger)
if(block instanceof IManaTrigger)
((IManaTrigger) block).onBurstCollision(this, worldObj, movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ);
dead = true;
boolean ghost = tile instanceof IManaCollisionGhost;
dead = !ghost;
if(ghost)
return;
}
collided = true;
@@ -68,6 +68,7 @@ public final class LibBlockNames {
public static final String RED_STRING_RELAY = "redStringRelay";
public static final String FLOATING_SPECIAL_FLOWER = "floatingSpecialFlower";
public static final String MANA_FLAME = "manaFlame";
public static final String PRISM = "prism";
public static final String SUBTILE_PUREDAISY = "puredaisy";
public static final String SUBTILE_MANASTAR = "manastar";