From dde7dc7f4d76c7f6645584e1e420e558abfaf4ce Mon Sep 17 00:00:00 2001 From: Lizbeth Rika Date: Sat, 17 Jan 2015 21:01:33 +0000 Subject: [PATCH] Added the Mana Prism. --- .../client/core/proxy/ClientProxy.java | 5 +- .../client/render/tile/RenderTilePrism.java | 50 ++++++++ .../botania/common/block/ModBlocks.java | 7 +- .../common/block/mana/BlockForestDrum.java | 3 + .../botania/common/block/mana/BlockPrism.java | 118 ++++++++++++++++++ .../common/block/mana/BlockSpreader.java | 1 - .../common/block/tile/mana/TilePrism.java | 64 ++++++++++ .../common/core/BotaniaCreativeTab.java | 1 + .../common/entity/EntityManaBurst.java | 9 +- .../botania/common/lib/LibBlockNames.java | 1 + .../resources/assets/botania/lang/en_US.lang | 1 + .../assets/botania/textures/blocks/prism0.png | Bin 0 -> 2917 bytes .../assets/botania/textures/blocks/prism1.png | Bin 0 -> 2949 bytes 13 files changed, 254 insertions(+), 6 deletions(-) create mode 100644 src/main/java/vazkii/botania/client/render/tile/RenderTilePrism.java create mode 100644 src/main/java/vazkii/botania/common/block/mana/BlockPrism.java create mode 100644 src/main/java/vazkii/botania/common/block/tile/mana/TilePrism.java create mode 100644 src/main/resources/assets/botania/textures/blocks/prism0.png create mode 100644 src/main/resources/assets/botania/textures/blocks/prism1.png diff --git a/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java b/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java index 4fe06fa86..b945f97e5 100644 --- a/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java +++ b/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java @@ -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()); diff --git a/src/main/java/vazkii/botania/client/render/tile/RenderTilePrism.java b/src/main/java/vazkii/botania/client/render/tile/RenderTilePrism.java new file mode 100644 index 000000000..8b5857a91 --- /dev/null +++ b/src/main/java/vazkii/botania/client/render/tile/RenderTilePrism.java @@ -0,0 +1,50 @@ +/** + * This class was created by . 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(); + } + +} diff --git a/src/main/java/vazkii/botania/common/block/ModBlocks.java b/src/main/java/vazkii/botania/common/block/ModBlocks.java index 26adc1626..3dc05081a 100644 --- a/src/main/java/vazkii/botania/common/block/ModBlocks.java +++ b/src/main/java/vazkii/botania/common/block/ModBlocks.java @@ -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); diff --git a/src/main/java/vazkii/botania/common/block/mana/BlockForestDrum.java b/src/main/java/vazkii/botania/common/block/mana/BlockForestDrum.java index a15ed10d5..fd6a5c92f 100644 --- a/src/main/java/vazkii/botania/common/block/mana/BlockForestDrum.java +++ b/src/main/java/vazkii/botania/common/block/mana/BlockForestDrum.java @@ -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 { diff --git a/src/main/java/vazkii/botania/common/block/mana/BlockPrism.java b/src/main/java/vazkii/botania/common/block/mana/BlockPrism.java new file mode 100644 index 000000000..49f6f7efb --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/mana/BlockPrism.java @@ -0,0 +1,118 @@ +/** + * This class was created by . 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); + } + +} diff --git a/src/main/java/vazkii/botania/common/block/mana/BlockSpreader.java b/src/main/java/vazkii/botania/common/block/mana/BlockSpreader.java index 467e27f57..ab49c7067 100644 --- a/src/main/java/vazkii/botania/common/block/mana/BlockSpreader.java +++ b/src/main/java/vazkii/botania/common/block/mana/BlockSpreader.java @@ -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); diff --git a/src/main/java/vazkii/botania/common/block/tile/mana/TilePrism.java b/src/main/java/vazkii/botania/common/block/tile/mana/TilePrism.java new file mode 100644 index 000000000..2892ededa --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/tile/mana/TilePrism.java @@ -0,0 +1,64 @@ +/** + * This class was created by . 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; + } + +} diff --git a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java index 42957b3fb..2b41ac4f7 100644 --- a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java +++ b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java @@ -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); diff --git a/src/main/java/vazkii/botania/common/entity/EntityManaBurst.java b/src/main/java/vazkii/botania/common/entity/EntityManaBurst.java index fb06c6fac..e5b4097ee 100644 --- a/src/main/java/vazkii/botania/common/entity/EntityManaBurst.java +++ b/src/main/java/vazkii/botania/common/entity/EntityManaBurst.java @@ -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; diff --git a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java index c377d2a4a..62cf32226 100644 --- a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java +++ b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java @@ -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"; diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index ac94e838e..97c1dbd3e 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -505,6 +505,7 @@ tile.botania:redStringFertilizer.name=Red Stringed Nutrifier tile.botania:redStringComparator.name=Red Stringed Comparator tile.botania:redStringRelay.name=Red Stringed Spoofer tile.botania:manaFlame.name=Mana Flash +tile.botania:prism.name=Mana Prism # FLOWER NAMES tile.botania:flower..name=Botania Flower diff --git a/src/main/resources/assets/botania/textures/blocks/prism0.png b/src/main/resources/assets/botania/textures/blocks/prism0.png new file mode 100644 index 0000000000000000000000000000000000000000..32ec3f48ae4c3780491644d3d73ef9dce01cb45b GIT binary patch literal 2917 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 P00000NkvXXu0mjfC=gsE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/botania/textures/blocks/prism1.png b/src/main/resources/assets/botania/textures/blocks/prism1.png new file mode 100644 index 0000000000000000000000000000000000000000..f481b579baedbd74e2a61c41064430b446cddf9c GIT binary patch literal 2949 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