charred blocks updates

This commit is contained in:
NewGarbo 2016-01-26 17:36:12 +00:00
parent 2445e73623
commit 7c85fe62ca
2 changed files with 55 additions and 11 deletions

View File

@ -2,6 +2,7 @@ package mineplex.game.clans.clans.siege.cannon;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import org.bukkit.Location;
@ -235,7 +236,6 @@ public class Cannon implements Listener
_craters.add(new CannonCrater(this, UtilBlock.nearestFloor(_projectile.getLocation())));
UtilParticle.PlayParticleToAll(ParticleType.HUGE_EXPLOSION, _projectile.getLocation(), new Vector(0, 0, 0), .1f, 4, ViewDist.MAX);
UtilServer.getServer().getOnlinePlayers().forEach(player -> player.playSound(_projectile.getLocation(), Sound.EXPLODE, 1.f, 1.f));
_projectile.remove();
@ -244,6 +244,21 @@ public class Cannon implements Listener
}
}
private List<Vector> circleAround(Vector origin, int points, double radius)
{
List<Vector> list = new LinkedList<>();
double slice = 2 * Math.PI / points;
for (int point = 0; point < points; point++)
{
double angle = slice * point;
list.add(new Vector(origin.getX() + radius * Math.cos(angle), 0, origin.getZ() + radius * Math.sin(angle)));
}
return list;
}
private void attemptFire()
{
if (canBeFired())
@ -307,6 +322,20 @@ public class Cannon implements Listener
@EventHandler
public void updateState(UpdateEvent event)
{
// if (event.getType() == UpdateType.FASTEST)
// {
// if (_state == CannonState.LOADED)
// {
// double yaw = getArmorStand().getHeadPose().getY() - 7.75d;
//
// Location loc = new Location(_location.getWorld(), getArmorStand().getLocation().getX() + (0.5 * Math.cos(yaw)), _location.getY() + 1.12, getArmorStand().getLocation().getZ() + (0.5 * Math.sin(yaw)));
//
// loc = UtilAlg.moveForward(loc, 0.1, (float) Math.toDegrees(yaw + 7.75), false);
//
// UtilParticle.PlayParticleToAll(ParticleType.FLAME, loc, new Vector(0, 0, 0), 0.f, 1, ViewDist.MAX);
// }
// }
if (event.getType() != UpdateType.TICK)
{
return;
@ -483,11 +512,12 @@ public class Cannon implements Listener
}
ArmorStand armorStand = (ArmorStand) UtilMath.getFirst(_entities);
double standYaw = Math.toDegrees(armorStand.getHeadPose().getY()) % 360;
double riderYaw = _rider.getLocation().getYaw() % 360;
double standYaw = Math.abs(Math.toDegrees(armorStand.getHeadPose().getY()) % 360);
double riderYaw = Math.abs(_rider.getLocation().getYaw() % 360);
double dif = riderYaw - standYaw;
double yaw = standYaw + (dif / 20.f);
double yaw = standYaw + Math.min(dif / 20.f, 5f);
Location pos = armorStand.getLocation();

View File

@ -15,6 +15,7 @@ import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.util.Vector;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilItem;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
@ -29,6 +30,8 @@ public class CannonCrater implements Listener
{
private static final double EXPL_RADIUS = 3;
public static final Material CHARRED_TYPE = Material.OBSIDIAN;
private Cannon _host;
private Location _origin;
@ -57,15 +60,26 @@ public class CannonCrater implements Listener
return;
}
_blocks.stream().filter(block -> block.Type == Material.COAL_BLOCK).forEach(block -> {
_blocks.stream().filter(block -> block.Type == CHARRED_TYPE).forEach(block -> {
long lifetime = System.currentTimeMillis() - _birthTime;
long max = 25000 - (long) ((block.DistanceToOrigin * 1000) * 3.5);
long max = 80000;
if (block.Location.getBlock().getType() != CHARRED_TYPE)
{
return;
}
// Water touching the charred blocks
if (UtilBlock.getInRadius(block.Location, 1.6).keySet().stream().filter(water -> water.getType() == Material.WATER).iterator().hasNext())
{
return;
}
if (lifetime < max)
{
UtilParticle.PlayParticleToAll(ParticleType.FLAME, block.Location.clone().add(.5, 1.1, .5), new Vector(0, 0, 0), .4f, 1, ViewDist.MAX);
UtilParticle.PlayParticleToAll(ParticleType.SMOKE, block.Location.clone().add(.5, 1.1, .5), new Vector(0, 0, 0), .4f, 1, ViewDist.MAX);
UtilParticle.PlayParticleToAll(ParticleType.FLAME, block.Location.clone().add(.5, 1, .5), new Vector(0, 0, 0), .0f, 3, ViewDist.MAX);
UtilParticle.PlayParticleToAll(lifetime >= max / 1.4 ? ParticleType.SMOKE : ParticleType.LARGE_SMOKE, block.Location.clone().add(.5, .8, .5), new Vector(0, 0, 0), .0f, 1, ViewDist.MAX);
}
});
}
@ -131,10 +145,10 @@ public class CannonCrater implements Listener
Math.random() > .75 &&
UtilItem.isBoundless(block.getRelative(BlockFace.UP).getType()) &&
!UtilItem.isBoundless(block.getRelative(BlockFace.DOWN).getType()) &&
!block.getRelative(BlockFace.UP).getType().equals(Material.COAL_BLOCK) &&
!block.getRelative(BlockFace.DOWN).getType().equals(Material.COAL_BLOCK))
!block.getRelative(BlockFace.UP).getType().equals(CHARRED_TYPE) &&
!block.getRelative(BlockFace.DOWN).getType().equals(CHARRED_TYPE))
{
_blocks.add(new CraterBlock(block.getLocation(), distance, Material.COAL_BLOCK));
_blocks.add(new CraterBlock(block.getLocation(), distance, CHARRED_TYPE));
}
}