Merge branch 'master' of ssh://dev.mineplex.com:7999/min/Mineplex

This commit is contained in:
Jonathan Williams 2013-10-25 05:16:15 -05:00
commit e5f99331dd
76 changed files with 4773 additions and 684 deletions

View File

@ -0,0 +1,16 @@
package mineplex.core.common.util;
import org.bukkit.entity.EntityType;
public class EntData
{
public String Name;
public EntityType Type;
public double Height;
public double Scale;
public EntData(String name, EntityType type, double height, double scale)
{
}
}

View File

@ -0,0 +1,191 @@
package mineplex.core.common.util;
import java.lang.reflect.Field;
import java.util.HashMap;
import net.minecraft.server.v1_6_R3.DataWatcher;
import net.minecraft.server.v1_6_R3.EntityPlayer;
import net.minecraft.server.v1_6_R3.Packet;
import net.minecraft.server.v1_6_R3.Packet205ClientCommand;
import net.minecraft.server.v1_6_R3.Packet24MobSpawn;
import net.minecraft.server.v1_6_R3.Packet29DestroyEntity;
import net.minecraft.server.v1_6_R3.Packet40EntityMetadata;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
public class UtilDisplay
{
public static final int ENTITY_ID = 1234;
private static HashMap<String, Boolean> hasHealthBar = new HashMap<String, Boolean>();
public static void sendPacket(Player player, Packet packet){
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
entityPlayer.playerConnection.sendPacket(packet);
}
//Accessing packets
public static Packet24MobSpawn getMobPacket(String text, double healthPercent, Location loc){
Packet24MobSpawn mobPacket = new Packet24MobSpawn();
mobPacket.a = (int) ENTITY_ID; //Entity ID
mobPacket.b = (byte) EntityType.ENDER_DRAGON.getTypeId(); //Mob type (ID: 64)
mobPacket.c = (int) Math.floor(loc.getBlockX() * 32.0D); //X position
mobPacket.d = (int) -200; //Y position
mobPacket.e = (int) Math.floor(loc.getBlockZ() * 32.0D); //Z position
mobPacket.f = (byte) 0; //Pitch
mobPacket.g = (byte) 0; //Head Pitch
mobPacket.h = (byte) 0; //Yaw
mobPacket.i = (short) 0; //X velocity
mobPacket.j = (short) 0; //Y velocity
mobPacket.k = (short) 0; //Z velocity
DataWatcher watcher = getWatcher(text, healthPercent * 200);
try{
Field t = Packet24MobSpawn.class.getDeclaredField("t");
t.setAccessible(true);
t.set(mobPacket, watcher);
} catch(Exception e){
e.printStackTrace();
}
return mobPacket;
}
public static Packet29DestroyEntity getDestroyEntityPacket(){
Packet29DestroyEntity packet = new Packet29DestroyEntity();
packet.a = new int[]{ENTITY_ID};
return packet;
}
public static Packet40EntityMetadata getMetadataPacket(DataWatcher watcher){
Packet40EntityMetadata metaPacket = new Packet40EntityMetadata();
metaPacket.a = (int) ENTITY_ID;
try{
Field b = Packet40EntityMetadata.class.getDeclaredField("b");
b.setAccessible(true);
b.set(metaPacket, watcher.c());
} catch(Exception e){
e.printStackTrace();
}
return metaPacket;
}
public static Packet205ClientCommand getRespawnPacket(){
Packet205ClientCommand packet = new Packet205ClientCommand();
packet.a = (int) 1;
return packet;
}
public static DataWatcher getWatcher(String text, double health){
DataWatcher watcher = new DataWatcher();
watcher.a(0, (Byte) (byte) 0x20); //Flags, 0x20 = invisible
watcher.a(6, (Float) (float) health);
watcher.a(10, (String) text); //Entity name
watcher.a(11, (Byte) (byte) 1); //Show name, 1 = show, 0 = don't show
watcher.a(16, (Integer) (int) health); //Wither health, 200 = full health
return watcher;
}
//Other methods
public static void displayTextBar(JavaPlugin plugin, final Player player, double healthPercent, String text)
{
Packet24MobSpawn mobPacket = getMobPacket(text, healthPercent, player.getLocation());
sendPacket(player, mobPacket);
hasHealthBar.put(player.getName(), true);
new BukkitRunnable(){
@Override
public void run(){
Packet29DestroyEntity destroyEntityPacket = getDestroyEntityPacket();
sendPacket(player, destroyEntityPacket);
hasHealthBar.put(player.getName(), false);
}
}.runTaskLater(plugin, 120L);
}
public static void displayLoadingBar(final String text, final String completeText, final Player player, final int healthAdd, final long delay, final boolean loadUp, final JavaPlugin plugin){
Packet24MobSpawn mobPacket = getMobPacket(text, 0, player.getLocation());
sendPacket(player, mobPacket);
hasHealthBar.put(player.getName(), true);
new BukkitRunnable(){
int health = (loadUp ? 0 : 200);
@Override
public void run(){
if((loadUp ? health < 200 : health > 0)){
DataWatcher watcher = getWatcher(text, health);
Packet40EntityMetadata metaPacket = getMetadataPacket(watcher);
sendPacket(player, metaPacket);
if(loadUp){
health += healthAdd;
} else {
health -= healthAdd;
}
} else {
DataWatcher watcher = getWatcher(text, (loadUp ? 200 : 0));
Packet40EntityMetadata metaPacket = getMetadataPacket(watcher);
Packet29DestroyEntity destroyEntityPacket = getDestroyEntityPacket();
sendPacket(player, metaPacket);
sendPacket(player, destroyEntityPacket);
hasHealthBar.put(player.getName(), false);
//Complete text
Packet24MobSpawn mobPacket = getMobPacket(completeText, 100, player.getLocation());
sendPacket(player, mobPacket);
hasHealthBar.put(player.getName(), true);
DataWatcher watcher2 = getWatcher(completeText, 200);
Packet40EntityMetadata metaPacket2 = getMetadataPacket(watcher2);
sendPacket(player, metaPacket2);
new BukkitRunnable(){
@Override
public void run(){
Packet29DestroyEntity destroyEntityPacket = getDestroyEntityPacket();
sendPacket(player, destroyEntityPacket);
hasHealthBar.put(player.getName(), false);
}
}.runTaskLater(plugin, 40L);
this.cancel();
}
}
}.runTaskTimer(plugin, delay, delay);
}
public static void displayLoadingBar(final String text, final String completeText, final Player player, final int secondsDelay, final boolean loadUp, JavaPlugin plugin){
final int healthChangePerSecond = 200 / secondsDelay;
displayLoadingBar(text, completeText, player, healthChangePerSecond, 20L, loadUp, plugin);
}
}

View File

@ -162,6 +162,13 @@ public class UtilEnt
if (GetEntityNames().containsKey(ent)) if (GetEntityNames().containsKey(ent))
return GetEntityNames().get(ent); return GetEntityNames().get(ent);
if (ent instanceof LivingEntity)
{
LivingEntity le = (LivingEntity)ent;
if (le.getCustomName() != null)
return le.getCustomName();
}
return getName(ent.getType()); return getName(ent.getType());
} }
@ -322,7 +329,7 @@ public class UtilEnt
} }
} }
else else
if (loc.getY() > ent.getLocation().getY() && loc.getY() < ent.getLocation().getY() + 1) if (loc.getY() > ent.getLocation().getY() && loc.getY() < ent.getLocation().getY() + 2)
if (UtilMath.offset2d(loc, ent.getLocation()) < 0.5 * mult) if (UtilMath.offset2d(loc, ent.getLocation()) < 0.5 * mult)
return true; return true;
@ -401,8 +408,21 @@ public class UtilEnt
{ {
for (int z=zMin ; z<=zMax ; z++) for (int z=zMin ; z<=zMax ; z++)
{ {
//half block, carpet, snow, etc
//if (player.getLocation().getBlock().getType() != Material.AIR)
// return true;
//standing on...
if (player.getLocation().add(x, -0.5, z).getBlock().getType() != Material.AIR) if (player.getLocation().add(x, -0.5, z).getBlock().getType() != Material.AIR)
return true; return true;
//fences/walls
Material beneath = player.getLocation().add(x, -1.5, z).getBlock().getType();
if (player.getLocation().getY() % 0.5 == 0 &&
(beneath == Material.FENCE ||
beneath == Material.NETHER_FENCE ||
beneath == Material.COBBLE_WALL))
return true;
} }
} }

View File

@ -0,0 +1,107 @@
package mineplex.core.common.util;
import java.lang.reflect.Field;
import net.minecraft.server.v1_6_R3.Packet63WorldParticles;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class UtilParticle
{
public enum ParticleType
{
HUGE_EXPLOSION("hugeexplosion"),
LARGE_EXPLODE("largeexplode"),
FIREWORKS_SPARK("fireworksSpark"),
BUBBLE("bubble"),
SUSPEND("suspend"),
DEPTH_SUSPEND("depthSuspend"),
TOWN_AURA("townaura"),
CRIT("crit"),
MAGIC_CRIT("magicCrit"),
MOB_SPELL("mobSpell"),
MOB_SPELL_AMBIENT("mobSpellAmbient"),
SPELL("spell"),
INSTANT_SPELL("instantSpell"),
WITCH_MAGIC("witchMagic"),
NOTE("note"),
PORTAL("portal"),
ENCHANTMENT_TABLE("enchantmenttable"),
EXPLODE("explode"),
FLAME("flame"),
LAVA("lava"),
FOOTSTEP("footstep"),
SPLASH("splash"),
LARGE_SMOKE("largesmoke"),
CLOUD("cloud"),
RED_DUST("reddust"),
SNOWBALL_POOF("snowballpoof"),
DRIP_WATER("dripWater"),
DRIP_LAVA("dripLava"),
SNOW_SHOVEL("snowshovel"),
SLIME("slime"),
HEART("heart"),
ANGRY_VILLAGER("angryVillager"),
HAPPY_VILLAGER("happerVillager");
public String particleName;
ParticleType(String particleName)
{
this.particleName = particleName;
}
}
public static void PlayParticle(Player player, ParticleType type, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count)
{
Packet63WorldParticles packet = new Packet63WorldParticles();
for (Field field : packet.getClass().getDeclaredFields())
{
try
{
field.setAccessible(true);
String fieldName = field.getName();
switch (fieldName)
{
case "a":
field.set(packet, type.particleName); //Particle name
break;
case "b":
field.setFloat(packet, (float)location.getX()); //Block X
break;
case "c":
field.setFloat(packet, (float)location.getY()); //Block Y
break;
case "d":
field.setFloat(packet, (float)location.getZ()); //Block Z
break;
case "e":
field.setFloat(packet, offsetX); //Random X Offset
break;
case "f":
field.setFloat(packet, offsetY); //Random Y Offset
break;
case "g":
field.setFloat(packet, offsetZ); //Random Z Offset
break;
case "h":
field.setFloat(packet, speed); //Speed/data of particles
break;
case "i":
field.setInt(packet, count); //Amount of particles
break;
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
return;
}
}
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}
}

View File

@ -357,7 +357,7 @@ public class AntiHack extends MiniPlugin
//Staff //Staff
for (Player other : UtilServer.getPlayers()) for (Player other : UtilServer.getPlayers())
if (other.isOp()) if (other.isOp() && other.getGameMode() == GameMode.CREATIVE)
UtilPlayer.message(other, C.cGold + C.Bold + player.getName() + " received offense for " + type + "."); UtilPlayer.message(other, C.cGold + C.Bold + player.getName() + " received offense for " + type + ".");
//Print (Debug) //Print (Debug)

View File

@ -85,6 +85,16 @@ public class Chat extends MiniClientPlugin<ChatClient>
} }
} }
@EventHandler
public void lagTest(PlayerCommandPreprocessEvent event)
{
if (event.getMessage().equals("lag") || event.getMessage().equals("ping"))
{
event.getPlayer().sendMessage(F.main(GetName(), "PONG!"));
event.setCancelled(true);
}
}
@EventHandler @EventHandler
public void SilenceUpdate(UpdateEvent event) public void SilenceUpdate(UpdateEvent event)
{ {

View File

@ -16,6 +16,6 @@ public class FilterChatCommand extends CommandBase<Chat>
@Override @Override
public void Execute(Player caller, String[] args) public void Execute(Player caller, String[] args)
{ {
Plugin.Get(caller).ToggleFilterChat(); //Plugin.Get(caller).ToggleFilterChat();
} }
} }

View File

@ -273,7 +273,7 @@ public class Explosion extends MiniPlugin
return _explosionBlocks; return _explosionBlocks;
} }
public void BlockExplosion(Collection<Block> blockSet, Location mid) public void BlockExplosion(Collection<Block> blockSet, Location mid, boolean onlyAbove)
{ {
if (blockSet.isEmpty()) if (blockSet.isEmpty())
return; return;
@ -286,10 +286,13 @@ public class Explosion extends MiniPlugin
if (cur.getTypeId() == 0) if (cur.getTypeId() == 0)
continue; continue;
if (onlyAbove && cur.getY() < mid.getY())
continue;
blocks.put(cur, new AbstractMap.SimpleEntry<Integer, Byte>(cur.getTypeId(), cur.getData())); blocks.put(cur, new AbstractMap.SimpleEntry<Integer, Byte>(cur.getTypeId(), cur.getData()));
if (cur.getTypeId() != 98 || cur.getData() != 0) if (cur.getTypeId() != 98 || cur.getData() != 0)
cur.setTypeId(0); cur.setType(Material.AIR);
} }
//DELAY //DELAY

View File

@ -177,11 +177,13 @@ public class PetManager extends MiniClientPlugin<PetClient>
} }
} }
/* not necessary for hub
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerInventoryClick(InventoryClickEvent event) public void onPlayerInventoryClick(InventoryClickEvent event)
{ {
UtilInv.DisallowMovementOf(event, "Pet Menu", Material.BONE, (byte)0, true, true); UtilInv.DisallowMovementOf(event, "Pet Menu", Material.BONE, (byte)0, true, true);
} }
*/
@EventHandler @EventHandler
public void onPlayerJoin(PlayerJoinEvent event) public void onPlayerJoin(PlayerJoinEvent event)

View File

@ -4,12 +4,12 @@
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="var" path="REPO_DIR/Plugins/Libraries/craftbukkit.jar" sourcepath="/REPO_DIR/GitHubLibraries/CraftBukkit/src"/> <classpathentry kind="var" path="REPO_DIR/Plugins/Libraries/craftbukkit.jar" sourcepath="/REPO_DIR/GitHubLibraries/CraftBukkit/src"/>
<classpathentry kind="var" path="REPO_DIR/Plugins/Libraries/bukkit.jar"/> <classpathentry kind="var" path="REPO_DIR/Plugins/Libraries/bukkit.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/Core"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core"/> <classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core.Common"/> <classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core.Common"/>
<classpathentry combineaccessrules="false" kind="src" path="/Nautilus.Core"/> <classpathentry combineaccessrules="false" kind="src" path="/Nautilus.Core"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Minecraft.Game.Core"/> <classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Minecraft.Game.Core"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Minecraft.Game.ClassCombat"/> <classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Minecraft.Game.ClassCombat"/>
<classpathentry kind="var" path="REPO_DIR/Plugins/Libraries/commons-codec-1.6.jar"/> <classpathentry kind="var" path="REPO_DIR/Plugins/Libraries/commons-codec-1.6.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/Core"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

View File

@ -1,202 +0,0 @@
package mineplex.hub;
import mineplex.core.MiniPlugin;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilWorld;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftEnderDragon;
import org.bukkit.entity.EnderDragon;
import org.bukkit.entity.Entity;
import org.bukkit.event.EventHandler;
import org.bukkit.util.Vector;
public class Dragon extends MiniPlugin
{
HubManager Manager;
public EnderDragon Dragon = null;
public Entity TargetEntity = null;
public Location Target = null;
public Location Location = null;
public float Pitch = 0;
public Vector Velocity = new Vector(0,0,0);
public double RangeBest = 1000;
public long RangeTime = 0;
public int textA = 0;
public int textB = 0;
public Dragon(HubManager manager)
{
super("Dragon Manager", manager.GetPlugin());
Manager = manager;
}
public void Spawn()
{
if (Dragon != null)
Dragon.remove();
if (UtilServer.getPlayers().length == 0)
return;
if (!Manager.GetSpawn().getWorld().isChunkLoaded(Manager.GetSpawn().getChunk()))
return;
for (Entity ent : Manager.GetSpawn().getWorld().getEntities())
{
if (ent instanceof EnderDragon)
ent.remove();
}
Dragon = Manager.GetSpawn().getWorld().spawn(Manager.GetSpawn().add(0, 50, 0), EnderDragon.class);
UtilEnt.Vegetate(Dragon);
Dragon.setCustomName(C.cGreen + C.Bold + "The Mineplex Dragon");
Velocity = Dragon.getLocation().getDirection().setY(0).normalize();
Pitch = UtilAlg.GetPitch(Dragon.getLocation().getDirection());
Location = Dragon.getLocation();
TargetSky();
}
@EventHandler
public void MoveUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
if (Dragon == null || !Dragon.isValid())
{
//Spawn();
return;
}
Turn();
Location.add(Velocity);
Location.add(0, -Pitch, 0);
Location.setPitch(-1 * Pitch);
Location.setYaw(180 + UtilAlg.GetYaw(Velocity));
((CraftEnderDragon)Dragon).getHandle().setTargetBlock(Location.getBlockX(), Location.getBlockY(), Location.getBlockZ());
}
@EventHandler
public void ColorEvent(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTEST)
return;
if (Dragon == null || !Dragon.isValid())
return;
ChatColor aCol = ChatColor.RED;
if (textA == 1) aCol = ChatColor.GOLD;
else if (textA == 2) aCol = ChatColor.YELLOW;
else if (textA == 3) aCol = ChatColor.GREEN;
else if (textA == 4) aCol = ChatColor.AQUA;
else if (textA == 5) aCol = ChatColor.LIGHT_PURPLE;
textA = (textA+1)%6;
ChatColor bCol = ChatColor.GREEN;
if (textB > 6) bCol = ChatColor.WHITE;
textB = (textB+1)%14;
Dragon.setCustomName(aCol + C.Bold + C.Line + Manager.DragonTextA +ChatColor.RESET + " - " + bCol + C.Bold + C.Line + Manager.DragonTextB);
}
private void Turn()
{
//Pitch
float desiredPitch = UtilAlg.GetPitch(UtilAlg.getTrajectory(Location, Target));
if (desiredPitch < Pitch) Pitch = (float)(Pitch - 0.05);
if (desiredPitch > Pitch) Pitch = (float)(Pitch + 0.05);
if (Pitch > 0.5) Pitch = 0.5f;
if (Pitch < -0.5) Pitch = -0.5f;
//Flat
Vector desired = UtilAlg.getTrajectory2d(Location, Target);
desired.subtract(UtilAlg.Normalize(new Vector(Velocity.getX(), 0, Velocity.getZ())));
desired.multiply(0.075);
Velocity.add(desired);
//Speed
UtilAlg.Normalize(Velocity);
}
public void Target()
{
if (TargetEntity != null)
{
if (!TargetEntity.isValid())
{
TargetEntity = null;
}
else
{
Target = TargetEntity.getLocation().subtract(0, 8, 0);
}
return;
}
if (Target == null)
{
TargetSky();
}
if (UtilMath.offset(Location, Target) < 10)
{
TargetSky();
}
TargetTimeout();
}
public void TargetTimeout()
{
if (UtilMath.offset(Location, Target)+1 < RangeBest)
{
RangeTime = System.currentTimeMillis();
RangeBest = UtilMath.offset(Location, Target);
}
else
{
if (UtilTime.elapsed(RangeTime, 10000))
{
TargetSky();
}
}
}
public void TargetSky()
{
RangeBest = 9000;
RangeTime = System.currentTimeMillis();
Target = Manager.GetSpawn().add(40 - UtilMath.r(80), 50 + UtilMath.r(30), 40 - UtilMath.r(80));
System.out.println("Dragon flying to: " + UtilWorld.locToStrClean(Target));
}
}

View File

@ -39,6 +39,7 @@ import mineplex.minecraft.game.classcombat.shop.ClassCombatShop;
import mineplex.minecraft.game.classcombat.shop.ClassShopManager; import mineplex.minecraft.game.classcombat.shop.ClassShopManager;
import mineplex.minecraft.game.core.IRelation; import mineplex.minecraft.game.core.IRelation;
import mineplex.minecraft.game.core.combat.CombatManager; import mineplex.minecraft.game.core.combat.CombatManager;
import mineplex.minecraft.game.core.condition.ConditionManager;
import mineplex.minecraft.game.core.damage.DamageManager; import mineplex.minecraft.game.core.damage.DamageManager;
import mineplex.minecraft.game.core.fire.Fire; import mineplex.minecraft.game.core.fire.Fire;
import nautilus.minecraft.core.INautilusPlugin; import nautilus.minecraft.core.INautilusPlugin;
@ -82,7 +83,7 @@ public class Hub extends JavaPlugin implements INautilusPlugin, IRelation
PacketHandler packetHandler = new PacketHandler(this); PacketHandler packetHandler = new PacketHandler(this);
Portal portal = new Portal(this); Portal portal = new Portal(this);
PartyManager partyManager = new PartyManager(this, clientManager); PartyManager partyManager = new PartyManager(this, clientManager);
HubManager hubManager = new HubManager(this, clientManager, donationManager, new DisguiseManager(this, packetHandler), new TaskManager(this, GetWebServerAddress()), portal, partyManager); HubManager hubManager = new HubManager(this, new BlockRestore(this), clientManager, donationManager, new ConditionManager(this), new DisguiseManager(this, packetHandler), new TaskManager(this, GetWebServerAddress()), portal, partyManager);
new ServerManager(this, clientManager, donationManager, portal, partyManager, new ServerStatusManager(this, new LagMeter(this, clientManager)), hubManager, new StackerManager(hubManager)); new ServerManager(this, clientManager, donationManager, portal, partyManager, new ServerStatusManager(this, new LagMeter(this, clientManager)), hubManager, new StackerManager(hubManager));
new Chat(this, clientManager); new Chat(this, clientManager);
new MemoryFix(this); new MemoryFix(this);

View File

@ -13,7 +13,6 @@ import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
import org.bukkit.entity.Egg; import org.bukkit.entity.Egg;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
@ -23,7 +22,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
@ -38,6 +37,7 @@ import org.bukkit.scoreboard.Scoreboard;
import mineplex.core.MiniClientPlugin; import mineplex.core.MiniClientPlugin;
import mineplex.core.account.CoreClientManager; import mineplex.core.account.CoreClientManager;
import mineplex.core.blockrestore.BlockRestore;
import mineplex.core.common.Rank; import mineplex.core.common.Rank;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
@ -53,19 +53,27 @@ import mineplex.core.portal.Portal;
import mineplex.core.task.TaskManager; import mineplex.core.task.TaskManager;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.hub.gadget.GadgetManager;
import mineplex.hub.modules.*; import mineplex.hub.modules.*;
import mineplex.hub.mount.MountManager;
import mineplex.hub.party.Party; import mineplex.hub.party.Party;
import mineplex.hub.party.PartyManager; import mineplex.hub.party.PartyManager;
import mineplex.hub.tutorial.TutorialManager; import mineplex.hub.tutorial.TutorialManager;
import mineplex.minecraft.game.core.condition.ConditionManager;
public class HubManager extends MiniClientPlugin<HubClient> public class HubManager extends MiniClientPlugin<HubClient>
{ {
public String Mode = "Halloween";
private BlockRestore _blockRestore;
private CoreClientManager _clientManager; private CoreClientManager _clientManager;
private ConditionManager _conditionManager;
private DonationManager _donationManager; private DonationManager _donationManager;
private DisguiseManager _disguiseManager; private DisguiseManager _disguiseManager;
private PartyManager _partyManager; private PartyManager _partyManager;
private Portal _portal; private Portal _portal;
private VisibilityManager _visibilityManager;
private TutorialManager _tutorialManager; private TutorialManager _tutorialManager;
private TextManager _textCreator; private TextManager _textCreator;
private ParkourManager _parkour; private ParkourManager _parkour;
@ -83,13 +91,16 @@ public class HubManager extends MiniClientPlugin<HubClient>
private boolean _shuttingDown; private boolean _shuttingDown;
public HubManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, DisguiseManager disguiseManager, TaskManager taskManager, Portal portal, PartyManager partyManager) public HubManager(JavaPlugin plugin, BlockRestore blockRestore, CoreClientManager clientManager, DonationManager donationManager, ConditionManager conditionManager, DisguiseManager disguiseManager, TaskManager taskManager, Portal portal, PartyManager partyManager)
{ {
super("Hub Manager", plugin); super("Hub Manager", plugin);
_blockRestore = blockRestore;
_clientManager = clientManager; _clientManager = clientManager;
_conditionManager = conditionManager;
_donationManager = donationManager; _donationManager = donationManager;
_disguiseManager = disguiseManager; _disguiseManager = disguiseManager;
_portal = portal; _portal = portal;
_spawn = new Location(UtilWorld.getWorld("world"), 0.5, 74, 0.5); _spawn = new Location(UtilWorld.getWorld("world"), 0.5, 74, 0.5);
@ -97,13 +108,17 @@ public class HubManager extends MiniClientPlugin<HubClient>
_textCreator = new TextManager(this); _textCreator = new TextManager(this);
_parkour = new ParkourManager(this, donationManager, taskManager); _parkour = new ParkourManager(this, donationManager, taskManager);
new MountManager(this);
new MapManager(this); new MapManager(this);
new WorldManager(this); new WorldManager(this);
new JumpManager(this); new JumpManager(this);
new NewsManager(this);
new GadgetManager(this);
new MountManager(this);
_partyManager = partyManager; _partyManager = partyManager;
_tutorialManager = new TutorialManager(this, donationManager, taskManager, _textCreator); _tutorialManager = new TutorialManager(this, donationManager, taskManager, _textCreator);
_visibilityManager = new VisibilityManager(this);
DragonTextB = GetDragonText(); DragonTextB = GetDragonText();
} }
@ -390,6 +405,12 @@ public class HubManager extends MiniClientPlugin<HubClient>
} }
} }
@EventHandler
public void InventoryCancel(InventoryClickEvent event)
{
event.setCancelled(true);
}
@EventHandler @EventHandler
public void UpdateScoreboard(UpdateEvent event) public void UpdateScoreboard(UpdateEvent event)
{ {
@ -535,16 +556,31 @@ public class HubManager extends MiniClientPlugin<HubClient>
return new HubClient(player); return new HubClient(player);
} }
public BlockRestore GetBlockRestore()
{
return _blockRestore;
}
public CoreClientManager GetClients() public CoreClientManager GetClients()
{ {
return _clientManager; return _clientManager;
} }
public ConditionManager GetCondition()
{
return _conditionManager;
}
public DonationManager GetDonation() public DonationManager GetDonation()
{ {
return _donationManager; return _donationManager;
} }
public DisguiseManager GetDisguise()
{
return _disguiseManager;
}
public ParkourManager GetParkour() public ParkourManager GetParkour()
{ {
return _parkour; return _parkour;
@ -555,28 +591,13 @@ public class HubManager extends MiniClientPlugin<HubClient>
return _spawn.clone(); return _spawn.clone();
} }
@EventHandler public TutorialManager GetTutorial()
public void UpdateVisibility(UpdateEvent event)
{ {
if (event.getType() != UpdateType.FAST) return _tutorialManager;
return; }
for (Player player : UtilServer.getPlayers()) public VisibilityManager GetVisibility()
{ {
for (Player other : UtilServer.getPlayers()) return _visibilityManager;
{
if (player.equals(other))
continue;
if (UtilMath.offset(player.getLocation(), GetSpawn()) < 4 || _tutorialManager.InTutorial(other) || _tutorialManager.InTutorial(player) || (player.getOpenInventory().getType() != InventoryType.CRAFTING && player.getOpenInventory().getType() != InventoryType.CREATIVE))
{
((CraftPlayer)other).hidePlayer(player, true, false);
}
else
{
other.showPlayer(player);
}
}
}
} }
} }

View File

@ -4,11 +4,11 @@ import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase; import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank; import mineplex.core.common.Rank;
import mineplex.hub.modules.MountManager; import mineplex.hub.modules.AdminMountManager;
public class HorseSpawn extends CommandBase<MountManager> public class HorseSpawn extends CommandBase<AdminMountManager>
{ {
public HorseSpawn(MountManager plugin) public HorseSpawn(AdminMountManager plugin)
{ {
super(plugin, Rank.OWNER, new String[] {"horse"}); super(plugin, Rank.OWNER, new String[] {"horse"});
} }

View File

@ -0,0 +1,68 @@
package mineplex.hub.gadget;
import java.util.HashSet;
import org.bukkit.entity.Player;
import mineplex.core.MiniPlugin;
import mineplex.hub.HubManager;
import mineplex.hub.gadget.gadgets.Halloween2013_BatGun;
import mineplex.hub.gadget.gadgets.Halloween2013_Helmet;
import mineplex.hub.gadget.types.ArmorGadget;
import mineplex.hub.gadget.types.ArmorGadget.ArmorSlot;
import mineplex.hub.gadget.types.Gadget;
import mineplex.hub.gadget.types.ItemGadget;
public class GadgetManager extends MiniPlugin
{
public HubManager Manager;
private HashSet<Gadget> _gadgets;
public GadgetManager(HubManager manager)
{
super("Gadget Manager", manager.GetPlugin());
Manager = manager;
CreateGadgets();
}
private void CreateGadgets()
{
_gadgets = new HashSet<Gadget>();
_gadgets.add(new Halloween2013_BatGun(this));
_gadgets.add(new Halloween2013_Helmet(this));
}
//Disallows two armor gadgets in same slot.
public void RemoveArmor(Player player, ArmorSlot slot)
{
for (Gadget gadget : _gadgets)
{
if (gadget instanceof ArmorGadget)
{
ArmorGadget armor = (ArmorGadget)gadget;
if (armor.GetSlot() == slot)
{
armor.RemoveArmor(player);
}
}
}
}
public void RemoveItem(Player player)
{
for (Gadget gadget : _gadgets)
{
if (gadget instanceof ItemGadget)
{
ItemGadget item = (ItemGadget)gadget;
item.RemoveItem(player);
}
}
}
}

View File

@ -0,0 +1,57 @@
package mineplex.hub.gadget.gadgets;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Bat;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import mineplex.core.recharge.Recharge;
import mineplex.hub.gadget.GadgetManager;
import mineplex.hub.gadget.types.ItemGadget;
public class Halloween2013_BatGun extends ItemGadget
{
public Halloween2013_BatGun(GadgetManager manager)
{
super(manager, "Halloween2013_BatGun", "Bat Gun", Material.COAL_BLOCK, (byte)0);
}
@Override
public void Enable(Player player)
{
this.ApplyItem(player);
}
@Override
public void Disable(Player player)
{
this.RemoveItem(player);
}
@EventHandler
public void ItemUse(PlayerInteractEvent event)
{
if (event.getAction() == Action.PHYSICAL)
return;
Player player = event.getPlayer();
if (!IsActive(player))
return;
if (!Recharge.Instance.use(player, GetName(), 10000, true))
return;
for (int i=0 ; i<10 ; i++)
{
Bat bat = player.getWorld().spawn(player.getEyeLocation(), Bat.class);
bat.setVelocity(player.getLocation().getDirection().multiply(2));
}
player.getWorld().playSound(player.getLocation(), Sound.BAT_TAKEOFF, 2f, 1f);
player.getWorld().playSound(player.getLocation(), Sound.BAT_HURT, 2f, 1f);
}
}

View File

@ -0,0 +1,46 @@
package mineplex.hub.gadget.gadgets;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton.SkeletonType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerDropItemEvent;
import mineplex.core.disguise.disguises.DisguiseSkeleton;
import mineplex.hub.gadget.GadgetManager;
import mineplex.hub.gadget.types.ArmorGadget;
public class Halloween2013_Helmet extends ArmorGadget
{
public Halloween2013_Helmet(GadgetManager manager)
{
super(manager, "Halloween2013_Helmet", "Pumpkin Kings Head", ArmorSlot.Helmet, Material.PUMPKIN, (byte)0);
}
@Override
public void Enable(Player player)
{
this.ApplyArmor(player);
DisguiseSkeleton disguise = new DisguiseSkeleton(player);
disguise.SetName(player.getName());
disguise.SetSkeletonType(SkeletonType.WITHER);
Manager.Manager.GetDisguise().disguise(disguise);
}
@Override
public void Disable(Player player)
{
this.RemoveArmor(player);
Manager.Manager.GetDisguise().undisguise(player);
}
@EventHandler
public void TOGGLE(PlayerDropItemEvent event)
{
if (!this.IsActive(event.getPlayer()))
Enable(event.getPlayer());
else
Disable(event.getPlayer());
}
}

View File

@ -0,0 +1,66 @@
package mineplex.hub.gadget.types;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.hub.gadget.GadgetManager;
public abstract class ArmorGadget extends Gadget
{
public enum ArmorSlot
{
Helmet,
Chest,
Legs,
Boots
}
private ArmorSlot _slot;
private Material _material;
private byte _data;
public ArmorGadget(GadgetManager manager, String code, String name, ArmorSlot slot, Material mat, byte data)
{
super(manager, code, name);
_slot = slot;
_material = mat;
_data = data;
}
public ArmorSlot GetSlot()
{
return _slot;
}
public void ApplyArmor(Player player)
{
Manager.RemoveArmor(player, _slot);
if (_slot == ArmorSlot.Helmet) player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(_material, _data, 1, F.item(GetName())));
else if (_slot == ArmorSlot.Chest) player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(_material, _data, 1, F.item(GetName())));
else if (_slot == ArmorSlot.Legs) player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(_material, _data, 1, F.item(GetName())));
else if (_slot == ArmorSlot.Boots) player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(_material, _data, 1, F.item(GetName())));
_active.add(player);
UtilPlayer.message(player, F.main("Gadget", "You put on " + F.elem(GetName()) + "."));
}
public void RemoveArmor(Player player)
{
if (_slot == ArmorSlot.Helmet) player.getInventory().setHelmet(null);
else if (_slot == ArmorSlot.Chest) player.getInventory().setChestplate(null);
else if (_slot == ArmorSlot.Legs) player.getInventory().setLeggings(null);
else if (_slot == ArmorSlot.Boots) player.getInventory().setBoots(null);
_active.remove(player);
UtilPlayer.message(player, F.main("Gadget", "You took off " + F.elem(GetName()) + "."));
}
}

View File

@ -0,0 +1,81 @@
package mineplex.hub.gadget.types;
import java.util.HashSet;
import mineplex.hub.gadget.GadgetManager;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
public abstract class Gadget implements Listener
{
public GadgetManager Manager;
private HashSet<Player> _owners = new HashSet<Player>();
protected HashSet<Player> _active = new HashSet<Player>();
private String _code;
private String _name;
public Gadget(GadgetManager manager, String code, String name)
{
Manager = manager;
_code = code;
_name = name;
Manager.GetPlugin().getServer().getPluginManager().registerEvents(this, Manager.GetPlugin());
}
public String GetName()
{
return _name;
}
public String GetCode()
{
return _code;
}
public HashSet<Player> GetOwners()
{
return _owners;
}
public HashSet<Player> GetActive()
{
return _active;
}
public boolean IsActive(Player player)
{
return _active.contains(player);
}
public boolean HasGadget(Player player)
{
return _owners.contains(player);
}
@EventHandler
public void PlayerJoin(PlayerJoinEvent event)
{
if (event.getPlayer().isOp())
{
_owners.add(event.getPlayer());
}
}
@EventHandler
public void PlayerQuit(PlayerQuitEvent event)
{
_owners.remove(event.getPlayer());
Disable(event.getPlayer());
}
public abstract void Enable(Player player);
public abstract void Disable(Player player);
}

View File

@ -0,0 +1,61 @@
package mineplex.hub.gadget.types;
import java.util.HashSet;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.hub.gadget.GadgetManager;
public abstract class ItemGadget extends Gadget
{
private Material _material;
private byte _data;
public ItemGadget(GadgetManager manager, String code, String name, Material mat, byte data)
{
super(manager, code, name);
_material = mat;
_data = data;
}
public HashSet<Player> GetActive()
{
return _active;
}
public boolean IsActive(Player player)
{
return _active.contains(player);
}
public void ApplyItem(Player player)
{
Manager.RemoveItem(player);
player.getInventory().setItem(3, ItemStackFactory.Instance.CreateStack(_material, _data, 1, F.item(GetName())));
_active.add(player);
UtilPlayer.message(player, F.main("Gadget", "You equipped " + F.elem(GetName()) + "."));
}
public void RemoveItem(Player player)
{
player.getInventory().setItem(3, null);
_active.remove(player);
UtilPlayer.message(player, F.main("Gadget", "You unequipped " + F.elem(GetName()) + "."));
}
public boolean IsItem(Player player)
{
return UtilInv.IsItem(player.getItemInHand(), _material, _data);
}
}

View File

@ -23,13 +23,13 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
public class MountManager extends MiniPlugin public class AdminMountManager extends MiniPlugin
{ {
private HubManager Manager; private HubManager Manager;
private HashMap<Player, Horse> _mounts = new HashMap<Player, Horse>(); private HashMap<Player, Horse> _mounts = new HashMap<Player, Horse>();
public MountManager(HubManager manager) public AdminMountManager(HubManager manager)
{ {
super("Mount Manager", manager.GetPlugin()); super("Mount Manager", manager.GetPlugin());
@ -68,22 +68,6 @@ public class MountManager extends MiniPlugin
horse.remove(); horse.remove();
} }
@EventHandler
public void PlayerJoin(PlayerJoinEvent event)
{
if (!Manager.GetClients().Get(event.getPlayer()).GetRank().Has(Rank.OWNER))
return;
final Player fPlayer = event.getPlayer();
Manager.GetPlugin().getServer().getScheduler().scheduleSyncDelayedTask(Manager.GetPlugin(), new Runnable()
{
public void run()
{
Spawn(fPlayer, Variant.HORSE).setPassenger(fPlayer);
}
}, 5);
}
public void HorseCommand(Player caller, String[] args) public void HorseCommand(Player caller, String[] args)
{ {
if (args == null || args.length == 0) if (args == null || args.length == 0)
@ -334,10 +318,4 @@ public class MountManager extends MiniPlugin
if (event.getEntity().getItemStack().getType() == Material.LEASH) if (event.getEntity().getItemStack().getType() == Material.LEASH)
event.setCancelled(true); event.setCancelled(true);
} }
@EventHandler
public void HangingBreakEvent(org.bukkit.event.hanging.HangingBreakEvent event)
{
event.setCancelled(true);
}
} }

View File

@ -0,0 +1,74 @@
package mineplex.hub.modules;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import mineplex.core.MiniPlugin;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilDisplay;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.hub.HubManager;
public class NewsManager extends MiniPlugin
{
public HubManager Manager;
private String[] _news;
private int _newsIndex = 0;
private long _newsTime = System.currentTimeMillis();
private int _mineplexIndex = 0;
public NewsManager(HubManager manager)
{
super("News Manager", manager.GetPlugin());
Manager = manager;
_news = new String[]
{
"New Game: " + C.cGold + C.Bold + "Halloween Horror" + ChatColor.RESET + "! Limited time!",
"New Super Smash Mobs Kit: " + C.cYellow + C.Bold + "Witch" + ChatColor.RESET + "!",
"New Halloween Hub Items! Limited time to unlock!",
"New Hub Mount: " + C.cYellow + C.Bold + "Horse of Horror" + ChatColor.RESET + "!",
"New Hub Gadget: " + C.cYellow + C.Bold + "Pumpkin Kings Head" + ChatColor.RESET + "!",
"New Hub Gadget: " + C.cYellow + C.Bold + "Bat Cannon" + ChatColor.RESET + "!",
};
}
@EventHandler
public void FlightUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTEST)
return;
//Mineplex Color
ChatColor col = ChatColor.RED;
if (_mineplexIndex == 1) col = ChatColor.GOLD;
else if (_mineplexIndex == 2) col = ChatColor.YELLOW;
else if (_mineplexIndex == 3) col = ChatColor.GREEN;
else if (_mineplexIndex == 4) col = ChatColor.AQUA;
else if (_mineplexIndex == 5) col = ChatColor.LIGHT_PURPLE;
_mineplexIndex = (_mineplexIndex + 1)%6;
//News Change
if (UtilTime.elapsed(_newsTime, 4500))
{
_newsIndex = (_newsIndex + 1)%_news.length;
_newsTime = System.currentTimeMillis();
}
//Text
String text = col + C.Bold + "MINEPLEX" + ChatColor.RESET + " - " + _news[_newsIndex];
if (text.length() > 64)
text = text.substring(0, 64);
for (Player player : UtilServer.getPlayers())
UtilDisplay.displayTextBar(Manager.GetPlugin(), player, (double)_newsIndex/(double)(_news.length-1), text);
}
}

View File

@ -141,7 +141,7 @@ public class ParkourManager extends MiniPlugin
player.eject(); player.eject();
player.leaveVehicle(); player.leaveVehicle();
UtilPlayer.message(player, F.main("Parkour", "You can't run parkours while stacked!")); UtilPlayer.message(player, F.main("Parkour", "You can't be a passenger near Parkours!"));
} }
} }
} }

View File

@ -25,8 +25,6 @@ import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilEvent.ActionType;
@ -43,11 +41,13 @@ public class StackerManager extends MiniPlugin implements IThrown
private ProjectileManager _projectileManager; private ProjectileManager _projectileManager;
private HashSet<String> _disabled = new HashSet<String>(); private HashSet<Player> _disabled = new HashSet<Player>();
private HashSet<Entity> _tempStackShift = new HashSet<Entity>(); private HashSet<Entity> _tempStackShift = new HashSet<Entity>();
private HashMap<String, Long> _portalTime = new HashMap<String, Long>(); private HashMap<String, Long> _portalTime = new HashMap<String, Long>();
private int _slot = 7;
public StackerManager(HubManager manager) public StackerManager(HubManager manager)
{ {
super("Stacker", manager.GetPlugin()); super("Stacker", manager.GetPlugin());
@ -58,46 +58,62 @@ public class StackerManager extends MiniPlugin implements IThrown
} }
@EventHandler @EventHandler
public void ToggleInvolvement(PlayerInteractEvent event) public void ToggleVisibility(PlayerInteractEvent event)
{ {
Player player = event.getPlayer(); Player player = event.getPlayer();
if (UtilGear.isMat(player.getItemInHand(), Material.GRILLED_PORK)) if (player.getInventory().getHeldItemSlot() != _slot)
{ return;
_disabled.add(player.getName());
UtilPlayer.message(player, F.main("Stacker", "You are no longer stackable... boring..."));
player.getInventory().setItem(4, ItemStackFactory.Instance.CreateStack(Material.PORK, (byte)0, 1, C.cGreen + "Enable Stacker"));
UtilInv.Update(player);
event.setCancelled(true); event.setCancelled(true);
}
else if (UtilGear.isMat(player.getItemInHand(), Material.PORK)) if (_disabled.remove(player))
{ {
_disabled.remove(player.getName());
UtilPlayer.message(player, F.main("Stacker", "You are back in the stacking games! Squeeeee!")); UtilPlayer.message(player, F.main("Stacker", "You are back in the stacking games! Squeeeee!"));
player.getInventory().setItem(4, ItemStackFactory.Instance.CreateStack(Material.GRILLED_PORK, (byte)0, 1, C.cRed + "Disable Stacker")); player.getInventory().setItem(_slot, ItemStackFactory.Instance.CreateStack(Material.REDSTONE_TORCH_ON, (byte)0, 1,
UtilInv.Update(player); C.cYellow + "Stacker" + C.cWhite + " - " + C.cGreen + "Enabled"));
}
else
{
_disabled.add(player);
UtilPlayer.message(player, F.main("Stacker", "You are no longer stackable... boring!"));
event.setCancelled(true); player.getInventory().setItem(_slot, ItemStackFactory.Instance.CreateStack(Material.REDSTONE_TORCH_OFF, (byte)0, 1,
C.cYellow + "Stacker" + C.cWhite + " - " + C.cRed + "Disabled"));
} }
} }
@EventHandler @EventHandler
public void PlayerJoin(PlayerJoinEvent event) public void PlayerJoin(PlayerJoinEvent event)
{ {
event.getPlayer().getInventory().setItem(4, ItemStackFactory.Instance.CreateStack(Material.GRILLED_PORK, (byte)0, 1, C.cRed + "Disable Stacker")); event.getPlayer().getInventory().setItem(_slot, ItemStackFactory.Instance.CreateStack(Material.REDSTONE_TORCH_ON, (byte)0, 1,
C.cYellow + "Stacker" + C.cWhite + " - " + C.cGreen + "Enabled"));
} }
@EventHandler @EventHandler
public void PlayerQuit(PlayerQuitEvent event) public void PlayerQuit(PlayerQuitEvent event)
{ {
_disabled.remove(event.getPlayer().getName()); _disabled.remove(event.getPlayer());
_tempStackShift.remove(event.getPlayer()); _tempStackShift.remove(event.getPlayer());
_portalTime.remove(event.getPlayer().getName()); _portalTime.remove(event.getPlayer().getName());
} }
public boolean CanStack(LivingEntity ent)
{
if (!(ent instanceof Player))
return true;
if (_disabled.contains(ent))
return false;
if (Manager.GetVisibility().IsHiding(ent))
return false;
return true;
}
@EventHandler @EventHandler
public void GrabEntity(PlayerInteractEntityEvent event) public void GrabEntity(PlayerInteractEntityEvent event)
{ {
@ -116,7 +132,7 @@ public class StackerManager extends MiniPlugin implements IThrown
return; return;
} }
if (_disabled.contains(stacker.getName())) if (!CanStack(stacker))
{ {
UtilPlayer.message(stacker, F.main("Stacker", "You are not playing stacker.")); UtilPlayer.message(stacker, F.main("Stacker", "You are not playing stacker."));
return; return;
@ -141,7 +157,7 @@ public class StackerManager extends MiniPlugin implements IThrown
if (stackee instanceof Player && ((Player)stackee).getGameMode() != GameMode.SURVIVAL) if (stackee instanceof Player && ((Player)stackee).getGameMode() != GameMode.SURVIVAL)
return; return;
if (stackee instanceof Player && _disabled.contains(((Player)stackee).getName())) if (stackee instanceof Player && !CanStack(((Player)stackee)))
{ {
UtilPlayer.message(stacker, F.main("Stacker", F.name(UtilEnt.getName(stackee)) + " is not playing stacker.")); UtilPlayer.message(stacker, F.main("Stacker", F.name(UtilEnt.getName(stackee)) + " is not playing stacker."));
return; return;

View File

@ -0,0 +1,168 @@
package mineplex.hub.modules;
import java.util.HashMap;
import java.util.HashSet;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import mineplex.core.MiniPlugin;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.hub.HubManager;
public class VisibilityManager extends MiniPlugin
{
public HubManager Manager;
private HashSet<Player> _hide = new HashSet<Player>();
private int _slot = 8;
public VisibilityManager(HubManager manager)
{
super("Visibility Manager", manager.GetPlugin());
Manager = manager;
}
@EventHandler
public void PlayerJoin(PlayerJoinEvent event)
{
event.getPlayer().getInventory().setItem(_slot, ItemStackFactory.Instance.CreateStack(Material.EYE_OF_ENDER, (byte)0, 1,
C.cYellow + "Show Players" + C.cWhite + " - " + C.cGreen + "Enabled"));
}
@EventHandler
public void PlayerQuit(PlayerQuitEvent event)
{
_hide.remove(event.getPlayer());
}
@EventHandler
public void ToggleVisibility(PlayerInteractEvent event)
{
Player player = event.getPlayer();
if (player.getInventory().getHeldItemSlot() != _slot)
return;
event.setCancelled(true);
if (_hide.remove(player))
{
UtilPlayer.message(player, F.main("Visibility", "All players are now visible."));
player.getInventory().setItem(_slot, ItemStackFactory.Instance.CreateStack(Material.EYE_OF_ENDER, (byte)0, 1,
C.cYellow + "Show Players" + C.cWhite + " - " + C.cGreen + "Enabled"));
}
else
{
_hide.add(player);
UtilPlayer.message(player, F.main("Visibility", "All players are now invisible."));
player.getInventory().setItem(_slot, ItemStackFactory.Instance.CreateStack(Material.ENDER_PEARL, (byte)0, 1,
C.cYellow + "Show Players" + C.cWhite + " - " + C.cRed + "Disabled"));
}
}
@EventHandler
public void UpdateVisibility(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
for (Player player : UtilServer.getPlayers())
{
for (Player other : UtilServer.getPlayers())
{
if (player.equals(other))
continue;
if (_hide.contains(other) || UtilMath.offset(player.getLocation(), Manager.GetSpawn()) < 4 ||
Manager.GetTutorial().InTutorial(other) || Manager.GetTutorial().InTutorial(player) ||
(player.getOpenInventory().getType() != InventoryType.CRAFTING && player.getOpenInventory().getType() != InventoryType.CREATIVE))
{
((CraftPlayer)other).hidePlayer(player, true, false);
}
else
{
other.showPlayer(player);
}
}
}
}
public boolean IsHiding(LivingEntity ent)
{
return _hide.contains(ent);
}
public HashMap<Player, Integer> _particle = new HashMap<Player, Integer>();
@EventHandler
public void ParticleSwap(PlayerInteractEvent event)
{
Player player = event.getPlayer();
if (!player.isOp())
return;
if (!UtilGear.isMat(player.getItemInHand(), Material.GOLD_NUGGET))
return;
int past = 0;
if (_particle.containsKey(player))
past = _particle.get(player);
if (UtilEvent.isAction(event, ActionType.R))
{
past = (past+1)%ParticleType.values().length;
}
else if (UtilEvent.isAction(event, ActionType.L))
{
past = past - 1;
if (past < 0)
past = ParticleType.values().length - 1;
}
_particle.put(player, past);
player.sendMessage("Particle: " + ParticleType.values()[past]);
}
@EventHandler
public void Particles(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
for (Player player : _particle.keySet())
{
for (Player other : UtilServer.getPlayers())
{
UtilParticle.PlayParticle(other, ParticleType.values()[_particle.get(player)], player.getLocation().add(1, 1, 0), 0f, 0f, 0f, 0, 1);
}
}
}
}

View File

@ -4,21 +4,29 @@ import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import mineplex.core.MiniPlugin; import mineplex.core.MiniPlugin;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilWorld;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.hub.HubManager; import mineplex.hub.HubManager;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Chicken; import org.bukkit.entity.Chicken;
import org.bukkit.entity.Cow; import org.bukkit.entity.Cow;
import org.bukkit.entity.Creature;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Pig; import org.bukkit.entity.Pig;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton;
import org.bukkit.entity.Skeleton.SkeletonType;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
@ -75,12 +83,31 @@ public class WorldManager extends MiniPlugin
else loc.add(0, 0.5, -32); else loc.add(0, 0.5, -32);
//Spawn //Spawn
if (Manager.Mode.equals("Halloween"))
{
Skeleton ent = loc.getWorld().spawn(loc, Skeleton.class);
if (Math.random() > 0.5)
ent.setSkeletonType(SkeletonType.WITHER);
ent.getEquipment().setHelmet(ItemStackFactory.Instance.CreateStack(Material.PUMPKIN));
ent.setCustomName(C.cYellow + "Pumpkin Minion");
_mobs.add(ent);
Manager.GetCondition().Factory().Invisible("Perm", ent, ent, 999999999, 0, false, false, true);
Manager.GetCondition().Factory().Slow("Perm", ent, ent, 999999999, 1, false, false, false, true);
}
else
{
r = Math.random(); r = Math.random();
if (r > 0.66) _mobs.add(loc.getWorld().spawn(loc, Cow.class)); if (r > 0.66) _mobs.add(loc.getWorld().spawn(loc, Cow.class));
else if (r > 0.33) _mobs.add(loc.getWorld().spawn(loc, Pig.class)); else if (r > 0.33) _mobs.add(loc.getWorld().spawn(loc, Pig.class));
else _mobs.add(loc.getWorld().spawn(loc, Chicken.class)); else _mobs.add(loc.getWorld().spawn(loc, Chicken.class));
} }
}
@EventHandler @EventHandler
public void BlockBreak(BlockBreakEvent event) public void BlockBreak(BlockBreakEvent event)
@ -156,11 +183,52 @@ public class WorldManager extends MiniPlugin
@EventHandler @EventHandler
public void UpdateWeather(UpdateEvent event) public void UpdateWeather(UpdateEvent event)
{ {
if (event.getType() != UpdateType.SEC) if (event.getType() != UpdateType.TICK)
return; return;
World world = UtilWorld.getWorld("world"); World world = UtilWorld.getWorld("world");
world.setTime(6000);
if (Manager.Mode.equals("Halloween")) world.setTime(16000);
else world.setTime(6000);
world.setStorm(false); world.setStorm(false);
} }
@EventHandler
public void HalloweenUpdates(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
if (!Manager.Mode.equals("Halloween"))
return;
//Block Lightup
for (Player player : UtilServer.getPlayers())
{
for (Block block : UtilBlock.getInRadius(player.getLocation(), 3d).keySet())
{
if (block.getType() == Material.PUMPKIN)
Manager.GetBlockRestore().Add(block, 91, block.getData(), 2000);
}
}
//Mob Helmets
for (LivingEntity ent : _mobs)
{
if (!(ent instanceof Creature))
continue;
Creature skel = (Creature)ent;
if (skel.getTarget() != null && skel.getTarget() instanceof Player && UtilMath.offset(skel, skel.getTarget()) < 6)
{
skel.getEquipment().setHelmet(ItemStackFactory.Instance.CreateStack(Material.JACK_O_LANTERN));
}
else
{
skel.getEquipment().setHelmet(ItemStackFactory.Instance.CreateStack(Material.PUMPKIN));
}
}
}
} }

View File

@ -0,0 +1,187 @@
package mineplex.hub.mount;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.Horse.Variant;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Player;
import org.bukkit.entity.Horse.Color;
import org.bukkit.entity.Horse.Style;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack;
public class Mount implements Listener
{
private HashSet<Player> _owners = new HashSet<Player>();
private HashMap<Player, Horse> _active = new HashMap<Player, Horse>();
public MountManager Manager;
private String _code;
private String _name;
private Color _color;
private Style _style;
private Variant _variant;
private double _jump;
private Material _armor;
public Mount(MountManager manager, String code, String name, Color color, Style style, Variant variant, double jump, Material armor)
{
Manager = manager;
_code = code;
_name = name;
_color = color;
_style = style;
_variant = variant;
_jump = jump;
_armor = armor;
Manager.GetPlugin().getServer().getPluginManager().registerEvents(this, Manager.GetPlugin());
}
public String GetName()
{
return _name;
}
public String GetCode()
{
return _code;
}
public HashSet<Player> GetOwners()
{
return _owners;
}
public HashMap<Player, Horse> GetActive()
{
return _active;
}
public boolean IsActive(Player player)
{
return _active.containsKey(player);
}
public boolean HasMount(Player player)
{
return _owners.contains(player);
}
@EventHandler
public void PlayerJoin(PlayerJoinEvent event)
{
if (event.getPlayer().isOp())
_owners.add(event.getPlayer());
}
@EventHandler
public void PlayerQuit(PlayerQuitEvent event)
{
_owners.remove(event.getPlayer());
Disable(event.getPlayer());
}
@EventHandler
public void UpdateHorse(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
Iterator<Player> activeIterator = _active.keySet().iterator();
while (activeIterator.hasNext())
{
Player player = activeIterator.next();
Horse horse = _active.get(player);
//Invalid (dead)
if (!horse.isValid())
{
horse.remove();
activeIterator.remove();
continue;
}
//Move
EntityCreature ec = ((CraftCreature)horse).getHandle();
Navigation nav = ec.getNavigation();
Location target = player.getLocation().add(UtilAlg.getTrajectory(player, horse).multiply(2));
if (UtilMath.offset(horse.getLocation(), target) > 12)
{
target = horse.getLocation();
target.add(UtilAlg.getTrajectory(horse, player).multiply(12));
nav.a(target.getX(), target.getY(), target.getZ(), 1.4f);
}
else if (UtilMath.offset(horse, player) > 43)
{
nav.a(target.getX(), target.getY(), target.getZ(), 1.4f);
}
}
}
public void Enable(Player player)
{
//Remove other mounts
Manager.DeregisterAll(player);
Horse horse = player.getWorld().spawn(player.getLocation(), Horse.class);
horse.setAdult();
horse.setAgeLock(true);
horse.setColor(_color);
horse.setStyle(_style);
horse.setVariant(_variant);
horse.setOwner(player);
horse.setMaxDomestication(1);
horse.setJumpStrength(_jump);
horse.getInventory().setSaddle(new ItemStack(Material.SADDLE));
if (_armor != null)
horse.getInventory().setArmor(new ItemStack(_armor));
horse.setCustomName(player.getName() + "'s " + _name);
horse.setCustomNameVisible(true);
//Inform
UtilPlayer.message(player, F.main("Mount", "You spawned " + F.elem(_name) + "."));
//Store
_active.put(player, horse);
}
public void Disable(Player player)
{
Horse horse = _active.remove(player);
if (horse != null)
{
horse.remove();
//Inform
UtilPlayer.message(player, F.main("Mount", "You despawned " + F.elem(_name) + "."));
}
}
}

View File

@ -0,0 +1,70 @@
package mineplex.hub.mount;
import java.util.HashSet;
import org.bukkit.Material;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import mineplex.core.MiniPlugin;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.hub.HubManager;
import mineplex.hub.mount.types.*;
public class MountManager extends MiniPlugin
{
public HubManager Manager;
private HashSet<Mount> _types;
public MountManager(HubManager manager)
{
super("Gadget Manager", manager.GetPlugin());
Manager = manager;
CreateGadgets();
}
private void CreateGadgets()
{
_types = new HashSet<Mount>();
_types.add(new Undead(this));
_types.add(new Mule(this));
}
//Disallows two mounts active
public void DeregisterAll(Player player)
{
for (Mount mount : _types)
mount.Disable(player);
}
@EventHandler
public void HorseInteract(PlayerInteractEntityEvent event)
{
if (!(event.getRightClicked() instanceof Horse))
return;
Player player = event.getPlayer();
Horse horse = (Horse)event.getRightClicked();
if (horse.getOwner() == null || !horse.getOwner().equals(player))
{
UtilPlayer.message(player, F.main("Mount", "This is not your Mount!"));
event.setCancelled(true);
}
}
@EventHandler
public void LeashDropCancel(ItemSpawnEvent event)
{
if (event.getEntity().getItemStack().getType() == Material.LEASH)
event.setCancelled(true);
}
}

View File

@ -0,0 +1,16 @@
package mineplex.hub.mount.types;
import org.bukkit.entity.Horse.Color;
import org.bukkit.entity.Horse.Style;
import org.bukkit.entity.Horse.Variant;
import mineplex.hub.mount.Mount;
import mineplex.hub.mount.MountManager;
public class Mule extends Mount
{
public Mule(MountManager manager)
{
super(manager, "MountMule", "Horse of Horror", Color.BLACK, Style.BLACK_DOTS, Variant.MULE, 1.0, null);
}
}

View File

@ -0,0 +1,68 @@
package mineplex.hub.mount.types;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Horse.Color;
import org.bukkit.entity.Horse.Style;
import org.bukkit.entity.Horse.Variant;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.hub.mount.Mount;
import mineplex.hub.mount.MountManager;
public class Undead extends Mount
{
public Undead(MountManager manager)
{
super(manager, "MountHalloween2013", "Horse of Horror", Color.BLACK, Style.BLACK_DOTS, Variant.SKELETON_HORSE, 0.8, null);
}
@EventHandler
public void Test(PlayerToggleSneakEvent event)
{
if (event.getPlayer().isSneaking())
this.Enable(event.getPlayer());
}
@EventHandler
public void Trail(UpdateEvent event)
{
if (event.getType() == UpdateType.TICK)
{
for (Horse horse : GetActive().values())
for (Player player : UtilServer.getPlayers())
{
try
{
UtilParticle.PlayParticle(player, ParticleType.FLAME, horse.getLocation().add(0, 1, 0), 0.25f, 0.25f, 0.25f, 0, 2);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
if (event.getType() == UpdateType.FAST)
{
for (Horse horse : GetActive().values())
for (Player player : UtilServer.getPlayers())
{
try
{
UtilParticle.PlayParticle(player, ParticleType.LAVA, horse.getLocation().add(0, 1, 0), 0.25f, 0.25f, 0.25f, 0, 1);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}

View File

@ -5,7 +5,7 @@
<classpathentry combineaccessrules="false" kind="src" path="/Nautilus.Core.CraftBukkit"/> <classpathentry combineaccessrules="false" kind="src" path="/Nautilus.Core.CraftBukkit"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Minecraft.Game.Core"/> <classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Minecraft.Game.Core"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core.Common"/> <classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core.Common"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core"/>
<classpathentry kind="var" path="REPO_DIR/Plugins/bin/craftbukkit.jar"/> <classpathentry kind="var" path="REPO_DIR/Plugins/bin/craftbukkit.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

View File

@ -3,8 +3,8 @@
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre7"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre7"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core.Common"/> <classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core.Common"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core"/>
<classpathentry combineaccessrules="false" kind="src" path="/Nautilus.Core.CraftBukkit"/> <classpathentry combineaccessrules="false" kind="src" path="/Nautilus.Core.CraftBukkit"/>
<classpathentry kind="var" path="REPO_DIR/Plugins/Libraries/craftbukkit.jar" sourcepath="/REPO_DIR/GitHubLibraries/CraftBukkit/src"/> <classpathentry kind="var" path="REPO_DIR/Plugins/Libraries/craftbukkit.jar" sourcepath="/REPO_DIR/GitHubLibraries/CraftBukkit/src"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

View File

@ -2,12 +2,12 @@
<classpath> <classpath>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/Nautilus.Core"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core.Common"/> <classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core.Common"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Minecraft.Game.Core"/> <classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Minecraft.Game.Core"/>
<classpathentry combineaccessrules="false" kind="src" path="/Nautilus.Core.CraftBukkit"/> <classpathentry combineaccessrules="false" kind="src" path="/Nautilus.Core.CraftBukkit"/>
<classpathentry combineaccessrules="false" kind="src" path="/Core"/> <classpathentry combineaccessrules="false" kind="src" path="/Core"/>
<classpathentry kind="var" path="REPO_DIR/Plugins/Libraries/craftbukkit.jar" sourcepath="/REPO_DIR/GitHubLibraries/CraftBukkit/src"/> <classpathentry kind="var" path="REPO_DIR/Plugins/Libraries/craftbukkit.jar" sourcepath="/REPO_DIR/GitHubLibraries/CraftBukkit/src"/>
<classpathentry combineaccessrules="false" kind="src" path="/Mineplex.Core"/>
<classpathentry combineaccessrules="false" kind="src" path="/Nautilus.Core"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

View File

@ -14,6 +14,7 @@ import nautilus.game.arcade.game.games.dragonescape.DragonEscape;
import nautilus.game.arcade.game.games.dragonriders.DragonRiders; import nautilus.game.arcade.game.games.dragonriders.DragonRiders;
import nautilus.game.arcade.game.games.dragons.Dragons; import nautilus.game.arcade.game.games.dragons.Dragons;
import nautilus.game.arcade.game.games.evolution.Evolution; import nautilus.game.arcade.game.games.evolution.Evolution;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.hungergames.HungerGames; import nautilus.game.arcade.game.games.hungergames.HungerGames;
import nautilus.game.arcade.game.games.milkcow.MilkCow; import nautilus.game.arcade.game.games.milkcow.MilkCow;
import nautilus.game.arcade.game.games.mineware.MineWare; import nautilus.game.arcade.game.games.mineware.MineWare;
@ -50,6 +51,7 @@ public class GameFactory
else if (gameType == GameType.DragonEscape) return new DragonEscape(_manager); else if (gameType == GameType.DragonEscape) return new DragonEscape(_manager);
else if (gameType == GameType.DragonRiders) return new DragonRiders(_manager); else if (gameType == GameType.DragonRiders) return new DragonRiders(_manager);
else if (gameType == GameType.Evolution) return new Evolution(_manager); else if (gameType == GameType.Evolution) return new Evolution(_manager);
else if (gameType == GameType.Halloween) return new Halloween(_manager);
else if (gameType == GameType.HungerGames) return new HungerGames(_manager); else if (gameType == GameType.HungerGames) return new HungerGames(_manager);
else if (gameType == GameType.MineWare) return new MineWare(_manager); else if (gameType == GameType.MineWare) return new MineWare(_manager);
else if (gameType == GameType.MilkCow) return new MilkCow(_manager); else if (gameType == GameType.MilkCow) return new MilkCow(_manager);

View File

@ -12,6 +12,7 @@ public enum GameType
DragonRiders("Dragon Riders"), DragonRiders("Dragon Riders"),
Dragons("Dragons"), Dragons("Dragons"),
Evolution("Evolution"), Evolution("Evolution"),
Halloween("Halloween Horror"),
Horse("Horseback"), Horse("Horseback"),
HungerGames("Hunger Games"), HungerGames("Hunger Games"),
MineWare("MineWare"), MineWare("MineWare"),

View File

@ -149,7 +149,7 @@ public class DragonEscape extends SoloGame
_dragonData.Move(); _dragonData.Move();
Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(_dragonData.Location, 10d).keySet(), _dragonData.Location); Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(_dragonData.Location, 10d).keySet(), _dragonData.Location, false);
} }
@EventHandler @EventHandler

View File

@ -66,8 +66,6 @@ public class DragonEscapeData
Location.setYaw(180 + UtilAlg.GetYaw(Velocity)); Location.setYaw(180 + UtilAlg.GetYaw(Velocity));
Dragon.teleport(Location); Dragon.teleport(Location);
System.out.println("Flying towards: " + UtilWorld.locToStrClean(Target));
} }
private void Turn() private void Turn()

View File

@ -53,7 +53,7 @@ public class DragonData
{ {
((CraftEnderDragon)Dragon).getHandle().setTargetBlock(GetTarget().getBlockX(), GetTarget().getBlockY(), GetTarget().getBlockZ()); ((CraftEnderDragon)Dragon).getHandle().setTargetBlock(GetTarget().getBlockX(), GetTarget().getBlockY(), GetTarget().getBlockZ());
Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(Dragon.getLocation(), 10d).keySet(), Dragon.getLocation()); Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(Dragon.getLocation(), 10d).keySet(), Dragon.getLocation(), false);
} }
public Location GetTarget() public Location GetTarget()

View File

@ -0,0 +1,222 @@
package nautilus.game.arcade.game.games.halloween;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityBreakDoorEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityTargetEvent;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.SoloGame;
import nautilus.game.arcade.game.games.halloween.creatures.*;
import nautilus.game.arcade.game.games.halloween.kits.*;
import nautilus.game.arcade.game.games.halloween.waves.*;
import nautilus.game.arcade.kit.Kit;
public class Halloween extends SoloGame
{
//Wave Data
private ArrayList<ArrayList<Location>> _spawns;
private ArrayList<WaveBase> _waves;
private int _wave = 0;
private HashSet<CreatureBase> _mobs = new HashSet<CreatureBase>();
private PumpkinKing _king;
public Halloween(ArcadeManager manager)
{
super(manager, GameType.Halloween,
new Kit[]
{
new KitFinn(manager),
new KitRobinHood(manager),
new KitThor(manager),
},
new String[]
{
"Work as a team!",
"Revive fallen allies!",
"Defeat the hordes of monsters"
});
this.DamagePvP = false;
this.WorldTimeSet = 16000;
this.ItemDrop = false;
this.ItemPickup = false;
this.PrepareFreeze = false;
this.HungerSet = 20;
}
@Override
public void ParseData()
{
_spawns = new ArrayList<ArrayList<Location>>();
_spawns.add(WorldData.GetDataLocs("RED"));
_spawns.add(WorldData.GetDataLocs("YELLOW"));
_spawns.add(WorldData.GetDataLocs("GREEN"));
_spawns.add(WorldData.GetDataLocs("BLUE"));
_waves = new ArrayList<WaveBase>();
_waves.add(new Wave1(this));
_waves.add(new Wave2(this));
_waves.add(new Wave3(this));
//_waves.add(new Wave4(this));
//_waves.add(new Wave5(this));
//_waves.add(new Wave6(this));
_waves.add(new WaveBoss(this));
_waves.add(new WaveVictory(this));
}
@EventHandler
public void TeamGen(GameStateChangeEvent event)
{
if (event.GetState() != GameState.Live)
return;
GetTeamList().add(new GameTeam("Halloween Monsters", ChatColor.RED, WorldData.GetDataLocs("RED")));
}
@EventHandler
public void SoundUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.SLOW)
return;
if (!IsLive())
return;
if (Math.random() > 0.85)
return;
for (Player player : UtilServer.getPlayers())
player.playSound(player.getLocation(), Sound.AMBIENCE_CAVE, 3f, 1f);
}
@EventHandler
public void WaveUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
if (!IsLive())
return;
if (_waves.get(_wave).Update(_wave+1))
{
_wave++;
EndCheck();
}
}
public ArrayList<Location> GetSpawnSet(int i)
{
return _spawns.get(i);
}
public Location GetRandomSpawn()
{
ArrayList<Location> locSet = GetSpawnSet(UtilMath.r(_spawns.size()));
return locSet.get(UtilMath.r(locSet.size()));
}
public void AddCreature(CreatureBase mob)
{
_mobs.add(mob);
}
public HashSet<CreatureBase> GetCreatures()
{
return _mobs;
}
@EventHandler
public void CreatureUpdate(UpdateEvent event)
{
if (!IsLive())
return;
//Clean
Iterator<CreatureBase> mobIterator = _mobs.iterator();
while (mobIterator.hasNext())
{
CreatureBase base = mobIterator.next();
if (base.Updater(event))
mobIterator.remove();
}
}
@EventHandler
public void CreatureDamage(CustomDamageEvent event)
{
for (CreatureBase base : _mobs)
base.Damage(event);
}
@EventHandler
public void CreatureTarget(EntityTargetEvent event)
{
for (CreatureBase base : _mobs)
base.Target(event);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void EntityDeath(EntityDeathEvent event)
{
event.getDrops().clear();
}
@Override
public void EndCheck()
{
if (!IsLive())
return;
if (_wave >= _waves.size())
{
SetState(GameState.End);
SetCustomWinLine("You defeated the Pumpkin King!!!");
AnnounceEnd(this.GetTeamList().get(0));
return;
}
if (GetPlayers(true).size() == 0)
{
SetState(GameState.End);
SetCustomWinLine("The Pumpkin King is victorious again!");
AnnounceEnd(this.GetTeamList().get(1));
return;
}
}
@EventHandler
public void Door(EntityBreakDoorEvent event)
{
System.out.println("Door Break");
}
}

View File

@ -0,0 +1,20 @@
package nautilus.game.arcade.game.games.halloween;
import org.bukkit.Location;
public class TargetData
{
public Location Target;
public long Time;
public TargetData(Location target)
{
SetTarget(target);
}
public void SetTarget(Location target)
{
Target = target;
Time = System.currentTimeMillis();
}
}

View File

@ -0,0 +1,106 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilMath;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.util.Vector;
public abstract class CreatureBase<T extends LivingEntity>
{
public Game Host;
private String _name;
private T _ent;
private Location _target;
private long _targetTime;
public CreatureBase(Game game, String name, Class<T> mobClass, Location loc)
{
Host = game;
_name = name;
game.CreatureAllowOverride = true;
_ent = loc.getWorld().spawn(loc, mobClass);
if (_name != null)
{
_ent.setCustomName(name);
_ent.setCustomNameVisible(true);
}
SpawnCustom(_ent);
game.CreatureAllowOverride = false;
}
public abstract void SpawnCustom(T ent);
public String GetName()
{
return _name;
}
public T GetEntity()
{
return _ent;
}
public Location GetTarget()
{
return _target;
}
public void SetTarget(Location loc)
{
_target = loc;
_targetTime = System.currentTimeMillis();
}
public long GetTargetTime()
{
return _targetTime;
}
public Location GetPlayerTarget()
{
if (Host.GetPlayers(true).size() == 0)
{
return Host.GetTeamList().get(0).GetSpawn();
}
else
{
Player target = Host.GetPlayers(true).get(UtilMath.r(Host.GetPlayers(true).size()));
return target.getLocation();
}
}
public Location GetRoamTarget()
{
Vector vec = new Vector(UtilMath.r(80) - 40, 0, UtilMath.r(80) - 40);
return vec.toLocation(Host.GetSpectatorLocation().getWorld());
}
public boolean Updater(UpdateEvent event)
{
if (_ent == null || !_ent.isValid())
return true;
Update(event);
return false;
}
public abstract void Update(UpdateEvent event);
public abstract void Damage(CustomDamageEvent event);
public abstract void Target(EntityTargetEvent event);
}

View File

@ -0,0 +1,87 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.Creeper;
import org.bukkit.event.entity.EntityTargetEvent;
public class MobCreeper extends CreatureBase<Creeper>
{
public MobCreeper(Game game, Location loc)
{
super(game, null, Creeper.class, loc);
}
@Override
public void SpawnCustom(Creeper ent)
{
}
@Override
public void Damage(CustomDamageEvent event)
{
}
@Override
public void Target(EntityTargetEvent event)
{
}
@Override
public void Update(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
return;
//New Target via Distance
if (GetTarget() == null ||
UtilMath.offset(GetEntity().getLocation(), GetTarget()) < 10 ||
UtilMath.offset2d(GetEntity().getLocation(), GetTarget()) < 6 ||
UtilTime.elapsed(GetTargetTime(), 10000))
{
SetTarget(GetRoamTarget());
return;
}
//Untarget
if (GetEntity().getTarget() != null)
{
if (UtilMath.offset2d(GetEntity(), GetEntity().getTarget()) > 10)
{
GetEntity().setTarget(null);
}
}
//Move
else
{
EntityCreature ec = ((CraftCreature)GetEntity()).getHandle();
Navigation nav = ec.getNavigation();
if (UtilMath.offset(GetEntity().getLocation(), GetTarget()) > 12)
{
Location target = GetEntity().getLocation();
target.add(UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget()).multiply(12));
nav.a(target.getX(), target.getY(), target.getZ(), 1f);
}
else
{
nav.a(GetTarget().getX(), GetTarget().getY(), GetTarget().getZ(), 1f);
}
}
}
}

View File

@ -0,0 +1,57 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import org.bukkit.Location;
import org.bukkit.entity.Ghast;
import org.bukkit.event.entity.EntityTargetEvent;
public class MobGhast extends CreatureBase<Ghast>
{
public MobGhast(Game game, Location loc)
{
super(game, null, Ghast.class, loc);
}
@Override
public void SpawnCustom(Ghast ent)
{
ent.teleport(new Location(ent.getWorld(), 0, 50, 0));
}
@Override
public void Damage(CustomDamageEvent event)
{
}
@Override
public void Target(EntityTargetEvent event)
{
}
@Override
public void Update(UpdateEvent event)
{
if (event.getType() == UpdateType.TICK)
Move();
if (event.getType() == UpdateType.FASTER)
Destroy();
}
private void Destroy()
{
Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 8, 0), 6d).keySet(), GetEntity().getLocation().add(0, 8, 0), false);
}
private void Move()
{
}
}

View File

@ -0,0 +1,89 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import org.bukkit.Location;
import org.bukkit.entity.Giant;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.util.Vector;
public class MobGiant extends CreatureBase<Giant>
{
private Location _tpLoc;
public MobGiant(Game game, Location loc)
{
super(game, null, Giant.class, loc);
}
@Override
public void SpawnCustom(Giant ent)
{
_tpLoc = ent.getLocation();
ent.setMaxHealth(120);
ent.setHealth(120);
}
@Override
public void Damage(CustomDamageEvent event)
{
if (event.GetDamageeEntity().equals(GetEntity()))
event.SetKnockback(false);
}
@Override
public void Target(EntityTargetEvent event)
{
}
@Override
public void Update(UpdateEvent event)
{
if (event.getType() == UpdateType.TICK)
Move();
if (event.getType() == UpdateType.FASTER)
Destroy();
}
private void Destroy()
{
Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 8, 0), 6d).keySet(), GetEntity().getLocation().add(0, 8, 0), false);
Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 2, 0), 3.5d).keySet(), GetEntity().getLocation(), true);
Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation().add(0, 0, 0), 3.5d).keySet(), GetEntity().getLocation(), true);
}
private void Move()
{
//New Target via Distance
if (GetTarget() == null ||
UtilMath.offset2d(GetEntity().getLocation(), GetTarget()) < 0.5 ||
UtilTime.elapsed(GetTargetTime(), 20000))
{
SetTarget(GetPlayerTarget());
return;
}
if (_tpLoc == null)
_tpLoc = GetEntity().getLocation();
Vector dir = UtilAlg.getTrajectory2d(GetEntity().getLocation(), GetTarget());
_tpLoc.setPitch(UtilAlg.GetPitch(dir));
_tpLoc.setYaw(UtilAlg.GetYaw(dir));
_tpLoc.add(dir.multiply(0.1));
//Move
GetEntity().teleport(_tpLoc);
}
}

View File

@ -0,0 +1,94 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
import mineplex.core.disguise.disguises.DisguisePigZombie;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.Zombie;
import org.bukkit.event.entity.EntityTargetEvent;
public class MobPigZombie extends CreatureBase<Zombie>
{
public MobPigZombie(Game game, Location loc)
{
super(game, null, Zombie.class, loc);
}
@Override
public void SpawnCustom(Zombie ent)
{
DisguisePigZombie disguise = new DisguisePigZombie(ent);
Host.Manager.GetDisguise().disguise(disguise);
Host.Manager.GetCondition().Factory().Speed("Speed", ent, ent, 99999, 1, false, false, false);
}
@Override
public void Damage(CustomDamageEvent event)
{
}
@Override
public void Target(EntityTargetEvent event)
{
}
@Override
public void Update(UpdateEvent event)
{
if (event.getType() == UpdateType.FAST)
Move();
}
private void Move()
{
//New Target via Distance
if (GetTarget() == null ||
UtilMath.offset(GetEntity().getLocation(), GetTarget()) < 10 ||
UtilMath.offset2d(GetEntity().getLocation(), GetTarget()) < 6 ||
UtilTime.elapsed(GetTargetTime(), 10000))
{
SetTarget(GetRoamTarget());
return;
}
//Untarget
if (GetEntity().getTarget() != null)
{
if (UtilMath.offset2d(GetEntity(), GetEntity().getTarget()) > 10)
{
GetEntity().setTarget(null);
}
}
//Move
else
{
EntityCreature ec = ((CraftCreature)GetEntity()).getHandle();
Navigation nav = ec.getNavigation();
if (UtilMath.offset(GetEntity().getLocation(), GetTarget()) > 12)
{
Location target = GetEntity().getLocation();
target.add(UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget()).multiply(12));
nav.a(target.getX(), target.getY(), target.getZ(), 1.6f);
}
else
{
nav.a(GetTarget().getX(), GetTarget().getY(), GetTarget().getZ(), 1.2f);
}
}
}
}

View File

@ -0,0 +1,89 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.Skeleton;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.inventory.ItemStack;
public class MobSkeletonArcher extends CreatureBase<Skeleton>
{
public MobSkeletonArcher(Game game, Location loc)
{
super(game, null, Skeleton.class, loc);
}
@Override
public void SpawnCustom(Skeleton ent)
{
ent.getEquipment().setItemInHand(new ItemStack(Material.BOW));
}
@Override
public void Damage(CustomDamageEvent event)
{
}
@Override
public void Target(EntityTargetEvent event)
{
}
@Override
public void Update(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
return;
//New Target via Distance
if (GetTarget() == null ||
UtilMath.offset(GetEntity().getLocation(), GetTarget()) < 10 ||
UtilMath.offset2d(GetEntity().getLocation(), GetTarget()) < 6 ||
UtilTime.elapsed(GetTargetTime(), 10000))
{
SetTarget(GetRoamTarget());
return;
}
//Untarget
if (GetEntity().getTarget() != null)
{
if (UtilMath.offset2d(GetEntity(), GetEntity().getTarget()) > 10)
{
GetEntity().setTarget(null);
}
}
//Move
else
{
EntityCreature ec = ((CraftCreature)GetEntity()).getHandle();
Navigation nav = ec.getNavigation();
if (UtilMath.offset(GetEntity().getLocation(), GetTarget()) > 12)
{
Location target = GetEntity().getLocation();
target.add(UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget()).multiply(12));
nav.a(target.getX(), target.getY(), target.getZ(), 1f);
}
else
{
nav.a(GetTarget().getX(), GetTarget().getY(), GetTarget().getZ(), 1f);
}
}
}
}

View File

@ -0,0 +1,89 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.Skeleton;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.inventory.ItemStack;
public class MobSkeletonWarrior extends CreatureBase<Skeleton>
{
public MobSkeletonWarrior(Game game, Location loc)
{
super(game, null, Skeleton.class, loc);
}
@Override
public void SpawnCustom(Skeleton ent)
{
ent.getEquipment().setItemInHand(new ItemStack(Material.WOOD_SWORD));
}
@Override
public void Damage(CustomDamageEvent event)
{
}
@Override
public void Target(EntityTargetEvent event)
{
}
@Override
public void Update(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
//New Target via Distance
if (GetTarget() == null ||
UtilMath.offset(GetEntity().getLocation(), GetTarget()) < 10 ||
UtilMath.offset2d(GetEntity().getLocation(), GetTarget()) < 6 ||
UtilTime.elapsed(GetTargetTime(), 10000))
{
SetTarget(GetRoamTarget());
return;
}
//Untarget
if (GetEntity().getTarget() != null)
{
if (UtilMath.offset2d(GetEntity(), GetEntity().getTarget()) > 10)
{
GetEntity().setTarget(null);
}
}
//Move
else
{
EntityCreature ec = ((CraftCreature)GetEntity()).getHandle();
Navigation nav = ec.getNavigation();
if (UtilMath.offset(GetEntity().getLocation(), GetTarget()) > 12)
{
Location target = GetEntity().getLocation();
target.add(UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget()).multiply(12));
nav.a(target.getX(), target.getY(), target.getZ(), 1f);
}
else
{
nav.a(GetTarget().getX(), GetTarget().getY(), GetTarget().getZ(), 1f);
}
}
}
}

View File

@ -0,0 +1,112 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.CaveSpider;
import org.bukkit.event.entity.EntityTargetEvent;
public class MobSpiderLeaper extends CreatureBase<CaveSpider>
{
public MobSpiderLeaper(Game game, Location loc)
{
super(game, null, CaveSpider.class, loc);
}
@Override
public void SpawnCustom(CaveSpider ent)
{
}
@Override
public void Damage(CustomDamageEvent event)
{
}
@Override
public void Target(EntityTargetEvent event)
{
}
@Override
public void Update(UpdateEvent event)
{
if (event.getType() == UpdateType.FAST)
Move();
if (event.getType() == UpdateType.SEC)
Leap();
}
private void Leap()
{
if (GetTarget() == null)
return;
if (Math.random() > 0.5)
return;
if (!UtilEnt.isGrounded(GetEntity()))
return;
if (GetEntity().getTarget() != null)
UtilAction.velocity(GetEntity(), UtilAlg.getTrajectory2d(GetEntity(), GetEntity().getTarget()), 1, true, 0.6, 0, 10, true);
else
UtilAction.velocity(GetEntity(), UtilAlg.getTrajectory2d(GetEntity().getLocation(), GetTarget()), 1, true, 0.6, 0, 10, true);
}
private void Move()
{
//New Target via Distance
if (GetTarget() == null ||
UtilMath.offset(GetEntity().getLocation(), GetTarget()) < 10 ||
UtilMath.offset2d(GetEntity().getLocation(), GetTarget()) < 6 ||
UtilTime.elapsed(GetTargetTime(), 10000))
{
SetTarget(GetRoamTarget());
return;
}
//Untarget
if (GetEntity().getTarget() != null)
{
if (UtilMath.offset2d(GetEntity(), GetEntity().getTarget()) > 10)
{
GetEntity().setTarget(null);
}
}
//Move
else
{
EntityCreature ec = ((CraftCreature)GetEntity()).getHandle();
Navigation nav = ec.getNavigation();
if (UtilMath.offset(GetEntity().getLocation(), GetTarget()) > 12)
{
Location target = GetEntity().getLocation();
target.add(UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget()).multiply(12));
nav.a(target.getX(), target.getY(), target.getZ(), 1.6f);
}
else
{
nav.a(GetTarget().getX(), GetTarget().getY(), GetTarget().getZ(), 1.2f);
}
}
}
}

View File

@ -0,0 +1,108 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
import mineplex.core.disguise.disguises.DisguiseSpider;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.Zombie;
import org.bukkit.event.entity.EntityTargetEvent;
public class MobSpiderWebber extends CreatureBase<Zombie>
{
public MobSpiderWebber(Game game, Location loc)
{
super(game, null, Zombie.class, loc);
}
@Override
public void SpawnCustom(Zombie ent)
{
DisguiseSpider spider = new DisguiseSpider(ent);
Host.Manager.GetDisguise().disguise(spider);
}
@Override
public void Damage(CustomDamageEvent event)
{
}
@Override
public void Target(EntityTargetEvent event)
{
}
@Override
public void Update(UpdateEvent event)
{
if (event.getType() == UpdateType.FAST)
Move();
if (event.getType() == UpdateType.SEC)
Web();
}
private void Web()
{
if (GetTarget() == null)
return;
if (Math.random() > 0.5)
return;
}
private void Move()
{
//New Target via Distance
if (GetTarget() == null ||
UtilMath.offset(GetEntity().getLocation(), GetTarget()) < 10 ||
UtilMath.offset2d(GetEntity().getLocation(), GetTarget()) < 6 ||
UtilTime.elapsed(GetTargetTime(), 10000))
{
SetTarget(GetRoamTarget());
return;
}
//Untarget
if (GetEntity().getTarget() != null)
{
if (UtilMath.offset2d(GetEntity(), GetEntity().getTarget()) > 10)
{
GetEntity().setTarget(null);
}
}
//Move
else
{
EntityCreature ec = ((CraftCreature)GetEntity()).getHandle();
Navigation nav = ec.getNavigation();
if (UtilMath.offset(GetEntity().getLocation(), GetTarget()) > 12)
{
Location target = GetEntity().getLocation();
target.add(UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget()).multiply(12));
nav.a(target.getX(), target.getY(), target.getZ(), 1.6f);
}
else
{
nav.a(GetTarget().getX(), GetTarget().getY(), GetTarget().getZ(), 1.2f);
}
}
}
}

View File

@ -0,0 +1,106 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.ThrownPotion;
import org.bukkit.entity.Witch;
import org.bukkit.event.entity.EntityTargetEvent;
public class MobWitch extends CreatureBase<Witch>
{
public MobWitch(Game game, Location loc)
{
super(game, null, Witch.class, loc);
}
@Override
public void SpawnCustom(Witch ent)
{
Move();
}
@Override
public void Damage(CustomDamageEvent event)
{
}
@Override
public void Update(UpdateEvent event)
{
if (event.getType() == UpdateType.SEC)
Move();
if (event.getType() == UpdateType.SLOW)
Potion();
}
private void Potion()
{
if (GetEntity().getTarget() == null)
return;
ThrownPotion pot = GetEntity().launchProjectile(ThrownPotion.class);
Host.Announce("THROWN");
UtilAction.velocity(pot, UtilAlg.getTrajectory(GetEntity(), GetEntity().getTarget()), 1.2, false, 0, 0.3, 10, false);
}
private void Move()
{
//New Target via Distance
if (GetTarget() == null ||
UtilMath.offset(GetEntity().getLocation(), GetTarget()) < 10 ||
UtilMath.offset2d(GetEntity().getLocation(), GetTarget()) < 6 ||
UtilTime.elapsed(GetTargetTime(), 10000))
{
SetTarget(GetRoamTarget());
return;
}
//Untarget
if (GetEntity().getTarget() != null)
{
if (UtilMath.offset2d(GetEntity(), GetEntity().getTarget()) > 10)
{
GetEntity().setTarget(null);
}
}
//Move
else
{
EntityCreature ec = ((CraftCreature)GetEntity()).getHandle();
Navigation nav = ec.getNavigation();
if (UtilMath.offset(GetEntity().getLocation(), GetTarget()) > 12)
{
Location target = GetEntity().getLocation();
target.add(UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget()).multiply(12));
nav.a(target.getX(), target.getY(), target.getZ(), 1.6f);
}
else
{
nav.a(GetTarget().getX(), GetTarget().getY(), GetTarget().getZ(), 1.2f);
}
}
}
@Override
public void Target(EntityTargetEvent event)
{
}
}

View File

@ -0,0 +1,90 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.Zombie;
import org.bukkit.event.entity.EntityTargetEvent;
public class MobZombie extends CreatureBase<Zombie>
{
public MobZombie(Game game, Location loc)
{
super(game, null, Zombie.class, loc);
}
@Override
public void SpawnCustom(Zombie ent)
{
Move();
}
@Override
public void Damage(CustomDamageEvent event)
{
}
@Override
public void Update(UpdateEvent event)
{
if (event.getType() == UpdateType.SEC)
Move();
}
private void Move()
{
//New Target via Distance
if (GetTarget() == null ||
UtilMath.offset(GetEntity().getLocation(), GetTarget()) < 10 ||
UtilMath.offset2d(GetEntity().getLocation(), GetTarget()) < 6 ||
UtilTime.elapsed(GetTargetTime(), 10000))
{
SetTarget(GetRoamTarget());
return;
}
//Untarget
if (GetEntity().getTarget() != null)
{
if (UtilMath.offset2d(GetEntity(), GetEntity().getTarget()) > 10)
{
GetEntity().setTarget(null);
}
}
//Move
else
{
EntityCreature ec = ((CraftCreature)GetEntity()).getHandle();
Navigation nav = ec.getNavigation();
if (UtilMath.offset(GetEntity().getLocation(), GetTarget()) > 12)
{
Location target = GetEntity().getLocation();
target.add(UtilAlg.getTrajectory(GetEntity().getLocation(), GetTarget()).multiply(12));
nav.a(target.getX(), target.getY(), target.getZ(), 1.6f);
}
else
{
nav.a(GetTarget().getX(), GetTarget().getY(), GetTarget().getZ(), 1.2f);
}
}
}
@Override
public void Target(EntityTargetEvent event)
{
}
}

View File

@ -0,0 +1,673 @@
package nautilus.game.arcade.game.games.halloween.creatures;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilDisplay;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.Game;
import net.minecraft.server.v1_6_R3.EntityArrow;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftArrow;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.MagmaCube;
import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.entity.Skeleton.SkeletonType;
import org.bukkit.entity.Slime;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
public class PumpkinKing extends CreatureBase<Skeleton>
{
private int _state = 0;
private long _stateTime = System.currentTimeMillis();
private ArrayList<Skeleton> _minions = new ArrayList<Skeleton>();
private int _minionsMax = 12; //12
private HashMap<Entity, Player> _minionTargets = new HashMap<Entity, Player>();
private boolean _minionSpawn = true;
private ArrayList<Slime> _shields = new ArrayList<Slime>();
private int _shieldsMax = 6; //6
private long _shieldSpawn = 0;
private Location _kingLocation;
private Player _kingTarget = null;
private HashSet<Arrow> _arrows = new HashSet<Arrow>();
public PumpkinKing(Game game, Location loc)
{
super(game, null, Skeleton.class, loc);
_kingLocation = loc;
}
@Override
public void SpawnCustom(Skeleton ent)
{
ent.setSkeletonType(SkeletonType.WITHER);
ent.getEquipment().setHelmet(new ItemStack(Material.PUMPKIN));
ent.setMaxHealth(200);
ent.setHealth(ent.getMaxHealth());
ent.getWorld().strikeLightningEffect(ent.getLocation());
ent.getWorld().strikeLightningEffect(ent.getLocation());
ent.getWorld().strikeLightningEffect(ent.getLocation());
}
@Override
public void Damage(CustomDamageEvent event)
{
//Attacked King
if (event.GetDamageeEntity().equals(GetEntity()))
{
if (_shields.size() > 0)
{
event.SetCancelled("Shielded");
UtilPlayer.message(event.GetDamagerPlayer(true), F.main("Boss", "You must destroy " + F.elem("Flame Shields") + " first!"));
}
else if (_minions.size() > 0)
{
event.SetCancelled("Shielded");
UtilPlayer.message(event.GetDamagerPlayer(true), F.main("Boss", "You must destroy " + F.elem("Pumpkin Minions") + " first!"));
}
if (event.GetCause() == DamageCause.ENTITY_EXPLOSION)
event.SetCancelled("Explosion Resist");
event.SetKnockback(false);
}
//Attacked Minion
else if (_minions.contains(event.GetDamageeEntity()))
{
if (_shields.size() > 0)
{
event.SetCancelled("Shielded");
UtilPlayer.message(event.GetDamagerPlayer(true), F.main("Boss", "You must destroy " + F.elem("Flame Shields") + " first!"));
}
else if (event.GetProjectile() != null)
{
event.SetCancelled("Projectile");
UtilPlayer.message(event.GetDamagerPlayer(true), F.main("Boss", "Projectiles cannot harm " + F.elem("Pumpkin Minions") + "!"));
}
}
//Attacked Shield
else if (_shields.contains(event.GetDamageeEntity()))
{
event.SetCancelled("Shield Break");
if (event.GetCause() != DamageCause.PROJECTILE && event.GetCause() != DamageCause.LIGHTNING)
return;
event.GetProjectile().remove();
//Effect
Host.Manager.GetBlood().Effects(event.GetDamageeEntity().getLocation(), 10, 0.2, null, 0f, 0f, Material.FIRE, (byte)0, 10, false);
event.GetDamageeEntity().getWorld().playEffect(event.GetDamageeEntity().getLocation(), Effect.STEP_SOUND, 51);
//Remove
_shields.remove(event.GetDamageeEntity());
event.GetDamageeEntity().remove();
//Health
KingUpdateHealth();
//Shield Spawn Delay
_shieldSpawn = System.currentTimeMillis();
}
}
@Override
public void Update(UpdateEvent event)
{
//Main
if (event.getType() == UpdateType.FASTER)
StateUpdate();
if (event.getType() == UpdateType.FAST)
KingDestroyBlocks();
if (event.getType() == UpdateType.TICK)
KingUpdateHealth();
//Minions
if (event.getType() == UpdateType.TICK)
MinionControl();
if (event.getType() == UpdateType.FASTEST)
MinionArrow();
if (event.getType() == UpdateType.FAST)
MinionSpawn();
//Final
if (event.getType() == UpdateType.FAST)
KingControl();
if (event.getType() == UpdateType.SEC)
KingLeap();
if (event.getType() == UpdateType.SEC)
KingBomb();
if (event.getType() == UpdateType.SLOW)
KingTarget();
//Shield
if (event.getType() == UpdateType.TICK)
ShieldOrbit(false);
if (event.getType() == UpdateType.FAST)
ShieldSpawn();
}
private void KingTarget()
{
if (Math.random() > 0.25)
_kingTarget = GetRandomPlayer();
}
private void KingControl()
{
if (GetState() >= 4)
{
if (_kingTarget == null)
_kingTarget = GetRandomPlayer();
GetEntity().setTarget(_kingTarget);
Location loc = _kingTarget.getLocation();
if (UtilMath.offset(loc, GetEntity().getLocation()) > 16)
loc = GetEntity().getLocation().add(UtilAlg.getTrajectory(GetEntity().getLocation(), loc).multiply(16));
//Move
EntityCreature ec = ((CraftCreature)GetEntity()).getHandle();
Navigation nav = ec.getNavigation();
nav.a(loc.getX(), loc.getY(), loc.getZ(), 1f);
}
else
{
GetEntity().teleport(_kingLocation);
}
}
private void KingLeap()
{
if (GetState() < 4)
return;
if (_kingTarget == null)
return;
if (Math.random() > 0.4)
return;
UtilAction.velocity(GetEntity(), UtilAlg.getTrajectory2d(GetEntity(), _kingTarget), 1.2, false, 0, 0.4, 10, true);
}
private void KingBomb()
{
if (GetState() < 4)
return;
if (_kingTarget == null)
return;
if (Math.random() > 0.4)
return;
TNTPrimed tnt = GetEntity().getWorld().spawn(GetEntity().getEyeLocation().add(GetEntity().getLocation().getDirection()), TNTPrimed.class);
Player target = GetRandomPlayer();
UtilAction.velocity(tnt, UtilAlg.getTrajectory(tnt, target), 1.2, false, 0, 0.4, 10, false);
}
private void KingUpdateHealth()
{
for (Player player : UtilServer.getPlayers())
{
if (_shields.size() > 0)
{
double percent = (double)_shields.size() / (double)_shieldsMax;
UtilDisplay.displayTextBar(Host.Manager.GetPlugin(), player, percent, C.cGold + C.Bold + "The Pumpkin King" + C.cWhite + C.Bold + " - " + C.cYellow + C.Bold + "Flame Shield");
}
else
{
if (_minions.size() > 0)
{
double percent = (double)_minions.size() / (double)_minionsMax;
UtilDisplay.displayTextBar(Host.Manager.GetPlugin(), player, percent, C.cGold + C.Bold + "The Pumpkin King" + C.cWhite + C.Bold + " - " + C.cYellow + C.Bold + "Pumpkin Soldiers");
}
else
{
double percent = GetEntity().getHealth()/GetEntity().getMaxHealth();
UtilDisplay.displayTextBar(Host.Manager.GetPlugin(), player, percent, C.cGold + C.Bold + "The Pumpkin King" + C.cWhite + C.Bold + " - " + C.cYellow + C.Bold + "Final Stage");
}
}
}
}
private void KingDestroyBlocks()
{
Host.Manager.GetExplosion().BlockExplosion(UtilBlock.getInRadius(GetEntity().getLocation(), 7d).keySet(), GetEntity().getLocation(), true);
}
@EventHandler
public void MinionSpawn()
{
Iterator<Skeleton> shieldIterator = _minions.iterator();
while (shieldIterator.hasNext())
{
Skeleton skel = shieldIterator.next();
if (!skel.isValid())
shieldIterator.remove();
}
if (!_minionSpawn)
return;
if (_minions.size() >= _minionsMax)
{
_minionSpawn = false;
return;
}
Host.CreatureAllowOverride = true;
Skeleton skel = GetEntity().getWorld().spawn(GetEntity().getLocation(), Skeleton.class);
Host.Manager.GetCondition().Factory().Invisible("Cloak", skel, skel, 999999, 0, false, false, false);
skel.getEquipment().setHelmet(new ItemStack(Material.PUMPKIN));
skel.getEquipment().setItemInHand(new ItemStack(Material.BOW));
skel.setMaxHealth(50);
skel.setHealth(skel.getMaxHealth());
_minions.add(skel);
Host.CreatureAllowOverride = false;
}
public void MinionControl()
{
for (int i=0 ; i<_minions.size() ; i++)
{
Skeleton minion = _minions.get(i);
//Orbit
if (GetState() == 0 || GetState() == 1 || GetState() == 2)
{
minion.setTarget(null);
double lead = i * ((2d * Math.PI)/_minions.size());
double sizeMod = 2 + (_minions.size() / 12);
//Orbit
double speed = 20d;
double oX = Math.sin(GetEntity().getTicksLived()/speed + lead) * 2 * sizeMod;
double oY = 1;
double oZ = Math.cos(GetEntity().getTicksLived()/speed + lead) * 2 * sizeMod;
Location loc = GetEntity().getLocation().add(oX, oY, oZ);
if (UtilMath.offset(loc, minion.getLocation()) > 16)
loc = minion.getLocation().add(UtilAlg.getTrajectory(minion.getLocation(), GetEntity().getLocation().add(oX, oY, oZ)).multiply(16));
//Move
EntityCreature ec = ((CraftCreature)minion).getHandle();
Navigation nav = ec.getNavigation();
nav.a(loc.getX(), loc.getY(), loc.getZ(), 1.2f);
}
//Attack
else
{
LivingEntity target = _minionTargets.get(minion);
if (target == null)
continue;
minion.setTarget(target);
Location loc = target.getLocation();
if (UtilMath.offset(loc, minion.getLocation()) > 12)
loc = minion.getLocation().add(UtilAlg.getTrajectory(minion.getLocation(), loc).multiply(12));
//Move
EntityCreature ec = ((CraftCreature)minion).getHandle();
Navigation nav = ec.getNavigation();
nav.a(loc.getX(), loc.getY(), loc.getZ(), 1f);
}
}
}
public void MinionArrow()
{
//Clean
Iterator<Arrow> arrowIterator = _arrows.iterator();
while (arrowIterator.hasNext())
{
Arrow arrow = arrowIterator.next();
if (arrow.getTicksLived() > 200 || arrow.isOnGround())
{
if (arrow.isValid() && Math.random() > 0.90)
{
try
{
EntityArrow entityArrow = ((CraftArrow)arrow).getHandle();
Field fieldX = EntityArrow.class.getDeclaredField("d");
Field fieldY = EntityArrow.class.getDeclaredField("e");
Field fieldZ = EntityArrow.class.getDeclaredField("f");
fieldX.setAccessible(true);
fieldY.setAccessible(true);
fieldZ.setAccessible(true);
int x = fieldX.getInt(entityArrow);
int y = fieldY.getInt(entityArrow);
int z = fieldZ.getInt(entityArrow);
Block block = arrow.getWorld().getBlockAt(x, y, z);
if (block.getY() > GetEntity().getLocation().getY())
block.breakNaturally();
}
catch (Exception e)
{
e.printStackTrace();
}
}
arrow.remove();
arrowIterator.remove();
}
}
if (GetState() != 1)
return;
for (int i=0 ; i<_minions.size() ; i++)
{
Skeleton minion = _minions.get(i);
if (!minion.isValid())
continue;
Vector traj = UtilAlg.getTrajectory2d(GetEntity(), minion);
traj.add(new Vector(0,Math.random()*0.2,0));
Arrow arrow = GetEntity().getWorld().spawnArrow(minion.getEyeLocation().add(traj), traj, 2f, 16f);
arrow.setShooter(minion);
_arrows.add(arrow);
}
}
@EventHandler
public void ShieldSpawn()
{
if (GetState() == 3 || GetState() == 4)
return;
Iterator<Slime> shieldIterator = _shields.iterator();
while (shieldIterator.hasNext())
{
Slime slime = shieldIterator.next();
if (!slime.isValid())
shieldIterator.remove();
}
if (!UtilTime.elapsed(_shieldSpawn, 3000))
return;
if (_shields.size() >= _shieldsMax)
return;
//Delay
_shieldSpawn = System.currentTimeMillis();
int toSpawn = 1;
if (_shields.size() == 0)
toSpawn = _shieldsMax;
for (int i=0 ; i<toSpawn ; i++)
{
//Spawn
Host.CreatureAllowOverride = true;
MagmaCube ent = GetEntity().getWorld().spawn(GetEntity().getLocation().add(0, 6, 0), MagmaCube.class);
ent.getEquipment().setHelmet(new ItemStack(Material.PUMPKIN));
_shields.add(ent);
UtilEnt.Vegetate(ent);
ent.setSize(1);
Host.CreatureAllowOverride = false;
//Orbit
ShieldOrbit(false);
}
}
public void ShieldOrbit(boolean teleport)
{
for (int i=0 ; i<_shields.size() ; i++)
{
Slime shield = _shields.get(i);
shield.setFireTicks(10);
double lead = i * ((2d * Math.PI)/_shields.size());
double sizeMod = 2;
//Orbit
double speed = 10d;
double oX = -Math.sin(GetEntity().getTicksLived()/speed + lead) * 2 * sizeMod;
double oY = 6;
double oZ = Math.cos(GetEntity().getTicksLived()/speed + lead) * 2 * sizeMod;
if (teleport)
{
shield.teleport(GetEntity().getLocation().add(oX, oY, oZ));
}
else
{
UtilAction.velocity(shield,
UtilAlg.getTrajectory(shield.getLocation(), GetEntity().getLocation().add(oX, oY, oZ)),
0.4, false, 0, 0.1, 1, true);
}
}
if (_shields.size() > 0)
GetEntity().getWorld().playEffect(GetEntity().getLocation().add(0, 6, 0), Effect.ENDER_SIGNAL, 0);
}
public int GetState()
{
return _state;
}
public void SetState(int state)
{
_state = state;
_stateTime = System.currentTimeMillis();
if (state == 3)
{
//Update Gear
for (int i=0 ; i<_minions.size() ; i++)
{
Skeleton minion = _minions.get(i);
minion.getEquipment().setHelmet(new ItemStack(Material.JACK_O_LANTERN));
minion.getEquipment().setItemInHand(new ItemStack(Material.WOOD_AXE));
//Speed
Host.Manager.GetCondition().Factory().Speed("Minion Speed", minion, minion, 15, 0, false, false, false);
//Sound
GetEntity().getWorld().playSound(GetEntity().getLocation(), Sound.WITHER_SPAWN, 10f, 1.5f);
//Target
_minionTargets.put(minion, GetRandomPlayer());
}
}
}
public void StateUpdate()
{
if (GetEntity() == null)
return;
if (GetState() == 0)
{
if (UtilTime.elapsed(_stateTime, 10000))
{
double r = Math.random();
SetState(1);
}
}
//Outward Arrows
else if (GetState() == 1)
{
if (UtilTime.elapsed(_stateTime, 5000))
{
SetState(0);
}
}
//Upwards Arrows
else if (GetState() == 2)
{
if (UtilTime.elapsed(_stateTime, 5000))
{
SetState(0);
}
}
else if (GetState() == 3)
{
if (UtilTime.elapsed(_stateTime, 15000))
{
SetState(0);
//Update Minions
for (int i=0 ; i<_minions.size() ; i++)
{
Skeleton minion = _minions.get(i);
minion.setTarget(null);
minion.getEquipment().setHelmet(new ItemStack(Material.PUMPKIN));
minion.getEquipment().setItemInHand(new ItemStack(Material.BOW));
}
ShieldSpawn();
_minionTargets.clear();
}
}
//Skeleton Scatter
if (GetState() != 3 && UtilTime.elapsed(_stateTime, 2000))
{
if (_shields.size() == 0 && _minions.size() > 0)
{
SetState(3);
}
}
//Final Stage
if (GetState() != 4 && UtilTime.elapsed(_stateTime, 2000))
{
if (_shields.size() == 0 && _minions.size() == 0)
{
SetState(4);
//Sound
GetEntity().getWorld().playSound(GetEntity().getLocation(), Sound.WITHER_SPAWN, 10f, 1.5f);
GetEntity().getWorld().playSound(GetEntity().getLocation(), Sound.ZOMBIE_PIG_ANGRY, 10f, 0.5f);
//Speed
Host.Manager.GetCondition().Factory().Speed("King Speed", GetEntity(), GetEntity(), 9999, 1, false, false, false);
//Equip
GetEntity().getEquipment().setItemInHand(new ItemStack(Material.IRON_SWORD));
}
}
}
public void Target(EntityTargetEvent event)
{
if (event.getEntity().equals(GetEntity()))
{
if (GetState() != 4 || _kingTarget == null || !_kingTarget.equals(event.getTarget()))
{
event.setCancelled(true);
}
}
if (_minions.contains(event.getEntity()))
{
if (GetState() != 3)
{
event.setCancelled(true);
}
else
{
if (!_minionTargets.containsKey(event.getEntity()))
{
event.setCancelled(true);
}
else
{
Player player = _minionTargets.get(event.getEntity());
if (!player.equals(event.getTarget()))
event.setCancelled(true);
if (!Host.IsAlive(player))
_minionTargets.put(event.getEntity(), GetRandomPlayer());
}
}
}
}
public Player GetRandomPlayer()
{
if (Host.GetPlayers(true).isEmpty())
return null;
return Host.GetPlayers(true).get(UtilMath.r(Host.GetPlayers(true).size()));
}
}

View File

@ -0,0 +1,88 @@
package nautilus.game.arcade.game.games.halloween.kits;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.SmashKit;
import nautilus.game.arcade.kit.perks.*;
public class KitFinn extends SmashKit
{
public KitFinn(ArcadeManager manager)
{
super(manager, "Finn the Human", KitAvailability.Free,
new String[]
{
"Jake is hiding in his pocket.",
"",
},
new Perk[]
{
new PerkInfernoFinn(),
new PerkBlizzardFinn(),
new PerkFletcher(4, 4, false),
},
EntityType.ZOMBIE, new ItemStack(Material.GOLD_SWORD));
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD, (byte)0, 1, "Flaming Sword"));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_SWORD, (byte)0, 1, "Icy Sword"));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BOW, (byte)0, 1, "Bow"));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.JACK_O_LANTERN));
player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.IRON_CHESTPLATE));
player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.IRON_LEGGINGS));
player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.IRON_BOOTS));
}
@Override
public void SpawnCustom(LivingEntity ent)
{
ent.getEquipment().setHelmet(new ItemStack(Material.JACK_O_LANTERN));
ent.getEquipment().setChestplate(new ItemStack(Material.IRON_CHESTPLATE));
ent.getEquipment().setLeggings(new ItemStack(Material.IRON_LEGGINGS));
ent.getEquipment().setBoots(new ItemStack(Material.IRON_BOOTS));
}
@EventHandler
public void FireItemResist(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
if (Manager.GetGame() == null)
return;
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!HasKit(player))
continue;
Manager.GetCondition().Factory().FireItemImmunity(GetName(), player, player, 1.9, false);
}
}
}

View File

@ -0,0 +1,89 @@
package nautilus.game.arcade.game.games.halloween.kits;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.SmashKit;
import nautilus.game.arcade.kit.perks.*;
public class KitRobinHood extends SmashKit
{
public KitRobinHood(ArcadeManager manager)
{
super(manager, "Robin Hood", KitAvailability.Free,
new String[]
{
"Trick or treating from the rich...",
"",
},
new Perk[]
{
new PerkSpeed(1),
new PerkRegeneration(0),
new PerkFletcher(1, 4, false),
new PerkBarrage(4, 250, false),
new PerkQuickshotRobinHood()
},
EntityType.ZOMBIE, new ItemStack(Material.BOW));
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, "Sword"));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BOW, (byte)0, 1, "Bow"));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.JACK_O_LANTERN));
player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE));
player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS));
player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS));
}
@Override
public void SpawnCustom(LivingEntity ent)
{
ent.getEquipment().setHelmet(new ItemStack(Material.JACK_O_LANTERN));
ent.getEquipment().setChestplate(new ItemStack(Material.CHAINMAIL_CHESTPLATE));
ent.getEquipment().setLeggings(new ItemStack(Material.CHAINMAIL_LEGGINGS));
ent.getEquipment().setBoots(new ItemStack(Material.CHAINMAIL_BOOTS));
}
@EventHandler
public void FireItemResist(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
if (Manager.GetGame() == null)
return;
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!HasKit(player))
continue;
Manager.GetCondition().Factory().FireItemImmunity(GetName(), player, player, 1.9, false);
}
}
}

View File

@ -0,0 +1,88 @@
package nautilus.game.arcade.game.games.halloween.kits;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.SmashKit;
import nautilus.game.arcade.kit.perks.*;
public class KitThor extends SmashKit
{
public KitThor(ArcadeManager manager)
{
super(manager, "Thor Costume", KitAvailability.Free,
new String[]
{
"Dress up as Thor, and smash those monsters!",
"",
},
new Perk[]
{
new PerkKnockbackAttack(2),
new PerkFletcher(4, 4, false),
new PerkSeismicHammer(),
new PerkHammerThrow(),
},
EntityType.ZOMBIE, new ItemStack(Material.IRON_SWORD));
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, "Seismic Hammer"));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_AXE, (byte)0, 1, "Thor Hammer"));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BOW, (byte)0, 1, "Bow"));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.JACK_O_LANTERN));
player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_CHESTPLATE));
player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_LEGGINGS));
player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_BOOTS));
}
@Override
public void SpawnCustom(LivingEntity ent)
{
ent.getEquipment().setHelmet(new ItemStack(Material.JACK_O_LANTERN));
ent.getEquipment().setChestplate(new ItemStack(Material.DIAMOND_CHESTPLATE));
ent.getEquipment().setLeggings(new ItemStack(Material.DIAMOND_LEGGINGS));
ent.getEquipment().setBoots(new ItemStack(Material.DIAMOND_BOOTS));
}
@EventHandler
public void FireItemResist(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
if (Manager.GetGame() == null)
return;
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!HasKit(player))
continue;
Manager.GetCondition().Factory().FireItemImmunity(GetName(), player, player, 1.9, false);
}
}
}

View File

@ -0,0 +1,31 @@
package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper;
import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
public class Wave1 extends WaveBase
{
public Wave1(Halloween host)
{
super(host, "Zombies and Skeletons and Creepers! OH MY!", 60000, host.GetSpawnSet(1));
}
@Override
public void Spawn(int tick)
{
if (UtilTime.elapsed(_start, 20000))
return;
if (tick % 10 == 0)
Host.AddCreature(new MobZombie(Host, GetSpawn()));
if (tick % 20 == 0)
Host.AddCreature(new MobSkeletonArcher(Host, GetSpawn()));
if (tick % 30 == 0)
Host.AddCreature(new MobCreeper(Host, GetSpawn()));
}
}

View File

@ -0,0 +1,35 @@
package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper;
import nautilus.game.arcade.game.games.halloween.creatures.MobGiant;
import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
public class Wave2 extends WaveBase
{
public Wave2(Halloween host)
{
super(host, "A GIANT!? Better kill that guy fast!", 60000, host.GetSpawnSet(0));
}
@Override
public void Spawn(int tick)
{
if (UtilTime.elapsed(_start, 20000))
return;
if (tick == 0)
Host.AddCreature(new MobGiant(Host, GetSpawn()));
if (tick % 10 == 0)
Host.AddCreature(new MobZombie(Host, GetSpawn()));
if (tick % 20 == 0)
Host.AddCreature(new MobSkeletonArcher(Host, GetSpawn()));
if (tick % 30 == 0)
Host.AddCreature(new MobCreeper(Host, GetSpawn()));
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobSpiderLeaper;
import nautilus.game.arcade.game.games.halloween.creatures.MobSpiderWebber;
public class Wave3 extends WaveBase
{
public Wave3(Halloween host)
{
super(host, "Spiders Spiders Spiders!", 60000, host.GetSpawnSet(2));
}
@Override
public void Spawn(int tick)
{
if (UtilTime.elapsed(_start, 20000))
return;
if (tick % 10 == 0)
Host.AddCreature(new MobSpiderWebber(Host, GetSpawn()));
if (tick % 10 == 0)
Host.AddCreature(new MobSpiderLeaper(Host, GetSpawn()));
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobGhast;
import nautilus.game.arcade.game.games.halloween.creatures.MobPigZombie;
public class Wave4 extends WaveBase
{
public Wave4(Halloween host)
{
super(host, "Ghasts (and friends)", 60000, host.GetSpawnSet(3));
}
@Override
public void Spawn(int tick)
{
if (UtilTime.elapsed(_start, 20000))
return;
if (tick % 100 == 0)
Host.AddCreature(new MobGhast(Host, GetSpawn().clone().add(0, 30, 0)));
if (tick % 20 == 0)
Host.AddCreature(new MobPigZombie(Host, GetSpawn()));
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper;
import nautilus.game.arcade.game.games.halloween.creatures.MobGiant;
import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher;
import nautilus.game.arcade.game.games.halloween.creatures.MobWitch;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
public class Wave5 extends WaveBase
{
public Wave5(Halloween host)
{
super(host, "Witches and Wolves", 60000, host.GetSpawnSet(3));
}
@Override
public void Spawn(int tick)
{
if (UtilTime.elapsed(_start, 20000))
return;
if (tick == 0)
Host.AddCreature(new MobWitch(Host, GetSpawn()));
}
}

View File

@ -0,0 +1,35 @@
package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper;
import nautilus.game.arcade.game.games.halloween.creatures.MobGiant;
import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
public class Wave6 extends WaveBase
{
public Wave6(Halloween host)
{
super(host, "Fiery Night", 60000, host.GetSpawnSet(3));
}
@Override
public void Spawn(int tick)
{
if (UtilTime.elapsed(_start, 20000))
return;
if (tick == 0)
Host.AddCreature(new MobGiant(Host, GetSpawn()));
if (tick % 10 == 0)
Host.AddCreature(new MobZombie(Host, GetSpawn()));
if (tick % 20 == 0)
Host.AddCreature(new MobSkeletonArcher(Host, GetSpawn()));
if (tick % 30 == 0)
Host.AddCreature(new MobCreeper(Host, GetSpawn()));
}
}

View File

@ -0,0 +1,35 @@
package nautilus.game.arcade.game.games.halloween.waves;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobCreeper;
import nautilus.game.arcade.game.games.halloween.creatures.MobGiant;
import nautilus.game.arcade.game.games.halloween.creatures.MobSkeletonArcher;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
public class Wave7 extends WaveBase
{
public Wave7(Halloween host)
{
super(host, "Giants, Zombies, Witches and Ghasts...", 60000, host.GetSpawnSet(0));
}
@Override
public void Spawn(int tick)
{
if (UtilTime.elapsed(_start, 20000))
return;
if (tick == 0)
Host.AddCreature(new MobGiant(Host, GetSpawn()));
if (tick % 10 == 0)
Host.AddCreature(new MobZombie(Host, GetSpawn()));
if (tick % 20 == 0)
Host.AddCreature(new MobSkeletonArcher(Host, GetSpawn()));
if (tick % 30 == 0)
Host.AddCreature(new MobCreeper(Host, GetSpawn()));
}
}

View File

@ -0,0 +1,118 @@
package nautilus.game.arcade.game.games.halloween.waves;
import java.util.ArrayList;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import nautilus.game.arcade.game.games.halloween.Halloween;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
public abstract class WaveBase
{
protected Halloween Host;
protected String _name;
protected long _start;
protected long _duration;
private int _tick = 0;
protected ArrayList<Location> _spawns;
public WaveBase(Halloween host, String name, long duration, ArrayList<Location> spawns)
{
Host = host;
_name = name;
_start = System.currentTimeMillis();
_duration = duration;
_spawns = spawns;
}
public Location GetSpawn()
{
return _spawns.get(UtilMath.r(_spawns.size()));
}
public boolean Update(int wave)
{
//End
if (_tick > 0 && UtilTime.elapsed(_start, _duration) && CanEnd())
{
System.out.println("Wave " + wave + " has ended.");
return true;
}
//Start
if (_tick == 0)
_start = System.currentTimeMillis();
//Announce
if (_tick == 0)
{
System.out.println("Wave " + wave + " has started.");
Host.Announce(C.cRed + C.Bold + "Wave " + wave + ": " + C.cYellow + _name);
}
//Display
for (Player player : UtilServer.getPlayers())
player.setExp(Math.min(0.999f, (float)(_duration - (System.currentTimeMillis() - _start)) / (float)_duration));
//Spawn Beacons
if (_tick == 0)
SpawnBeacons(_spawns);
//Spawn
Host.CreatureAllowOverride = true;
Spawn(_tick++);
Host.CreatureAllowOverride = false;
return false;
}
public void SpawnBeacons(ArrayList<Location> locs)
{
//Average Location
Vector total = new Vector(0,0,0);
for (Location loc : locs)
total.add(loc.toVector());
total.multiply((double)1/(double)locs.size());
//Beacon
Block block = total.toLocation(locs.get(0).getWorld()).getBlock().getRelative(BlockFace.DOWN);
Host.Manager.GetBlockRestore().Add(block, 138, (byte)0, _duration);
for (int x=-1 ; x<=1 ; x++)
for (int z=-1 ; z<=1 ; z++)
Host.Manager.GetBlockRestore().Add(block.getRelative(x, -1, z), 42, (byte)0, _duration);
//Lightning
block.getWorld().strikeLightningEffect(block.getLocation());
//Clear Laser
while (block.getY() < 250)
{
block = block.getRelative(BlockFace.UP);
if (block.getType() != Material.AIR)
Host.Manager.GetBlockRestore().Add(block, 0, (byte)0, _duration);
}
}
public boolean CanEnd()
{
return true;
}
public abstract void Spawn(int tick);
}

View File

@ -0,0 +1,35 @@
package nautilus.game.arcade.game.games.halloween.waves;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.MobZombie;
import nautilus.game.arcade.game.games.halloween.creatures.PumpkinKing;
public class WaveBoss extends WaveBase
{
private PumpkinKing _king;
public WaveBoss(Halloween host)
{
super(host, "The Pumpkin King", 0, host.GetSpawnSet(3));
}
@Override
public void Spawn(int tick)
{
if (tick == 0)
{
_king = new PumpkinKing(Host, Host.WorldData.GetDataLocs("BLACK").get(0));
Host.AddCreature(_king);
}
if (Host.GetCreatures().size() < 30)
if (tick % 20 == 0)
Host.AddCreature(new MobZombie(Host, Host.GetRandomSpawn()));
}
@Override
public boolean CanEnd()
{
return _king == null || !_king.GetEntity().isValid();
}
}

View File

@ -0,0 +1,46 @@
package nautilus.game.arcade.game.games.halloween.waves;
import org.bukkit.Effect;
import org.bukkit.entity.Player;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.halloween.creatures.CreatureBase;
public class WaveVictory extends WaveBase
{
public WaveVictory(Halloween host)
{
super(host, "Celebration!", 0, host.GetSpawnSet(3));
}
@Override
public void Spawn(int tick)
{
if (UtilTime.elapsed(_start, 20000))
return;
//Play
if (tick == 0)
for (Player player : UtilServer.getPlayers())
player.playEffect(Host.WorldData.GetDataLocs("BLACK").get(0), Effect.RECORD_PLAY, 2259);
//Mobs
for (CreatureBase mob : Host.GetCreatures())
mob.GetEntity().damage(1);
//Time
if (Host.WorldTimeSet != 6000)
{
Host.WorldTimeSet = (Host.WorldTimeSet + 50)%24000;
Host.WorldData.World.setTime(Host.WorldTimeSet);
}
}
@Override
public boolean CanEnd()
{
return Host.WorldTimeSet == 6000;
}
}

View File

@ -58,7 +58,7 @@ public class KitGolem extends SmashKit
new String[] new String[]
{ {
ChatColor.RESET + "Take a mighty leap into the air, then", ChatColor.RESET + "Take a mighty leap into the air, then",
ChatColor.RESET + "slam back into the gruond with huge force.", ChatColor.RESET + "slam back into the ground with huge force.",
ChatColor.RESET + "Nearby opponents take damage and knockback.", ChatColor.RESET + "Nearby opponents take damage and knockback.",
})); }));

View File

@ -0,0 +1,154 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import java.util.WeakHashMap;
import org.bukkit.Sound;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Snowball;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkBlizzardFinn extends Perk
{
private HashMap<Player, Long> _active = new HashMap<Player, Long>();
private WeakHashMap<Projectile, Player> _snowball = new WeakHashMap<Projectile, Player>();
public PerkBlizzardFinn()
{
super("Blizzard", new String[]
{
C.cYellow + "Block" + C.cGray + " with Diamond Sword to use " + C.cGreen + "Blizzard"
});
}
@EventHandler
public void Activate(PlayerInteractEvent event)
{
if (event.isCancelled())
return;
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
return;
if (UtilBlock.usable(event.getClickedBlock()))
return;
if (!event.getPlayer().getItemInHand().getType().toString().contains("DIAMOND_SWORD"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!Recharge.Instance.use(player, GetName(), 4000, true))
return;
_active.put(player, System.currentTimeMillis());
}
@EventHandler
public void Update(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
for (Player player : UtilServer.getPlayers())
{
if (!_active.containsKey(player))
continue;
if (!player.isBlocking())
{
_active.remove(player);
continue;
}
if (UtilTime.elapsed(_active.get(player), 1500))
{
_active.remove(player);
continue;
}
//Snowball
for (int i=0 ; i<4 ; i++)
{
Snowball snow = player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), Snowball.class);
double x = 0.1 - (UtilMath.r(20)/100d);
double y = UtilMath.r(20)/100d;
double z = 0.1 - (UtilMath.r(20)/100d);
snow.setVelocity(player.getLocation().getDirection().add(new Vector(x,y,z)).multiply(2));
_snowball.put(snow, player);
}
//Effect
player.getWorld().playSound(player.getLocation(), Sound.STEP_SNOW, 0.1f, 0.5f);
}
}
@EventHandler(priority = EventPriority.LOW)
public void Snowball(CustomDamageEvent event)
{
if (event.GetCause() != DamageCause.PROJECTILE)
return;
Projectile proj = event.GetProjectile();
if (proj == null) return;
if (!(proj instanceof Snowball))
return;
if (!_snowball.containsKey(proj))
return;
LivingEntity damagee = event.GetDamageeEntity();
if (damagee == null) return;
event.SetCancelled("Blizzard");
if (damagee instanceof Player)
return;
damagee.setVelocity(proj.getVelocity().multiply(0.15).add(new Vector(0, 0.15, 0)));
//Damage Event
if (damagee instanceof Player)
if (Recharge.Instance.use((Player)damagee, GetName(), 250, false))
Manager.GetDamage().NewDamageEvent(damagee, event.GetDamagerEntity(true), null,
DamageCause.PROJECTILE, 1.5, false, true, false,
UtilEnt.getName(event.GetDamagerEntity(true)), GetName());
}
@EventHandler
public void SnowballForm(ProjectileHitEvent event)
{
if (!(event.getEntity() instanceof Snowball))
return;
if (_snowball.remove(event.getEntity()) == null)
return;
Manager.GetBlockRestore().Snow(event.getEntity().getLocation().getBlock(), (byte)1, (byte)7, 2000, 250, 0);
}
}

View File

@ -0,0 +1,170 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import java.util.Iterator;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkHammerThrow extends Perk implements IThrown
{
private HashMap<Item, Player> _thrown = new HashMap<Item, Player>();
public PerkHammerThrow()
{
super("Hammer Throw", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Diamond Axe to " + C.cGreen + "Hammer Throw"
});
}
@EventHandler
public void Skill(PlayerInteractEvent event)
{
if (event.isCancelled())
return;
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
return;
if (UtilBlock.usable(event.getClickedBlock()))
return;
if (event.getPlayer().getItemInHand() == null)
return;
if (!event.getPlayer().getItemInHand().getType().toString().contains("DIAMOND_AXE"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
player.setItemInHand(null);
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
//Throw
Item item = player.getWorld().dropItem(player.getEyeLocation(), new ItemStack(Material.DIAMOND_AXE));
UtilAction.velocity(item, player.getLocation().getDirection(), 1.2, false, 0, 0.2, 10, true);
//Projectile
Manager.GetProjectile().AddThrow(item, player, this, -1, true, true, true, false, 2.5d);
//Store
_thrown.put(item, player);
}
@EventHandler
public void Pickup(PlayerPickupItemEvent event)
{
if (!_thrown.containsKey(event.getItem()))
return;
event.setCancelled(true);
event.getItem().remove();
Player player = _thrown.remove(event.getItem());
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_AXE, (byte)0, 1, "Thor Hammer"));
}
@EventHandler
public void Timeout(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
Iterator<Item> itemIterator = _thrown.keySet().iterator();
while (itemIterator.hasNext())
{
Item item = itemIterator.next();
if (item.getTicksLived() > 200)
{
_thrown.get(item).getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_AXE, (byte)0, 1, "Thor Hammer"));
item.remove();
itemIterator.remove();
}
}
}
@Override
public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
Rebound(data.GetThrower(), data.GetThrown());
if (target == null)
return;
//Damage Event
Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null,
DamageCause.LIGHTNING, 12, true, true, false,
UtilEnt.getName(data.GetThrower()), GetName());
}
@Override
public void Idle(ProjectileUser data)
{
Rebound(data.GetThrower(), data.GetThrown());
}
@Override
public void Expire(ProjectileUser data)
{
Rebound(data.GetThrower(), data.GetThrown());
}
public void Rebound(LivingEntity player, Entity ent)
{
ent.getWorld().playSound(ent.getLocation(), Sound.ZOMBIE_METAL, 0.6f, 0.5f);
double mult = 0.5 + (0.6 * (UtilMath.offset(player.getLocation(), ent.getLocation())/16d));
//Velocity
ent.setVelocity(player.getLocation().toVector().subtract(ent.getLocation().toVector()).normalize().add(new Vector(0, 0.4, 0)).multiply(mult));
//Ticks
if (ent instanceof Item)
((Item)ent).setPickupDelay(5);
}
@EventHandler
public void Knockback(CustomDamageEvent event)
{
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
return;
event.AddKnockback(GetName(), 2);
}
}

View File

@ -0,0 +1,119 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkInfernoFinn extends Perk
{
private HashMap<Player, Long> _active = new HashMap<Player, Long>();
public PerkInfernoFinn()
{
super("Inferno", new String[]
{
C.cYellow + "Block" + C.cGray + " with Gold Sword to use " + C.cGreen + "Inferno"
});
}
@EventHandler
public void Activate(PlayerInteractEvent event)
{
if (event.isCancelled())
return;
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
return;
if (UtilBlock.usable(event.getClickedBlock()))
return;
if (!event.getPlayer().getItemInHand().getType().toString().contains("GOLD_SWORD"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!Recharge.Instance.use(player, "Inferno", 4000, true))
return;
_active.put(player, System.currentTimeMillis());
}
@EventHandler
public void Update(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
for (Player cur : UtilServer.getPlayers())
{
if (!_active.containsKey(cur))
continue;
if (!cur.isBlocking())
{
_active.remove(cur);
continue;
}
if (UtilTime.elapsed(_active.get(cur), 1500))
{
_active.remove(cur);
continue;
}
//Fire
Item fire = cur.getWorld().dropItem(cur.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.FIRE));
Manager.GetFire().Add(fire, cur, 0.7, 0, 0.5, 2, "Inferno");
fire.teleport(cur.getEyeLocation());
double x = 0.07 - (UtilMath.r(14)/100d);
double y = 0.07 - (UtilMath.r(14)/100d);
double z = 0.07 - (UtilMath.r(14)/100d);
fire.setVelocity(cur.getLocation().getDirection().add(new Vector(x,y,z)).multiply(1.6));
//Effect
cur.getWorld().playSound(cur.getLocation(), Sound.GHAST_FIREBALL, 0.1f, 1f);
}
}
@EventHandler
public void Refresh(UpdateEvent event)
{
if (event.getType() != UpdateType.SLOWER)
return;
for (Player player : UtilServer.getPlayers())
{
if (_active.containsKey(player))
continue;
if (!Kit.HasKit(player))
continue;
player.getInventory().remove(Material.GOLD_SWORD);
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD, (byte)0, 1, "Flaming Sword"));
}
}
}

View File

@ -0,0 +1,44 @@
package nautilus.game.arcade.kit.perks;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import mineplex.core.common.util.C;
import nautilus.game.arcade.kit.Perk;
public class PerkKnockbackAttack extends Perk
{
private double _power;
public PerkKnockbackAttack(double power)
{
super("Melee Knockback", new String[]
{
C.cGray + "Melee attacks deal " + (int)(power*100) + "% Knockback.",
});
_power = power;
}
@EventHandler(priority = EventPriority.HIGH)
public void Knockback(CustomDamageEvent event)
{
if (event.GetCause() != DamageCause.ENTITY_ATTACK)
return;
Player damager = event.GetDamagerPlayer(true);
if (damager == null) return;
if (!Kit.HasKit(damager))
return;
if (!Manager.IsAlive(damager))
return;
event.AddKnockback("Knockback Melee", _power);
}
}

View File

@ -22,7 +22,7 @@ public class PerkQuickshot extends Perk
public PerkQuickshot(String name, double power, long recharge) public PerkQuickshot(String name, double power, long recharge)
{ {
super("Leaper", new String[] super("Quickshot", new String[]
{ {
C.cYellow + "Left-Click" + C.cGray + " with Bow to " + C.cGreen + name C.cYellow + "Left-Click" + C.cGray + " with Bow to " + C.cGreen + name
}); });

View File

@ -0,0 +1,56 @@
package nautilus.game.arcade.kit.perks;
import org.bukkit.Material;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilInv;
import nautilus.game.arcade.kit.Perk;
public class PerkQuickshotRobinHood extends Perk
{
public PerkQuickshotRobinHood()
{
super("Quick Shot", new String[]
{
C.cYellow + "Left-Click" + C.cGray + " with Bow to " + C.cGreen + "Quick Shot"
});
}
@EventHandler
public void Leap(PlayerInteractEvent event)
{
if (event.isCancelled())
return;
if (event.getAction() != Action.LEFT_CLICK_AIR && event.getAction() != Action.LEFT_CLICK_BLOCK)
return;
if (UtilBlock.usable(event.getClickedBlock()))
return;
if (event.getPlayer().getItemInHand() == null)
return;
if (event.getPlayer().getItemInHand().getType() != Material.BOW)
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!player.getInventory().contains(Material.ARROW))
return;
UtilInv.remove(player, Material.ARROW, (byte)1, 1);
Arrow arrow = player.launchProjectile(Arrow.class);
arrow.setVelocity(player.getLocation().getDirection().multiply(2));
}
}

View File

@ -0,0 +1,92 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import org.bukkit.Effect;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.recharge.Recharge;
import nautilus.game.arcade.kit.Perk;
public class PerkSeismicHammer extends Perk
{
public PerkSeismicHammer()
{
super("Seismic Slam", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Iron Axe to " + C.cGreen + "Seismic Hammer"
});
}
@EventHandler
public void Skill(PlayerInteractEvent event)
{
if (event.isCancelled())
return;
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
return;
if (UtilBlock.usable(event.getClickedBlock()))
return;
if (event.getPlayer().getItemInHand() == null)
return;
if (!event.getPlayer().getItemInHand().getType().toString().contains("IRON_AXE"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!Recharge.Instance.use(player, GetName(), 10000, true))
return;
//Action
int damage = 10;
double range = 10;
HashMap<LivingEntity, Double> targets = UtilEnt.getInRadius(player.getLocation(), range);
for (LivingEntity cur : targets.keySet())
{
if (cur instanceof Player)
continue;
//Damage Event
Manager.GetDamage().NewDamageEvent(cur, player, null,
DamageCause.CUSTOM, damage * targets.get(cur) + 0.5, false, true, false,
player.getName(), GetName());
//Velocity
UtilAction.velocity(cur,
UtilAlg.getTrajectory2d(player.getLocation().toVector(), cur.getLocation().toVector()),
2.2 * targets.get(cur), true, 0, 0.4 + 1.0 * targets.get(cur), 1.6, true);
}
//Effect
player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_METAL, 2f, 0.2f);
for (Block cur : UtilBlock.getInRadius(player.getLocation(), 4d).keySet())
if (UtilBlock.airFoliage(cur.getRelative(BlockFace.UP)) && !UtilBlock.airFoliage(cur))
cur.getWorld().playEffect(cur.getLocation(), Effect.STEP_SOUND, cur.getTypeId());
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
}
}

View File

@ -9,6 +9,7 @@ import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature; import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftWolf;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Wolf; import org.bukkit.entity.Wolf;

View File

@ -19,6 +19,7 @@ import nautilus.game.arcade.game.Game;
import nautilus.minecraft.core.utils.ZipUtil; import nautilus.minecraft.core.utils.ZipUtil;
import net.minecraft.server.v1_6_R3.ChunkPreLoadEvent; import net.minecraft.server.v1_6_R3.ChunkPreLoadEvent;
import org.bukkit.Difficulty;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.WorldCreator; import org.bukkit.WorldCreator;
@ -78,6 +79,7 @@ public class WorldData
{ {
//Start World //Start World
World = WorldUtil.LoadWorld(new WorldCreator(GetFolder())); World = WorldUtil.LoadWorld(new WorldCreator(GetFolder()));
World.setDifficulty(Difficulty.HARD);
//Load World Data //Load World Data
worldData.LoadWorldConfig(); worldData.LoadWorldConfig();

View File

@ -1,366 +0,0 @@
package nautilus.game.pvp.worldevent.creature;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Creature;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
import me.chiss.Core.Items.IThrown;
import me.chiss.Core.Managers.Throw.IProjectileUser;
import me.chiss.Core.Updater.UpdateEvent;
import me.chiss.Core.Updater.UpdateEvent.UpdateType;
import me.chiss.Core.Utility.UtilAction;
import me.chiss.Core.Utility.UtilTime;
import nautilus.game.pvp.worldevent.EventBase;
import nautilus.game.pvp.worldevent.EventCreatureBase;
public class BroodMother extends EventCreatureBase implements IThrown
{
private ArrayList<Broodling> _minions = new ArrayList<Broodling>();
private int _minionsMax = 100;
private HashMap<Block, Long> _eggs = new HashMap<Block, Long>();
private long _eggLast = System.currentTimeMillis();
private int _eggSpawns = 0;
private long _webLast = System.currentTimeMillis();
private int _webSpawns = 0;
private int _webMax = 100;
private int _eggItems = 0;
private int _eggItemMax = 20;
private long _stateLast = System.currentTimeMillis();
private int _state = 0;
//Normal
//Eggs
//Run
//Webs
public BroodMother(EventBase event, Location location)
{
super(event, location, "Brood Mother", true, 800, EntityType.SPIDER);
}
@EventHandler
public void Heal(UpdateEvent event)
{
if (GetEntity() == null)
return;
if (event.getType() != UpdateType.SEC)
return;
ModifyHealth(1);
}
@Override
public void Die()
{
Event.Manager.Blood().Effects(GetEntity().getEyeLocation(), 50, 0.8,
Sound.SPIDER_DEATH, 2f, 0.5f, Material.BONE, (byte)0, false);
Loot();
Remove();
}
@Override
public void Loot()
{
Event.Manager.Loot().DropLoot(GetEntity().getEyeLocation(), 40, 40, 0.2f, 0.05f, 3d);
}
@EventHandler
public void StateSwitch(UpdateEvent event)
{
if (_state != 0)
return;
if (event.getType() != UpdateType.SEC)
return;
if (!UtilTime.elapsed(_stateLast, 12000))
return;
if (Math.random() > 0.5 || _minions.size() + _eggs.size() < 6)
{
if (_minions.size() + _eggs.size() < 6 || UtilTime.elapsed(_eggLast, 30000))
{
_eggLast = System.currentTimeMillis();
_state = 1;
_eggSpawns = GetMinionsMax();
((Creature)GetEntity()).setTarget(null);
}
}
else
{
if (UtilTime.elapsed(_webLast, 30000))
{
_webLast = System.currentTimeMillis();
_state = 2;
_webSpawns = Scale(_webMax);
((Creature)GetEntity()).setTarget(null);
}
}
}
private int Scale(int a)
{
return (int) (a * (0.1 + (0.9 - 0.9 * (GetHealthCur() / GetHealthMax()))));
}
private int GetMinionsMax()
{
int max = Scale(_minionsMax);
max -= _minions.size();
return max;
}
@EventHandler
public void WebSpawn(UpdateEvent event)
{
if (_state != 2)
return;
if (event.getType() != UpdateType.FASTEST)
return;
if (GetEntity() == null)
return;
if (_webSpawns <= 0)
{
_state = 0;
_stateLast = System.currentTimeMillis();
return;
}
_webSpawns--;
//Item
Item item = GetEntity().getWorld().dropItem(GetEntity().getLocation().add(0, 0.5, 0),
Event.Manager.Item().CreateStack(Material.WEB));
//Velocity
UtilAction.velocity(item, new Vector(Math.random()-0.5, 0, Math.random()-0.5).normalize(),
Math.random() * 0.4 + 0.2, false, 0, Math.random() * 0.6 + 0.4, 10, false);
//Sound
item.getWorld().playSound(item.getLocation(), Sound.BREATH, 0.5f, 0.2f);
//Thrown
Event.Manager.Throw().AddThrow(item, GetEntity(), this,
-1, false, false, true,
null, 2f, 0.5f,
null, 0, UpdateType.TICK, 1.5d);
}
@EventHandler
public void EggSpawn(UpdateEvent event)
{
if (_state != 1)
return;
if (event.getType() != UpdateType.FASTEST)
return;
if (GetEntity() == null)
return;
if (_eggSpawns <= 0)
{
_state = 0;
_stateLast = System.currentTimeMillis();
return;
}
if (_eggItems >= _eggItemMax)
return;
_eggSpawns--;
//Item
Item item = GetEntity().getWorld().dropItem(GetEntity().getLocation().add(0, 0.5, 0),
Event.Manager.Item().CreateStack(Material.DRAGON_EGG));
//Velocity
UtilAction.velocity(item, new Vector(Math.random()-0.5, 0, Math.random()-0.5).normalize(),
Math.random() * 0.4 + 0.2, false, 0, Math.random() * 0.6 + 0.4, 10, false);
//Sound
item.getWorld().playSound(item.getLocation(), Sound.CHICKEN_EGG_POP, 1f, 1f);
//Thrown
Event.Manager.Throw().AddThrow(item, GetEntity(), this,
-1, false, false, true,
null, 2f, 0.5f,
null, 0, UpdateType.TICK, 1.5d);
_eggItems++;
}
@Override
public void Collide(LivingEntity target, Block block, IProjectileUser data)
{
//Null
}
@Override
public void Idle(IProjectileUser data)
{
BlockForm(data);
}
@Override
public void Expire(IProjectileUser data)
{
BlockForm(data);
}
public void BlockForm(IProjectileUser data)
{
Material mat = ((Item)data.GetThrown()).getItemStack().getType();
if (mat == Material.DRAGON_EGG)
{
Block egg = data.GetThrown().getLocation().getBlock();
if (egg.getRelative(BlockFace.DOWN).getType() != Material.DRAGON_EGG &&
egg.getRelative(BlockFace.DOWN).getType() != Material.WEB)
{
egg.setType(Material.DRAGON_EGG);
_eggs.put(egg, System.currentTimeMillis());
}
_eggItems--;
}
else if (mat == Material.WEB)
{
Block web = data.GetThrown().getLocation().getBlock();
if (web.getType() != Material.WATER && web.getType() != Material.STATIONARY_WATER)
Event.Manager.BlockRestore().Add(web, 30, (byte)0, Scale(40000));
}
data.GetThrown().remove();
}
@EventHandler
public void EggHatch(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
if (_eggs.isEmpty())
return;
HashSet<Block> hatch = new HashSet<Block>();
for (Block block : _eggs.keySet())
if (Math.random() > 0.98)
if (UtilTime.elapsed(_eggs.get(block), 12000))
hatch.add(block);
for (Block block : hatch)
{
_eggs.remove(block);
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId());
block.setTypeId(0);
Event.CreatureRegister(new Broodling(Event, block.getLocation().add(0.5, 0.5, 0.5), this));
}
}
@EventHandler
public void EggCrush(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
for (Player cur : GetEntity().getWorld().getPlayers())
{
Block below = cur.getLocation().getBlock().getRelative(BlockFace.DOWN);
if (below.getType() != Material.DRAGON_EGG)
continue;
if (!_eggs.containsKey(below))
continue;
_eggs.remove(below);
below.setTypeId(0);
below.getWorld().playEffect(below.getLocation(), Effect.STEP_SOUND, 122);
UtilAction.velocity(cur, cur.getLocation().getDirection(), 0.3, true, 0.3, 0, 10, true);
}
}
@EventHandler
public void EggHit(PlayerInteractEvent event)
{
if (event.getClickedBlock() == null)
return;
if (!_eggs.containsKey(event.getClickedBlock()))
return;
event.setCancelled(true);
}
public void MinionRegister(Broodling minion)
{
_minions.add(minion);
}
public void MinionDeregister(Broodling minion)
{
_minions.remove(minion);
}
public ArrayList<Broodling> GetMinions()
{
return _minions;
}
@EventHandler(priority = EventPriority.LOWEST)
public void TargetCancel(EntityTargetEvent event)
{
if (!event.getEntity().equals(GetEntity()))
return;
if (_state == 0 && (GetHealthCur() / GetHealthMax()) < 0.5)
return;
event.setCancelled(true);
}
public boolean CanTarget(LivingEntity ent)
{
int i = 0;
for (Broodling cur : _minions)
{
LivingEntity target = ((Creature)cur.GetEntity()).getTarget();
if (target != null && target.equals(ent))
i++;
}
return i < Scale(20);
}
}