Merge branch 'clans/beta' of github.com:Mineplex-LLC/Minecraft-PC into clans/beta

This commit is contained in:
Joseph Prezioso Jr 2016-03-08 16:08:14 -05:00
commit ac91ba690c
58 changed files with 1473 additions and 145 deletions

View File

@ -0,0 +1,46 @@
package mineplex.core.common;
import org.bukkit.Material;
public class MaterialData
{
private final Material _material;
private final byte _data;
private MaterialData(Material material, byte data)
{
_material = material;
_data = data;
}
public static MaterialData of(Material material)
{
return new MaterialData(material, (byte) 0);
}
public static MaterialData of(Material material, byte data)
{
return new MaterialData(material, data);
}
@Override
public boolean equals(Object o)
{
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MaterialData that = (MaterialData) o;
if (_data != that._data) return false;
return _material == that._material;
}
@Override
public int hashCode()
{
int result = _material.hashCode();
result = 31 * result + (int) _data;
return result;
}
}

View File

@ -0,0 +1,170 @@
package mineplex.core.common.objective;
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 a set of goals that need to be completed to move on to the next Objective in the quest
*/
public abstract class Objective<Data extends ObjectiveData> implements Listener
{
private JavaPlugin _plugin;
private String _name;
private String _description;
private HashMap<UUID, Data> _active;
private List<ObjectiveListener> _listeners;
public Objective(JavaPlugin plugin, String name, String description)
{
_plugin = plugin;
_name = name;
_description = description;
_active = new HashMap<>();
_listeners = new LinkedList<>();
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
public JavaPlugin getPlugin()
{
return _plugin;
}
/**
* Get the name of this Objective
*/
public String getName()
{
return _name;
}
/**
* Get the description of this Objective
*/
public String getDescription()
{
return _description;
}
/**
* Add an ObjectiveListener to this Objective
* @param listener
*/
public void addListener(ObjectiveListener listener)
{
_listeners.add(listener);
}
/**
* Remove all ObjectiveListeners from this Objective
*/
public void clearListeners()
{
_listeners.clear();
}
/**
* Start this Objective for a player
* @param player
*/
public void start(Player player)
{
System.out.println(String.format("Tutorial> [%s] started objective [%s]", player.getName(), getName()));
Data data = createDataObject(player);
_active.put(player.getUniqueId(), data);
_listeners.forEach(listener -> listener.onObjectiveStart(player, this));
customStart(player);
}
protected abstract void customStart(Player player);
/**
* Leave this objective for a specific player
* This does not count as completing the object
* @param player
*/
public final void leave(Player player)
{
_active.remove(player.getUniqueId());
customLeave(player);
}
protected abstract void customLeave(Player player);
/**
* Returns a new Data object for use in the active map
* @param player
* @return
*/
protected abstract Data createDataObject(Player player);
/**
* Called by ObjectiveGoals, used to notify this Objective that a goal has been completed
* @param goal
* @param 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)
{
System.out.println(String.format("Tutorial> [%s] finished objective [%s]", player.getName(), getName()));
_active.remove(player.getUniqueId());
customFinish(player);
_listeners.forEach(listener -> listener.onObjectiveFinish(player, this));
}
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());
}
public Data getData(Player player)
{
return _active.get(player.getUniqueId());
}
/**
* Unregister all listeners associated with this Objective
*/
public final void unregisterAll()
{
HandlerList.unregisterAll(this);
List<ObjectiveGoal> goals = getGoals();
if (goals != null) goals.forEach(HandlerList::unregisterAll);
}
}

View File

@ -0,0 +1,5 @@
package mineplex.core.common.objective;
public class ObjectiveData
{
}

View File

@ -0,0 +1,66 @@
package mineplex.core.common.objective;
import java.util.HashSet;
import java.util.UUID;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
public abstract class ObjectiveGoal implements Listener
{
private Objective _objective;
private HashSet<UUID> _active;
private String _name;
private String _description;
public ObjectiveGoal(Objective objective, String name, String description)
{
_objective = objective;
_active = new HashSet<>();
_name = name;
_description = description;
}
public String getName()
{
return _name;
}
public String getDescription()
{
return _description;
}
public boolean contains(Player player)
{
return _active.contains(player.getUniqueId());
}
public final void start(Player player)
{
System.out.println(String.format("Tutorial> [%s] started objective goal [%s]", player.getName(), getName()));
_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()))
{
System.out.println(String.format("Tutorial> [%s] finished objective goal [%s]", player.getName(), getName()));
_active.remove(player.getUniqueId());
customFinish(player);
_objective.completeGoal(this, player);
}
}
}

View File

@ -0,0 +1,10 @@
package mineplex.core.common.objective;
import org.bukkit.entity.Player;
public interface ObjectiveListener
{
public void onObjectiveStart(Player player, Objective objective);
public void onObjectiveFinish(Player player, Objective objective);
}

View File

@ -0,0 +1,71 @@
package mineplex.core.common.objective;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.plugin.java.JavaPlugin;
public abstract class OrderedObjective extends Objective<OrderedObjectiveData>
{
private List<ObjectiveGoal> _goals;
public OrderedObjective(JavaPlugin plugin, String name, String description)
{
super(plugin, name, description);
_goals = new ArrayList<>();
}
protected void addGoal(ObjectiveGoal goal)
{
_goals.add(goal);
getPlugin().getServer().getPluginManager().registerEvents(goal, getPlugin());
}
@Override
protected OrderedObjectiveData createDataObject(Player player)
{
return new 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() + 1 >= _goals.size())
{
finish(player);
}
else
{
setGoal(player, data.getIndex() + 1);
}
}
@Override
protected void customStart(Player player)
{
setGoal(player, 0);
}
private void setGoal(Player player, int index)
{
OrderedObjectiveData data = getData(player); // Should never be null!
ObjectiveGoal nextGoal = _goals.get(index);
data.setIndex(index);
nextGoal.start(player);
}
@Override
protected List<ObjectiveGoal> getGoals()
{
return _goals;
}
}

View File

@ -0,0 +1,21 @@
package mineplex.core.common.objective;
public class OrderedObjectiveData extends ObjectiveData
{
private int _index;
public OrderedObjectiveData()
{
_index = 0;
}
public int getIndex()
{
return _index;
}
public void setIndex(int index)
{
_index = index;
}
}

View File

@ -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 createDataObject(Player player)
{
return _nullData;
}
@Override
protected void completeGoal(ObjectiveGoal goal, Player player)
{
// Do Nothing
}
@Override
protected List<ObjectiveGoal> getGoals()
{
return null;
}
}

View File

@ -6,7 +6,7 @@ public class EnclosedObject<T>
public EnclosedObject()
{
this(null);
this((T) null);
}
public EnclosedObject(T t)
@ -23,4 +23,90 @@ public class EnclosedObject<T>
{
return _value = value;
}
public String toString()
{
return _value.toString();
}
// Arithmetic operations, will only work if T is an instance of Number
public long Add(Number number)
{
if (!(_value instanceof Number))
{
throw new RuntimeException("Type of T must be an instance of Number to perform arithmetic.");
}
return ((Number) _value).longValue() + number.longValue();
}
public long Subtract(Number number)
{
if (!(_value instanceof Number))
{
throw new RuntimeException("Type of T must be an instance of Number to perform arithmetic.");
}
return ((Number) _value).longValue() - number.longValue();
}
public long Multiply(Number number)
{
if (!(_value instanceof Number))
{
throw new RuntimeException("Type of T must be an instance of Number to perform arithmetic.");
}
return ((Number) _value).longValue() * number.longValue();
}
public long Divide(Number number)
{
if (!(_value instanceof Number))
{
throw new RuntimeException("Type of T must be an instance of Number to perform arithmetic.");
}
return ((Number) _value).longValue() / number.longValue();
}
public double PreciseAdd(Number number)
{
if (!(_value instanceof Number))
{
throw new RuntimeException("Type of T must be an instance of Number to perform arithmetic.");
}
return ((Number) _value).doubleValue() + number.doubleValue();
}
public double PreciseSubtract(Number number)
{
if (!(_value instanceof Number))
{
throw new RuntimeException("Type of T must be an instance of Number to perform arithmetic.");
}
return ((Number) _value).doubleValue() - number.doubleValue();
}
public double PreciseMultiply(Number number)
{
if (!(_value instanceof Number))
{
throw new RuntimeException("Type of T must be an instance of Number to perform arithmetic.");
}
return ((Number) _value).doubleValue() * number.doubleValue();
}
public double PreciseDivide(Number number)
{
if (!(_value instanceof Number))
{
throw new RuntimeException("Type of T must be an instance of Number to perform arithmetic.");
}
return ((Number) _value).doubleValue() / number.doubleValue();
}
}

View File

@ -113,7 +113,7 @@ public class UtilServer
return getServer().getPluginManager();
}
public static <T extends Event> T callEvent(T event)
public static <T extends Event> void callEvent(T event)
{
getPluginManager().callEvent(event);
return event;

View File

@ -87,7 +87,8 @@ public class PacketHandler extends MiniPlugin
return _playerVerifierMap.get(player);
}
public void addPacketHandler(IPacketHandler packetHandler, Class<? extends Packet>... packetsToListen)
@SafeVarargs
public final void addPacketHandler(IPacketHandler packetHandler, Class<? extends Packet>... packetsToListen)
{
if (packetsToListen.length == 0)
{

View File

@ -1,27 +1,31 @@
package mineplex.core.vanish;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniClientPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.account.event.ClientWebResponseEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.packethandler.PacketHandler;
import mineplex.core.vanish.commands.VanishCommand;
import mineplex.core.vanish.events.PreVanishEvent;
import mineplex.core.vanish.repository.VanishClient;
import mineplex.core.vanish.repository.VanishRepository;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.server.v1_8_R3.PacketPlayOutChat;
public class Vanish extends MiniClientPlugin<VanishClient>
{
private CoreClientManager _clientManager;
private VanishRepository _repository;
public Vanish(JavaPlugin plugin, CoreClientManager clientManager)
public Vanish(JavaPlugin plugin, CoreClientManager clientManager, PacketHandler packetHandler)
{
super("Vanish", plugin);
@ -44,18 +48,35 @@ public class Vanish extends MiniClientPlugin<VanishClient>
if (event.isCancelled())
{
return;
return false;
}
Get(caller).State = enabled;
return enabled;
}
@EventHandler
public void ClientLoad(ClientWebResponseEvent event)
@EventHandler(priority = EventPriority.LOWEST)
public void ClientLoad(AsyncPlayerPreLoginEvent event)
{
Get(event.get
_clientManager.getRepository().getAccountId(event.getUniqueId(), accountId -> {
Get(event.getName()).State = _repository.getStatus(accountId.intValue());
});
}
@EventHandler(priority = EventPriority.LOWEST)
public void ClientLoad(PlayerJoinEvent event)
{
if (Get(event.getPlayer()).State)
{
event.setJoinMessage(null);
informVanished(event.getPlayer());
}
}
private void informVanished(Player player)
{
UtilPlayer.message(player, C.cGold + "");
}
public String getQuery(int accountId, String uuid, String name)
@ -63,15 +84,8 @@ public class Vanish extends MiniClientPlugin<VanishClient>
return "CREATE TABLE IF NOT EXISTS incognitoStaff (accountId INT NOT NULL, enabled TINYINT(1) NOT NULL, enabledTime BIGINT)";
}
public void processLoginResultSet(String playerName, int accountId, ResultSet resultSet) throws SQLException
{
int accountId = resultSet.getInt("accountId");
boolean enabled = resultSet.getBoolean("enabled");
}
protected VanishClient AddPlayer(String player)
{
return new VanishClient();
}
}

View File

@ -38,7 +38,7 @@ public class VanishRepository extends MinecraftRepository
status.Set(Boolean.FALSE);
}, new ColumnInt("accountId", accountId));
return status.GetDispose().booleanValue();
return status.Get().booleanValue();
}
protected void initialize()

View File

@ -82,9 +82,9 @@ import mineplex.game.clans.clans.commands.RegionsCommand;
import mineplex.game.clans.clans.data.PlayerClan;
import mineplex.game.clans.clans.event.ClansPlayerDeathEvent;
import mineplex.game.clans.clans.gui.ClanShop;
import mineplex.game.clans.clans.invsee.Invsee;
import mineplex.game.clans.clans.loot.LootManager;
import mineplex.game.clans.clans.map.ItemMapManager;
import mineplex.game.clans.clans.nether.NetherManager;
import mineplex.game.clans.clans.observer.ObserverManager;
import mineplex.game.clans.clans.playtime.Playtime;
import mineplex.game.clans.clans.potato.PotatoManager;
@ -111,8 +111,9 @@ import mineplex.game.clans.gameplay.Gameplay;
import mineplex.game.clans.gameplay.safelog.SafeLog;
import mineplex.game.clans.gameplay.safelog.npc.NPCManager;
import mineplex.game.clans.items.GearManager;
import mineplex.game.clans.legacytutorial.Tutorial;
import mineplex.game.clans.spawn.Spawn;
import mineplex.game.clans.tutorials.TutorialManager;
import mineplex.game.clans.tutorial.TutorialManager;
import mineplex.minecraft.game.classcombat.Class.ClassManager;
import mineplex.minecraft.game.classcombat.Class.ClientClass;
import mineplex.minecraft.game.classcombat.Class.IPvpClass;
@ -162,11 +163,12 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
private GearManager _gearManager;
private LootManager _lootManager;
private DonationManager _donationManager;
// private NetherManager _netherManager;
private NetherManager _netherManager;
private DamageManager _damageManager;
private Playtime _playTracker;
private TutorialManager _tutorialManager;
private mineplex.game.clans.legacytutorial.TutorialManager _tutorialManager;
private ClassManager _classManager;
@ -206,8 +208,6 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
private NautHashMap<String, ClanTerritory> _claimMap = new NautHashMap<String, ClanTerritory>();
private NautHashMap<String, Long> _unclaimMap = new NautHashMap<String, Long>();
private DamageManager _damageManager;
public String UserDataDir = UtilServer.getServer().getWorlds().get(0).getWorldFolder().getPath() + File.separator + ".." + File.separator + "CLANS_USER_DATA" + File.separator;
public ClanTips ClanTips;
@ -259,9 +259,7 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
_itemMapManager = new ItemMapManager(this, _worldEvent);
new TntGeneratorManager(plugin, this);
new SupplyDropManager(plugin, this);
new Invsee(this);
_explosion = new Explosion(plugin, blockRestore);
_warPointEvasion = new WarPointEvasion(plugin);
@ -282,6 +280,7 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
_observerManager = new ObserverManager(plugin, _condition, this);
new ClanEnergyTracker(plugin, this);
// new StuckManager(this);
// new ClansAlphaManager(this, taskManager);
@ -318,10 +317,11 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
_playTracker = new Playtime(this, statsManager);
new PvpTimer(this, _playTracker, statsManager);
_tutorialManager = new TutorialManager(plugin, _playTracker, _goldManager, taskManager, donationManager, preferencesManager, this, packetHandler);
_scoreboard = new ClansScoreboardManager(plugin, this, _warManager, _worldEvent, clientManager, donationManager);
_tutorialManager = new mineplex.game.clans.legacytutorial.TutorialManager(plugin, _playTracker, _goldManager, taskManager, donationManager, preferencesManager, this, packetHandler);
TutorialManager tutorial = new TutorialManager(plugin, clientManager, donationManager);
_scoreboard = new ClansScoreboardManager(plugin, this, _warManager, _worldEvent, tutorial, clientManager, donationManager);
_clanDataAccess = new ClansDataAccessLayer(this, _scoreboard);
for (ClanToken token : _clanDataAccess.getRepository().retrieveClans())
@ -384,11 +384,11 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
);
hologram.start();
}
Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "Replay|Restrict");
new SiegeManager(this);
// _netherManager = new NetherManager(this);
_netherManager = new NetherManager(this);
}
@Override
@ -422,7 +422,7 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
return _disguiseManager;
}
public TutorialManager getTutorials()
public mineplex.game.clans.legacytutorial.TutorialManager getTutorials()
{
return _tutorialManager;
}
@ -600,7 +600,7 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
runSyncLater(() -> {
player.getInventory().setHelmet(helmet);
}, 20L);
}
}
}
@EventHandler
@ -652,19 +652,19 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
public void commandPreProcess(PlayerCommandPreprocessEvent event)
{
String[] messages = { "ver", "version", "pl", "plugins"};
for (String message : messages)
{
if (!event.getMessage().equalsIgnoreCase("/" + message) && !event.getMessage().startsWith("/" + message + " "))
{
continue;
}
UtilPlayer.message(event.getPlayer(), F.main("Clans", "Server is on version: " + F.elem(Clans.version())));
event.setCancelled(true);
}
}
@EventHandler
public void quit(PlayerQuitEvent event)
{
@ -757,25 +757,25 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
public void handlePlayerChat(AsyncPlayerChatEvent event)
{
// PunishClient punishclient = _punish.GetClient(event.getPlayer().getName());
//
//
// if (punishclient != null && punishclient.IsMuted())
// {
// return;
// }
//
//
// if (_chat.SilenceCheck(event.getPlayer()))
// {
// return;
// }
// MessageData lastMessage = _chat.lastMessage(event.getPlayer());
// long chatSlowTime = 1000L * _chat.getChatSlow();
// long timeDiff = System.currentTimeMillis() - lastMessage.getTimeSent();
// if (timeDiff < chatSlowTime && !_clientManager.Get(event.getPlayer()).GetRank().has(Rank.HELPER))
// {
//
//
// }
ClientClan client = Get(event.getPlayer());
@ -1061,12 +1061,6 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
public void onJoin(PlayerLoginEvent event)
{
Rank rank = _clientManager.Get(event.getPlayer()).GetRank();
if (_serverName.equals("GClans-1"))
{
return;
}
if (!event.getPlayer().isWhitelisted() && !rank.has(Rank.LEGEND))
{
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Clans is currently in Legend+ only Alpha!");
@ -1176,30 +1170,32 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
_warPointEvasion.resetCooldown(uuid);
}
public Pair<ClanInfo, Long> leftRecently(UUID uniqueId, long time)
{
if (_clanMemberLeftMap.containsKey(uniqueId) && (System.currentTimeMillis() - _clanMemberLeftMap.get(uniqueId).getRight()) <= time)
{
return Pair.create(_clanMemberLeftMap.get(uniqueId).getLeft(), time - (System.currentTimeMillis() - _clanMemberLeftMap.get(uniqueId).getRight()));
}
return null;
}
public ObserverManager getObserverManager()
public ObserverManager getObserverManager()
{
return _observerManager;
}
public int getServerId()
{
return _clanDataAccess.getRepository().getServerId();
}
// public NetherManager getNetherManager()
// {
// return _netherManager;
// }
public NetherManager getNetherManager()
{
return _netherManager;
}
public void message(Player player, String message)
{

View File

@ -6,14 +6,13 @@ import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import mineplex.core.database.MinecraftRepository;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.account.CoreClient;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.NonFinalInteger;
import mineplex.core.common.util.EnclosedObject;
import mineplex.core.database.MinecraftRepository;
import mineplex.serverdata.database.DBPool;
import mineplex.serverdata.database.RepositoryBase;
import mineplex.serverdata.database.ResultSetCallable;
import mineplex.serverdata.database.column.ColumnBoolean;
import mineplex.serverdata.database.column.ColumnInt;
@ -127,7 +126,7 @@ public class ClansBanRepository extends MinecraftRepository
public void processResultSet(ResultSet resultSet) throws SQLException
{
final List<ClansBanClient> clients = new ArrayList<>();
final NonFinalInteger resultsProcessed = new NonFinalInteger();
final EnclosedObject<Integer> resultsProcessed = new EnclosedObject<>();
int resultsFound = 0;
while (resultSet.next())

View File

@ -10,9 +10,9 @@ import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.task.TaskManager;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.tutorials.Tutorial;
import mineplex.game.clans.tutorials.TutorialManager;
import mineplex.game.clans.tutorials.gettingstarted.TutorialGettingStarted;
import mineplex.game.clans.legacytutorial.Tutorial;
import mineplex.game.clans.legacytutorial.TutorialManager;
import mineplex.game.clans.legacytutorial.gettingstarted.TutorialGettingStarted;
public class RestartTutCommand extends CommandBase<TutorialManager>
{

View File

@ -8,7 +8,6 @@ import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.account.event.OnlineRankUpdateEvent;
import mineplex.core.common.util.C;
import mineplex.core.donation.DonationManager;
import mineplex.core.scoreboard.PlayerScoreboard;
import mineplex.core.scoreboard.ScoreboardData;
@ -20,25 +19,25 @@ import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.scoreboard.elements.ScoreboardElementClan;
import mineplex.game.clans.clans.scoreboard.elements.ScoreboardElementPlayer;
import mineplex.game.clans.clans.scoreboard.elements.ScoreboardElementPlayerCount;
import mineplex.game.clans.clans.war.WarManager;
import mineplex.game.clans.clans.worldevent.WorldEventManager;
import mineplex.game.clans.tutorials.Tutorial;
import mineplex.game.clans.tutorials.TutorialManager;
import mineplex.game.clans.tutorial.TutorialManager;
public class ClansScoreboardManager extends ScoreboardManager
{
private ClansManager _clansManager;
private WarManager _warManager;
private WorldEventManager _worldEvent;
private TutorialManager _tutorial;
public ClansScoreboardManager(JavaPlugin plugin, ClansManager clansManager, WarManager warManager, WorldEventManager worldEvent, CoreClientManager clientManager, DonationManager donationManager)
public ClansScoreboardManager(JavaPlugin plugin, ClansManager clansManager, WarManager warManager, WorldEventManager worldEvent, TutorialManager tutorial, CoreClientManager clientManager, DonationManager donationManager)
{
super(plugin, clientManager, donationManager);
_clansManager = clansManager;
_warManager = warManager;
_worldEvent = worldEvent;
_tutorial = tutorial;
init();
}
@ -55,11 +54,12 @@ public class ClansScoreboardManager extends ScoreboardManager
data.writeElement(_warManager);
data.writeElement(_worldEvent);
data.writeElement(_tutorial);
for (Tutorial tutorial : TutorialManager.Instance.getTutorials().values())
{
data.writeElement(tutorial);
}
// for (Tutorial tutorial : TutorialManager.Instance.getTutorials().values())
// {
// data.writeElement(tutorial);
// }
}
@EventHandler

View File

@ -27,9 +27,9 @@ import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.ColorFader;
import mineplex.core.common.util.EnclosedObject;
import mineplex.core.common.util.F;
import mineplex.core.common.util.LoopIterator;
import mineplex.core.common.util.NonFinalInteger;
import mineplex.core.common.util.RGBData;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
@ -543,18 +543,18 @@ public class Outpost implements Listener
{
_state = OutpostState.DESTRUCTING;
NonFinalInteger wait = new NonFinalInteger(0);
EnclosedObject<Integer> wait = new EnclosedObject<>(0);
_blocks.values().stream().filter(block -> UtilMath.random.nextBoolean() && UtilMath.random.nextBoolean()).filter(block -> UtilMath.random.nextBoolean()).limit(13).forEach(block ->
_outpostManager.runSyncLater(() -> {
UtilParticle.PlayParticleToAll(ParticleType.HUGE_EXPLOSION, block.getLocation(), new Vector(0,0,0), 1f, 1, ViewDist.MAX);
_origin.getWorld().playSound(block.getLocation(), Sound.EXPLODE, 1.0f, 1.0f);
}, wait.add(4 + UtilMath.random.nextInt(4)).get())
}, wait.Add(Integer.valueOf(4 + UtilMath.random.nextInt(4))))
);
_outpostManager.runSyncLater(() -> {
_blocks.values().stream().forEach(OutpostBlock::restore);
}, wait.get() + 5L);
}, wait.Get().intValue() + 5L);
_outpostManager.runSyncLater(() -> {
_blocks.values().stream().forEach(block -> {
@ -578,7 +578,7 @@ public class Outpost implements Listener
});
cleanup();
}, wait.get() + 6L);
}, wait.Get().intValue() + 6L);
if (_lifetimeLeft != null) _lifetimeLeft.stop();

View File

@ -11,19 +11,19 @@ import com.google.common.collect.Lists;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.UtilWorld;
import mineplex.core.database.MinecraftRepository;
import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.siege.outpost.OutpostManager;
import mineplex.game.clans.clans.siege.outpost.OutpostState;
import mineplex.game.clans.clans.siege.outpost.OutpostType;
import mineplex.game.clans.clans.siege.repository.tokens.OutpostToken;
import mineplex.serverdata.database.DBPool;
import mineplex.serverdata.database.RepositoryBase;
import mineplex.serverdata.database.column.ColumnByte;
import mineplex.serverdata.database.column.ColumnInt;
import mineplex.serverdata.database.column.ColumnTimestamp;
import mineplex.serverdata.database.column.ColumnVarChar;
public class OutpostRepository extends RepositoryBase
public class OutpostRepository extends MinecraftRepository
{
private OutpostManager _manager;
@ -46,7 +46,7 @@ public class OutpostRepository extends RepositoryBase
public OutpostRepository(JavaPlugin plugin, OutpostManager manager)
{
super(DBPool.getAccount());
super(plugin, DBPool.getAccount());
_manager = manager;
}
@ -121,7 +121,7 @@ public class OutpostRepository extends RepositoryBase
public void updateOutpost(OutpostToken token)
{
executeUpdate(UPDATE_OUTPOST,
executeUpdate(UPDATE_OUTPOST,
new ColumnByte("outpostState", Byte.valueOf(token.OutpostState.getId())),
new ColumnInt("uniqueId", token.UniqueId));
}

View File

@ -11,16 +11,16 @@ import com.google.common.collect.Lists;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.UtilWorld;
import mineplex.core.database.MinecraftRepository;
import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.siege.SiegeManager;
import mineplex.game.clans.clans.siege.repository.tokens.SiegeWeaponToken;
import mineplex.serverdata.database.DBPool;
import mineplex.serverdata.database.RepositoryBase;
import mineplex.serverdata.database.column.ColumnInt;
import mineplex.serverdata.database.column.ColumnTimestamp;
import mineplex.serverdata.database.column.ColumnVarChar;
public class SiegeWeaponRepository extends RepositoryBase
public class SiegeWeaponRepository extends MinecraftRepository
{
private SiegeManager _manager;
@ -44,7 +44,7 @@ public class SiegeWeaponRepository extends RepositoryBase
public SiegeWeaponRepository(JavaPlugin plugin, SiegeManager manager)
{
super(DBPool.getAccount());
super(plugin, DBPool.getAccount());
_manager = manager;
}
@ -116,7 +116,7 @@ public class SiegeWeaponRepository extends RepositoryBase
public void updateWeapon(SiegeWeaponToken token)
{
executeUpdate(UPDATE_WEAPON,
executeUpdate(UPDATE_WEAPON,
new ColumnInt("health", token.Health),
new ColumnInt("yaw", token.Yaw),
new ColumnTimestamp("lastFired", new Timestamp(token.LastFired)),

View File

@ -1,4 +1,4 @@
package mineplex.game.clans.tutorials;
package mineplex.game.clans.legacytutorial;
import java.util.ArrayList;
import java.util.Iterator;

View File

@ -1,9 +1,7 @@
package mineplex.game.clans.tutorials;
package mineplex.game.clans.legacytutorial;
import org.bukkit.entity.Player;
import mineplex.core.task.TaskManager;
public class TutorialClient
{
public Player Player;

View File

@ -1,4 +1,4 @@
package mineplex.game.clans.tutorials;
package mineplex.game.clans.legacytutorial;
import java.util.HashMap;
import java.util.LinkedList;
@ -21,9 +21,8 @@ import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.commands.RestartTutCommand;
import mineplex.game.clans.clans.playtime.Playtime;
import mineplex.game.clans.economy.GoldManager;
import mineplex.game.clans.tutorials.commands.DoSkipTutorialCommand;
import mineplex.game.clans.tutorials.commands.SkipTutorialCommand;
import mineplex.game.clans.tutorials.gettingstarted.TutorialGettingStarted;
import mineplex.game.clans.legacytutorial.commands.DoSkipTutorialCommand;
import mineplex.game.clans.legacytutorial.commands.SkipTutorialCommand;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.server.v1_8_R3.PacketPlayOutChat;

View File

@ -1,11 +1,10 @@
package mineplex.game.clans.tutorials;
package mineplex.game.clans.legacytutorial;
import java.util.Iterator;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import mineplex.core.common.util.C;

View File

@ -1,4 +1,4 @@
package mineplex.game.clans.tutorials.commands;
package mineplex.game.clans.legacytutorial.commands;
import org.bukkit.entity.Player;
@ -6,7 +6,7 @@ import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.game.clans.tutorials.TutorialManager;
import mineplex.game.clans.legacytutorial.TutorialManager;
public class DoSkipTutorialCommand extends CommandBase<TutorialManager>
{

View File

@ -1,12 +1,11 @@
package mineplex.game.clans.tutorials.commands;
package mineplex.game.clans.legacytutorial.commands;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.game.clans.tutorials.TutorialManager;
import mineplex.game.clans.legacytutorial.TutorialManager;
public class SkipTutorialCommand extends CommandBase<TutorialManager>
{

View File

@ -1,12 +1,11 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.event.ClansCommandExecutedEvent;
import mineplex.game.clans.clans.event.PlayerPreClaimTerritoryEvent;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
public class TaskClaim extends TutorialTask<TutorialGettingStarted>
{

View File

@ -1,4 +1,4 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -6,7 +6,7 @@ import org.bukkit.event.EventPriority;
import mineplex.core.common.util.UtilServer;
import mineplex.game.clans.clans.event.ClanCreatedEvent;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
public class TaskCreateClan extends TutorialTask<TutorialGettingStarted>
{

View File

@ -1,4 +1,4 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import java.util.Iterator;
@ -12,7 +12,7 @@ import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.spawn.Spawn;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
import mineplex.minecraft.game.classcombat.Class.ClientClass;
public class TaskCustomizeClass extends TutorialTask<TutorialGettingStarted>

View File

@ -1,11 +1,10 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import mineplex.core.common.util.UtilServer;
import mineplex.game.clans.clans.event.ClanDisbandedEvent;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
public class TaskDisbandClan extends TutorialTask<TutorialGettingStarted>
{

View File

@ -1,4 +1,4 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import org.bukkit.Location;
import org.bukkit.Material;
@ -13,7 +13,7 @@ import mineplex.core.task.TaskManager;
import mineplex.game.clans.clans.event.ClansPlayerBuyItemEvent;
import mineplex.game.clans.clans.event.ClansShopAddButtonEvent;
import mineplex.game.clans.spawn.Spawn;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
import mineplex.minecraft.game.classcombat.Class.event.ClassEquipEvent;
public class TaskEquipClass extends TutorialTask<TutorialGettingStarted>

View File

@ -1,4 +1,4 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import java.util.Iterator;
@ -12,7 +12,7 @@ import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.event.EnergyPageBuildEvent;
import mineplex.game.clans.spawn.Spawn;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
public class TaskExploreShops extends TutorialTask<TutorialGettingStarted>
{

View File

@ -1,16 +1,14 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import java.util.Iterator;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
public class TaskLeaveSpawn extends TutorialTask<TutorialGettingStarted>
{

View File

@ -1,4 +1,4 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import org.bukkit.Location;
import org.bukkit.Material;
@ -7,10 +7,9 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.event.ClansPlayerSellItemEvent;
import mineplex.game.clans.spawn.Spawn;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
public class TaskMakingMoney extends TutorialTask<TutorialGettingStarted>
{

View File

@ -1,11 +1,11 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.event.ClansCommandExecutedEvent;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
public class TaskSetHome extends TutorialTask<TutorialGettingStarted>
{

View File

@ -1,8 +1,6 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@ -10,25 +8,20 @@ import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.NautArrayList;
import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilServer;
import mineplex.core.task.TaskManager;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.event.ClansPlayerBuyItemEvent;
import mineplex.game.clans.clans.event.ClansShopAddButtonEvent;
import mineplex.game.clans.spawn.Spawn;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
import mineplex.game.clans.legacytutorial.TutorialTask;
public class TaskUseAbility extends TutorialTask<TutorialGettingStarted>
{

View File

@ -1,10 +1,10 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import mineplex.game.clans.clans.event.ClansCommandExecutedEvent;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
public class TaskViewClanDetails extends TutorialTask<TutorialGettingStarted>
{

View File

@ -1,6 +1,6 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.game.clans.legacytutorial.TutorialTask;
public class TaskWelcome extends TutorialTask<TutorialGettingStarted>
{

View File

@ -1,4 +1,4 @@
package mineplex.game.clans.tutorials.gettingstarted;
package mineplex.game.clans.legacytutorial.gettingstarted;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -15,8 +15,8 @@ import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.playtime.Playtime;
import mineplex.game.clans.economy.GoldManager;
import mineplex.game.clans.spawn.Spawn;
import mineplex.game.clans.tutorials.Tutorial;
import mineplex.game.clans.tutorials.TutorialManager;
import mineplex.game.clans.legacytutorial.Tutorial;
import mineplex.game.clans.legacytutorial.TutorialManager;
public class TutorialGettingStarted extends Tutorial
{

View File

@ -0,0 +1,45 @@
package mineplex.game.clans.message;
import java.util.HashMap;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniPlugin;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
public class ClansMessageManager extends MiniPlugin
{
private HashMap<Player, Message> _playerMessageMap;
public ClansMessageManager(JavaPlugin plugin)
{
super("Message", plugin);
_playerMessageMap = new HashMap<>();
}
@EventHandler
public void tick(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
_playerMessageMap.forEach((player, message) ->{
message.increment();
if (message.shouldSend())
{
message.send(player);
}
});
}
public void setMessage(Player player, String title, String description, int ticksBetween, boolean displayNow)
{
Message message = new Message(title, description, ticksBetween);
_playerMessageMap.put(player, message);
if (displayNow) message.send(player);
}
}

View File

@ -0,0 +1,47 @@
package mineplex.game.clans.message;
import org.bukkit.entity.Player;
import mineplex.core.common.util.UtilTextMiddle;
public class Message
{
private int _ticksBetweenMessage;
private int _ticks;
private String _title;
private String _description;
public Message(String title, String description, int ticksBetweenMessage)
{
_title = title;
_description = description;
_ticksBetweenMessage = ticksBetweenMessage;
_ticks = 0;
}
protected void send(Player player)
{
UtilTextMiddle.display(_title, _description, player);
}
public int getTicks()
{
return _ticks;
}
public int getTicksBetweenMessage()
{
return _ticksBetweenMessage;
}
public void increment()
{
_ticks++;
}
public boolean shouldSend()
{
return _ticks % _ticksBetweenMessage == 0;
}
}

View File

@ -0,0 +1,162 @@
package mineplex.game.clans.tutorial;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.common.objective.Objective;
import mineplex.core.common.objective.ObjectiveListener;
import mineplex.core.common.util.C;
import mineplex.game.clans.message.ClansMessageManager;
public abstract class Tutorial implements Listener, ObjectiveListener
{
private HashMap<Player, TutorialSession> _playerSessionMap;
private JavaPlugin _plugin;
private ClansMessageManager _message;
private String _name;
private String _taskIdentifier;
// GUI Data
private Material _guiMaterial;
private byte _guiData;
private List<Objective> _objectives;
public Tutorial(JavaPlugin plugin, ClansMessageManager message, String name, String taskIdentifier, Material guiMaterial, byte data)
{
_plugin = plugin;
_message = message;
_name = name;
_taskIdentifier = taskIdentifier;
_guiMaterial = guiMaterial;
_guiData = data;
_playerSessionMap = new HashMap<>();
_objectives = new ArrayList<>();
}
protected void addObjective(Objective objective)
{
_objectives.add(objective);
objective.addListener(this);
}
public void start(Player player)
{
System.out.println(String.format("Tutorial> [%s] started tutorial [%s]", player.getName(), getName()));
_playerSessionMap.put(player, new TutorialSession());
// Start at first objective!
setObjective(player, 0);
}
private void setObjective(Player player, int objective)
{
if (_objectives.size() <= objective)
throw new IndexOutOfBoundsException("Invalid objective index: " + objective + ", size: " + _objectives.size());
_playerSessionMap.get(player).setObjectiveIndex(objective);
_objectives.get(objective).start(player);
}
public boolean isInTutorial(Player player)
{
return _playerSessionMap.containsKey(player);
}
public JavaPlugin getPlugin()
{
return _plugin;
}
public String getName()
{
return _name;
}
public Material getGuiMaterial()
{
return _guiMaterial;
}
public byte getGuiData()
{
return _guiData;
}
public final String getTaskIdentifier()
{
return "clans.tutorial." + _taskIdentifier;
}
@Override
public void onObjectiveFinish(Player player, Objective objective)
{
int index = _objectives.indexOf(objective);
assert index != -1;
if (index + 1 >= _objectives.size())
{
finish(player);
}
else
{
setObjective(player, index + 1);
}
}
@Override
public void onObjectiveStart(Player player, Objective objective)
{
String title = objective.getName();
String desc = objective.getDescription();
player.playSound(player.getLocation(), Sound.NOTE_PLING, 1f, 1f);
_message.setMessage(player, title, desc, 100, true);
}
private void finish(Player player)
{
_playerSessionMap.remove(player);
System.out.println(String.format("Tutorial> [%s] finished tutorial [%s]", player.getName(), getName()));
onFinish();
}
protected abstract void onFinish();
public void unregisterAll()
{
HandlerList.unregisterAll(this);
_objectives.forEach(Objective::unregisterAll);
}
public List<String> getScoreboardLines(Player player)
{
ArrayList<String> lines = new ArrayList<>();
TutorialSession session = _playerSessionMap.get(player);
if (session != null)
{
lines.add(" ");
int objectiveIndex = session.getObjectiveIndex();
Objective currentObjective = _objectives.get(objectiveIndex);
lines.add(C.cGoldB + "Current Task (" + (objectiveIndex + 1) + "/" + _objectives.size() + ")");
lines.add(" " + currentObjective.getName());
lines.add(" ");
lines.add("Type /skip to exit tutorial");
}
return lines;
}
}

View File

@ -0,0 +1,126 @@
package mineplex.game.clans.tutorial;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.donation.DonationManager;
import mineplex.core.scoreboard.ScoreboardManager;
import mineplex.core.scoreboard.elements.ScoreboardElement;
import mineplex.game.clans.message.ClansMessageManager;
import mineplex.game.clans.tutorial.command.TutorialCommand;
import mineplex.game.clans.tutorial.gui.TutorialShop;
import mineplex.game.clans.tutorial.tutorials.combat.CombatTutorial;
public class TutorialManager extends MiniPlugin implements ScoreboardElement
{
private CoreClientManager _clientManager;
private DonationManager _donationManager;
private ClansMessageManager _clansMessageManager;
private EnumMap<TutorialType, Tutorial> _tutorialMap;
private EnumMap<TutorialType, TutorialShop> _shopMap; // Don't need to do anything with shops currently
public TutorialManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager)
{
super("Clans Tutorial", plugin);
_clientManager = clientManager;
_donationManager = donationManager;
_clansMessageManager = new ClansMessageManager(plugin);
_tutorialMap = new EnumMap<TutorialType, Tutorial>(TutorialType.class);
_shopMap = new EnumMap<TutorialType, TutorialShop>(TutorialType.class);
addTutorial(TutorialType.COMBAT, new CombatTutorial(plugin, _clansMessageManager));
}
@Override
public void addCommands()
{
addCommand(new TutorialCommand(this));
}
private void addTutorial(TutorialType type, Tutorial tutorial)
{
if (_tutorialMap.containsKey(type))
{
_tutorialMap.remove(type).unregisterAll();
}
_tutorialMap.put(type, tutorial);
_shopMap.put(type, new TutorialShop(this, _clientManager, _donationManager, tutorial));
getPlugin().getServer().getPluginManager().registerEvents(tutorial, getPlugin());
}
public boolean inTutorial(Player player)
{
return getTutorial(player) != null;
}
public Tutorial getTutorial(Player player)
{
for (Tutorial tutorial : _tutorialMap.values())
{
if (tutorial.isInTutorial(player))
return tutorial;
}
return null;
}
public boolean startTutorial(Player player, TutorialType type)
{
if (inTutorial(player))
{
UtilPlayer.message(player, F.main("Tutorial", "You are already in a tutorial"));
return false;
}
if (_tutorialMap.containsKey(type))
{
UtilPlayer.message(player, F.main("Tutorial", "Starting Tutorial: " + type.name()));
_tutorialMap.get(type).start(player);
return true;
}
return false;
}
public void openTutorialMenu(Player player, TutorialType type)
{
if (_shopMap.containsKey(type))
{
_shopMap.get(type).attemptShopOpen(player);
}
}
public ClansMessageManager getMessageManager()
{
return _clansMessageManager;
}
@Override
public List<String> getLines(ScoreboardManager manager, Player player, List<String> out)
{
Tutorial tutorial = getTutorial(player);
if (tutorial != null)
{
out.clear();
return tutorial.getScoreboardLines(player);
}
return new ArrayList<String>(0);
}
}

View File

@ -0,0 +1,20 @@
package mineplex.game.clans.tutorial;
public class TutorialSession
{
private int _objectiveIndex;
public TutorialSession()
{
}
public int getObjectiveIndex()
{
return _objectiveIndex;
}
public void setObjectiveIndex(int objectiveIndex)
{
_objectiveIndex = objectiveIndex;
}
}

View File

@ -0,0 +1,6 @@
package mineplex.game.clans.tutorial;
public enum TutorialType
{
COMBAT
}

View File

@ -0,0 +1,38 @@
package mineplex.game.clans.tutorial.command;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.game.clans.tutorial.TutorialManager;
import mineplex.game.clans.tutorial.TutorialType;
public class StartCommand extends CommandBase<TutorialManager>
{
public StartCommand(TutorialManager plugin)
{
super(plugin, Rank.ADMIN, "start");
}
@Override
public void Execute(Player caller, String[] args)
{
if (args == null || args.length != 1)
{
UtilPlayer.message(caller, F.main("Tutorial", "/tutorial start <name>"));
return;
}
try
{
TutorialType type = TutorialType.valueOf(args[0]);
Plugin.openTutorialMenu(caller, type);
}
catch (IllegalArgumentException ex)
{
UtilPlayer.message(caller, F.main("Tutorial", "Invalid Tutorial: " + F.elem(args[0])));
}
}
}

View File

@ -0,0 +1,24 @@
package mineplex.game.clans.tutorial.command;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.command.MultiCommandBase;
import mineplex.core.common.Rank;
import mineplex.game.clans.tutorial.TutorialManager;
public class TutorialCommand extends MultiCommandBase<TutorialManager>
{
public TutorialCommand(TutorialManager plugin)
{
super(plugin, Rank.ADMIN, "tutorial", "tut");
AddCommand(new StartCommand(plugin));
}
@Override
protected void Help(Player caller, String[] args)
{
}
}

View File

@ -0,0 +1,43 @@
package mineplex.game.clans.tutorial.gui;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import mineplex.core.account.CoreClientManager;
import mineplex.core.donation.DonationManager;
import mineplex.core.shop.item.ShopItem;
import mineplex.core.shop.page.ShopPageBase;
import mineplex.game.clans.tutorial.Tutorial;
import mineplex.game.clans.tutorial.TutorialManager;
import mineplex.game.clans.tutorial.gui.button.DeclineButton;
import mineplex.game.clans.tutorial.gui.button.StartButton;
public class TutorialSelectPage extends ShopPageBase<TutorialManager, TutorialShop>
{
public TutorialSelectPage(TutorialManager plugin, TutorialShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player)
{
super(plugin, shop, clientManager, donationManager, shop.getTutorial().getName(), player, 45);
buildPage();
}
@Override
protected void buildPage()
{
Tutorial tutorial = getShop().getTutorial();
String name = tutorial.getName();
Material material = tutorial.getGuiMaterial();
byte data = tutorial.getGuiData();
ShopItem infoItem = new ShopItem(material, data, name, new String[0], 0, false, false);
addItem(13, infoItem);
ShopItem startItem = new ShopItem(Material.EMERALD_BLOCK, "Start " + tutorial.getName(), new String[0], 0, false, false);
addButton(27 + 6, startItem, new StartButton(tutorial));
ShopItem declineButton = new ShopItem(Material.REDSTONE_BLOCK, "Cancel", new String[0], 0, false, false);
addButton(27 + 2, declineButton, new DeclineButton());
}
}

View File

@ -0,0 +1,33 @@
package mineplex.game.clans.tutorial.gui;
import org.bukkit.entity.Player;
import mineplex.core.account.CoreClientManager;
import mineplex.core.donation.DonationManager;
import mineplex.core.shop.ShopBase;
import mineplex.core.shop.page.ShopPageBase;
import mineplex.game.clans.tutorial.Tutorial;
import mineplex.game.clans.tutorial.TutorialManager;
public class TutorialShop extends ShopBase<TutorialManager>
{
private final Tutorial _tutorial;
public TutorialShop(TutorialManager plugin, CoreClientManager clientManager, DonationManager donationManager, Tutorial tutorial)
{
super(plugin, clientManager, donationManager, tutorial.getName());
_tutorial = tutorial;
}
@Override
protected ShopPageBase<TutorialManager, ? extends ShopBase<TutorialManager>> buildPagesFor(Player player)
{
return new TutorialSelectPage(getPlugin(), this, getClientManager(), getDonationManager(), player);
}
public Tutorial getTutorial()
{
return _tutorial;
}
}

View File

@ -0,0 +1,15 @@
package mineplex.game.clans.tutorial.gui.button;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import mineplex.core.shop.item.IButton;
public class DeclineButton implements IButton
{
@Override
public void onClick(Player player, ClickType clickType)
{
player.closeInventory();
}
}

View File

@ -0,0 +1,28 @@
package mineplex.game.clans.tutorial.gui.button;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import mineplex.core.shop.item.IButton;
import mineplex.game.clans.tutorial.Tutorial;
public class StartButton implements IButton
{
private final Tutorial _tutorial;
public StartButton(Tutorial tutorial)
{
_tutorial = tutorial;
}
@Override
public void onClick(Player player, ClickType clickType)
{
if (!_tutorial.isInTutorial(player))
{
_tutorial.start(player);
}
player.closeInventory();
}
}

View File

@ -0,0 +1,28 @@
package mineplex.game.clans.tutorial.tutorials.combat;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.common.objective.Objective;
import mineplex.game.clans.message.ClansMessageManager;
import mineplex.game.clans.tutorial.Tutorial;
import mineplex.game.clans.tutorial.tutorials.combat.objectives.CustomizeKitObjective;
import mineplex.game.clans.tutorial.tutorials.combat.objectives.EquipArmorObjective;
public class CombatTutorial extends Tutorial
{
public CombatTutorial(JavaPlugin plugin, ClansMessageManager message)
{
super(plugin, message, "Combat Tutorial", "combat", Material.DIAMOND_SWORD, (byte) 0);
addObjective(new EquipArmorObjective(plugin));
addObjective(new CustomizeKitObjective(plugin));
}
@Override
protected void onFinish()
{
}
}

View File

@ -0,0 +1,35 @@
package mineplex.game.clans.tutorial.tutorials.combat.objectives;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.common.objective.OrderedObjective;
import mineplex.game.clans.tutorial.tutorials.combat.objectives.goals.OpenCustomizationGoal;
public class CustomizeKitObjective extends OrderedObjective
{
public CustomizeKitObjective(JavaPlugin plugin)
{
super(plugin, "Customize Kit", "Customize your kit");
addGoal(new OpenCustomizationGoal(this));
}
@Override
protected void customStart(Player player)
{
super.customStart(player);
}
@Override
protected void customLeave(Player player)
{
}
@Override
protected void customFinish(Player player)
{
}
}

View File

@ -0,0 +1,77 @@
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.inventory.ItemStack;
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)
{
player.getInventory().addItem(new ItemStack(Material.IRON_HELMET));
player.getInventory().addItem(new ItemStack(Material.IRON_CHESTPLATE));
player.getInventory().addItem(new ItemStack(Material.IRON_LEGGINGS));
player.getInventory().addItem(new ItemStack(Material.IRON_BOOTS));
}
@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;
}
}

View File

@ -0,0 +1,37 @@
package mineplex.game.clans.tutorial.tutorials.combat.objectives.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.minecraft.game.classcombat.shop.event.OpenClassShopEvent;
public class OpenCustomizationGoal extends ObjectiveGoal
{
public OpenCustomizationGoal(Objective objective)
{
super(objective, "Open Customization", "Open Customization");
}
@Override
protected void customStart(Player player)
{
}
@Override
protected void customFinish(Player player)
{
}
@EventHandler
public void onOpenClassShop(OpenClassShopEvent event)
{
if (contains(event.getPlayer()))
{
finish(event.getPlayer());
}
}
}

View File

@ -0,0 +1,35 @@
package mineplex.game.clans.tutorial.visual;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniPlugin;
public class VisualManager extends MiniPlugin
{
public VisualManager(JavaPlugin plugin)
{
super("Visual", plugin);
}
public void setTitleMessage(Player player, String message, String desc, int timer, boolean displayNow)
{
}
public void displayTitleMessage(Player player, String message, String desc)
{
}
public void playFinish(Player player)
{
player.playSound(player.getLocation(), Sound.LEVEL_UP, 1f, 1f);
}
public void clear(Player player)
{
}
}

View File

@ -1,5 +1,6 @@
package mineplex.minecraft.game.classcombat.shop;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
@ -19,6 +20,7 @@ import mineplex.core.common.util.UtilPlayer;
import mineplex.minecraft.game.classcombat.Class.ClientClass;
import mineplex.minecraft.game.classcombat.Class.IPvpClass;
import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken;
import mineplex.minecraft.game.classcombat.shop.event.OpenClassShopEvent;
import mineplex.minecraft.game.classcombat.shop.page.CustomBuildPage;
public class ClassCombatShop extends ShopBase<ClassShopManager>
@ -47,7 +49,10 @@ public class ClassCombatShop extends ShopBase<ClassShopManager>
}
protected void openShopForPlayer(Player player)
{
{
OpenClassShopEvent event = new OpenClassShopEvent(player);
Bukkit.getServer().getPluginManager().callEvent(event);
if (_gameClass != null)
getPlugin().GetClassManager().Get(player).SetGameClass(_gameClass);

View File

@ -0,0 +1,18 @@
package mineplex.minecraft.game.classcombat.shop.event;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
public class OpenClassShopEvent extends PlayerEvent
{
private static final HandlerList handlers = new HandlerList();
public static HandlerList getHandlerList() { return handlers; }
public HandlerList getHandlers() { return handlers; }
public OpenClassShopEvent(Player who)
{
super(who);
}
}