From ac723c14bd976c8a4589bd3c127a216076690293 Mon Sep 17 00:00:00 2001 From: Chiss Date: Sat, 21 Dec 2013 08:42:49 +1100 Subject: [PATCH] Push so i can pull :O just some xmas stuff --- .../src/nautilus/game/arcade/GameType.java | 2 +- .../game/games/christmas/Christmas.java | 221 ++++++++++++++++-- .../arcade/game/games/christmas/Sleigh.java | 61 ++++- .../game/games/christmas/SleighHorse.java | 10 +- .../game/games/christmas/SleighPart.java | 32 ++- 5 files changed, 302 insertions(+), 24 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 633c7b627..3075e0703 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -8,7 +8,7 @@ public enum GameType Bridge("The Bridges"), CastleSiege("Castle Siege"), Champions("Champions"), - Christmas("Christmas Caper"), + Christmas("Christmas Chaos"), DeathTag("Death Tag"), DragonEscape("Dragon Escape"), DragonRiders("Dragon Riders"), diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java index fdc2e7881..0f65a957d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java @@ -5,33 +5,39 @@ import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.entity.Player; +import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.ItemSpawnEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.UtilBlock; 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.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.christmas.kits.KitPlayer; import nautilus.game.arcade.game.games.christmas.parts.*; -import nautilus.game.arcade.game.games.stacker.kits.*; import nautilus.game.arcade.kit.Kit; public class Christmas extends SoloGame @@ -45,6 +51,8 @@ public class Christmas extends SoloGame private ArrayList _barrier = new ArrayList(); + private ArrayList _lastScoreboard = new ArrayList(); + public Christmas(ArcadeManager manager) { @@ -52,16 +60,19 @@ public class Christmas extends SoloGame new Kit[] { - new KitDefault(manager) + new KitPlayer(manager) }, new String[] { - + "Follow Santa Claus", + "Find the 10 Stolen Presents", + "Defeat the Thief who stole the Presents!" }); this.BlockBreakAllow.add(4); this.HungerSet = 20; + this.WorldTimeSet = 2000; } @Override @@ -118,9 +129,8 @@ public class Christmas extends SoloGame for (Location loc : WorldData.GetCustomLocs("129")) { _barrier.add(loc.getBlock().getLocation()); - MapUtil.QuickChangeBlockAt(loc, 20, (byte)0); + MapUtil.QuickChangeBlockAt(loc, 65, (byte)3); } - //Parts _parts.add(new Part1(this, _sleighWaypoints.remove(0), new Location[] {_presents.remove(0), _presents.remove(0)}, @@ -136,16 +146,19 @@ public class Christmas extends SoloGame WorldData.GetCustomLocs("48"))); _parts.add(new Part3(this, _sleighWaypoints.remove(0), new Location[] {_presents.remove(0), _presents.remove(0)}, - WorldData.GetDataLocs("SILVER"), WorldData.GetDataLocs("GRAY"), + WorldData.GetDataLocs("SILVER"), WorldData.GetDataLocs("WHITE"), - WorldData.GetCustomLocs("113"))); + WorldData.GetCustomLocs("121"))); - _parts.add(new Part4(this, _sleighWaypoints.remove(0), new Location[] {_presents.remove(0), _presents.remove(0)})); + _parts.add(new Part4(this, _sleighWaypoints.remove(0), new Location[] {_presents.remove(0), _presents.remove(0)}, + WorldData.GetCustomLocs("56"), + WorldData.GetDataLocs("MAGENTA"), + WorldData.GetCustomLocs("22"), + WorldData.GetCustomLocs("45"), + _sleighWaypoints.get(0))); - _parts.add(new Part5(this, _sleighWaypoints.remove(0), new Location[] {_presents.remove(0), _presents.remove(0)})); - - _parts.add(new Part6(this, _sleighWaypoints.remove(0), new Location[] {_presents.remove(0), _presents.remove(0)}, + _parts.add(new Part5(this, _sleighWaypoints.remove(0), new Location[] {_presents.remove(0), _presents.remove(0)}, WorldData.GetCustomLocs("14"), WorldData.GetCustomLocs("15"), WorldData.GetCustomLocs("16"), @@ -199,10 +212,35 @@ public class Christmas extends SoloGame @EventHandler public void SleighSpawn(GameStateChangeEvent event) { - if (event.GetState() != GameState.Live) + if (event.GetState() != GameState.Prepare) return; - GetSleigh(); + final Christmas christmas = this; + + UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(Manager.GetPlugin(), new Runnable() + { + public void run() + { + GetSleigh(); + + Location loc = christmas.GetSleigh().GetLocation(); + + christmas.CreatureAllowOverride = true; + for (int i=0 ; i<20 ; i++) + { + Location elfLoc = UtilBlock.getHighest(loc.getWorld(), (int)(loc.getX() + 20 - Math.random()*40), (int)(loc.getZ() + 20 - Math.random()*40)).getLocation().add(0.5, 0.5, 0.5); + + Villager elf = elfLoc.getWorld().spawn(elfLoc, Villager.class); + + elf.setBaby(); + elf.setAgeLock(true); + + elf.setCustomName("Elf"); + + } + christmas.CreatureAllowOverride = false; + } + }, 20); } @EventHandler @@ -257,6 +295,16 @@ public class Christmas extends SoloGame Announce(C.cRed + C.Bold + "Santa: " + ChatColor.RESET + string); } + public void BossSay(String name, String string) + { + for (Player player : UtilServer.getPlayers()) + { + player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 1f, 1f); + + UtilPlayer.message(player, C.cGreen + C.Bold + name + ": " + ChatColor.RESET + string); + } + } + @EventHandler public void Combust(EntityCombustEvent event) { @@ -279,7 +327,7 @@ public class Christmas extends SoloGame { for (Player player : GetPlayers(false)) { - Manager.GetDonation().PurchaseUnknownSalesPackage(null, player.getName(), "Frosty Pumpkin Kings Head", 0, true); + Manager.GetDonation().PurchaseUnknownSalesPackage(null, player.getName(), "Snowmans Head", 0, true); Manager.GetGame().AddGems(player, 30, "Slaying the Pumpkin King", false); Manager.GetGame().AddGems(player, 10, "Participation", false); } @@ -331,7 +379,7 @@ public class Christmas extends SoloGame } SetState(GameState.End); - SetCustomWinLine("You earned Frosty Pumpkin Kings Head!"); + SetCustomWinLine("You earned Snowmans Head!"); AnnounceEnd(this.GetTeamList().get(0)); } @@ -343,9 +391,36 @@ public class Christmas extends SoloGame } SetState(GameState.End); - SetCustomWinLine("You lost..."); + SetCustomWinLine("You all died..."); AnnounceEnd(this.GetTeamList().get(1)); } + else if (UtilTime.elapsed(GetStateTime(), 1200000)) + { + for (Player player : GetPlayers(false)) + { + Manager.GetGame().AddGems(player, 10, "Participation", false); + } + + SetState(GameState.End); + SetCustomWinLine("You did not save Christmas in time."); + AnnounceEnd(this.GetTeamList().get(1)); + } + + } + + public void End() + { + if (!IsLive()) + return; + + for (Player player : GetPlayers(false)) + { + Manager.GetGame().AddGems(player, 10, "Participation", false); + } + + SetState(GameState.End); + SetCustomWinLine("Santa Claus was killed by the Giant!"); + AnnounceEnd(this.GetTeamList().get(1)); } @EventHandler @@ -372,7 +447,7 @@ public class Christmas extends SoloGame //XXX REMOVE for (Player player : UtilServer.getPlayers()) - player.teleport(_part.GetSleighWaypoint()); + player.teleport(_part.GetSleighWaypoint().clone().add(0, 0, 10)); } } @@ -385,4 +460,116 @@ public class Christmas extends SoloGame } } + + @EventHandler(priority = EventPriority.LOWEST) + public void DamageCancel(CustomDamageEvent event) + { + if (_sleigh != null) + GetSleigh().Damage(event); + + if (event.GetCause() == DamageCause.FALL) + if (event.GetDamageeEntity().getLocation().getY() > 30) + { + event.SetCancelled("Fall Cancel"); + } + else + { + event.AddMod("Christmas", "Fall Damage", 20, false); + } + } + + + @Override + @EventHandler + public void ScoreboardUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + if (!IsLive()) + return; + + //Wipe Last + for (String string : _lastScoreboard) + GetScoreboard().resetScores(Bukkit.getOfflinePlayer(string)); + _lastScoreboard.clear(); + + int index = 15; + + //Rounds + String out = " "; + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + out = C.cWhite + "Challenge:"; + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + out = C.cYellow + (5 - _parts.size()) + " of " + 5; + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + //Presents + out = " "; + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + out = C.cWhite + "Presents Found:"; + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + out = C.cYellow + GetSleigh().GetPresents().size() + " of " + 10; + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + //Players + out = " "; + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + out = C.cWhite + "Players Alive:"; + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + out = C.cYellow + GetPlayers(true).size(); + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + //Time + out = " "; + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + out = C.cWhite + "Time Left:"; + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + + out = C.cYellow + UtilTime.MakeStr(1200000 - (System.currentTimeMillis() - GetStateTime())); + if (out.length() >= 16) + out = out.substring(0, 15); + _lastScoreboard.add(out); + GetObjectiveSide().getScore(Bukkit.getOfflinePlayer(out)).setScore(index--); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java index 1604be1c0..441fe0f3e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java @@ -2,19 +2,25 @@ package nautilus.game.arcade.game.games.christmas; import java.util.ArrayList; +import mineplex.core.common.util.C; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.recharge.Recharge; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.game.games.christmas.parts.Part; +import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.Effect; import org.bukkit.FireworkEffect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.FireworkEffect.Type; +import org.bukkit.block.BlockFace; import org.bukkit.entity.Chicken; import org.bukkit.entity.Entity; import org.bukkit.entity.FallingBlock; @@ -121,9 +127,9 @@ public class Sleigh SleighEnts.add(new SleighPart(4, 44, 7, loc.clone(), 2, 0)); //Santa - SleighPart part = new SleighPart(3, 0, 0, loc.clone(), 0, 1); - part.AddSanta(); - SleighEnts.add(part); + SleighPart santa = new SleighPart(3, 0, 0, loc.clone(), 0, 1); + santa.AddSanta(); + SleighEnts.add(santa); SleighHorses = new ArrayList(); @@ -132,6 +138,11 @@ public class Sleigh SleighHorses.add(new SleighHorse(CentralEntity, loc.clone(), -1.5, 11)); SleighHorses.add(new SleighHorse(CentralEntity, loc.clone(), 1.5, 11)); + + for (SleighHorse horse : SleighHorses) + { + UtilEnt.Lhorse.Ent. + } } public void AddPresent(FallingBlock block) @@ -204,6 +215,15 @@ public class Sleigh UtilAction.velocity(player, UtilAlg.getTrajectory2d(CentralEntity, player), 0.4, true, 0.2, 0, 0, true); Recharge.Instance.useForce(player, "Sleigh Bump", 400); } + + if (player.getLocation().getZ() < CentralEntity.getLocation().getZ() - 24) + { + player.damage(1); + UtilPlayer.message(player, C.cRed + C.Bold + "Santa: " + ChatColor.RESET + "Careful " + player.getName() + "! Keep up with my Sleigh!"); + + UtilAction.velocity(player, UtilAlg.getTrajectory2d(player, CentralEntity), 0.6, true, 0.2, 0, 0, true); + Recharge.Instance.useForce(player, "Sleigh Bump", 400); + } } } @@ -216,11 +236,44 @@ public class Sleigh { PresentsCollected.add(loc); loc.getBlock().setType(Material.AIR); - UtilFirework.launchFirework(loc.clone().add(0.5, 0.5, 0.5), FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BALL).trail(true).build(), new Vector(0,1,0), 1); + loc.getBlock().getRelative(BlockFace.DOWN).setType(Material.GLASS); + UtilFirework.launchFirework(loc.clone().add(0.5, 0.5, 0.5), FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BALL).trail(true).build(), new Vector(0,1,0), 0); SleighPart part = PresentSlots.remove(0); if (part == null) return; part.SetPresent(); } + + public ArrayList GetPresents() + { + return PresentsCollected; + } + + public void Damage(CustomDamageEvent event) + { + if (event.GetDamageeEntity().equals(CentralEntity)) + { + event.SetCancelled("Sleigh Damage"); + return; + } + + for (SleighPart part : SleighEnts) + { + if (part.HasEntity(event.GetDamageeEntity())) + { + event.SetCancelled("Sleigh Damage"); + return; + } + } + + for (SleighHorse part : SleighHorses) + { + if (part.HasEntity(event.GetDamageeEntity())) + { + event.SetCancelled("Sleigh Damage"); + return; + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java index ac46dd67b..c11c19574 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java @@ -5,7 +5,7 @@ import mineplex.core.common.util.UtilEnt; import org.bukkit.Location; import org.bukkit.entity.Chicken; import org.bukkit.entity.Entity; -import org.bukkit.entity.Horse; +import org.bukkit.entity.LivingEntity; public class SleighHorse { @@ -23,4 +23,12 @@ public class SleighHorse OffsetX = x; OffsetZ = z; } + + public boolean HasEntity(LivingEntity ent) + { + if (Ent.equals(ent)) + return true; + + return false; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java index b19331ab4..f06069c9d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java @@ -3,14 +3,20 @@ package nautilus.game.arcade.game.games.christmas; import mineplex.core.common.util.C; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilServer; +import net.minecraft.server.v1_6_R3.Packet40EntityMetadata; import org.bukkit.Color; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_6_R3.entity.CraftEntity; import org.bukkit.craftbukkit.v1_6_R3.entity.CraftFallingSand; +import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer; import org.bukkit.entity.Chicken; import org.bukkit.entity.Entity; import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; import org.bukkit.entity.Skeleton; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.LeatherArmorMeta; @@ -45,6 +51,12 @@ public class SleighPart top = newTop; } + //Invis + ((CraftEntity)Ent).getHandle().getDataWatcher().watch(0, Byte.valueOf((byte) 32)); + + for (Player player : UtilServer.getPlayers()) + ((CraftPlayer)player).getHandle().playerConnection.sendPacket(new Packet40EntityMetadata(Ent.getEntityId(), ((CraftEntity)Ent).getHandle().getDataWatcher(), true)); + //Block if (id != 0) { @@ -109,7 +121,7 @@ public class SleighPart ItemStack legs = new ItemStack(Material.LEATHER_LEGGINGS); meta = (LeatherArmorMeta)legs.getItemMeta(); - meta.setColor(Color.WHITE); + meta.setColor(Color.RED); legs.setItemMeta(meta); skel.getEquipment().setLeggings(legs); @@ -128,4 +140,22 @@ public class SleighPart top.setPassenger(skel); } + + public boolean HasEntity(LivingEntity ent) + { + if (Ent.equals(ent)) + return true; + + Entity top = Ent; + + while (top.getPassenger() != null) + { + top = top.getPassenger(); + + if (top.equals(ent)) + return true; + } + + return false; + } }