mirror of
https://github.com/GTNewHorizons/Botania.git
synced 2026-11-13 16:54:06 +00:00
Added the Mana Prism.
This commit is contained in:
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";
|
||||
|
||||
Reference in new issue
Block a user