Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.brickfix.totemmod.blocks;
- import java.util.Random;
- import net.minecraft.command.CommandBase;
- import net.minecraft.command.NumberInvalidException;
- import net.minecraft.entity.Entity;
- import net.minecraft.entity.effect.EntityLightningBolt;
- import net.minecraft.entity.item.EntityFireworkRocket;
- import net.minecraft.init.Blocks;
- import net.minecraft.init.Items;
- import net.minecraft.item.Item;
- import net.minecraft.item.ItemStack;
- import net.minecraft.nbt.NBTTagCompound;
- import net.minecraft.nbt.NBTTagList;
- import net.minecraft.network.NetworkManager;
- import net.minecraft.network.Packet;
- import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
- import net.minecraft.server.gui.IUpdatePlayerListBox;
- import net.minecraft.tileentity.TileEntity;
- import net.minecraft.util.BlockPos;
- import net.minecraft.util.EnumParticleTypes;
- import net.minecraft.util.Vec3;
- import net.minecraft.world.World;
- import net.minecraftforge.fml.relauncher.Side;
- import net.minecraftforge.fml.relauncher.SideOnly;
- import com.brickfix.totemmod.TotemBlockLogic;
- import com.brickfix.totemmod.TotemMod;
- import com.sun.org.apache.xalan.internal.xsltc.util.IntegerArray;
- public class TileEntityTotemBlock extends TileEntity implements IUpdatePlayerListBox
- {
- public int cooldown;
- public boolean isCharged;
- private final TotemBlockLogic totemLogic = new TotemBlockLogic()
- {
- @Override
- public String getCommand()
- {
- return "/kill @e[type=Skeleton,r=5]";
- }
- @Override
- public BlockPos getPosition()
- {
- return TileEntityTotemBlock.this.pos;
- }
- @Override
- public Vec3 getPositionVector()
- {
- return new Vec3((double)TileEntityTotemBlock.this.pos.getX() + 0.5D, (double)TileEntityTotemBlock.this.pos.getY() + 0.5D, (double)TileEntityTotemBlock.this.pos.getZ() + 0.5D);
- }
- @Override
- public World getEntityWorld()
- {
- return TileEntityTotemBlock.this.worldObj;
- }
- };
- public int getCooldown()
- {
- return 100;
- }
- public TotemBlockLogic getTotemLogic()
- {
- return this.totemLogic;
- }
- public void writeToNBT(NBTTagCompound compound)
- {
- super.writeToNBT(compound);
- compound.setInteger("Cooldown", this.cooldown);
- compound.setBoolean("Charged", this.isCharged);
- }
- public void readFromNBT(NBTTagCompound compound)
- {
- super.readFromNBT(compound);
- this.cooldown = compound.getInteger("Cooldown");
- this.isCharged = compound.getBoolean("Charged");
- }
- static
- {
- //addMapping(TileEntityTotemBlock.class, "TotemBlock");
- }
- @Override
- public Packet getDescriptionPacket()
- {
- NBTTagCompound nbtTagCompound = new NBTTagCompound();
- writeToNBT(nbtTagCompound);
- int metadata = getBlockMetadata();
- return new S35PacketUpdateTileEntity(this.pos, metadata, nbtTagCompound);
- }
- @Override
- public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
- {
- readFromNBT(pkt.getNbtCompound());
- }
- public void invalidate()
- {
- this.updateContainingBlockInfo();
- super.invalidate();
- }
- public void update()
- {
- if (this.worldObj.isRemote)
- {
- //System.out.println("Updated ClientSide");
- return;
- }
- this.isCharged = isCharged();
- //System.out.println("Updated ServerSide");
- if (this.cooldown==0)
- {
- int i=0;
- if (this.isCharged)
- {
- i = totemLogic.trigger(this.worldObj);
- }
- if (i!=0)
- {
- this.cooldown = this.getCooldown();
- Item rm = Items.fireworks;
- NBTTagCompound tag0 = new NBTTagCompound();
- NBTTagList explosions = new NBTTagList();
- NBTTagCompound tag1 = new NBTTagCompound();
- NBTTagCompound tag2 = new NBTTagCompound();
- int[] array = new int[1];
- array[0] = 65536*230;
- tag2.setIntArray("Colors", array);
- tag2.setBoolean("Flicker", true);
- explosions.appendTag(tag2);
- tag1.setTag("Explosions", explosions);
- tag1.setByte("Flight", (byte) 0);
- tag0.setTag("Fireworks", tag1);
- ItemStack modifier = new ItemStack(rm);
- modifier.setTagCompound(tag0);
- Entity effect = new EntityFireworkRocket(this.worldObj, pos.getX()+0.5D, pos.getY()+0.5D, pos.getZ()+0.5D, modifier);
- this.worldObj.spawnEntityInWorld(effect);
- }
- }
- else if (this.cooldown > 0)
- {
- this.cooldown--;
- }
- }
- public boolean isCharged()
- {
- boolean flag = this.isCharged;
- boolean flag2 = false;
- BlockPos pos = this.pos;
- if ((this.worldObj.getBlockState(pos.up()) == Blocks.obsidian.getDefaultState()) && (this.worldObj.getBlockState(pos.down()) == Blocks.obsidian.getDefaultState()))
- {
- flag2 = true;
- }
- if (flag==false && flag2==true)
- {
- this.lightningStrikes(worldObj, pos);
- }
- return flag2;
- }
- protected void lightningStrikes(World world, BlockPos pos)
- {
- double dx = (double)pos.getX();
- double dy = (double)pos.getY();
- double dz = (double)pos.getZ();
- String sx = String.valueOf(pos.getX());
- String sy = String.valueOf(pos.getY());
- String sz = String.valueOf(pos.getZ());
- try
- {
- dx = CommandBase.func_175761_b(dx, sx, true);
- dy = CommandBase.func_175761_b(dy, sy, false);
- dz = CommandBase.func_175761_b(dz, sz, true);
- }
- catch (NumberInvalidException e)
- {
- e.printStackTrace();
- return;
- }
- world.addWeatherEffect(new EntityLightningBolt(world, dx, dy, dz));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement