Tutorial Work
This commit is contained in:
parent
b606c8da22
commit
976779b9f2
|
@ -1,18 +1,21 @@
|
||||||
package mineplex.core.common.objective;
|
package mineplex.core.common.objective;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
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.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An Objective represents
|
* An Objective represents
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public abstract class Objective<Data extends ObjectiveData>
|
public abstract class Objective<Data extends ObjectiveData> implements Listener
|
||||||
{
|
{
|
||||||
private JavaPlugin _plugin;
|
private JavaPlugin _plugin;
|
||||||
private String _name;
|
private String _name;
|
||||||
|
@ -29,6 +32,8 @@ public abstract class Objective<Data extends ObjectiveData>
|
||||||
|
|
||||||
_active = new HashMap<>();
|
_active = new HashMap<>();
|
||||||
_listeners = new LinkedList<>();
|
_listeners = new LinkedList<>();
|
||||||
|
|
||||||
|
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public JavaPlugin getPlugin()
|
public JavaPlugin getPlugin()
|
||||||
|
@ -78,7 +83,7 @@ public abstract class Objective<Data extends ObjectiveData>
|
||||||
Data data = getData(player);
|
Data data = getData(player);
|
||||||
_active.put(player.getUniqueId(), data);
|
_active.put(player.getUniqueId(), data);
|
||||||
|
|
||||||
_listeners.forEach(listener -> listener.startObjective(player, this));
|
_listeners.forEach(listener -> listener.onObjectiveStart(player, this));
|
||||||
|
|
||||||
customStart(player);
|
customStart(player);
|
||||||
}
|
}
|
||||||
|
@ -113,19 +118,46 @@ public abstract class Objective<Data extends ObjectiveData>
|
||||||
*/
|
*/
|
||||||
protected abstract void completeGoal(ObjectiveGoal goal, Player player);
|
protected abstract void completeGoal(ObjectiveGoal goal, Player player);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all the ObjectiveGoals used by this Objective
|
||||||
|
* Can return <code>null</code>
|
||||||
|
*/
|
||||||
|
protected abstract List<ObjectiveGoal> getGoals();
|
||||||
|
|
||||||
protected final void finish(Player player)
|
protected final void finish(Player player)
|
||||||
{
|
{
|
||||||
_active.remove(player.getUniqueId());
|
_active.remove(player.getUniqueId());
|
||||||
|
|
||||||
_listeners.forEach(listener -> listener.finishObjective(player, this));
|
_listeners.forEach(listener -> listener.onObjectiveFinish(player, this));
|
||||||
|
|
||||||
customFinish(player);
|
customFinish(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void customFinish(Player player);
|
protected abstract void customFinish(Player player);
|
||||||
|
|
||||||
|
public boolean contains(Player player)
|
||||||
|
{
|
||||||
|
return contains(player.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean contains(UUID uuid)
|
||||||
|
{
|
||||||
|
return _active.containsKey(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final List<UUID> getActive()
|
||||||
|
{
|
||||||
|
return new LinkedList<UUID>(_active.keySet());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister all listeners associated with this Objective
|
* Unregister all listeners associated with this Objective
|
||||||
*/
|
*/
|
||||||
public abstract void unregisterAll();
|
public final void unregisterAll()
|
||||||
|
{
|
||||||
|
HandlerList.unregisterAll(this);
|
||||||
|
|
||||||
|
List<ObjectiveGoal> goals = getGoals();
|
||||||
|
if (goals != null) goals.forEach(HandlerList::unregisterAll);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,4 +37,26 @@ public abstract class ObjectiveGoal implements Listener
|
||||||
{
|
{
|
||||||
return _active.contains(player.getUniqueId());
|
return _active.contains(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void start(Player player)
|
||||||
|
{
|
||||||
|
_active.add(player.getUniqueId());
|
||||||
|
customStart(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract void customStart(Player player);
|
||||||
|
|
||||||
|
protected abstract void customFinish(Player player);
|
||||||
|
|
||||||
|
protected void finish(Player player)
|
||||||
|
{
|
||||||
|
if (_active.contains(player.getUniqueId()))
|
||||||
|
{
|
||||||
|
_active.remove(player.getUniqueId());
|
||||||
|
customFinish(player);
|
||||||
|
|
||||||
|
_objective.completeGoal(this, player);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public interface ObjectiveListener
|
public interface ObjectiveListener
|
||||||
{
|
{
|
||||||
public void startObjective(Player player, Objective objective);
|
public void onObjectiveStart(Player player, Objective objective);
|
||||||
|
|
||||||
public void finishObjective(Player player, Objective objective);
|
public void onObjectiveFinish(Player player, Objective objective);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ 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;
|
||||||
|
|
||||||
public class OrderedObjective extends Objective<OrderedObjectiveData>
|
public abstract class OrderedObjective extends Objective<OrderedObjectiveData>
|
||||||
{
|
{
|
||||||
private List<ObjectiveGoal> _goals;
|
private List<ObjectiveGoal> _goals;
|
||||||
|
|
||||||
|
@ -18,25 +18,13 @@ public class OrderedObjective extends Objective<OrderedObjectiveData>
|
||||||
_goals = new ArrayList<>();
|
_goals = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addGoal(ObjectiveGoal goal)
|
protected void addGoal(ObjectiveGoal goal)
|
||||||
{
|
{
|
||||||
_goals.add(goal);
|
_goals.add(goal);
|
||||||
|
|
||||||
getPlugin().getServer().getPluginManager().registerEvents(goal, getPlugin());
|
getPlugin().getServer().getPluginManager().registerEvents(goal, getPlugin());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void customStart(Player player)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void customLeave(Player player)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected OrderedObjectiveData getData(Player player)
|
protected OrderedObjectiveData getData(Player player)
|
||||||
{
|
{
|
||||||
|
@ -46,18 +34,27 @@ public class OrderedObjective extends Objective<OrderedObjectiveData>
|
||||||
@Override
|
@Override
|
||||||
protected void completeGoal(ObjectiveGoal goal, Player player)
|
protected void completeGoal(ObjectiveGoal goal, Player player)
|
||||||
{
|
{
|
||||||
|
int index = _goals.indexOf(goal);
|
||||||
|
|
||||||
|
OrderedObjectiveData data = getData(player);
|
||||||
|
assert index == data.getIndex();
|
||||||
|
|
||||||
|
if (data.getIndex() >= _goals.size())
|
||||||
|
{
|
||||||
|
finish(player);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int nextIndex = data.getIndex() + 1;
|
||||||
|
ObjectiveGoal nextGoal = _goals.get(nextIndex);
|
||||||
|
data.setIndex(nextIndex);
|
||||||
|
nextGoal.start(player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customFinish(Player player)
|
protected List<ObjectiveGoal> getGoals()
|
||||||
{
|
{
|
||||||
|
return _goals;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unregisterAll()
|
|
||||||
{
|
|
||||||
_goals.forEach(HandlerList::unregisterAll);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -8,4 +8,14 @@ public class OrderedObjectiveData extends ObjectiveData
|
||||||
{
|
{
|
||||||
_index = 0;
|
_index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getIndex()
|
||||||
|
{
|
||||||
|
return _index;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndex(int index)
|
||||||
|
{
|
||||||
|
_index = index;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
package mineplex.core.common.objective;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
public abstract class SingleObjective extends Objective<ObjectiveData>
|
||||||
|
{
|
||||||
|
private final ObjectiveData _nullData;
|
||||||
|
|
||||||
|
public SingleObjective(JavaPlugin plugin, String name, String description)
|
||||||
|
{
|
||||||
|
super(plugin, name, description);
|
||||||
|
|
||||||
|
_nullData = new ObjectiveData();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ObjectiveData getData(Player player)
|
||||||
|
{
|
||||||
|
return _nullData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void completeGoal(ObjectiveGoal goal, Player player)
|
||||||
|
{
|
||||||
|
// Do Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<ObjectiveGoal> getGoals()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -73,7 +73,7 @@ public abstract class Tutorial implements Listener, ObjectiveListener
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finishObjective(Player player, Objective objective)
|
public void onObjectiveFinish(Player player, Objective objective)
|
||||||
{
|
{
|
||||||
int index = _objectives.indexOf(objective);
|
int index = _objectives.indexOf(objective);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,24 @@
|
||||||
package mineplex.game.clans.tutorial.tutorials.combat;
|
package mineplex.game.clans.tutorial.tutorials.combat;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import mineplex.core.common.objective.Objective;
|
||||||
import mineplex.game.clans.tutorial.Tutorial;
|
import mineplex.game.clans.tutorial.Tutorial;
|
||||||
|
import mineplex.game.clans.tutorial.tutorials.combat.objectives.EquipArmorObjective;
|
||||||
|
|
||||||
public class CombatTutorial extends Tutorial
|
public class CombatTutorial extends Tutorial
|
||||||
{
|
{
|
||||||
public CombatTutorial(JavaPlugin plugin)
|
public CombatTutorial(JavaPlugin plugin)
|
||||||
{
|
{
|
||||||
super(plugin, "Combat Tutorial", "combat");
|
super(plugin, "Combat Tutorial", "combat");
|
||||||
|
|
||||||
|
addObjective(new EquipArmorObjective(plugin));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onObjectiveStart(Player player, Objective objective)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
package mineplex.game.clans.tutorial.tutorials.combat.objectives;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import mineplex.core.common.objective.SingleObjective;
|
||||||
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
|
import mineplex.core.updater.UpdateType;
|
||||||
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
|
||||||
|
public class EquipArmorObjective extends SingleObjective
|
||||||
|
{
|
||||||
|
public EquipArmorObjective(JavaPlugin plugin)
|
||||||
|
{
|
||||||
|
super(plugin, "Equip Armor", "Equip Armor");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customStart(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customLeave(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void customFinish(Player player)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void checkArmor(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.FAST)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (UUID uuid : getActive())
|
||||||
|
{
|
||||||
|
Player player = UtilPlayer.searchExact(uuid);
|
||||||
|
|
||||||
|
if (player == null)
|
||||||
|
{
|
||||||
|
System.out.println("Tutorial Error: " + getName() + " has UUID with null player: " + uuid);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEquipped(player))
|
||||||
|
finish(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isEquipped(Player player)
|
||||||
|
{
|
||||||
|
boolean equipped = true;
|
||||||
|
|
||||||
|
if (player.getInventory().getHelmet() == null || player.getInventory().getHelmet().getType() != Material.IRON_HELMET ||
|
||||||
|
player.getInventory().getChestplate() == null || player.getInventory().getChestplate().getType() != Material.IRON_CHESTPLATE ||
|
||||||
|
player.getInventory().getLeggings() == null || player.getInventory().getLeggings().getType() != Material.IRON_LEGGINGS ||
|
||||||
|
player.getInventory().getBoots() == null || player.getInventory().getBoots().getType() != Material.IRON_BOOTS)
|
||||||
|
equipped = false;
|
||||||
|
|
||||||
|
return equipped;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue