233 lines
11 KiB
Java
233 lines
11 KiB
Java
package fr.jackcartersmith.orbsat;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.DataOutputStream;
|
|
import java.util.ArrayList;
|
|
import java.util.ConcurrentModificationException;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
import cpw.mods.fml.common.network.ByteBufUtils;
|
|
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
|
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
|
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
|
import fr.jackcartersmith.ob.blocks.OverriderBlockTileEntity;
|
|
import fr.jackcartersmith.orbsat.common.lib.OSConstants;
|
|
import io.netty.buffer.ByteBuf;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityLiving;
|
|
import net.minecraft.entity.effect.EntityLightningBolt;
|
|
import net.minecraft.entity.item.EntityItem;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.AxisAlignedBB;
|
|
import net.minecraft.world.World;
|
|
|
|
public class OBNetwork implements IMessage
|
|
{
|
|
private List<Integer> dataArray = new ArrayList<Integer>();
|
|
|
|
public OBNetwork() {}
|
|
|
|
public OBNetwork(List<Integer> dataArray) {
|
|
this.dataArray = dataArray;
|
|
}
|
|
|
|
@Override
|
|
public void fromBytes(ByteBuf buf){
|
|
for (int i = 0; i < 5; i++){
|
|
this.dataArray.add(buf.readInt());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void toBytes(ByteBuf buf){
|
|
for (int i = 0; i < 5; i++){
|
|
buf.writeInt(this.dataArray.get(i));
|
|
}
|
|
}
|
|
|
|
public static class Handler implements IMessageHandler<OBNetwork, IMessage>{
|
|
int function;
|
|
int xCoord;
|
|
int yCoord;
|
|
int zCoord;
|
|
int data_value;
|
|
|
|
public void sendChangeToClient(int xCoord, int yCoord, int zCoord, int chargeLevel)
|
|
{
|
|
List<Integer> bos = new ArrayList<Integer>();
|
|
|
|
bos.add(5);
|
|
bos.add(xCoord);
|
|
bos.add(yCoord);
|
|
bos.add(zCoord);
|
|
bos.add(chargeLevel);
|
|
|
|
/*
|
|
Packet250CustomPayload packet = new Packet250CustomPayload();
|
|
packet.channel = "OB";
|
|
packet.data = bos.toByteArray();
|
|
packet.length = bos.size();
|
|
PacketDispatcher.sendPacketToAllPlayers(packet);
|
|
*/
|
|
OrbitalSatellite.obNetwork.sendToAll(new OBNetworkClient(bos));
|
|
}
|
|
|
|
@Override
|
|
public IMessage onMessage(OBNetwork message, MessageContext ctx){
|
|
EntityPlayer sender = ctx.getServerHandler().playerEntity;
|
|
EntityPlayerMP player = ctx.getServerHandler().playerEntity;
|
|
|
|
try{
|
|
this.function = message.dataArray.get(0);
|
|
}catch(Exception var22){
|
|
var22.printStackTrace();
|
|
}
|
|
|
|
try{
|
|
|
|
|
|
if (this.function == 2){
|
|
this.xCoord = message.dataArray.get(1);
|
|
this.yCoord = message.dataArray.get(2);
|
|
this.zCoord = message.dataArray.get(3);
|
|
this.data_value = message.dataArray.get(4);
|
|
|
|
try{
|
|
List charge1 = player.worldObj.getEntitiesWithinAABB(EntityLiving.class,
|
|
AxisAlignedBB.getBoundingBox((double)(this.xCoord - this.data_value / 3),
|
|
(double)(this.yCoord - this.data_value / 3), (double)(this.zCoord - this.data_value / 3),
|
|
(double)(this.xCoord + this.data_value / 3), (double)(this.yCoord + this.data_value / 3),
|
|
(double)(this.zCoord + this.data_value / 3)));
|
|
|
|
if (charge1.size() > 0){
|
|
for(int y = 0; y <= charge1.size() - 1; y++){
|
|
Random next = new Random();
|
|
EntityLiving e1 = (EntityLiving)charge1.get(y);
|
|
e1.setHealth(0.5F);
|
|
e1.motionY = (double)(this.data_value / 5);
|
|
e1.motionX = next.nextGaussian() * 5.0D;
|
|
e1.motionZ = next.nextGaussian() * 5.0D;
|
|
}
|
|
}
|
|
}catch(Exception var27){
|
|
var27.printStackTrace();
|
|
}
|
|
|
|
if (this.data_value <= 10){
|
|
player.worldObj.playSoundAtEntity(player, "ob:explode", 0.3F, 5.0F);
|
|
}
|
|
|
|
if (this.data_value > 10 && this.data_value <= 40){
|
|
player.worldObj.playSoundAtEntity(player, "ob:explode", 0.3F, 1.5F);
|
|
}
|
|
|
|
if (this.data_value > 40){
|
|
player.worldObj.playSoundAtEntity(player, "ob:explode", 0.4F, 0.3F);
|
|
}
|
|
|
|
player.worldObj.createExplosion((Entity)null, (double)this.xCoord, (double)this.yCoord, (double)this.zCoord, (float)this.data_value, true);
|
|
}
|
|
|
|
if (this.function == 5 && message != null){
|
|
this.xCoord = message.dataArray.get(1);
|
|
this.yCoord = message.dataArray.get(2);
|
|
this.zCoord = message.dataArray.get(3);
|
|
Random rand = new Random();
|
|
OBNetwork$1 obNetworkServerThread = new OBNetwork$1(rand, player,this.xCoord, this.yCoord, this.zCoord);
|
|
obNetworkServerThread.start();
|
|
}
|
|
|
|
if (this.function == 9){
|
|
this.xCoord = message.dataArray.get(1);
|
|
this.yCoord = message.dataArray.get(2);
|
|
this.zCoord = message.dataArray.get(3);
|
|
player.worldObj.spawnEntityInWorld(new EntityLightningBolt(player.worldObj, (double)this.xCoord, (double)this.yCoord, (double)this.zCoord));
|
|
}
|
|
|
|
if (this.function == 12){
|
|
synchronized (sender){
|
|
this.xCoord = message.dataArray.get(1);
|
|
this.yCoord = message.dataArray.get(2);
|
|
this.zCoord = message.dataArray.get(3);
|
|
this.data_value = message.dataArray.get(4);
|
|
World world = player.worldObj;
|
|
boolean var35 = false;
|
|
int var36 = this.yCoord + 1;
|
|
world.playSoundAtEntity(player, "ob:digging", 0.7F, 0.3F);
|
|
|
|
do{
|
|
--var36;
|
|
|
|
try{
|
|
Block found = world.getBlock(this.xCoord, var36, this.zCoord);
|
|
ItemStack itemBlock = new ItemStack(found);
|
|
new Random();
|
|
EntityItem droppedItem = new EntityItem(world, (double)this.xCoord, (double)this.yCoord, (double)this.zCoord, itemBlock);
|
|
Random rand = new Random();
|
|
droppedItem.motionX = rand.nextGaussian() / 10.0D;
|
|
droppedItem.motionY = 0.8D;
|
|
droppedItem.motionZ = rand.nextGaussian() / 10.0D;
|
|
world.spawnEntityInWorld(droppedItem);
|
|
world.setBlockToAir(this.xCoord, var36, this.zCoord);
|
|
Thread.sleep(5L);
|
|
}catch(NullPointerException var23){
|
|
}catch(ConcurrentModificationException var24){
|
|
break;
|
|
}catch(Exception var25){}
|
|
}while(world.getBlock(this.xCoord, var36 - 1, this.zCoord) != Blocks.bedrock
|
|
&& world.getBlock(this.xCoord, var36 - 1, this.zCoord) != Blocks.flowing_lava
|
|
&& world.getBlock(this.xCoord, var36 - 1, this.zCoord) != Blocks.lava
|
|
&& world.getBlock(this.xCoord, var36 - 1, this.zCoord) != Blocks.flowing_water
|
|
&& world.getBlock(this.xCoord, var36 - 1, this.zCoord) != Blocks.water);
|
|
|
|
world.setBlockToAir(this.xCoord, this.yCoord + 1, this.zCoord);
|
|
}
|
|
}
|
|
|
|
if (this.function == 15){
|
|
this.xCoord = message.dataArray.get(1);
|
|
this.yCoord = message.dataArray.get(2);
|
|
this.zCoord = message.dataArray.get(3);
|
|
this.data_value = message.dataArray.get(4);
|
|
OverriderBlockTileEntity overrider = (OverriderBlockTileEntity)player.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord);
|
|
overrider.currentCharge -= this.data_value;
|
|
--overrider.shotsLeft;
|
|
}
|
|
|
|
if (this.function == 18){
|
|
this.xCoord = message.dataArray.get(1);
|
|
this.yCoord = message.dataArray.get(2);
|
|
this.zCoord = message.dataArray.get(3);
|
|
this.data_value = message.dataArray.get(4);
|
|
player.worldObj.playSoundAtEntity(player, "ob:satelliteLaunch", 1.0F, 1.0F);
|
|
OverriderBlockTileEntity overrider = (OverriderBlockTileEntity)player.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord);
|
|
overrider.shotsLeft += this.data_value;
|
|
overrider.currentCharge -= OSConstants.SateliteLaunchPUCost;
|
|
this.sendChangeToClient(this.xCoord, this.yCoord, this.zCoord, this.data_value);
|
|
}
|
|
|
|
if (this.function == 21){
|
|
this.xCoord = message.dataArray.get(1);
|
|
this.yCoord = message.dataArray.get(2);
|
|
this.zCoord = message.dataArray.get(3);
|
|
this.data_value = message.dataArray.get(4);
|
|
player.worldObj.removeTileEntity(this.xCoord, this.yCoord, this.zCoord);
|
|
player.worldObj.setBlockToAir(this.xCoord, this.yCoord, this.zCoord);
|
|
}
|
|
|
|
if (this.function == 24){
|
|
player.worldObj.playSoundAtEntity(player, "ob:start", 1.0F, 1.0F);
|
|
player.worldObj.playSoundAtEntity(player, "ob:middle", 1.0F, 0.7F);
|
|
}
|
|
|
|
}catch(Exception var28){}
|
|
return null;
|
|
}
|
|
}
|
|
}
|