snake
This commit is contained in:
parent
d2bc4b8cb4
commit
b7b81ecaaa
@ -16,7 +16,7 @@ public class SnakeBoss extends WorldEvent
|
|||||||
public SnakeBoss(DamageManager damageManager, BlockRestore blockRestore, ConditionManager conditionManager, String name,
|
public SnakeBoss(DamageManager damageManager, BlockRestore blockRestore, ConditionManager conditionManager, String name,
|
||||||
Location cornerLocation)
|
Location cornerLocation)
|
||||||
{
|
{
|
||||||
super(damageManager, blockRestore, conditionManager, name, cornerLocation);
|
super(damageManager, blockRestore, conditionManager, "Snaaaake", cornerLocation, "schematic/Golem.schematic");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,163 +1,32 @@
|
|||||||
package nautilus.game.arcade.game.games.bossbattles.displays;
|
package nautilus.game.arcade.game.games.bossbattles.displays;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.potion.PotionEffectType;
|
|
||||||
import org.bukkit.util.NumberConversions;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
import mineplex.core.common.util.UtilEnt;
|
import mineplex.core.common.util.UtilEnt;
|
||||||
import mineplex.core.common.util.UtilMath;
|
|
||||||
import mineplex.core.common.util.UtilPlayer;
|
|
||||||
import mineplex.core.updater.UpdateType;
|
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
|
||||||
import mineplex.minecraft.game.core.boss.snake.SnakeSegment;
|
|
||||||
import nautilus.game.arcade.game.games.bossbattles.BattleBoss;
|
import nautilus.game.arcade.game.games.bossbattles.BattleBoss;
|
||||||
import nautilus.game.arcade.game.games.bossbattles.BossBattles;
|
import nautilus.game.arcade.game.games.bossbattles.BossBattles;
|
||||||
import net.minecraft.server.v1_7_R4.Packet;
|
|
||||||
import net.minecraft.server.v1_7_R4.PacketPlayOutEntityDestroy;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.IronGolem;
|
||||||
|
import org.bukkit.entity.Sheep;
|
||||||
|
import org.bukkit.entity.Slime;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||||
|
|
||||||
public class SnakeDisplay extends BossDisplay
|
public class SnakeDisplay extends BossDisplay
|
||||||
{
|
{
|
||||||
private ArrayList<SnakeSegment> _snakeTail = new ArrayList<SnakeSegment>();
|
private Sheep _sheep;
|
||||||
private double _seperator = 0.5;
|
|
||||||
private ArrayList<Player> _canSee = new ArrayList<Player>();
|
|
||||||
private Entity _entity;
|
|
||||||
private float _yaw;
|
|
||||||
private float _pitch;
|
|
||||||
|
|
||||||
public SnakeDisplay(BossBattles plugin, BattleBoss boss, Location location)
|
public SnakeDisplay(BossBattles plugin, BattleBoss boss,
|
||||||
|
Location location)
|
||||||
{
|
{
|
||||||
super(plugin, boss, location);
|
super(plugin, boss, location);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getDisplayName()
|
|
||||||
{
|
|
||||||
return C.cDGreen + "Snake";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeBoss()
|
|
||||||
{
|
|
||||||
int[] ids = new int[_snakeTail.size()];
|
|
||||||
|
|
||||||
for (int a = 0; a < _snakeTail.size(); a++)
|
|
||||||
{
|
|
||||||
ids[a] = _snakeTail.get(a).getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
Packet destroy = new PacketPlayOutEntityDestroy(ids);
|
|
||||||
|
|
||||||
for (Player player : _canSee)
|
|
||||||
{
|
|
||||||
UtilPlayer.sendPacket(player, destroy);
|
|
||||||
}
|
|
||||||
|
|
||||||
_entity.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void start()
|
|
||||||
{
|
|
||||||
Vector dir = new Vector(UtilMath.rr(1, true), 0, UtilMath.rr(1, true))
|
|
||||||
.normalize().multiply(_seperator);
|
|
||||||
|
|
||||||
for (int i = 0; i < 20; i++)
|
|
||||||
{
|
|
||||||
Vector loc = getLocation().toVector()
|
|
||||||
.subtract(dir.clone().multiply(-i));
|
|
||||||
|
|
||||||
SnakeSegment tail = new SnakeSegment(loc, new ItemStack(
|
|
||||||
i == 0 ? Material.COBBLESTONE : Material.STONE));
|
|
||||||
_snakeTail.add(tail);
|
|
||||||
}
|
|
||||||
|
|
||||||
Plugin.CreatureAllowOverride = true;
|
|
||||||
|
|
||||||
_entity = getLocation().getWorld().spawnEntity(getLocation(),
|
|
||||||
EntityType.IRON_GOLEM);
|
|
||||||
UtilEnt.Vegetate(_entity);
|
|
||||||
((LivingEntity) _entity).addPotionEffect(
|
|
||||||
new PotionEffect(PotionEffectType.INVISIBILITY, 10000, 0));
|
|
||||||
|
|
||||||
Plugin.CreatureAllowOverride = false;
|
|
||||||
|
|
||||||
addEntity(_entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onSecond(UpdateEvent event)
|
|
||||||
{
|
|
||||||
if (event.getType() != UpdateType.SEC)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ArrayList<Player> canSee = new ArrayList<Player>();
|
|
||||||
|
|
||||||
for (Player player : getLocation().getWorld().getPlayers())
|
|
||||||
{
|
|
||||||
if (player.getLocation().distance(getLocation()) < 120)
|
|
||||||
{
|
|
||||||
canSee.add(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Iterator<Player> itel2 = _canSee.iterator();
|
|
||||||
|
|
||||||
int[] ids = new int[_snakeTail.size()];
|
|
||||||
|
|
||||||
for (int a = 0; a < _snakeTail.size(); a++)
|
|
||||||
{
|
|
||||||
ids[a] = _snakeTail.get(a).getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
Packet destroy = new PacketPlayOutEntityDestroy(ids);
|
|
||||||
|
|
||||||
while (itel2.hasNext())
|
|
||||||
{
|
|
||||||
Player player = itel2.next();
|
|
||||||
|
|
||||||
if (!canSee.contains(player))
|
|
||||||
{
|
|
||||||
itel2.remove();
|
|
||||||
UtilPlayer.sendPacket(player, destroy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Player player : canSee)
|
|
||||||
{
|
|
||||||
if (!_canSee.contains(player))
|
|
||||||
{
|
|
||||||
_canSee.add(player);
|
|
||||||
|
|
||||||
for (SnakeSegment tail : _snakeTail)
|
|
||||||
{
|
|
||||||
UtilPlayer.sendPacket(player, tail.getSpawn());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onInteract(PlayerInteractEntityEvent event)
|
public void onInteract(PlayerInteractEntityEvent event)
|
||||||
{
|
{
|
||||||
if (!event.getRightClicked().equals(_entity))
|
if (!event.getRightClicked().equals(_sheep))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -165,78 +34,41 @@ public class SnakeDisplay extends BossDisplay
|
|||||||
setChosen(event.getPlayer());
|
setChosen(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setYaw(float yaw)
|
@Override
|
||||||
|
public void start()
|
||||||
{
|
{
|
||||||
_yaw = (yaw + 720) % 360;
|
Plugin.CreatureAllowOverride = true;
|
||||||
|
|
||||||
|
_sheep = (Sheep) getLocation().getWorld().spawnEntity(getLocation(),
|
||||||
|
EntityType.SHEEP);
|
||||||
|
|
||||||
|
_sheep.teleport(getLocation());
|
||||||
|
|
||||||
|
UtilEnt.Vegetate(_sheep);
|
||||||
|
|
||||||
|
Plugin.CreatureAllowOverride = false;
|
||||||
|
|
||||||
|
addEntity(_sheep);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPitch(float pitch)
|
@Override
|
||||||
|
public String getDisplayName()
|
||||||
{
|
{
|
||||||
_pitch = (pitch + 720) % 360;
|
return C.cDGreen + "SNAAAAAAAAAAAAAAAAAKE";
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getPitch()
|
@Override
|
||||||
|
public void spawnHologram()
|
||||||
{
|
{
|
||||||
return _pitch;
|
super.spawnHologram();
|
||||||
}
|
|
||||||
|
|
||||||
public float getYaw()
|
getHologram().setFollowEntity(_sheep);
|
||||||
{
|
|
||||||
return _yaw;
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onTick(UpdateEvent event)
|
|
||||||
{
|
|
||||||
if (event.getType() != UpdateType.TICK)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Packet[] packets = new Packet[_snakeTail.size()];
|
|
||||||
|
|
||||||
for (int i = 0; i < _snakeTail.size(); i++)
|
|
||||||
{
|
|
||||||
SnakeSegment tail = _snakeTail.get(i);
|
|
||||||
Vector vector = new Vector();
|
|
||||||
|
|
||||||
if (i == 0)
|
|
||||||
{
|
|
||||||
setPitch(getPitch() + 3);
|
|
||||||
|
|
||||||
double rotX = getYaw();
|
|
||||||
double rotY = getPitch();
|
|
||||||
|
|
||||||
vector.setY(-Math.sin(Math.toRadians(rotY)));
|
|
||||||
|
|
||||||
double xz = Math.cos(Math.toRadians(rotY));
|
|
||||||
|
|
||||||
vector.setX(-xz * Math.sin(Math.toRadians(rotX)));
|
|
||||||
vector.setZ(xz * Math.cos(Math.toRadians(rotX)));
|
|
||||||
|
|
||||||
vector.normalize().multiply(0.2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SnakeSegment t = _snakeTail.get(i - 1);
|
|
||||||
|
|
||||||
vector = t.getPrevious().clone().subtract(tail.getLocation());
|
|
||||||
}
|
|
||||||
|
|
||||||
packets[i] = tail
|
|
||||||
.moveEntity(tail.getLocation().clone().add(vector));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Player player : _canSee)
|
|
||||||
{
|
|
||||||
UtilPlayer.sendPacket(player, packets);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Location getHologramLocation()
|
public Location getHologramLocation()
|
||||||
{
|
{
|
||||||
return getLocation().clone().add(0, 3, 0);
|
return _sheep.getEyeLocation().add(0, 0.1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user