Tutorial Work
This commit is contained in:
parent
b606c8da22
commit
976779b9f2
|
@ -1,18 +1,21 @@
|
|||
package mineplex.core.common.objective;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
/**
|
||||
* An Objective represents
|
||||
*
|
||||
*/
|
||||
public abstract class Objective<Data extends ObjectiveData>
|
||||
public abstract class Objective<Data extends ObjectiveData> implements Listener
|
||||
{
|
||||
private JavaPlugin _plugin;
|
||||
private String _name;
|
||||
|
@ -29,6 +32,8 @@ public abstract class Objective<Data extends ObjectiveData>
|
|||
|
||||
_active = new HashMap<>();
|
||||
_listeners = new LinkedList<>();
|
||||
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
public JavaPlugin getPlugin()
|
||||
|
@ -78,7 +83,7 @@ public abstract class Objective<Data extends ObjectiveData>
|
|||
Data data = getData(player);
|
||||
_active.put(player.getUniqueId(), data);
|
||||
|
||||
_listeners.forEach(listener -> listener.startObjective(player, this));
|
||||
_listeners.forEach(listener -> listener.onObjectiveStart(player, this));
|
||||
|
||||
customStart(player);
|
||||
}
|
||||
|
@ -113,19 +118,46 @@ public abstract class Objective<Data extends ObjectiveData>
|
|||
*/
|
||||
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)
|
||||
{
|
||||
_active.remove(player.getUniqueId());
|
||||
|
||||
_listeners.forEach(listener -> listener.finishObjective(player, this));
|
||||
_listeners.forEach(listener -> listener.onObjectiveFinish(player, this));
|
||||
|
||||
customFinish(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
|
||||
*/
|
||||
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());
|
||||
}
|
||||
|
||||
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 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.plugin.java.JavaPlugin;
|
||||
|
||||
public class OrderedObjective extends Objective<OrderedObjectiveData>
|
||||
public abstract class OrderedObjective extends Objective<OrderedObjectiveData>
|
||||
{
|
||||
private List<ObjectiveGoal> _goals;
|
||||
|
||||
|
@ -18,25 +18,13 @@ public class OrderedObjective extends Objective<OrderedObjectiveData>
|
|||
_goals = new ArrayList<>();
|
||||
}
|
||||
|
||||
private void addGoal(ObjectiveGoal goal)
|
||||
protected void addGoal(ObjectiveGoal goal)
|
||||
{
|
||||
_goals.add(goal);
|
||||
|
||||
getPlugin().getServer().getPluginManager().registerEvents(goal, getPlugin());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void customStart(Player player)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void customLeave(Player player)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected OrderedObjectiveData getData(Player player)
|
||||
{
|
||||
|
@ -46,18 +34,27 @@ public class OrderedObjective extends Objective<OrderedObjectiveData>
|
|||
@Override
|
||||
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
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
public void finishObjective(Player player, Objective objective)
|
||||
public void onObjectiveFinish(Player player, Objective objective)
|
||||
{
|
||||
int index = _objectives.indexOf(objective);
|
||||
}
|
||||
|
|
|
@ -1,13 +1,24 @@
|
|||
package mineplex.game.clans.tutorial.tutorials.combat;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import mineplex.core.common.objective.Objective;
|
||||
import mineplex.game.clans.tutorial.Tutorial;
|
||||
import mineplex.game.clans.tutorial.tutorials.combat.objectives.EquipArmorObjective;
|
||||
|
||||
public class CombatTutorial extends Tutorial
|
||||
{
|
||||
public CombatTutorial(JavaPlugin plugin)
|
||||
{
|
||||
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