Solo Mode and Faster UHC

This commit is contained in:
Sam 2016-11-05 11:06:12 +00:00
parent 07c93606f8
commit 6a9648e646
16 changed files with 1049 additions and 654 deletions

View File

@ -63,6 +63,7 @@ public class SkinData
public final static SkinData WITCH = new SkinData("eyJ0aW1lc3RhbXAiOjE0NzM5OTEyMTE1NDQsInByb2ZpbGVJZCI6IjlmY2FlZDhiMTRiNTRmN2ZhNjRjYjYwNDBlNzA1MjcyIiwicHJvZmlsZU5hbWUiOiJMQ2FzdHIxIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81NDg1ZDZlMTBhNmNmMmY3Mzg2NmZhMGRiNjEzOWQ5NWViZDM0ZGZiMGY0YzAxMmRkM2YzYWYxMWQ5ZjQxYyJ9fX0=", "cojkGLflVWxwnhDXmHMke7crkeA78iUYOWY7H3YvMJFD+VZi9E7vUahLTTx5ELH+PvcaHJerSDmuV+Nasc3K2n6zlXXb0B7RB/ose/kdPxHAIJee7IbZX0iFNDn6irUSOS4wOYF/BwaqG3HmpoSxV52SGMs6kqTer2Rjg3X+XwYFFiDHAR/gwhfXLzrM1iBc171vgu6T+kx65iBHa/YB/V/mj8FSxwM0f5IsLpgAEdxDL9PvEKQWgWeZ1CAqEXlGnjPkd9oGzW0TgDz2MksBbYZ2kmn/S53kK9vCrVB7egZPS4VBtKpq1P7Jeu8rtgjnAKVFQJZ2lMHnVRuvGTd8JKoPHarUPpU2LURUMaCtHzSv9v/4gjkafnDhqxG4TTcr5hxFV+ho72HQchoeaUXzIO+Yo71zrVqkrS0hw6OtgMIBlvaGaEUsFvGiCZePBEiHojO43AKqJcJAVeT2RAzHcAaBAO79ACGjNKw/oj02rOurLha9i+99bKui96Eg7SS/nPchbmu5YQ9nSpkW+JeYXnBzGGzNG4y02VWgz15L718+8161zXobhuK07qlY9i1nipFbEJedqG0cfS+AUzauETFvS9nMtxhtftYPCIxm40GQj6e77asNCAEElGssaUGKO3bjm348+oF9tR/eBOYWJQ8kL46IQLDRoop7UhG4ewY=");
public final static SkinData TURKEY = new SkinData("eyJ0aW1lc3RhbXAiOjE0NzU3NzM2MTc5MDQsInByb2ZpbGVJZCI6IjlmY2FlZDhiMTRiNTRmN2ZhNjRjYjYwNDBlNzA1MjcyIiwicHJvZmlsZU5hbWUiOiJMQ2FzdHIxIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8xYzdmYjczMTRkNmY1ZTMzNmVjN2ViNTI1ZGM0ODMzOWNhMjI4ZDk3ODU1MDM3ZDZhNDIwOGZjNzYwNDc1NiJ9fX0=", "eZWi1LOD8ke7MCUAfhspBCnyfCoGM8suFLKtbW6b27CURoRBG3eKIfwLYYeMp3ObjoZ8gCB90s28Qyw5XMzwvvowy9W/b5cYC0OzQ8+GR7tDZoWc28tGqGBM8cmDJIFQgZdceBIIr2lXeAvEJfLbyrus46hPjk8YTiQW2DsBq88BhKIy6Igb1rGqJ1goVERF07b6+/yMdLKCaT8OZFzKLXfo5rY5gr6HLnvsQiNL9aTrl74agXn1GUcP+QVNe7/c9lYmv5vLCBst1YiIPq27NZASZ++Fwyv6+PRlaFZZYtMHVd4UZeYPl7ak1Cdi/1sUcRpkBbJM8AHIrqq0iuXxrLbc6ldQ2cYQKHg9ljIpW/EZanuf6Wgm/LK1JnxXne9GUb/xPzB1EnZ95i8/u9WJa+NixEcfc3pAzDPYncIR8lishFwyBRta6BCG76U3UY2lQr3YD/48AJ49r7+WVU0gOP/h2SDSdAZHEdvkpVJ0w/xA+SevJ7Y7xA5EJ655YMQ0F8f3WUFTf1pFklE5E+fwkMVCWOPw7UMy558IcRSpdWAPPyf8sc7CpDqRk37/vXWRDa+7YBfgskK6B2eXowrzThUOBx+AmDTF3Rv8ZSr1Un0FWGi+GQ5ny7W9dJBMomzyMUbzz9stsCml5XB+6xLP2MD+9lO1bHipKS6qkhtZChE=");
// Comments this out for now, so it doesn't load the player profile
// A better way to do this would check for the properties when getting the skull or the skin
// Might change on the next version

View File

@ -56,7 +56,8 @@ public enum GameDisplay
SurvivalGamesTeams("Survival Games Teams", "Survival Games", Material.IRON_SWORD, (byte)0, GameCategory.TEAM_VARIANT, 23),
Tug("Tug of Wool", Material.WHEAT, (byte)0, GameCategory.ARCADE, 44),
TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE, 45),
UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46),
UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.TEAM_VARIANT, 46),
UHCSolo("Ultra Hardcore Solo", "Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46),
WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE, 47),
Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48),
ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49),

View File

@ -1,9 +1,12 @@
package nautilus.game.arcade;
import org.bukkit.Material;
import mineplex.core.common.MinecraftVersion;
import mineplex.core.common.Pair;
import mineplex.core.game.GameCategory;
import mineplex.core.game.GameDisplay;
import nautilus.game.arcade.game.Game;
import nautilus.game.arcade.game.games.baconbrawl.BaconBrawl;
import nautilus.game.arcade.game.games.barbarians.Barbarians;
@ -99,18 +102,16 @@ import nautilus.game.arcade.game.games.survivalgames.modes.UHCSurvivalgames;
import nautilus.game.arcade.game.games.tug.Tug;
import nautilus.game.arcade.game.games.turfforts.TurfForts;
import nautilus.game.arcade.game.games.typewars.TypeWars;
import nautilus.game.arcade.game.games.uhc.UHC;
import nautilus.game.arcade.game.games.uhc.UHCSolo;
import nautilus.game.arcade.game.games.uhc.UHCTeams;
import nautilus.game.arcade.game.games.uhc.modes.Assassins;
import nautilus.game.arcade.game.games.uhc.modes.BloodDiamonds;
import nautilus.game.arcade.game.games.uhc.modes.CutClean;
import nautilus.game.arcade.game.games.uhc.modes.GodBattles;
import nautilus.game.arcade.game.games.valentines.Valentines;
import nautilus.game.arcade.game.games.wither.WitherGame;
import nautilus.game.arcade.game.games.wizards.Wizards;
import nautilus.game.arcade.game.games.zombiesurvival.ZombieSurvival;
import org.bukkit.Material;
public enum GameType
{
//Mini
@ -183,7 +184,8 @@ public enum GameType
SurvivalGamesTeams(TeamSurvivalGames.class, GameDisplay.SurvivalGamesTeams, new GameType[]{GameType.SurvivalGames}, false),
Tug(Tug.class, GameDisplay.Tug),
TurfWars(TurfForts.class, GameDisplay.TurfWars),
UHC(UHC.class, GameDisplay.UHC),
UHC(UHCTeams.class, GameDisplay.UHC),
UHCSolo(UHCSolo.class, GameDisplay.UHCSolo, new GameType[] { GameType.UHC }, false),
WitherAssault(WitherGame.class, GameDisplay.WitherAssault),
Wizards(Wizards.class, GameDisplay.Wizards, new Pair[]
{
@ -228,7 +230,6 @@ public enum GameType
new GameMode(SkySmash.class, GameType.Skywars, "Sky Smash"),
new GameMode(TeamBuild.class, GameType.Build, "Team Master Builders"),
new GameMode(DukesOfDecoration.class, GameType.Build, "Dukes Of Decoration"),
new GameMode(CutClean.class, GameType.UHC, "Cut Clean"),
new GameMode(GodBattles.class, GameType.UHC, "God Battles"),
new GameMode(BloodDiamonds.class, GameType.UHC, "Blood Diamonds"),
new GameMode(Assassins.class, GameType.UHC, "Assassins"),

View File

@ -36,7 +36,9 @@ import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.hanging.HangingBreakEvent;
import org.bukkit.event.hanging.HangingPlaceEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.scoreboard.NameTagVisibility;
@ -61,6 +63,7 @@ import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTabTitle;
import mineplex.core.common.util.UtilTextMiddle;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilTime.TimeUnit;
import mineplex.core.disguise.disguises.DisguisePlayer;
import mineplex.core.elo.EloPlayer;
import mineplex.core.elo.EloTeam;
@ -298,6 +301,9 @@ public abstract class Game implements Listener
public boolean SpeedMeasurement = false;
// Rejoining the game
public long RejoinTime = 120000;
// Chat Stats
public final ChatStatData Kills = new ChatStatData("Kills", "Kills", true);
public final ChatStatData Assists = new ChatStatData("Assists", "Assists", true);
@ -380,6 +386,11 @@ public abstract class Game implements Listener
private HashMap<UUID, LinkedList<Triple<Double, Double, Double>>> _playerPastLocs = new HashMap<>();
private Set<DebugCommand> _debugCommands = new HashSet<>();
public NautHashMap<String, Long> RejoinTimes = new NautHashMap<String, Long>();
public NautHashMap<String, GameTeam> RejoinTeam = new NautHashMap<String, GameTeam>();
public NautHashMap<String, Kit> RejoinKit = new NautHashMap<String, Kit>();
public NautHashMap<String, Double> RejoinHealth = new NautHashMap<String, Double>();
public Game(ArcadeManager manager, GameType gameType, Kit[] kits, String[] gameDesc)
{
Manager = manager;
@ -2412,4 +2423,148 @@ public abstract class Game implements Listener
{
return clazz.cast(_modules.get(clazz));
}
/*
* All code related to rejoining games.
* Moved here from TeamGame
*/
@EventHandler(priority = EventPriority.LOW)
public void PlayerQuit(PlayerQuitEvent event)
{
if (!InProgress())
return;
Player player = event.getPlayer();
GameTeam team = GetTeam(player);
if (team == null) return;
if (!team.IsAlive(player))
return;
if (player.isDead())
return;
if (player.getWorld().getName().equalsIgnoreCase("world"))
return;
if (!QuitOut)
{
//Store
RejoinTimes.put(player.getName(), System.currentTimeMillis());
RejoinTeam.put(player.getName(), team);
if (GetKit(player) != null)
RejoinKit.put(player.getName(), GetKit(player));
RejoinHealth.put(player.getName(), player.getHealth());
if (!GetLocationStore().containsKey(player.getName()))
{
GetLocationStore().put(player.getName(), player.getLocation());
}
//Announcement
Announce(team.GetColor() + C.Bold + player.getName() + " has disconnected! " + UtilTime.convert(RejoinTime, 0, TimeUnit.MINUTES) + " minutes to rejoin.", false);
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void PlayerLoginAllow(PlayerLoginEvent event)
{
if (!InProgress() || QuitOut)
return;
//Rejoined
GameTeam team = RejoinTeam.remove(event.getPlayer().getName());
if (team != null && RejoinTimes.remove(event.getPlayer().getName()) != null)
{
team.AddPlayer(event.getPlayer(), true);
Announce(team.GetColor() + C.Bold + event.getPlayer().getName() + " has reconnected!", false);
Kit kit = RejoinKit.remove(event.getPlayer().getName());
if (kit != null)
_playerKit.put(event.getPlayer(), kit);
}
}
//Do this on Join, not Login, otherwise player no get heal.
@EventHandler (priority = EventPriority.MONITOR)
public void playerRejoinGame(PlayerJoinEvent event)
{
if (!InProgress() || QuitOut)
return;
Player player = event.getPlayer();
if (RejoinHealth.containsKey(player.getName()))
{
double health = RejoinHealth.remove(player.getName());
if (health > 0)
{
getArcadeManager().runSyncLater(() ->
{
player.setHealth(health);
}, 1L);
}
}
}
@EventHandler
public void PlayerRejoinExpire(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC || QuitOut)
return;
Iterator<String> rejoinIterator = RejoinTimes.keySet().iterator();
while (rejoinIterator.hasNext())
{
String name = rejoinIterator.next();
if (!UtilTime.elapsed(RejoinTimes.get(name), RejoinTime))
continue;
rejoinIterator.remove();
//Get Team (By Name)
GameTeam team = RejoinTeam.remove(name);
if (team != null)
Announce(team.GetColor() + C.Bold + name + " did not reconnect in time!", false);
RejoinKit.remove(name);
RejoinHealth.remove(name);
}
}
@EventHandler
public void RejoinCommand(PlayerCommandPreprocessEvent event)
{
if (!QuitOut && event.getPlayer().isOp() && event.getMessage().startsWith("/allowrejoin"))
{
String[] toks = event.getMessage().split(" ");
if (toks.length <= 1)
{
event.getPlayer().sendMessage("Missing Param!");
}
else
{
RejoinTimes.put(toks[1], System.currentTimeMillis());
event.getPlayer().sendMessage("Allowed " + toks[1] + " to rejoin!");
}
event.setCancelled(true);
}
}
protected void removePlayerFromRejoin(String name)
{
RejoinTimes.remove(name);
RejoinKit.remove(name);
RejoinTeam.remove(name);
RejoinHealth.remove(name);
}
}

View File

@ -25,15 +25,8 @@ import java.util.List;
public abstract class TeamGame extends Game
{
public long RejoinTime = 120000;
protected ArrayList<GameTeam> _places = new ArrayList<GameTeam>();
public NautHashMap<String, Long> RejoinTimes = new NautHashMap<String, Long>();
public NautHashMap<String, GameTeam> RejoinTeam = new NautHashMap<String, GameTeam>();
public NautHashMap<String, Kit> RejoinKit = new NautHashMap<String, Kit>();
public NautHashMap<String, Double> RejoinHealth = new NautHashMap<String, Double>();
public TeamGame(ArcadeManager manager, GameType gameType, Kit[] kits, String[] gameDesc)
{
super(manager, gameType, kits, gameDesc);
@ -74,137 +67,6 @@ public abstract class TeamGame extends Game
return;
team.RemovePlayer(player);
if (player.isDead())
return;
if (player.getWorld().getName().equalsIgnoreCase("world"))
return;
if (!QuitOut)
{
//Store
RejoinTimes.put(player.getName(), System.currentTimeMillis());
RejoinTeam.put(player.getName(), team);
if (GetKit(player) != null)
RejoinKit.put(player.getName(), GetKit(player));
RejoinHealth.put(player.getName(), player.getHealth());
if (!GetLocationStore().containsKey(player.getName()))
{
GetLocationStore().put(player.getName(), player.getLocation());
}
//Announcement
Announce(team.GetColor() + C.Bold + player.getName() + " has disconnected! " + UtilTime.convert(RejoinTime, 0, TimeUnit.MINUTES) + " minutes to rejoin.", false);
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void PlayerLoginAllow(PlayerLoginEvent event)
{
if (!InProgress() || QuitOut)
return;
//Rejoined
GameTeam team = RejoinTeam.remove(event.getPlayer().getName());
if (team != null && RejoinTimes.remove(event.getPlayer().getName()) != null)
{
team.AddPlayer(event.getPlayer(), true);
Announce(team.GetColor() + C.Bold + event.getPlayer().getName() + " has reconnected!", false);
Kit kit = RejoinKit.remove(event.getPlayer().getName());
if (kit != null)
_playerKit.put(event.getPlayer(), kit);
// final Player player = event.getPlayer();
// Bukkit.getScheduler().runTaskLater(Manager.getPlugin(), new Runnable()
// {
// @Override
// public void run()
// {
// if (RejoinHealth.containsKey(player.getName()))
// {
// double health = RejoinHealth.remove(player.getName());
// player.setHealth(health);
// player.sendMessage("DEBUG: restored hp to " + health);
// }
// }
// }, 20);
}
}
//Do this on Join, not Login, otherwise player no get heal.
@EventHandler (priority = EventPriority.MONITOR)
public void playerRejoinGame(PlayerJoinEvent event)
{
if (!InProgress() || QuitOut)
return;
Player player = event.getPlayer();
if (RejoinHealth.containsKey(player.getName()))
{
double health = RejoinHealth.remove(player.getName());
if (health > 0)
{
getArcadeManager().runSyncLater(() ->
{
player.setHealth(health);
}, 1L);
}
}
}
@EventHandler
public void PlayerRejoinExpire(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC || QuitOut)
return;
Iterator<String> rejoinIterator = RejoinTimes.keySet().iterator();
while (rejoinIterator.hasNext())
{
String name = rejoinIterator.next();
if (!UtilTime.elapsed(RejoinTimes.get(name), RejoinTime))
continue;
rejoinIterator.remove();
//Get Team (By Name)
GameTeam team = RejoinTeam.remove(name);
if (team != null)
Announce(team.GetColor() + C.Bold + name + " did not reconnect in time!", false);
RejoinKit.remove(name);
RejoinHealth.remove(name);
}
}
@EventHandler
public void RejoinCommand(PlayerCommandPreprocessEvent event)
{
if (!QuitOut && event.getPlayer().isOp() && event.getMessage().startsWith("/allowrejoin"))
{
String[] toks = event.getMessage().split(" ");
if (toks.length <= 1)
{
event.getPlayer().sendMessage("Missing Param!");
}
else
{
RejoinTimes.put(toks[1], System.currentTimeMillis());
event.getPlayer().sendMessage("Allowed " + toks[1] + " to rejoin!");
}
event.setCancelled(true);
}
}
public void EndCheck()
@ -312,12 +174,4 @@ public abstract class TeamGame extends Game
return players;
}
protected void removePlayerFromRejoin(String name)
{
RejoinTimes.remove(name);
RejoinKit.remove(name);
RejoinTeam.remove(name);
RejoinHealth.remove(name);
}
}

View File

@ -22,6 +22,14 @@ public class KitUHC extends ProgressingKit
};
private static final ItemStack[] PLAYER_ITEMS = {
new ItemStack(Material.STONE_SWORD),
new ItemStack(Material.STONE_PICKAXE),
new ItemStack(Material.STONE_AXE),
new ItemStack(Material.STONE_SPADE),
new ItemStack(Material.APPLE, 3),
};
private static final ItemStack IN_HAND = new ItemStack(Material.GOLD_SWORD);
public KitUHC(ArcadeManager manager)
@ -33,6 +41,6 @@ public class KitUHC extends ProgressingKit
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(PLAYER_ITEMS);
}
}

View File

@ -0,0 +1,57 @@
package nautilus.game.arcade.game.games.uhc;
import org.bukkit.WorldBorder;
public class UHCBorder
{
private static final int WARNING_TIME = 20;
private UHC _host;
private int _startingSize;
private WorldBorder _worldBorder;
public UHCBorder(UHC host, int startingSize)
{
_host = host;
_startingSize = startingSize;
}
public void prepare()
{
_worldBorder = _host.WorldData.World.getWorldBorder();
_worldBorder.setCenter(0, 0);
_worldBorder.setWarningTime(WARNING_TIME);
setSize(_startingSize, 0);
}
public void setSize(double size, long seconds)
{
_worldBorder.setSize(size * 2, seconds);
}
public void stop()
{
_worldBorder.setSize(_worldBorder.getSize());
_worldBorder.setSize(99999);
}
public double getSize()
{
if (_worldBorder == null)
{
return _startingSize;
}
return _worldBorder.getSize();
}
public double getMaxCords()
{
return getSize() / 2;
}
}

View File

@ -0,0 +1,64 @@
package nautilus.game.arcade.game.games.uhc;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.plugin.java.JavaPlugin;
public class UHCFreezer implements Listener
{
private UHC _host;
private Set<UUID> _frozenPlayers = new HashSet<>();
public UHCFreezer(UHC host)
{
_host = host;
JavaPlugin plugin = host.Manager.getPlugin();
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
public void freeze(Player player)
{
_frozenPlayers.add(player.getUniqueId());
}
public void unfreeze(Player player)
{
_frozenPlayers.remove(player.getUniqueId());
}
public void unfreeze()
{
_frozenPlayers.clear();
}
@EventHandler
public void onMove(PlayerMoveEvent event)
{
if (!_host.IsLive() || !_frozenPlayers.contains(event.getPlayer().getUniqueId()))
{
return;
}
Location from = event.getFrom();
Location to = event.getTo();
if (from.getX() == to.getX() && from.getZ() == to.getZ())
{
return;
}
event.setTo(from);
}
}

View File

@ -0,0 +1,86 @@
package nautilus.game.arcade.game.games.uhc;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.game.GameTeam;
public class UHCSolo extends UHC
{
public UHCSolo(ArcadeManager manager)
{
this(manager, GameType.UHCSolo);
}
public UHCSolo(ArcadeManager manager, GameType type)
{
super(manager, type);
DamageTeamSelf = true;
SpawnNearAllies = false;
}
@EventHandler
public void playerTeamGeneration(GameStateChangeEvent event)
{
if (event.GetState() != GameState.Recruit)
{
return;
}
_teamList = new ArrayList<>(Arrays.asList(_teamList.get(0)));
for (GameTeam team : _teamList)
{
team.SetName("Players");
team.SetColor(ChatColor.YELLOW);
}
}
@Override
public List<Player> getWinners()
{
if (GetState().ordinal() >= GameState.End.ordinal())
{
List<Player> places = GetTeamList().get(0).GetPlacements(true);
if (places.isEmpty() || !places.get(0).isOnline())
return Arrays.asList();
else
return Arrays.asList(places.get(0));
}
else
return null;
}
@Override
public List<Player> getLosers()
{
List<Player> winners = getWinners();
if (winners == null)
return null;
List<Player> losers = GetTeamList().get(0).GetPlayers(false);
losers.removeAll(winners);
return losers;
}
@Override
public String GetMode()
{
return "UHC Solo";
}
}

View File

@ -0,0 +1,125 @@
package nautilus.game.arcade.game.games.uhc;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerQuitEvent;
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.modules.TeamModule;
public class UHCTeams extends UHC
{
public UHCTeams(ArcadeManager manager)
{
this(manager, GameType.UHC);
}
public UHCTeams(ArcadeManager manager, GameType type)
{
super(manager, type);
FillTeamsInOrderToCount = 2;
DamageTeamSelf = false;
DontAllowOverfill = true;
// NEVER EVER EVER USE THIS!!!!!
//TeamMode = true;
// Load the Team Module
new TeamModule().register(this);
}
@EventHandler(priority = EventPriority.LOW)
public void PlayerQuit(PlayerQuitEvent event)
{
if (!InProgress())
return;
Player player = event.getPlayer();
GameTeam team = GetTeam(player);
if (team == null) return;
if (!team.IsAlive(player))
return;
team.RemovePlayer(player);
}
@EventHandler
public void TeamRename(GameStateChangeEvent event)
{
if (event.GetState() != GameState.Live)
{
return;
}
for (GameTeam team : GetTeamList())
{
// Big Team
if (team.GetSize() > 2)
{
team.SetName("Team " + team.GetName());
continue;
}
String name = "";
List<Player> players = team.GetPlayers(false);
for (int i = 0; i < players.size(); i++)
{
Player player = players.get(i);
name += player.getName();
if (i < players.size() - 1)
{
name += " & ";
}
}
team.SetName(name);
}
}
@Override
public List<Player> getWinners()
{
if (WinnerTeam == null)
return null;
return WinnerTeam.GetPlayers(false);
}
@Override
public List<Player> getLosers()
{
if (WinnerTeam == null)
return null;
List<Player> players = new ArrayList<>();
for (GameTeam team : GetTeamList())
{
if (team != WinnerTeam)
players.addAll(team.GetPlayers(false));
}
return players;
}
@Override
public String GetMode()
{
return "UHC Teams";
}
}

View File

@ -12,17 +12,19 @@ import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.game.games.uhc.UHC;
import nautilus.game.arcade.game.Game.GameState;
import nautilus.game.arcade.game.games.uhc.UHCSolo;
/**
* Assassins gamemode for UHC
*
* @author xXVevzZXx
*/
public class Assassins extends UHC
public class Assassins extends UHCSolo
{
private HashMap<Player, Player> _assassins;

View File

@ -8,14 +8,14 @@ import org.bukkit.event.block.BlockBreakEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.game.games.uhc.UHC;
import nautilus.game.arcade.game.games.uhc.UHCSolo;
/**
* BloodDiamonds gamemode for UHC
*
* @author xXVevzZXx
*/
public class BloodDiamonds extends UHC
public class BloodDiamonds extends UHCSolo
{
private HashMap<Material, Double> _oreDamage;

View File

@ -1,68 +0,0 @@
package nautilus.game.arcade.game.games.uhc.modes;
import mineplex.core.itemstack.ItemBuilder;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.game.games.uhc.UHC;
import nautilus.game.arcade.game.modules.CutCleanModule;
import nautilus.game.arcade.game.modules.ItemGiverModule;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
/*
* The CutClean variant of UHC
*
* This is identical to UHC however iron and gold ore will immediately smelt
* and mob drops will be immediately cooked
*/
public class CutClean extends UHC
{
// The amount of steak to give at the start of the game
private static final int STEAK_AMOUNT = 15;
public CutClean(ArcadeManager manager)
{
super(manager, GameType.Brawl);
new CutCleanModule()
.associateBlockDrop(
Material.GOLD_ORE,
new ItemBuilder(Material.GOLD_INGOT).build()
)
.associateBlockDrop(
Material.IRON_ORE,
new ItemBuilder(Material.IRON_INGOT).build()
)
.associateMobDrop(
Material.RAW_BEEF,
new ItemBuilder(Material.COOKED_BEEF).build()
)
.associateMobDrop(
Material.RAW_CHICKEN,
new ItemBuilder(Material.COOKED_CHICKEN).build()
)
.associateMobDrop(
Material.RAW_FISH,
new ItemBuilder(Material.COOKED_FISH).build()
)
.associateMobDrop(
Material.PORK,
new ItemBuilder(Material.GRILLED_PORK).build()
)
.associateMobDrop(
Material.RABBIT,
new ItemBuilder(Material.COOKED_RABBIT).build()
)
.register(this);
new ItemGiverModule()
.withItem(new ItemStack(Material.COOKED_BEEF, STEAK_AMOUNT))
.register(this);
}
@Override
public String GetMode()
{
return "Cut Clean";
}
}

View File

@ -1,28 +1,31 @@
package nautilus.game.arcade.game.games.uhc.modes;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilItem;
import mineplex.core.common.util.UtilMath;
import mineplex.core.itemstack.ItemBuilder;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.game.games.uhc.UHC;
import nautilus.game.arcade.game.modules.CutCleanModule;
import nautilus.game.arcade.game.modules.ItemGiverModule;
import nautilus.game.arcade.game.modules.OreVeinEditorModule;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack;
import java.util.List;
import java.util.Set;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilItem;
import mineplex.core.common.util.UtilMath;
import mineplex.core.itemstack.ItemBuilder;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.game.games.uhc.UHCSolo;
import nautilus.game.arcade.game.modules.CutCleanModule;
import nautilus.game.arcade.game.modules.ItemGiverModule;
import nautilus.game.arcade.game.modules.OreVeinEditorModule;
/**
* GodBattles gamemode for UHC
*/
public class GodBattles extends UHC
public class GodBattles extends UHCSolo
{
// The set of materials which will be considered as an ore
private static final Set<Material> ORE_MATERIALS = Sets.newHashSet(

View File

@ -1,11 +1,5 @@
package nautilus.game.arcade.game.modules;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.itemstack.ItemBuilder;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.game.GameTeam;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
@ -20,11 +14,18 @@ import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.material.MaterialData;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.itemstack.ItemBuilder;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.game.GameTeam;
public class PlayerHeadModule extends Module
{
private boolean _disableCraftingRegularApples = true;
@ -36,7 +37,7 @@ public class PlayerHeadModule extends Module
ShapedRecipe headApple2 = new ShapedRecipe(new ItemStack(Material.GOLDEN_APPLE, 1));
headApple2.shape("GGG", "GHG", "GGG");
headApple2.setIngredient('G', Material.GOLD_INGOT);
headApple2.setIngredient('H', new MaterialData(Material.SKULL_ITEM, (byte) 3));
headApple2.setIngredient('H', new MaterialData(Material.SKULL_ITEM, (byte) 2));
UtilServer.getServer().addRecipe(headApple2);
}
@ -69,7 +70,7 @@ public class PlayerHeadModule extends Module
if (event.getItem().getItemStack().getType() == Material.SKULL_ITEM)
{
UtilPlayer.message(event.getPlayer(), " ");
UtilPlayer.message(event.getPlayer(), C.cGreen + C.Bold + "You picked up a Player Head!");
UtilPlayer.message(event.getPlayer(), C.cGreen + C.Bold + "You picked up a Golden Head!");
UtilPlayer.message(event.getPlayer(), C.cWhite + "Craft a Golden Head Apple with it for ultimate healing.");
UtilPlayer.message(event.getPlayer(), C.cWhite + "Use the recipe for Golden Apple, but Head replaces Apple.");
UtilPlayer.message(event.getPlayer(), " ");
@ -86,15 +87,7 @@ public class PlayerHeadModule extends Module
if (team == null)
return;
// Skull Drop
ItemStack stack = new ItemBuilder(Material.SKULL_ITEM)
.setData((short) 3)
.setAmount(1)
.setTitle(team.GetColor() + player.getName() + "'s Head")
.setPlayerHead(player.getName())
.build();
event.getDrops().add(stack);
event.getDrops().add(getGoldenHead());
}
@EventHandler
@ -164,4 +157,13 @@ public class PlayerHeadModule extends Module
return;
}
}
public static final ItemStack getGoldenHead()
{
return new ItemBuilder(Material.SKULL_ITEM)
.setData((short) 2)
.setAmount(1)
.setTitle(C.cGoldB + "Golden Head")
.build();
}
}