Objectives!
This commit is contained in:
parent
e53b8616d1
commit
4e85a315f9
@ -92,7 +92,7 @@ public class Schematic
|
|||||||
DyeColor color = DyeColor.getByWoolData(data);
|
DyeColor color = DyeColor.getByWoolData(data);
|
||||||
if (color != null)
|
if (color != null)
|
||||||
{
|
{
|
||||||
map.addLocation(color, origin.clone().add(x, y, z));
|
map.addLocation(color, origin.clone().add(x + 0.5, y + 0.5, z + 0.5));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package mineplex.core.common.objective;
|
package mineplex.core.common.objective;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -10,6 +12,9 @@ import org.bukkit.event.HandlerList;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
|
import mineplex.core.common.util.UtilServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An Objective represents a set of goals that need to be completed to move on to the next Objective in the quest
|
* An Objective represents a set of goals that need to be completed to move on to the next Objective in the quest
|
||||||
*/
|
*/
|
||||||
@ -159,6 +164,20 @@ public abstract class Objective<Plugin, Data extends ObjectiveData> implements L
|
|||||||
return new LinkedList<UUID>(_active.keySet());
|
return new LinkedList<UUID>(_active.keySet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected final Player[] getActivePlayers()
|
||||||
|
{
|
||||||
|
Set<UUID> uuidSet = _active.keySet();
|
||||||
|
Player[] players = new Player[uuidSet.size()];
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
for (UUID uuid : uuidSet)
|
||||||
|
{
|
||||||
|
players[index] = UtilPlayer.searchExact(uuid);
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return players;
|
||||||
|
}
|
||||||
|
|
||||||
public Data getData(Player player)
|
public Data getData(Player player)
|
||||||
{
|
{
|
||||||
return _active.get(player.getUniqueId());
|
return _active.get(player.getUniqueId());
|
||||||
@ -174,4 +193,6 @@ public abstract class Objective<Plugin, Data extends ObjectiveData> implements L
|
|||||||
List<ObjectiveGoal> goals = getGoals();
|
List<ObjectiveGoal> goals = getGoals();
|
||||||
if (goals != null) goals.forEach(HandlerList::unregisterAll);
|
if (goals != null) goals.forEach(HandlerList::unregisterAll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abstract void addScoreboardLines(Player player, List<String> lines);
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ChatColor;
|
||||||
|
|
||||||
public abstract class OrderedObjective<Plugin> extends Objective<Plugin, OrderedObjectiveData>
|
public abstract class OrderedObjective<Plugin> extends Objective<Plugin, OrderedObjectiveData>
|
||||||
{
|
{
|
||||||
private List<ObjectiveGoal> _goals;
|
private List<ObjectiveGoal> _goals;
|
||||||
@ -68,4 +70,28 @@ public abstract class OrderedObjective<Plugin> extends Objective<Plugin, Ordered
|
|||||||
{
|
{
|
||||||
return _goals;
|
return _goals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addScoreboardLines(Player player, List<String> lines)
|
||||||
|
{
|
||||||
|
if (contains(player))
|
||||||
|
{
|
||||||
|
OrderedObjectiveData data = getData(player);
|
||||||
|
lines.add(" " + getName());
|
||||||
|
|
||||||
|
for (int i = 0; i < _goals.size(); i++)
|
||||||
|
{
|
||||||
|
String prefix;
|
||||||
|
|
||||||
|
if (i > data.getIndex())
|
||||||
|
prefix = ChatColor.RED.toString();
|
||||||
|
else if (i == data.getIndex())
|
||||||
|
prefix = ">" + ChatColor.YELLOW.toString();
|
||||||
|
else
|
||||||
|
prefix = ChatColor.GREEN.toString();
|
||||||
|
|
||||||
|
lines.add(" " + prefix + _goals.get(i).getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -35,4 +35,12 @@ public abstract class SingleObjective<Plugin> extends Objective<Plugin, Objectiv
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addScoreboardLines(Player player, List<String> lines)
|
||||||
|
{
|
||||||
|
if (contains(player))
|
||||||
|
{
|
||||||
|
lines.add(" " + getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -4,6 +4,7 @@ import java.util.HashMap;
|
|||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import mineplex.core.MiniPlugin;
|
import mineplex.core.MiniPlugin;
|
||||||
@ -12,6 +13,8 @@ import mineplex.core.updater.event.UpdateEvent;
|
|||||||
|
|
||||||
public class ClansMessageManager extends MiniPlugin
|
public class ClansMessageManager extends MiniPlugin
|
||||||
{
|
{
|
||||||
|
private static final Message BLANK_MESSAGE = new Message("", "", 20);
|
||||||
|
|
||||||
private HashMap<Player, Message> _playerMessageMap;
|
private HashMap<Player, Message> _playerMessageMap;
|
||||||
|
|
||||||
public ClansMessageManager(JavaPlugin plugin)
|
public ClansMessageManager(JavaPlugin plugin)
|
||||||
@ -42,4 +45,21 @@ public class ClansMessageManager extends MiniPlugin
|
|||||||
_playerMessageMap.put(player, message);
|
_playerMessageMap.put(player, message);
|
||||||
if (displayNow) message.send(player);
|
if (displayNow) message.send(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removePlayer(Player player)
|
||||||
|
{
|
||||||
|
removePlayer(player, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePlayer(Player player, boolean sendBlankMessage)
|
||||||
|
{
|
||||||
|
BLANK_MESSAGE.send(player);
|
||||||
|
_playerMessageMap.remove(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onQuit(PlayerQuitEvent event)
|
||||||
|
{
|
||||||
|
removePlayer(event.getPlayer(), false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package mineplex.game.clans.tutorial;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
@ -102,6 +103,11 @@ public abstract class Tutorial implements Listener, ObjectiveListener
|
|||||||
return _guiData;
|
return _guiData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ClansMessageManager getMessage()
|
||||||
|
{
|
||||||
|
return _message;
|
||||||
|
}
|
||||||
|
|
||||||
public final String getTaskIdentifier()
|
public final String getTaskIdentifier()
|
||||||
{
|
{
|
||||||
return "clans.tutorial." + _taskIdentifier;
|
return "clans.tutorial." + _taskIdentifier;
|
||||||
@ -164,6 +170,11 @@ public abstract class Tutorial implements Listener, ObjectiveListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<Player> getPlayers()
|
||||||
|
{
|
||||||
|
return _playerSessionMap.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the player finishes the tutorial
|
* Called when the player finishes the tutorial
|
||||||
*/
|
*/
|
||||||
@ -196,7 +207,7 @@ public abstract class Tutorial implements Listener, ObjectiveListener
|
|||||||
int objectiveIndex = session.getObjectiveIndex();
|
int objectiveIndex = session.getObjectiveIndex();
|
||||||
Objective currentObjective = _objectives.get(objectiveIndex);
|
Objective currentObjective = _objectives.get(objectiveIndex);
|
||||||
lines.add(C.cGoldB + "Current Task (" + (objectiveIndex + 1) + "/" + _objectives.size() + ")");
|
lines.add(C.cGoldB + "Current Task (" + (objectiveIndex + 1) + "/" + _objectives.size() + ")");
|
||||||
lines.add(" " + currentObjective.getName());
|
currentObjective.addScoreboardLines(player, lines);
|
||||||
}
|
}
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,24 @@
|
|||||||
package mineplex.game.clans.tutorial.tutorials.clans;
|
package mineplex.game.clans.tutorial.tutorials.clans;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import mineplex.core.common.Pair;
|
||||||
|
import mineplex.core.common.util.UtilAlg;
|
||||||
|
import mineplex.core.updater.UpdateType;
|
||||||
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.game.clans.message.ClansMessageManager;
|
import mineplex.game.clans.message.ClansMessageManager;
|
||||||
import mineplex.game.clans.tutorial.Tutorial;
|
import mineplex.game.clans.tutorial.Tutorial;
|
||||||
|
import mineplex.game.clans.tutorial.TutorialRegion;
|
||||||
import mineplex.game.clans.tutorial.TutorialWorldManager;
|
import mineplex.game.clans.tutorial.TutorialWorldManager;
|
||||||
|
import mineplex.game.clans.tutorial.tutorials.clans.objective.ClanObjective;
|
||||||
import mineplex.game.clans.tutorial.tutorials.clans.objective.LeaveSpawnObjective;
|
import mineplex.game.clans.tutorial.tutorials.clans.objective.LeaveSpawnObjective;
|
||||||
|
|
||||||
public class ClansMainTutorial extends Tutorial
|
public class ClansMainTutorial extends Tutorial
|
||||||
@ -28,12 +37,13 @@ public class ClansMainTutorial extends Tutorial
|
|||||||
}
|
}
|
||||||
|
|
||||||
addObjective(new LeaveSpawnObjective(this, plugin));
|
addObjective(new LeaveSpawnObjective(this, plugin));
|
||||||
|
addObjective(new ClanObjective(this, plugin));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onFinish(Player player)
|
protected void onFinish(Player player)
|
||||||
{
|
{
|
||||||
|
getMessage().removePlayer(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -45,6 +55,49 @@ public class ClansMainTutorial extends Tutorial
|
|||||||
@Override
|
@Override
|
||||||
protected void onQuit(Player player)
|
protected void onQuit(Player player)
|
||||||
{
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void checkInRegion(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.SEC)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (Player player : getPlayers())
|
||||||
|
{
|
||||||
|
TutorialRegion region = getRegion(player);
|
||||||
|
|
||||||
|
if (!isInRegion(player.getLocation(), region))
|
||||||
|
{
|
||||||
|
player.teleport(getSpawn(region));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location getSpawn(TutorialRegion region)
|
||||||
|
{
|
||||||
|
return region.getLocationMap().getLocations(DyeColor.RED).get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInSpawn(Player player)
|
||||||
|
{
|
||||||
|
return isInSpawn(player.getLocation(), getRegion(player));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInSpawn(Location location, TutorialRegion region)
|
||||||
|
{
|
||||||
|
List<Location> locs = region.getLocationMap().getLocations(DyeColor.ORANGE);
|
||||||
|
return UtilAlg.inBoundingBox(location, locs.get(0), locs.get(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInRegion(Player player)
|
||||||
|
{
|
||||||
|
return isInRegion(player.getLocation(), getRegion(player));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInRegion(Location location, TutorialRegion region)
|
||||||
|
{
|
||||||
|
List<Location> locs = region.getLocationMap().getLocations(DyeColor.GREEN);
|
||||||
|
return UtilAlg.inBoundingBox(location, locs.get(0), locs.get(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
package mineplex.game.clans.tutorial.tutorials.clans.objective;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import mineplex.core.common.objective.OrderedObjective;
|
||||||
|
import mineplex.game.clans.tutorial.tutorials.clans.ClansMainTutorial;
|
||||||
|
import mineplex.game.clans.tutorial.tutorials.clans.objective.goals.ClaimLandGoal;
|
||||||
|
import mineplex.game.clans.tutorial.tutorials.clans.objective.goals.ClanDetailsGoal;
|
||||||
|
import mineplex.game.clans.tutorial.tutorials.clans.objective.goals.CreateClanGoal;
|
||||||
|
|
||||||
|
public class ClanObjective extends OrderedObjective<ClansMainTutorial>
|
||||||
|
{
|
||||||
|
public ClanObjective(ClansMainTutorial clansMainTutorial, JavaPlugin javaPlugin)
|
||||||
|
{
|
||||||
|
super(clansMainTutorial, javaPlugin, "Clans", "Create clan with /c create <name>");
|
||||||
|
|
||||||
|
addGoal(new CreateClanGoal(this));
|
||||||
|
addGoal(new ClanDetailsGoal(this));
|
||||||
|
addGoal(new ClaimLandGoal(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customLeave(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customFinish(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,12 @@
|
|||||||
package mineplex.game.clans.tutorial.tutorials.clans.objective;
|
package mineplex.game.clans.tutorial.tutorials.clans.objective;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import mineplex.core.common.objective.SingleObjective;
|
import mineplex.core.common.objective.SingleObjective;
|
||||||
|
import mineplex.core.updater.UpdateType;
|
||||||
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.game.clans.tutorial.tutorials.clans.ClansMainTutorial;
|
import mineplex.game.clans.tutorial.tutorials.clans.ClansMainTutorial;
|
||||||
|
|
||||||
public class LeaveSpawnObjective extends SingleObjective<ClansMainTutorial>
|
public class LeaveSpawnObjective extends SingleObjective<ClansMainTutorial>
|
||||||
@ -30,4 +33,19 @@ public class LeaveSpawnObjective extends SingleObjective<ClansMainTutorial>
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void checkRegion(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.FAST)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (Player player : getActivePlayers())
|
||||||
|
{
|
||||||
|
if (!getPlugin().isInSpawn(player))
|
||||||
|
{
|
||||||
|
finish(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
package mineplex.game.clans.tutorial.tutorials.clans.objective.goals;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
|
||||||
|
import mineplex.core.common.objective.Objective;
|
||||||
|
import mineplex.core.common.objective.ObjectiveGoal;
|
||||||
|
import mineplex.game.clans.clans.event.PlayerPreClaimTerritoryEvent;
|
||||||
|
|
||||||
|
public class ClaimLandGoal extends ObjectiveGoal
|
||||||
|
{
|
||||||
|
public ClaimLandGoal(Objective objective)
|
||||||
|
{
|
||||||
|
super(objective, "Claim Land", "Claim land with /c claim");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customStart(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customFinish(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onClaim(PlayerPreClaimTerritoryEvent event)
|
||||||
|
{
|
||||||
|
if (contains(event.getClaimer()))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
finish(event.getClaimer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package mineplex.game.clans.tutorial.tutorials.clans.objective.goals;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
|
||||||
|
import mineplex.core.common.objective.Objective;
|
||||||
|
import mineplex.core.common.objective.ObjectiveGoal;
|
||||||
|
import mineplex.game.clans.clans.event.ClansCommandExecutedEvent;
|
||||||
|
|
||||||
|
public class ClanDetailsGoal extends ObjectiveGoal
|
||||||
|
{
|
||||||
|
public ClanDetailsGoal(Objective objective)
|
||||||
|
{
|
||||||
|
super(objective, "View Clan Details", "View Clan Details with /c");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customStart(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customFinish(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onClanInfo(ClansCommandExecutedEvent event)
|
||||||
|
{
|
||||||
|
if (contains(event.getPlayer()))
|
||||||
|
{
|
||||||
|
if (event.getCommand().equalsIgnoreCase("info"))
|
||||||
|
{
|
||||||
|
finish(event.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package mineplex.game.clans.tutorial.tutorials.clans.objective.goals;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
|
||||||
|
import mineplex.core.common.objective.Objective;
|
||||||
|
import mineplex.core.common.objective.ObjectiveGoal;
|
||||||
|
import mineplex.game.clans.clans.event.ClanCreatedEvent;
|
||||||
|
|
||||||
|
public class CreateClanGoal extends ObjectiveGoal
|
||||||
|
{
|
||||||
|
public CreateClanGoal(Objective objective)
|
||||||
|
{
|
||||||
|
super(objective, "Create a Clan", "Create a Clan");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customStart(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customFinish(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onClanCreate(ClanCreatedEvent event)
|
||||||
|
{
|
||||||
|
if (contains(event.getFounder()))
|
||||||
|
{
|
||||||
|
finish(event.getFounder());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user