Add the Spark Tinkerer.

This commit is contained in:
Lizbeth Rika committed 2015-06-28 22:57:05 +01:00
1 parent 0a6d9a6b68
commit 3d1212bd8e
11 files changed
+323 -2

No files matched your search

@@ -23,7 +23,6 @@ import net.minecraft.client.network.NetHandlerPlayClient;
import net.minecraft.client.renderer.entity.RenderSnowball;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemRecord;
import net.minecraft.item.ItemStack;
@@ -101,6 +100,7 @@ import vazkii.botania.client.render.tile.RenderTilePylon;
import vazkii.botania.client.render.tile.RenderTileRedString;
import vazkii.botania.client.render.tile.RenderTileRuneAltar;
import vazkii.botania.client.render.tile.RenderTileSkullOverride;
import vazkii.botania.client.render.tile.RenderTileSparkChanger;
import vazkii.botania.client.render.tile.RenderTileSpawnerClaw;
import vazkii.botania.client.render.tile.RenderTileSpreader;
import vazkii.botania.client.render.tile.RenderTileStarfield;
@@ -117,6 +117,7 @@ import vazkii.botania.common.block.tile.TileHourglass;
import vazkii.botania.common.block.tile.TileIncensePlate;
import vazkii.botania.common.block.tile.TilePylon;
import vazkii.botania.common.block.tile.TileRuneAltar;
import vazkii.botania.common.block.tile.TileSparkChanger;
import vazkii.botania.common.block.tile.TileSpawnerClaw;
import vazkii.botania.common.block.tile.TileStarfield;
import vazkii.botania.common.block.tile.TileTerraPlate;
@@ -151,8 +152,8 @@ import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.relauncher.ReflectionHelper;
public class ClientProxy extends CommonProxy {
@@ -278,6 +279,7 @@ public class ClientProxy extends CommonProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileCorporeaCrystalCube.class, new RenderTileCorporeaCrystalCube());
ClientRegistry.bindTileEntitySpecialRenderer(TileIncensePlate.class, new RenderTileIncensePlate());
ClientRegistry.bindTileEntitySpecialRenderer(TileHourglass.class, new RenderTileHourglass());
ClientRegistry.bindTileEntitySpecialRenderer(TileSparkChanger.class, new RenderTileSparkChanger());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySkull.class, new RenderTileSkullOverride());
@@ -0,0 +1,66 @@
/**
* 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 the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [Jun 28, 2015, 10:19:20 PM (GMT)]
*/
package vazkii.botania.client.render.tile;
import java.awt.Color;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import org.lwjgl.opengl.GL11;
import vazkii.botania.common.block.tile.TileSparkChanger;
public class RenderTileSparkChanger extends TileEntitySpecialRenderer {
@Override
public void renderTileEntityAt(TileEntity tileentity, double d0, double d1, double d2, float pticks) {
GL11.glPushMatrix();
GL11.glTranslated(d0, d1, d2);
GL11.glRotated(90F, 1F, 0F, 0F);
GL11.glTranslatef(0.8F, 0.2F, -0.22F);
GL11.glColor4f(1F, 1F, 1F, 1F);
ItemStack stack = ((TileSparkChanger) tileentity).getStackInSlot(0);
if(stack != null) {
GL11.glPushMatrix();
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
float s = 0.6F;
GL11.glScalef(s, s, s);
GL11.glRotatef(180F, 0F, 1F, 0F);
int renderPass = 0;
do {
IIcon icon = stack.getItem().getIcon(stack, renderPass);
if(icon != null) {
Color color = new Color(stack.getItem().getColorFromItemStack(stack, renderPass));
GL11.glColor3ub((byte) color.getRed(), (byte) color.getGreen(), (byte) color.getBlue());
float f = icon.getMinU();
float f1 = icon.getMaxU();
float f2 = icon.getMinV();
float f3 = icon.getMaxV();
ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 1F / 16F);
GL11.glColor3f(1F, 1F, 1F);
}
renderPass++;
} while(renderPass < stack.getItem().getRenderPasses(stack.getItemDamage()));
GL11.glPopMatrix();
}
GL11.glColor4f(1F, 1F, 1F, 1F);
GL11.glPopMatrix();
}
}
@@ -0,0 +1,160 @@
/**
* 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 the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [Jun 28, 2015, 10:01:01 PM (GMT)]
*/
package vazkii.botania.common.block;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import vazkii.botania.client.core.helper.IconHelper;
import vazkii.botania.common.block.tile.TileSimpleInventory;
import vazkii.botania.common.block.tile.TileSparkChanger;
import vazkii.botania.common.block.tile.TileTerraPlate;
import vazkii.botania.common.block.tile.string.TileRedStringDispenser;
import vazkii.botania.common.item.ModItems;
import vazkii.botania.common.lib.LibBlockNames;
public class BlockSparkChanger extends BlockModContainer {
IIcon[] icons;
Random random;
public BlockSparkChanger() {
super(Material.rock);
setBlockBounds(0F, 0F, 0F, 1F, 3F / 16F, 1F);
setHardness(2.0F);
setResistance(10.0F);
setStepSound(soundTypeStone);
setBlockName(LibBlockNames.SPARK_CHANGER);
random = new Random();
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean getBlocksMovement(IBlockAccess p_149655_1_, int p_149655_2_, int p_149655_3_, int p_149655_4_) {
return false;
}
@Override
public void registerBlockIcons(IIconRegister par1IconRegister) {
icons = new IIcon[3];
for(int i = 0; i < icons.length; i++)
icons[i] = IconHelper.forBlock(par1IconRegister, this, i);
}
@Override
public IIcon getIcon(int par1, int par2) {
return icons[Math.min(2, par1)];
}
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
boolean power = world.isBlockIndirectlyGettingPowered(x, y, z) || world.isBlockIndirectlyGettingPowered(x, y + 1, z);
int meta = world.getBlockMetadata(x, y, z);
boolean powered = (meta & 8) != 0;
if(power && !powered) {
((TileSparkChanger) world.getTileEntity(x, y, z)).doSwap();
world.setBlockMetadataWithNotify(x, y, z, meta | 8, 4);
} else if(!power && powered)
world.setBlockMetadataWithNotify(x, y, z, meta & -9, 4);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int s, float xs, float ys, float zs) {
TileSparkChanger changer = (TileSparkChanger) world.getTileEntity(x, y, z);
ItemStack cstack = changer.getStackInSlot(0);
ItemStack pstack = player.getCurrentEquippedItem();
if(pstack != null && pstack.getItem() == ModItems.sparkUpgrade) {
changer.setInventorySlotContents(0, pstack.copy());
changer.markDirty();
pstack.stackSize--;
if(pstack.stackSize == 0)
player.inventory.setInventorySlotContents(player.inventory.currentItem, null);
if(cstack != null && !player.inventory.addItemStackToInventory(cstack))
player.dropPlayerItemWithRandomChoice(cstack, false);
return true;
} else if(cstack != null) {
changer.setInventorySlotContents(0, null);
changer.markDirty();
if(!player.inventory.addItemStackToInventory(cstack))
player.dropPlayerItemWithRandomChoice(cstack, false);
return true;
}
return false;
}
@Override
public void breakBlock(World par1World, int par2, int par3, int par4, Block par5, int par6) {
TileSimpleInventory inv = (TileSimpleInventory) par1World.getTileEntity(par2, par3, par4);
if (inv != null) {
for (int j1 = 0; j1 < inv.getSizeInventory(); ++j1) {
ItemStack itemstack = inv.getStackInSlot(j1);
if (itemstack != null) {
float f = random.nextFloat() * 0.8F + 0.1F;
float f1 = random.nextFloat() * 0.8F + 0.1F;
EntityItem entityitem;
for (float f2 = random.nextFloat() * 0.8F + 0.1F; itemstack.stackSize > 0; par1World.spawnEntityInWorld(entityitem)) {
int k1 = random.nextInt(21) + 10;
if (k1 > itemstack.stackSize)
k1 = itemstack.stackSize;
itemstack.stackSize -= k1;
entityitem = new EntityItem(par1World, par2 + f, par3 + f1, par4 + f2, new ItemStack(itemstack.getItem(), k1, itemstack.getItemDamage()));
float f3 = 0.05F;
entityitem.motionX = (float)random.nextGaussian() * f3;
entityitem.motionY = (float)random.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float)random.nextGaussian() * f3;
if (itemstack.hasTagCompound())
entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
}
}
}
par1World.func_147453_f(par2, par3, par4, par5);
}
super.breakBlock(par1World, par2, par3, par4, par5, par6);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileSparkChanger();
}
}
@@ -127,6 +127,7 @@ import vazkii.botania.common.block.tile.TileOpenCrate;
import vazkii.botania.common.block.tile.TilePlatform;
import vazkii.botania.common.block.tile.TilePylon;
import vazkii.botania.common.block.tile.TileRuneAltar;
import vazkii.botania.common.block.tile.TileSparkChanger;
import vazkii.botania.common.block.tile.TileSpawnerClaw;
import vazkii.botania.common.block.tile.TileSpecialFlower;
import vazkii.botania.common.block.tile.TileStarfield;
@@ -229,6 +230,7 @@ public final class ModBlocks {
public static Block incensePlate;
public static Block hourglass;
public static Block ghostRail;
public static Block sparkChanger;
public static void init() {
flower = new BlockModFlower();
@@ -302,6 +304,7 @@ public final class ModBlocks {
incensePlate = new BlockIncensePlate();
hourglass = new BlockHourglass();
ghostRail = new BlockGhostRail();
sparkChanger = new BlockSparkChanger();
ModFluffBlocks.init();
@@ -391,6 +394,7 @@ public final class ModBlocks {
registerTile(TileCorporeaCrystalCube.class, LibBlockNames.CORPOREA_CRYSTAL_CUBE);
registerTile(TileIncensePlate.class, LibBlockNames.INCENSE_PLATE);
registerTile(TileHourglass.class, LibBlockNames.HOURGLASS);
registerTile(TileSparkChanger.class, LibBlockNames.SPARK_CHANGER);
BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_PUREDAISY, SubTilePureDaisy.class);
BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_MANASTAR, SubTileManastar.class);
@@ -0,0 +1,86 @@
/**
* 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 the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [Jun 28, 2015, 10:02:11 PM (GMT)]
*/
package vazkii.botania.common.block.tile;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import vazkii.botania.api.internal.VanillaPacketDispatcher;
import vazkii.botania.api.mana.spark.ISparkAttachable;
import vazkii.botania.api.mana.spark.ISparkEntity;
import vazkii.botania.common.item.ModItems;
import vazkii.botania.common.lib.LibBlockNames;
import vazkii.botania.common.lib.LibMisc;
public class TileSparkChanger extends TileSimpleInventory {
public void doSwap() {
if(worldObj.isRemote)
return;
ItemStack changeStack = getStackInSlot(0);
List<ISparkAttachable> attachables = new ArrayList();
for(ForgeDirection dir : LibMisc.CARDINAL_DIRECTIONS) {
TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ);
if(tile != null && tile instanceof ISparkAttachable) {
ISparkAttachable attach = (ISparkAttachable) tile;
ISparkEntity spark = attach.getAttachedSpark();
if(spark != null) {
int upg = spark.getUpgrade();
int newUpg = changeStack == null ? 0 : changeStack.getItemDamage() + 1;
if(upg != newUpg)
attachables.add(attach);
}
}
}
if(attachables.size() > 0) {
ISparkAttachable attach = attachables.get(worldObj.rand.nextInt(attachables.size()));
ISparkEntity spark = attach.getAttachedSpark();
int upg = spark.getUpgrade();
ItemStack sparkStack = upg == 0 ? null : new ItemStack(ModItems.sparkUpgrade, 1, upg - 1);
int newUpg = changeStack == null ? 0 : changeStack.getItemDamage() + 1;
spark.setUpgrade(newUpg);
setInventorySlotContents(0, sparkStack);
markDirty();
}
}
@Override
public int getSizeInventory() {
return 1;
}
@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack) {
return itemstack != null && itemstack.getItem() == ModItems.sparkUpgrade;
}
@Override
public int getInventoryStackLimit() {
return 1;
}
@Override
public void markDirty() {
super.markDirty();
VanillaPacketDispatcher.dispatchTEToNearbyPlayers(this);
}
@Override
public String getInventoryName() {
return LibBlockNames.SPARK_CHANGER;
}
}
@@ -240,6 +240,7 @@ public final class BotaniaCreativeTab extends CreativeTabs {
addItem(ModItems.clip);
addItem(ModItems.spark);
addItem(ModItems.sparkUpgrade);
addBlock(ModBlocks.sparkChanger);
addItem(ModItems.corporeaSpark);
addBlock(ModBlocks.corporeaIndex);
addBlock(ModBlocks.corporeaFunnel);
@@ -86,6 +86,7 @@ public final class LibBlockNames {
public static final String INCENSE_PLATE = "incensePlate";
public static final String HOURGLASS = "hourglass";
public static final String GHOST_RAIL = "ghostRail";
public static final String SPARK_CHANGER = "sparkChanger";
public static final String SUBTILE_PUREDAISY = "puredaisy";
public static final String SUBTILE_MANASTAR = "manastar";