Dartcraft/src/main/java/ley/modding/dartcraft/entity/EntityTime.java
2024-04-23 19:25:34 +02:00

301 lines
11 KiB
Java

package ley.modding.dartcraft.entity;
import java.util.List;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import ley.modding.dartcraft.Config;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.network.PacketFX;
import ley.modding.dartcraft.tile.TileEntityForceTorch;
import ley.modding.dartcraft.util.UpgradeHelper;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
public class EntityTime extends Entity {
public static final int TYPE_NONE = 0;
public static final int TYPE_STOP = 1;
public static final int TYPE_SLOW = 2;
public static final int TYPE_FAST = 3;
public static final int TYPE_HYPER = 4;
public int type;
public static double RANGE = 6.0D;
private int lifeTime;
private boolean checked;
public EntityTime(World world) {
super(world);
this.lifeTime = 200;
this.checked = false;
}
public EntityTime(World world, int life) {
this(world);
this.lifeTime = life;
}
@Override
protected void entityInit() {}
@Override
public void onUpdate() {
--this.lifeTime;
if (this.lifeTime <= 0) {
this.setDead();
} else {
this.customTick();
}
}
private void customTick() {
if (Dartcraft.proxy.isSimulating(this.worldObj) && this.lifeTime % 20 == 0
|| !this.checked) {
this.spawnParticles();
}
if (this.lifeTime % 5 == 0 || !this.checked) {
this.checkEntities();
}
}
public void checkEntities() {
try {
if (!Config.timeAffectBlocks && !Config.timeAffectTiles
&& !Config.timeUpgradeRod && !Config.timeUpgradeSword
&& !Config.timeUpgradeTorch) {
return;
}
AxisAlignedBB e = AxisAlignedBB.getBoundingBox(
this.posX - RANGE,
this.posY - RANGE,
this.posZ - RANGE,
this.posX + RANGE,
this.posY + RANGE,
this.posZ + RANGE
);
((List<Entity>) this.worldObj.getEntitiesWithinAABB(Entity.class, e))
.stream()
.filter(
j
-> j != null && !(j instanceof EntityTime)
&& !(j instanceof EntityPlayer) && !(j instanceof EntityBottle)
)
.forEach(j -> {
NBTTagCompound k = UpgradeHelper.getDartData(j);
if (!(j instanceof EntityFrozenItem) && !(j instanceof EntityItem)) {
if (k.getInteger("timeImmune") > 0) {
return;
}
k.setInteger("time", this.type);
k.setInteger("timeTime", this.lifeTime);
}
switch (this.type) {
case 1:
if (j instanceof EntityArrow
&& (j.posX != j.prevPosX || j.posY != j.prevPosY
|| j.posZ != j.prevPosZ)) {
EntityFrozenItem chance = new EntityFrozenItem(
this.worldObj, j, this.lifeTime
);
this.worldObj.removeEntity(j);
this.worldObj.spawnEntityInWorld(chance);
} else if (j instanceof EntityItem) {
EntityItem var19 = (EntityItem) j;
if (k.hasKey("timeImmune")) {
k.setInteger(
"timeImmune", k.getInteger("timeImmune") - 1
);
if (k.getInteger("timeImmune") <= 0) {
k.removeTag("timeImmune");
}
} else if(var19.getEntityItem() != null && var19.getEntityItem().stackSize >= 1) {
short freq = 600;
EntityFrozenItem e1 = new EntityFrozenItem(
this.worldObj, var19, freq
);
var19.setEntityItemStack(
var19.getEntityItem().splitStack(0)
);
this.worldObj.removeEntity(var19);
this.worldObj.spawnEntityInWorld(e1);
}
}
//case 0:
//case 2:
//case 3:
//case 4:
default:
break;
}
});
;
if (this.type == 3 || this.type == 4) {
for (int x = (int) (this.posX - RANGE); x < (int) (this.posX + RANGE);
++x) {
for (int y = (int) (this.posY - RANGE); y < (int) (this.posY + RANGE);
++y) {
for (int z = (int) (this.posZ - RANGE);
z < (int) (this.posZ + RANGE);
++z) {
float var20 = this.type == 4 ? 0.5F : 0.1F;
try {
if (Config.timeAffectBlocks) {
Block block = this.worldObj.getBlock(x, y, z);
if (block != Blocks.air) {
if (block != null
&& var20 >= this.rand.nextFloat()) {
block.updateTick(
this.worldObj, x, y, z, this.rand
);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
Block var21 = this.type == 4 ? Blocks.glass : Blocks.planks;
try {
TileEntity var23 = this.worldObj.getTileEntity(x, y, z);
if (var23 != null && !(var23 instanceof TileEntityForceTorch)
&& Config.timeAffectTiles
/*&& (!Config.timeAffectWhitelist
|| DartPluginForceWrench.isTileBlacklisted(
var23.getClass()
))*/) {
// TODO: WTF
//if (var23 instanceof TileEntityMobSpawner) {
// TileEntityMobSpawner l
// = (TileEntityMobSpawner) var23;
// if (!(l.getSpawnerLogic()
// instanceof CustomEntityLogic)) {
// String logic = l.getSpawnerLogic()
// .getEntityNameToSpawn();
// CustomEntityLogic logic1
// = new CustomEntityLogic(l,
// this.type);
// SpawnerReflector.setLogic(l, logic1);
// } else {
// CustomEntityLogic var25
// = (CustomEntityLogic)
// l.getSpawnerLogic();
// var25.setHyper();
// }
//}
// TODO: WTF
//if (!ForestryTimer.handleTile(var23, var21)) {
// for (int var24 = 0; var24 < var21; ++var24)
// {
// var23.updateEntity();
// }
//}
}
} catch (Exception var14) {
var14.printStackTrace();
}
}
}
}
}
} catch (Exception var15) {
var15.printStackTrace();
}
this.checked = true;
}
public void spawnParticles() {
if (this.lifeTime >= 20) {
byte type = 4;
switch (this.type) {
case 0:
return;
case 1:
case 2:
type = 3;
break;
case 3:
type = 2;
break;
case 4:
type = 1;
}
Dartcraft.channel.sendToAllAround(
new PacketFX(
this.posX, this.posY, this.posZ, PacketFX.Type.TIME, type, 0, 1
),
new TargetPoint(
this.worldObj.provider.dimensionId,
this.posX,
this.posY,
this.posZ,
80f
)
);
}
}
public boolean setType(int type, boolean playSound) {
if (type >= 0 && type <= 4) {
this.type = type;
if (playSound) {
String sound = "dartcraft:";
switch (this.type) {
case 1:
case 2:
sound = sound + "slowDown";
break;
case 3:
case 4:
sound = sound + "speedUp";
}
if (this.worldObj != null) {
this.worldObj.playSoundAtEntity(this, sound, 1.0F, 1.0F);
}
}
return true;
} else {
this.type = 0;
return false;
}
}
@Override
protected void readEntityFromNBT(NBTTagCompound comp) {
try {
this.setType(comp.getInteger("timeType"), false);
this.lifeTime = comp.getInteger("lifeTime");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void writeEntityToNBT(NBTTagCompound comp) {
try {
comp.setInteger("timeType", this.type);
comp.setInteger("lifeTime", this.lifeTime);
} catch (Exception e) {
e.printStackTrace();
}
}
}