Merge branch 'master' of ssh://184.154.0.242:7999/min/Mineplex

This commit is contained in:
Jonathan Williams 2015-11-28 23:05:32 -06:00
commit 0d5fa70632
50 changed files with 1728 additions and 671 deletions

View File

@ -23,7 +23,7 @@
</profile> </profile>
<profile default="false" name="Annotation profile for bungee" enabled="true"> <profile default="false" name="Annotation profile for bungee" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" /> <sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> <sourceTestOutputDir name="target\generated-test-sources\test-annotations" />
<outputRelativeToContentRoot value="true" /> <outputRelativeToContentRoot value="true" />
<processorPath useClasspath="true" /> <processorPath useClasspath="true" />
</profile> </profile>

View File

@ -116,4 +116,12 @@ public enum Rank
{ {
return _donor; return _donor;
} }
public String getRawTag()
{
if (Name.equalsIgnoreCase("ALL"))
return "";
return Name;
}
} }

View File

@ -106,4 +106,8 @@ public class UtilText {
return x <= 0 ? true : x > 1; return x <= 0 ? true : x > 1;
} }
public static String trim(int maxLength, String s) {
return s.length() <= maxLength ? s : s.substring(0, maxLength);
}
} }

View File

@ -79,7 +79,7 @@ public class ConfirmationPage<PluginType extends MiniPlugin, ShopType extends Sh
buildSquareAt(_okSquareSlotStart, new ShopItem(Material.EMERALD_BLOCK, (byte) 0, ChatColor.GREEN + "OK", null, 1, false, true), okClicked); buildSquareAt(_okSquareSlotStart, new ShopItem(Material.EMERALD_BLOCK, (byte) 0, ChatColor.GREEN + "OK", null, 1, false, true), okClicked);
buildSquareAt(_okSquareSlotStart + 6, new ShopItem(Material.REDSTONE_BLOCK, (byte) 0, ChatColor.RED + "CANCEL", null, 1, false, true), cancelClicked); buildSquareAt(_okSquareSlotStart + 6, new ShopItem(Material.REDSTONE_BLOCK, (byte) 0, ChatColor.RED + "CANCEL", null, 1, false, true), cancelClicked);
this.getInventory().setItem(4, new ShopItem(getCurrencyType().GetDisplayMaterial(), (byte)0, getCurrencyType().toString(), new String[] { C.cGray + _salesItem.GetCost(getCurrencyType()) + " " + getCurrencyType().toString() + " will be deducted from your account balance." }, 1, false, true).getHandle()); this.getInventory().setItem(4, new ShopItem(getCurrencyType().GetDisplayMaterial(), (byte)0, getCurrencyType().toString(), new String[] { C.cGray + _salesItem.GetCost(getCurrencyType()) + " " + getCurrencyType().toString() + " will be", "deducted from your account balance." }, 1, false, true).getHandle());
} }
protected void okClicked(Player player) protected void okClicked(Player player)
@ -146,6 +146,7 @@ public class ConfirmationPage<PluginType extends MiniPlugin, ShopType extends Sh
if (data) if (data)
{ {
showResultsPage(TransactionResponse.Success); showResultsPage(TransactionResponse.Success);
getPlayer().playSound(getPlayer().getLocation(), Sound.LEVEL_UP, 2f, 1.5f);
} }
else else
{ {

View File

@ -18,6 +18,8 @@ import org.bukkit.plugin.java.JavaPlugin;
public class TaskManager extends MiniDbClientPlugin<TaskClient> public class TaskManager extends MiniDbClientPlugin<TaskClient>
{ {
public static TaskManager Instance;
private static Object _taskLock = new Object(); private static Object _taskLock = new Object();
private TaskRepository _repository; private TaskRepository _repository;
@ -27,6 +29,8 @@ public class TaskManager extends MiniDbClientPlugin<TaskClient>
{ {
super("Task Manager", plugin, clientManager); super("Task Manager", plugin, clientManager);
Instance = this;
_repository = new TaskRepository(plugin); _repository = new TaskRepository(plugin);
updateTasks(); updateTasks();
} }

View File

@ -12,7 +12,7 @@ import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.tutorials.types.ClanTips.TipType; import mineplex.game.clans.clans.ClanTips.TipType;
public class ClanEnergyTracker extends MiniPlugin public class ClanEnergyTracker extends MiniPlugin
{ {

View File

@ -670,7 +670,7 @@ public class ClanInfo
public int getEnergyMax() public int getEnergyMax()
{ {
// 10080 = 7 days of minutes // 10080 = 7 days of minutes
return Math.max(4320, getEnergyCostPerMinute() * 60 * 24 * 3); return Math.max(10080, getEnergyCostPerMinute() * 60 * 24 * 7);
} }
public int getEnergyCostPerMinute() public int getEnergyCostPerMinute()

View File

@ -1,4 +1,4 @@
package mineplex.game.clans.tutorials.types; package mineplex.game.clans.clans;
import java.util.LinkedList; import java.util.LinkedList;
@ -12,8 +12,9 @@ import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.preferences.PreferencesManager; import mineplex.core.preferences.PreferencesManager;
import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.event.ClanTipEvent;
import mineplex.game.clans.clans.event.PlayerClaimTerritoryEvent; import mineplex.game.clans.clans.event.PlayerClaimTerritoryEvent;
import mineplex.game.clans.clans.event.PlayerEnterTerritoryEvent; import mineplex.game.clans.clans.event.PlayerEnterTerritoryEvent;
import mineplex.game.clans.clans.event.PlayerUnClaimTerritoryEvent; import mineplex.game.clans.clans.event.PlayerUnClaimTerritoryEvent;
@ -117,6 +118,15 @@ public class ClanTips extends MiniPlugin
return; return;
} }
ClanTipEvent event = new ClanTipEvent(tip, player);
UtilServer.getServer().getPluginManager().callEvent(event);
if (event.isCancelled())
{
return;
}
UtilPlayer.message(player, " "); UtilPlayer.message(player, " ");
UtilPlayer.message(player, tip._messages); UtilPlayer.message(player, tip._messages);

View File

@ -64,6 +64,7 @@ import mineplex.core.task.TaskManager;
import mineplex.core.teleport.Teleport; import mineplex.core.teleport.Teleport;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClanTips.TipType;
import mineplex.game.clans.clans.ClansUtility.ClanRelation; import mineplex.game.clans.clans.ClansUtility.ClanRelation;
import mineplex.game.clans.clans.commands.ClanManagementCommand; import mineplex.game.clans.clans.commands.ClanManagementCommand;
import mineplex.game.clans.clans.commands.ClansAllyChatCommand; import mineplex.game.clans.clans.commands.ClansAllyChatCommand;
@ -103,8 +104,6 @@ import mineplex.game.clans.gameplay.safelog.npc.NPCManager;
import mineplex.game.clans.items.GearManager; import mineplex.game.clans.items.GearManager;
import mineplex.game.clans.spawn.Spawn; import mineplex.game.clans.spawn.Spawn;
import mineplex.game.clans.tutorials.TutorialManager; import mineplex.game.clans.tutorials.TutorialManager;
import mineplex.game.clans.tutorials.types.ClanTips;
import mineplex.game.clans.tutorials.types.ClanTips.TipType;
import mineplex.minecraft.game.classcombat.Class.ClassManager; import mineplex.minecraft.game.classcombat.Class.ClassManager;
import mineplex.minecraft.game.classcombat.Class.ClientClass; import mineplex.minecraft.game.classcombat.Class.ClientClass;
import mineplex.minecraft.game.classcombat.Class.IPvpClass; import mineplex.minecraft.game.classcombat.Class.IPvpClass;

View File

@ -674,6 +674,9 @@ public class ClansUtility
if (!data) if (!data)
{ {
UtilPlayer.message(caller, F.main("Clans", "There was an error processing your request. Try again later")); UtilPlayer.message(caller, F.main("Clans", "There was an error processing your request. Try again later"));
}else
{
UtilPlayer.message(caller, F.main("Clans", "You disbanded your Clan."));
} }
} }
}); });
@ -724,11 +727,11 @@ public class ClansUtility
} }
} }
if (clan.getClaims() >= clan.getClaimsMax()) // if (clan.getClaims() >= clan.getClaimsMax())
{ // {
UtilPlayer.message(caller, F.main("Clans", "Your Clan cannot claim more Territory.")); // UtilPlayer.message(caller, F.main("Clans", "Your Clan cannot claim more Territory."));
return false; // return false;
} // }
// Adjacent // Adjacent
boolean selfAdj = false; boolean selfAdj = false;
@ -736,7 +739,13 @@ public class ClansUtility
{ {
for (int z = -1; z <= 1; z++) for (int z = -1; z <= 1; z++)
{ {
if (x == 0 && z == 0) continue; if ((x == 1 && z == 1)
|| (x == -1 && z == 1)
|| (x == -1 && z == -1)
|| (x == 1 && z == -1)
|| (x == 0 && z == 0)) {
continue;
}
String other = UtilWorld.chunkToStr(caller.getWorld().getChunkAt(caller.getLocation().getChunk().getX() + x, caller.getLocation().getChunk().getZ() + z)); String other = UtilWorld.chunkToStr(caller.getWorld().getChunkAt(caller.getLocation().getChunk().getX() + x, caller.getLocation().getChunk().getZ() + z));
@ -837,10 +846,10 @@ public class ClansUtility
int boxed = 0; int boxed = 0;
// This is bad. I know. But the other way doesn't seem to work. // This is bad. I know. But the other way doesn't seem to work.
String down = UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX() + 1, chunk.getZ() + 1)); String down = UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX() + 0, chunk.getZ() + 1));
String up = UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX(), chunk.getZ() -1 )); String up = UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX(), chunk.getZ() - 1));
String right = UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX() + 1, chunk.getZ())); String right = UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX() + 1, chunk.getZ()));
String left = UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX() - 1, chunk.getZ() + 0)); String left = UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX() - 1, chunk.getZ()));
ClanInfo downClan = getOwner(down); ClanInfo downClan = getOwner(down);
ClanInfo upClan = getOwner(up); ClanInfo upClan = getOwner(up);

View File

@ -16,18 +16,16 @@ import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.common.util.UtilTime.TimeUnit;
import mineplex.core.recharge.Recharge;
import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilWorld;
import mineplex.game.clans.Clans; import mineplex.core.recharge.Recharge;
import mineplex.game.clans.clans.ClanInfo; import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.ClanRole; import mineplex.game.clans.clans.ClanRole;
import mineplex.game.clans.clans.ClanTips.TipType;
import mineplex.game.clans.clans.ClansBlacklist; import mineplex.game.clans.clans.ClansBlacklist;
import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.ClansUtility;
import mineplex.game.clans.clans.ClientClan; import mineplex.game.clans.clans.ClientClan;
import mineplex.game.clans.clans.event.ClansCommandExecutedEvent; import mineplex.game.clans.clans.event.ClansCommandExecutedEvent;
import mineplex.game.clans.tutorials.TutorialManager; import mineplex.game.clans.tutorials.TutorialManager;
import mineplex.game.clans.tutorials.types.ClanTips.TipType;
import net.minecraft.server.v1_8_R3.EnumDirection; import net.minecraft.server.v1_8_R3.EnumDirection;
public class ClansCommand extends CommandBase<ClansManager> public class ClansCommand extends CommandBase<ClansManager>
@ -275,6 +273,10 @@ public class ClansCommand extends CommandBase<ClansManager>
// Hopefully shouldn't happen! // Hopefully shouldn't happen!
UtilPlayer.message(caller, F.main("Clans", "There was an error creating the clan. Please try again")); UtilPlayer.message(caller, F.main("Clans", "There was an error creating the clan. Please try again"));
} }
else
{
UtilPlayer.message(caller, F.main("Clans", "You created Clan " + C.cYellow + data.getName() + C.cGray + "."));
}
} }
}); });
} }
@ -777,6 +779,15 @@ public class ClansCommand extends CommandBase<ClansManager>
{ {
ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller);
// Event
ClansCommandExecutedEvent event = new ClansCommandExecutedEvent(caller, "homeset");
UtilServer.getServer().getPluginManager().callEvent(event);
if (event.isCancelled())
{
return;
}
if (clan == null) if (clan == null)
{ {
UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan."));
@ -833,7 +844,7 @@ public class ClansCommand extends CommandBase<ClansManager>
} }
public void infoClan(Player caller, String search) public void infoClan(Player caller, String search)
{ {System.out.println(search);
if (search == null) if (search == null)
{ {
UtilPlayer.message(caller, F.main("Clans", "You did not input a search parameter.")); UtilPlayer.message(caller, F.main("Clans", "You did not input a search parameter."));
@ -854,6 +865,36 @@ public class ClansCommand extends CommandBase<ClansManager>
_manager.getClanShop().openClanWho(caller, clan); _manager.getClanShop().openClanWho(caller, clan);
} }
public void forceJoinClan(Player caller, String search)
{
if (_manager.getClientManager().hasRank(caller, Rank.ADMIN))
{
UtilPlayer.message(caller, F.main("Clans", "No no no, this command is not for you ;-)"));
return;
}
if (search == null)
{
UtilPlayer.message(caller, F.main("Clans", "You did not input a search parameter."));
return;
}
ClansCommandExecutedEvent event = new ClansCommandExecutedEvent(caller, "info", search);
UtilServer.getServer().getPluginManager().callEvent(event);
if (event.isCancelled())
{
return;
}
ClanInfo clan = Plugin.getClanUtility().searchClanPlayer(caller, search, true);
if (clan == null) return;
_manager.getClanUtility().join(caller, clan);
_manager.getClanDataAccess().role(clan, caller.getUniqueId(), ClanRole.LEADER);
}
public void infoTerritory(Player caller, String[] args) public void infoTerritory(Player caller, String[] args)
{ {
ClanInfo clan; ClanInfo clan;

View File

@ -0,0 +1,25 @@
package mineplex.game.clans.clans.commands;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.task.TaskManager;
import mineplex.game.clans.tutorials.TutorialManager;
import mineplex.game.clans.tutorials.gettingstarted.TutorialGettingStarted;
public class RestartTutCommand extends CommandBase<TutorialManager>
{
public RestartTutCommand(TutorialManager plugin)
{
super(plugin, Rank.ALL, "rst", "rstut");
}
@Override
public void Execute(Player caller, String[] args)
{
TaskManager.Instance.Get(caller).TasksCompleted.clear();
TutorialManager.Instance.cancelTutorial(caller);
TutorialManager.Instance.startTutorial(TutorialGettingStarted.class, caller);
}
}

View File

@ -0,0 +1,55 @@
package mineplex.game.clans.clans.event;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import mineplex.game.clans.clans.ClanTips.TipType;
public class ClanTipEvent extends Event
{
private static final HandlerList handlers = new HandlerList();
private Player _player;
private TipType _tip;
private boolean _cancelled;
public ClanTipEvent(TipType tip, Player player)
{
_player = player;
_tip = tip;
}
public Player getPlayer()
{
return _player;
}
public TipType getTip()
{
return _tip;
}
public void setCancelled(boolean cancelled)
{
_cancelled = cancelled;
}
public boolean isCancelled()
{
return _cancelled;
}
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
}

View File

@ -0,0 +1,58 @@
package mineplex.game.clans.clans.event;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import mineplex.core.shop.ShopBase;
public class EnergyPageBuildEvent extends Event
{
private static final HandlerList handlers = new HandlerList();
private boolean _free;
private boolean _cancelled;
private Player _player;
public EnergyPageBuildEvent(Player player)
{
_player = player;
}
public Player getPlayer()
{
return _player;
}
public boolean free()
{
return _free;
}
public void setFree(boolean free)
{
_free = free;
}
public boolean isCancelled()
{
return _cancelled;
}
public void setCancelled(boolean cancelled)
{
_cancelled = cancelled;
}
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
}

View File

@ -14,7 +14,7 @@ public class ObserverCommand extends CommandBase<ObserverManager>
{ {
public ObserverCommand(ObserverManager plugin) public ObserverCommand(ObserverManager plugin)
{ {
super(plugin, Rank.ALL, "observer", "o"); super(plugin, Rank.HELPER, "observer", "o");
} }
@Override @Override

View File

@ -1,6 +1,8 @@
package mineplex.game.clans.clans.scoreboard; package mineplex.game.clans.clans.scoreboard;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Objective;
@ -10,6 +12,7 @@ import org.bukkit.scoreboard.Team;
import net.minecraft.server.v1_8_R3.ScoreboardTeam; import net.minecraft.server.v1_8_R3.ScoreboardTeam;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilText;
import mineplex.core.scoreboard.PlayerScoreboard; import mineplex.core.scoreboard.PlayerScoreboard;
import mineplex.core.scoreboard.ScoreboardManager; import mineplex.core.scoreboard.ScoreboardManager;
import mineplex.game.clans.clans.ClanInfo; import mineplex.game.clans.clans.ClanInfo;
@ -73,6 +76,33 @@ public class ClansPlayerScoreboard extends PlayerScoreboard
public void add(Scoreboard scoreboard, Player otherPlayer, ClanInfo clanInfo, ClanRelation relation, int ownScore) public void add(Scoreboard scoreboard, Player otherPlayer, ClanInfo clanInfo, ClanRelation relation, int ownScore)
{ {
if (otherPlayer.getGameMode().equals(GameMode.CREATIVE))
{
String teamName = UtilText.trim(16, _clansManager.getClientManager().Get(otherPlayer).GetRank().getRawTag() + "CREATIVE");
Team team = scoreboard.getTeam(teamName);
if (team == null)
{
team = scoreboard.registerNewTeam(teamName);
team.setPrefix(UtilText.trim(16, _clansManager.getClientManager().Get(otherPlayer).GetRank().getTag(true, true) + ChatColor.RESET + " "));
team.setSuffix(C.cRed + " STAFF MODE");
}
Objective domObjective;
if ((domObjective = scoreboard.getObjective(DisplaySlot.BELOW_NAME)) == null)
{
domObjective = scoreboard.registerNewObjective("war", "dummy");
domObjective.setDisplayName("War Points");
domObjective.setDisplaySlot(DisplaySlot.BELOW_NAME);
}
if (clanInfo != null)
domObjective.getScore(otherPlayer.getName()).setScore(ownScore);
team.addPlayer(otherPlayer);
return;
}
String teamName = getTeamName(clanInfo, relation, ownScore); String teamName = getTeamName(clanInfo, relation, ownScore);
Team team = scoreboard.getTeam(teamName); Team team = scoreboard.getTeam(teamName);
if (team == null) if (team == null)

View File

@ -19,7 +19,7 @@ import mineplex.game.clans.spawn.Spawn;
public class StuckManager extends MiniClientPlugin<StuckClient> public class StuckManager extends MiniClientPlugin<StuckClient>
{ {
public static final long UNSTICK_WAIT_TIME = UtilTime.convert(1, TimeUnit.MINUTES, TimeUnit.MILLISECONDS); public static final long UNSTICK_WAIT_TIME = UtilTime.convert(35, TimeUnit.SECONDS, TimeUnit.MILLISECONDS);
public StuckManager(ClansManager clans) public StuckManager(ClansManager clans)
{ {

View File

@ -27,13 +27,13 @@ import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClanInfo; import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.ClansUtility; import mineplex.game.clans.clans.ClansUtility;
import mineplex.game.clans.clans.ClanTips.TipType;
import mineplex.game.clans.clans.event.ClanDisbandedEvent; import mineplex.game.clans.clans.event.ClanDisbandedEvent;
import mineplex.game.clans.clans.event.ClansPlayerDeathEvent; import mineplex.game.clans.clans.event.ClansPlayerDeathEvent;
import mineplex.game.clans.clans.war.command.WarPointsCommand; import mineplex.game.clans.clans.war.command.WarPointsCommand;
import mineplex.game.clans.clans.war.event.WarInvasionEndEvent; import mineplex.game.clans.clans.war.event.WarInvasionEndEvent;
import mineplex.game.clans.clans.war.event.WarInvasionStartEvent; import mineplex.game.clans.clans.war.event.WarInvasionStartEvent;
import mineplex.game.clans.core.war.ClanWarData; import mineplex.game.clans.core.war.ClanWarData;
import mineplex.game.clans.tutorials.types.ClanTips.TipType;
public class WarManager extends MiniPlugin implements ScoreboardElement public class WarManager extends MiniPlugin implements ScoreboardElement
{ {

View File

@ -20,8 +20,8 @@ import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTextMiddle;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.ClanTips.TipType;
import mineplex.game.clans.gameplay.safelog.npc.NPCManager; import mineplex.game.clans.gameplay.safelog.npc.NPCManager;
import mineplex.game.clans.tutorials.types.ClanTips.TipType;
public class SafeLog extends MiniPlugin public class SafeLog extends MiniPlugin
{ {

View File

@ -4,6 +4,7 @@ import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import mineplex.core.account.CoreClientManager; import mineplex.core.account.CoreClientManager;
import mineplex.core.common.util.UtilItem;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.donation.DonationManager; import mineplex.core.donation.DonationManager;
import mineplex.core.shop.ShopBase; import mineplex.core.shop.ShopBase;
@ -79,7 +80,7 @@ public abstract class ClansShopPage<T extends ShopBase<ClansManager>> extends Sh
if (!event.isCancelled()) if (!event.isCancelled())
{ {
PvpItem item = new PvpItem(material, data, 1, displayName, buyPrice, sellPrice, 64); PvpItem item = new PvpItem(material, data, 1, displayName, buyPrice, sellPrice, 64);
addButton(slot, item, new ShopItemButton<ClansShopPage<?>>(this, buyPrice, sellPrice, material, data, amount)); addButton(slot, item, new ShopItemButton<ClansShopPage<?>>(this, buyPrice, sellPrice, material, data, amount, displayName));
} }
} }
@ -88,6 +89,7 @@ public abstract class ClansShopPage<T extends ShopBase<ClansManager>> extends Sh
addShopItem(index, item, (byte) 0, displayName, 1); addShopItem(index, item, (byte) 0, displayName, 1);
} }
public void addShopItem(int index, ClansShopItem item) public void addShopItem(int index, ClansShopItem item)
{ {
addShopItem(index, item, (byte) 0); addShopItem(index, item, (byte) 0);

View File

@ -3,6 +3,7 @@ package mineplex.game.clans.shop;
import org.bukkit.Material; import org.bukkit.Material;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilItem;
import mineplex.core.shop.item.ShopItem; import mineplex.core.shop.item.ShopItem;
public class PvpItem extends ShopItem public class PvpItem extends ShopItem
@ -25,7 +26,18 @@ public class PvpItem extends ShopItem
public PvpItem(Material type, byte data, int displayAmount, String name, int buyPrice, int sellPrice, int bulkCount) public PvpItem(Material type, byte data, int displayAmount, String name, int buyPrice, int sellPrice, int bulkCount)
{ {
super(type, data, name, new String[] { C.cWhite + " ", LEFT_CLICK_BUY, C.cWhite + "Costs " + C.cGreen + buyPrice + "g", C.cWhite + " ", C.cYellow + "Shift Left-Click" + C.cWhite + " to Buy " + C.cGreen + bulkCount, C.cWhite + "Costs " + C.cGreen + (buyPrice * bulkCount) + "g", C.cWhite + " ", RIGHT_CLICK_SELL, C.cWhite + "Earns " + C.cGreen + sellPrice + "g", C.cWhite + " ", C.cYellow + "Shift Right-Click" + C.cWhite + " to Sell " + C.cGreen + "All", }, 0, false, false); super(type, data, name, new String[] {
C.cWhite + " ",
LEFT_CLICK_BUY,
C.cWhite + "Costs " + C.cGreen + (buyPrice == 0 ? "Free" : buyPrice + "g"),
C.cWhite + " ",
UtilItem.isArmor(type) || UtilItem.isTool(type) ? "" : C.cYellow + "Shift Left-Click" + C.cWhite + " to Buy " + C.cGreen + bulkCount,
UtilItem.isArmor(type) || UtilItem.isTool(type) ? "" : C.cWhite + "Costs " + C.cGreen + (buyPrice * bulkCount) + "g", C.cWhite + " ",
RIGHT_CLICK_SELL,
C.cWhite + "Earns " + C.cGreen + (sellPrice == 0 ? "Free" : sellPrice + ""),
C.cWhite + " ",
C.cYellow + "Shift Right-Click" + C.cWhite + " to Sell " + C.cGreen + "All",
}, 0, false, false);
_price = buyPrice; _price = buyPrice;
_sellPrice = sellPrice; _sellPrice = sellPrice;

View File

@ -1,14 +1,18 @@
package mineplex.game.clans.shop; package mineplex.game.clans.shop;
import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory; import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import mineplex.core.common.util.C;
import mineplex.core.common.util.Callback; import mineplex.core.common.util.Callback;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.InventoryUtil; import mineplex.core.common.util.InventoryUtil;
import mineplex.core.common.util.UtilItem;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.shop.item.IButton; import mineplex.core.shop.item.IButton;
@ -24,17 +28,30 @@ public class ShopItemButton<T extends ShopPageBase<?, ?>> implements IButton
private ItemStack _item; private ItemStack _item;
private T _page; private T _page;
public ShopItemButton(T page, int buyPrice, int sellPrice, Material material, byte data, int amount) public ShopItemButton(T page, int buyPrice, int sellPrice, Material material, byte data, int amount, String displayName)
{ {
_page = page; _page = page;
_sellPrice = sellPrice; _sellPrice = sellPrice;
_buyPrice = buyPrice; _buyPrice = buyPrice;
_item = new ItemStack(material, amount, data); _item = new ItemStack(material, amount, data);
if (displayName != null)
{
ItemMeta meta = _item.getItemMeta();
if (meta == null)
{
meta = Bukkit.getItemFactory().getItemMeta(material);
}
meta.setDisplayName(C.Reset + displayName);
_item.setItemMeta(meta);
}
} }
public ShopItemButton(T page, int buyPrice, int sellPrice, Material material) public ShopItemButton(T page, int buyPrice, int sellPrice, Material material)
{ {
this(page, buyPrice, sellPrice, material, (byte) 0, 1); this(page, buyPrice, sellPrice, material, (byte) 0, 1, null);
} }
@Override @Override
@ -78,7 +95,7 @@ public class ShopItemButton<T extends ShopPageBase<?, ?>> implements IButton
} }
else if (clickType == ClickType.SHIFT_LEFT || clickType == ClickType.LEFT) else if (clickType == ClickType.SHIFT_LEFT || clickType == ClickType.LEFT)
{ {
final int amount = shiftClick ? 64 : 1; final int amount = !(UtilItem.isArmor(_item.getType()) || UtilItem.isTool(_item.getType())) && shiftClick ? 64 : 1;
final int cost = amount * _buyPrice; final int cost = amount * _buyPrice;
int goldCount = GoldManager.getInstance().getGold(player); int goldCount = GoldManager.getInstance().getGold(player);

View File

@ -8,12 +8,15 @@ import org.bukkit.entity.Player;
import mineplex.core.account.CoreClientManager; import mineplex.core.account.CoreClientManager;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.core.donation.DonationManager; import mineplex.core.donation.DonationManager;
import mineplex.core.shop.item.ShopItem; import mineplex.core.shop.item.ShopItem;
import mineplex.core.shop.page.ShopPageBase; import mineplex.core.shop.page.ShopPageBase;
import mineplex.game.clans.clans.ClanEnergyManager; import mineplex.game.clans.clans.ClanEnergyManager;
import mineplex.game.clans.clans.ClanInfo; import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.event.ClansShopAddButtonEvent;
import mineplex.game.clans.clans.event.EnergyPageBuildEvent;
public class EnergyPage extends ShopPageBase<ClanEnergyManager, EnergyShop> public class EnergyPage extends ShopPageBase<ClanEnergyManager, EnergyShop>
{ {
@ -44,9 +47,13 @@ public class EnergyPage extends ShopPageBase<ClanEnergyManager, EnergyShop>
int oneDayEnergy = oneHourEnergy * 24; int oneDayEnergy = oneHourEnergy * 24;
int maxEnergy = clanInfo.getEnergyPurchasable(); int maxEnergy = clanInfo.getEnergyPurchasable();
addButton(clanInfo, 11, oneHourEnergy, Material.REDSTONE, (byte) 0, " ", ChatColor.RESET + "1 Hour of Energy", " ", ChatColor.RESET + "Costs " + C.cGreen + getPlugin().convertEnergyToGold(oneHourEnergy) + "g"); EnergyPageBuildEvent event = new EnergyPageBuildEvent(getPlayer());
addButton(clanInfo, 13, oneDayEnergy, Material.REDSTONE_BLOCK, (byte) 0, " ", ChatColor.RESET + "1 Day of Energy", " ", ChatColor.RESET + "Costs " + C.cGreen + getPlugin().convertEnergyToGold(oneDayEnergy) + "g");
addButton(clanInfo, 15, maxEnergy, Material.FURNACE, (byte) 0, " ", ChatColor.RESET + "Maxed Out Energy", " ", ChatColor.RESET + "Costs " + C.cGreen + getPlugin().convertEnergyToGold(maxEnergy) + "g"); UtilServer.getServer().getPluginManager().callEvent(event);
addButton(clanInfo, 11, oneHourEnergy, Material.REDSTONE, (byte) 0, event.free(), " ", ChatColor.RESET + "Purchase 1 Hour of Energy for your Clan", " ", ChatColor.RESET + (event.free() ? "FREE! (Tutorial)" : "Costs " + C.cGreen + getPlugin().convertEnergyToGold(oneHourEnergy) + "g"));
addButton(clanInfo, 13, oneDayEnergy, Material.REDSTONE_BLOCK, (byte) 0, event.free(), " ", ChatColor.RESET + "Purchase 1 Day of Energy for your Clan", " ", ChatColor.RESET + (event.free() ? "FREE! (Tutorial)" : "Costs " + C.cGreen + getPlugin().convertEnergyToGold(oneDayEnergy) + "g"));
addButton(clanInfo, 15, maxEnergy, Material.FURNACE, (byte) 0, event.free(), " ", ChatColor.RESET + "Max Out your Clan's Energy", " ", ChatColor.RESET + (event.free() ? "FREE! (Tutorial)" : "Costs " + C.cGreen + getPlugin().convertEnergyToGold(maxEnergy) + "g"));
} }
private void addInfo(ClanInfo clanInfo, int slot) private void addInfo(ClanInfo clanInfo, int slot)
@ -63,7 +70,7 @@ public class EnergyPage extends ShopPageBase<ClanEnergyManager, EnergyShop>
setItem(slot, shopItem); setItem(slot, shopItem);
} }
private void addButton(ClanInfo clanInfo, int slot, int energyAmount, Material material, byte data, String... lore) private void addButton(ClanInfo clanInfo, int slot, int energyAmount, Material material, byte data, boolean free, String... lore)
{ {
boolean locked = energyAmount > clanInfo.getEnergyPurchasable() || energyAmount == 0; boolean locked = energyAmount > clanInfo.getEnergyPurchasable() || energyAmount == 0;
String itemName = "Purchase " + energyAmount + " Energy"; String itemName = "Purchase " + energyAmount + " Energy";
@ -73,7 +80,7 @@ public class EnergyPage extends ShopPageBase<ClanEnergyManager, EnergyShop>
if (locked) if (locked)
setItem(slot, shopItem); setItem(slot, shopItem);
else else
addButton(slot, shopItem, new EnergyShopButton(getPlugin(), this, energyAmount, clanInfo)); addButton(slot, shopItem, new EnergyShopButton(getPlugin(), this, energyAmount, clanInfo, free ? 0 : getPlugin().convertEnergyToGold(energyAmount)));
} }
private void buildNoClan() private void buildNoClan()

View File

@ -24,13 +24,15 @@ public class EnergyShopButton implements IButton
private EnergyPage _page; private EnergyPage _page;
private int _energyToPurchase; private int _energyToPurchase;
private ClanInfo _clanInfo; private ClanInfo _clanInfo;
private int _cost;
public EnergyShopButton(ClanEnergyManager energyManager, EnergyPage page, int energyToPurchase, ClanInfo clanInfo) public EnergyShopButton(ClanEnergyManager energyManager, EnergyPage page, int energyToPurchase, ClanInfo clanInfo, int cost)
{ {
_energyManager = energyManager; _energyManager = energyManager;
_clanInfo = clanInfo; _clanInfo = clanInfo;
_energyToPurchase = energyToPurchase; _energyToPurchase = energyToPurchase;
_page = page; _page = page;
_cost = cost;
} }
@Override @Override
@ -56,7 +58,7 @@ public class EnergyShopButton implements IButton
// Notify // Notify
_energyManager.getClansManager().messageClan(_clanInfo, F.main("Energy", F.name(player.getName()) + " purchased " + F.elem(_energyToPurchase + " Energy") + " for the clan")); _energyManager.getClansManager().messageClan(_clanInfo, F.main("Energy", F.name(player.getName()) + " purchased " + F.elem(_energyToPurchase + " Energy") + " for the clan"));
} }
}, _page, new EnergyPackage(_energyToPurchase + " Energy", _energyManager.convertEnergyToGold(_energyToPurchase)), CurrencyType.Gold, player)); }, _page, new EnergyPackage(_energyToPurchase + " Energy", _cost), CurrencyType.Gold, player));
} }

View File

@ -0,0 +1,46 @@
package mineplex.game.clans.tutorials;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
public class DeployedTask implements Listener
{
protected Player _player;
protected boolean _finished;
protected TutorialTask<?> _task;
protected boolean _dead;
public DeployedTask(Player player, TutorialTask<?> task)
{
_player = player;
_task = task;
}
public void postDeploy()
{
}
public boolean checkForDeath()
{
return _dead || _player == null;
}
public void finish()
{
onFinish();
_task.finishFor(_player);
}
public void kill()
{
_dead = true;
_player = null;
}
public void onFinish() {
}
}

View File

@ -1,7 +1,8 @@
package mineplex.game.clans.tutorials; package mineplex.game.clans.tutorials;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -14,6 +15,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerPickupItemEvent;
@ -27,7 +29,6 @@ import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilText;
import mineplex.core.donation.DonationManager; import mineplex.core.donation.DonationManager;
import mineplex.core.scoreboard.ScoreboardManager; import mineplex.core.scoreboard.ScoreboardManager;
import mineplex.core.scoreboard.elements.ScoreboardElement; import mineplex.core.scoreboard.elements.ScoreboardElement;
@ -35,6 +36,7 @@ import mineplex.core.task.TaskManager;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.event.ClanTipEvent;
import mineplex.game.clans.economy.GoldManager; import mineplex.game.clans.economy.GoldManager;
/** /**
@ -46,9 +48,9 @@ import mineplex.game.clans.economy.GoldManager;
*/ */
public abstract class Tutorial implements ScoreboardElement, Listener public abstract class Tutorial implements ScoreboardElement, Listener
{ {
public static String TASK_COMPLETE_TASK = "Tutorial%sDoneTask%s"; public static String TASK_COMPLETE_TASK = "tttatatta%sTask%s";
public static String TUTORIAL_COMPLETE_TASK = "Tutorial%sFinito"; public static String TUTORIAL_COMPLETE_TASK = "tatatatatat%sDone"; //do not change
public static String SKIPPED_TASK = "Tutorial%sSkipito"; public static String SKIPPED_TASK = "tatatatata%sSkip";
protected final TutorialManager _manager; protected final TutorialManager _manager;
protected final GoldManager _goldManager; protected final GoldManager _goldManager;
@ -56,17 +58,17 @@ public abstract class Tutorial implements ScoreboardElement, Listener
protected final TaskManager _taskManager; protected final TaskManager _taskManager;
protected final DonationManager _donationManager; protected final DonationManager _donationManager;
private final Map<Integer, TutorialTask> _tasks; protected final LinkedHashMap<Integer, TutorialTask<?>> _tasks;
private final Map<String, TutorialTask> _nameToTask; protected final LinkedHashMap<String, TutorialTask<?>> _nameToTask;
protected final Map<String, TutorialClient> _inTutorial; protected final LinkedHashMap<String, TutorialClient> _inTutorial;
protected boolean _doScoreboard; protected boolean _doScoreboard;
protected boolean _ghostMode; protected boolean _ghostMode;
protected boolean _startOnJoin; protected boolean _startOnJoin;
protected String _uniqueId; protected String _technicalName;
protected String _friendlyName; protected String _displayName;
protected int _goldReward = -1; protected int _goldReward = -1;
protected int _gemReward = -1; protected int _gemReward = -1;
@ -79,9 +81,9 @@ public abstract class Tutorial implements ScoreboardElement, Listener
_donationManager = donationManager; _donationManager = donationManager;
_taskManager = taskManager; _taskManager = taskManager;
_manager = manager; _manager = manager;
_tasks = new HashMap<>(); _tasks = new LinkedHashMap<>();
_inTutorial = new HashMap<>(); _inTutorial = new LinkedHashMap<>();
_nameToTask = new HashMap<>(); _nameToTask = new LinkedHashMap<>();
_manager.getPluginManager().registerEvents(this, _manager.getPlugin()); _manager.getPluginManager().registerEvents(this, _manager.getPlugin());
} }
@ -91,78 +93,72 @@ public abstract class Tutorial implements ScoreboardElement, Listener
{ {
final List<String> lines = new ArrayList<>(); final List<String> lines = new ArrayList<>();
if (!isInTutorial(player) || !_doScoreboard) if (!isInTutorial(player))
{
return lines;
}
if (!_doScoreboard)
{
return lines;
}
if (get(player).CurrentTask == null)
{ {
return lines; return lines;
} }
out.clear(); out.clear();
final TutorialClient ptutorial = _inTutorial.get(player.getName()); final TutorialClient client = _inTutorial.get(player.getName());
lines.add(C.cAqua + _friendlyName + " Tutorial"); lines.add(C.cAqua + "Tutorial");
for (final TutorialTask task : _tasks.values()) for (final TutorialTask<?> task : _tasks.values())
{ {
if (get(player).getCurrentTask() == task.getID()) if (get(player).CurrentTask.equals(task))
{ {
lines.add(C.cDAqua + task.getID() + ". " + task.getFriendlyName()); lines.add(C.cDAqua + task.getID() + ". " + task.getDisplayName());
} }
else if (ptutorial.hasFinishedTask(task)) else if (client.CurrentTask.getID() > task.getID())
{ {
lines.add(C.cGreen + task.getID() + ". " + task.getFriendlyName()); lines.add(C.cGreen + task.getID() + ". " + task.getDisplayName());
} }
else else
{ {
lines.add(C.cRed + task.getID() + ". " + task.getFriendlyName()); lines.add(C.cRed + task.getID() + ". " + task.getDisplayName());
} }
} }
lines.add(C.cYellow + "To skip, type: /skiptutorial"); lines.add(C.cYellow + "To skip, type: /skiptutorial");
// lines.add(C.cYellow + "To get info, type: /taskinfo");
return lines; return lines;
} }
protected void addTask(final int id, final String name, final String description) protected void addTask(TutorialTask<?> task)
{ {
addTask(id, name, description, null); _tasks.put(_tasks.size() + 1, task);
_nameToTask.put(task.getTechnicalName(), task);
} }
protected void addTask(final int id, final String name, final String description, final String finishMessage) protected boolean hasFinishedTask(Player player, TutorialTask<?> task)
{ {
_tasks.put(id, new TutorialTask(id, name, description, finishMessage)); return get(player).CurrentTask.getID() < task.getID();
_nameToTask.put(name, _tasks.get(id));
} }
protected boolean hasFinishedTask(Player player, String taskName) protected void finishTask(final Player player, final TutorialTask<?> task)
{ {
return hasFinishedTask(player, _nameToTask.get(taskName).getID()); get(player).LastDescriptionSentTime = 0;
} get(player).CurrentTask.visibleFinish(player);
get(player).CurrentTask = task.equals(_tasks.get(_tasks.size())) ? null : _tasks.get(task.getID() + 1);
protected boolean hasFinishedTask(Player player, int taskID)
{
return get(player).hasFinishedTask(_tasks.get(taskID));
}
protected void finishTask(final Player player, final int taskID)
{
final TutorialTask task = _tasks.get(taskID);
String taskName = task.getFriendlyName();
onFinishTask(player, taskName);
_inTutorial.get(player.getName()).setTaskFinished(taskID); if (!_taskManager.hasCompletedTask(player, String.format(TASK_COMPLETE_TASK, _technicalName, task.getTechnicalName())))
if (!_taskManager.hasCompletedTask(player, String.format(TASK_COMPLETE_TASK, _uniqueId, task.getUniqueId())))
{ {
_taskManager.completedTask(new Callback<Boolean>() _taskManager.completedTask(new Callback<Boolean>()
{ {
public void run(final Boolean completed) public void run(final Boolean completed)
{ {
UtilPlayer.message(player, F.main("Tutorials", "You have completed Task " + F.elem(taskID + ": " + task.getFriendlyName()) + ". " + (_tasks.size() - taskID) + " task" + (UtilText.plural(_tasks.size() - taskID) ? "s" : "") + " to go!")); if (task.equals(_tasks.get(_tasks.size())))
if (taskID == _tasks.size())
{ {
finishFor(player); finishFor(player);
} }
@ -172,30 +168,20 @@ public abstract class Tutorial implements ScoreboardElement, Listener
{ {
public void run() public void run()
{ {
_tasks.get(taskID + 1).sendDescriptionTo(player); get(player).CurrentTask.deploy(player);
} }
}, 40L); }, 10L);
} }
player.playSound(player.getLocation(), Sound.LEVEL_UP, 2f, 1.5f); player.playSound(player.getLocation(), Sound.LEVEL_UP, 2f, 1.5f);
} }
}, player, String.format(TASK_COMPLETE_TASK, _uniqueId, task.getUniqueId())); }, player, String.format(TASK_COMPLETE_TASK, _technicalName, task.getTechnicalName()));
} }
} }
protected void finishTask(final Player player, final String taskName) public TutorialTask<?> getTask(final String technicalName)
{ {
finishTask(player, _nameToTask.get(taskName).getID()); return _nameToTask.get(technicalName);
}
public TutorialTask getTask(final int taskID)
{
return _tasks.get(taskID);
}
public TutorialTask getTask(final String name)
{
return _nameToTask.get(name);
} }
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
@ -239,9 +225,8 @@ public abstract class Tutorial implements ScoreboardElement, Listener
_inTutorial.remove(player.getName()); _inTutorial.remove(player.getName());
UtilFirework.launchFirework(player.getLocation(), Type.BALL_LARGE, Color.LIME, false, false, new Vector(0, 0, 0), 1); UtilFirework.launchFirework(player.getLocation(), Type.BALL_LARGE, Color.LIME, false, false, new Vector(0, 0, 0), 1);
UtilPlayer.message(player, F.main("Tutorials", "You have completed the " + F.elem(_friendlyName + " Tutorial") + "."));
onFinished(player); onFinished(player);
if (!_taskManager.hasCompletedTask(player, String.format(TUTORIAL_COMPLETE_TASK, _uniqueId))) if (!_taskManager.hasCompletedTask(player, String.format(TUTORIAL_COMPLETE_TASK, _technicalName)))
{ {
_taskManager.completedTask(new Callback<Boolean>() _taskManager.completedTask(new Callback<Boolean>()
{ {
@ -294,7 +279,7 @@ public abstract class Tutorial implements ScoreboardElement, Listener
}, i * 10); }, i * 10);
} }
} }
}, player, String.format(TUTORIAL_COMPLETE_TASK, _uniqueId)); }, player, String.format(TUTORIAL_COMPLETE_TASK, _technicalName));
} }
} }
@ -303,11 +288,6 @@ public abstract class Tutorial implements ScoreboardElement, Listener
{ {
} }
// Implementation left to sub classes.
protected void onFinishTask(final Player player, String task)
{
}
// Implementation left to sub classes. // Implementation left to sub classes.
protected void onBegin(final Player player) protected void onBegin(final Player player)
{ {
@ -320,7 +300,10 @@ public abstract class Tutorial implements ScoreboardElement, Listener
_manager._playerTutorials.put(player.getName(), this); _manager._playerTutorials.put(player.getName(), this);
} }
_inTutorial.put(player.getName(), TutorialClient.create(player, _taskManager, this)); _inTutorial.put(player.getName(), new TutorialClient(player, this));
get(player).CurrentTask.deploy(player);
player.playSound(player.getLocation(), Sound.LEVEL_UP, 2f, 1.5f); player.playSound(player.getLocation(), Sound.LEVEL_UP, 2f, 1.5f);
if (_ghostMode) if (_ghostMode)
@ -335,8 +318,6 @@ public abstract class Tutorial implements ScoreboardElement, Listener
onBegin(player); onBegin(player);
} }
//_playerTutorials.remove(player.getName());
public void cancelFor(final Player player) public void cancelFor(final Player player)
{ {
_inTutorial.remove(player.getName()); _inTutorial.remove(player.getName());
@ -345,7 +326,7 @@ public abstract class Tutorial implements ScoreboardElement, Listener
{ {
for (Player other : UtilServer.getPlayers()) for (Player other : UtilServer.getPlayers())
{ {
other.showPlayer(player); if (!isInTutorial(other)) other.showPlayer(player);
player.showPlayer(other); player.showPlayer(other);
} }
} }
@ -361,19 +342,19 @@ public abstract class Tutorial implements ScoreboardElement, Listener
return _inTutorial.containsKey(player); return _inTutorial.containsKey(player);
} }
public Map<Integer, TutorialTask> getTasks() public Map<Integer, TutorialTask<?>> getTasks()
{ {
return _tasks; return _tasks;
} }
public boolean hasCompleted(final Player player) public boolean hasCompleted(final Player player)
{ {
return _taskManager.hasCompletedTask(player, String.format(TUTORIAL_COMPLETE_TASK, _uniqueId)); return _taskManager.hasCompletedTask(player, String.format(TUTORIAL_COMPLETE_TASK, _technicalName));
} }
public boolean hasSkipped(final Player player) public boolean hasSkipped(final Player player)
{ {
return _taskManager.hasCompletedTask(player, String.format(SKIPPED_TASK, _uniqueId)); return _taskManager.hasCompletedTask(player, String.format(SKIPPED_TASK, _technicalName));
} }
public void skip(final Player player) public void skip(final Player player)
@ -396,12 +377,15 @@ public abstract class Tutorial implements ScoreboardElement, Listener
new JsonMessage( new JsonMessage(
F.main( F.main(
"Tutorial", "Tutorial",
"Click here to confirm you want to skip the tutorial!" "Click "
)) ))
.click(ClickEvent.RUN_COMMAND, "/yesiconfirmiwanttoskip") .extra("here")
.color("aqua")
.click(ClickEvent.RUN_COMMAND, "/yesiconfirmiwanttoskip")
.extra(" here to confirm you want to skip the tutorial!")
.color("gray")
.sendToPlayer(player); .sendToPlayer(player);
} }
public void doSkip(final Player player) public void doSkip(final Player player)
@ -412,12 +396,12 @@ public abstract class Tutorial implements ScoreboardElement, Listener
{ {
cancelFor(player); cancelFor(player);
} }
}, player, String.format(SKIPPED_TASK, _uniqueId)); }, player, String.format(SKIPPED_TASK, _technicalName));
} }
public String getUniqueId() public String getTechnicalName()
{ {
return _uniqueId; return _technicalName;
} }
public TutorialClient get(final Player player) public TutorialClient get(final Player player)
@ -425,10 +409,19 @@ public abstract class Tutorial implements ScoreboardElement, Listener
return _inTutorial.get(player.getName()); return _inTutorial.get(player.getName());
} }
@EventHandler
public void onClanTip(ClanTipEvent event)
{
if (isInTutorial(event.getPlayer()))
{
event.setCancelled(true);
}
}
@EventHandler @EventHandler
public void taskInfo(final UpdateEvent evt) public void taskInfo(final UpdateEvent evt)
{ {
if (evt.getType() != UpdateType.SEC_30) if (evt.getType() != UpdateType.SEC)
{ {
return; return;
} }
@ -437,10 +430,31 @@ public abstract class Tutorial implements ScoreboardElement, Listener
{ {
if (isInTutorial(player)) if (isInTutorial(player))
{ {
getTask(get(player).getCurrentTask()).sendDescriptionTo(player); get(player).CurrentTask.trySendDescription(player);
} }
} }
} }
@EventHandler
public void chat(final AsyncPlayerChatEvent evt)
{
if (!isInTutorial(evt.getPlayer()))
{
return;
}
Iterator<Player> iterator = evt.getRecipients().iterator();
while (iterator.hasNext())
{
if (isInTutorial(iterator.next()))
{
iterator.remove();
}
}
evt.setCancelled(true);
}
@EventHandler @EventHandler
public void onPlayerJoin(final PlayerJoinEvent evt) public void onPlayerJoin(final PlayerJoinEvent evt)
@ -459,5 +473,11 @@ public abstract class Tutorial implements ScoreboardElement, Listener
}, 40L); }, 40L);
} }
} }
public void cleanup(Player player)
{
if (get(player).CurrentTask != null) get(player).CurrentTask.cleanup(player);
_inTutorial.remove(player.getName());
}
} }

View File

@ -2,70 +2,31 @@ package mineplex.game.clans.tutorials;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import mineplex.core.common.util.UtilServer;
import mineplex.core.task.TaskManager; import mineplex.core.task.TaskManager;
public class TutorialClient public class TutorialClient
{ {
private final Tutorial _tutorial; public Player Player;
private final Player _player; public TutorialTask<?> CurrentTask;
public long LastDescriptionSentTime = System.currentTimeMillis() - 3000;
private int _currentTask = 1; public TutorialClient(Player player, Tutorial tutorial)
public TutorialClient(final Player player, final Tutorial tutorial)
{ {
_player = player; Player = player;
_tutorial = tutorial;
}
public static TutorialClient create(final Player player, final TaskManager taskManager, final Tutorial tutorial)
{
final TutorialClient user = new TutorialClient(player, tutorial);
for (final int i : tutorial.getTasks().keySet()) CurrentTask = tutorial._tasks.get(1);
for (TutorialTask<?> task : tutorial._tasks.values())
{ {
if (taskManager.hasCompletedTask(player, String.format(Tutorial.TASK_COMPLETE_TASK, tutorial.getUniqueId(), tutorial.getTask(i).getUniqueId()))) if (TaskManager.Instance.hasCompletedTask(player, String.format(
Tutorial.TASK_COMPLETE_TASK,
task.getTutorial().getTechnicalName(), task.getTechnicalName())))
{ {
user._currentTask = i; if (CurrentTask.getID() <= task.getID())
{
CurrentTask = task.getTutorial().getTasks().get(Math.min(task.getTutorial().getTasks().size(), task.getID() + 1));
}
} }
} }
UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(tutorial._manager.getPlugin(), new Runnable()
{
public void run()
{
tutorial.getTask(user._currentTask).sendDescriptionTo(player);
}
}, 40);
return user;
} }
public int getCurrentTask()
{
return _currentTask;
}
public Tutorial getTutorial()
{
return _tutorial;
}
public Player getPlayer()
{
return _player;
}
public void setTaskFinished(final int taskID)
{
_currentTask = taskID + 1;
_tutorial.getTask(taskID).onFinish(_player);
}
public boolean hasFinishedTask(final TutorialTask task)
{
return task != null && task.getID() < _currentTask;
}
} }

View File

@ -1,13 +1,11 @@
package mineplex.game.clans.tutorials; package mineplex.game.clans.tutorials;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.bukkit.Bukkit;
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;
@ -16,14 +14,12 @@ import mineplex.core.common.util.UtilPlayer;
import mineplex.core.donation.DonationManager; import mineplex.core.donation.DonationManager;
import mineplex.core.preferences.PreferencesManager; import mineplex.core.preferences.PreferencesManager;
import mineplex.core.task.TaskManager; import mineplex.core.task.TaskManager;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.commands.RestartTutCommand;
import mineplex.game.clans.economy.GoldManager; import mineplex.game.clans.economy.GoldManager;
import mineplex.game.clans.tutorials.commands.DoSkipTutorialCommand; import mineplex.game.clans.tutorials.commands.DoSkipTutorialCommand;
import mineplex.game.clans.tutorials.commands.SkipTutorialCommand; import mineplex.game.clans.tutorials.commands.SkipTutorialCommand;
import mineplex.game.clans.tutorials.commands.TaskInfoCommand; import mineplex.game.clans.tutorials.gettingstarted.TutorialGettingStarted;
import mineplex.game.clans.tutorials.types.TutorialGettingStarted;
public class TutorialManager extends MiniPlugin public class TutorialManager extends MiniPlugin
{ {
@ -49,7 +45,7 @@ public class TutorialManager extends MiniPlugin
{ {
addCommand(new SkipTutorialCommand(this)); addCommand(new SkipTutorialCommand(this));
addCommand(new DoSkipTutorialCommand(this)); addCommand(new DoSkipTutorialCommand(this));
addCommand(new TaskInfoCommand(this)); addCommand(new RestartTutCommand(this));
} }
public boolean startTutorial(final Class<? extends Tutorial> tutorial, final Player player) public boolean startTutorial(final Class<? extends Tutorial> tutorial, final Player player)
@ -81,9 +77,9 @@ public class TutorialManager extends MiniPlugin
{ {
getTutorial(player).cancelFor(player); getTutorial(player).cancelFor(player);
_playerTutorials.remove(player.getName());
UtilPlayer.message(player, F.main("Tutorials", "You have cancelled the " + F.elem(getTutorial(player)._friendlyName + " Tutorial") + ".")); UtilPlayer.message(player, F.main("Tutorials", "You have cancelled the " + F.elem(getTutorial(player)._displayName + " Tutorial") + "."));
_playerTutorials.remove(player.getName());
} }
} }
@ -99,32 +95,17 @@ public class TutorialManager extends MiniPlugin
{ {
if (isInTutorial(player)) if (isInTutorial(player))
{ {
UtilPlayer.message(player, F.main("Tutorials", "You have skipped the " + F.elem(getTutorial(player)._friendlyName + " Tutorial") + ".")); UtilPlayer.message(player, F.main("Tutorials", "You have skipped the " + F.elem(getTutorial(player)._displayName + " Tutorial") + "."));
getTutorial(player).doSkip(player); getTutorial(player).doSkip(player);
} }
} }
@EventHandler @EventHandler
public void cleanup(UpdateEvent event) public void quit(PlayerQuitEvent event)
{ {
if (!event.getType().equals(UpdateType.SLOW)) if (!isInTutorial(event.getPlayer())) return;
{
return;
}
List<String> del = new ArrayList<>(); getTutorial(event.getPlayer()).cleanup(event.getPlayer());
for (String name : _playerTutorials.keySet())
{
if (Bukkit.getPlayer(name) == null)
{
del.add(name);
}
}
for (String name : del)
{
_playerTutorials.remove(name);
}
} }
public Tutorial getTutorial(final Player player) public Tutorial getTutorial(final Player player)

View File

@ -1,39 +1,121 @@
package mineplex.game.clans.tutorials; package mineplex.game.clans.tutorials;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilServer;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
public class TutorialTask public class TutorialTask<T extends Tutorial> implements Listener
{ {
private final String _name; private T _tutorial;
private final String _description;
private final String _finishMessage;
private final int _id;
public TutorialTask(final int id, final String name, final String description, String finishMessage) protected long _autoCompleteTime = -1;
protected String _displayName;
protected String _technicalName;
protected String _description;
protected String _finishMessage;
protected long _descriptionWaitTime = 30000;
private List<String> _playersFinished = new ArrayList<>();
private Map<String, DeployedTask> _deployedInstances = new HashMap<>();
private List<DeployedTask> _toCull = new ArrayList<>();
private int _id;
public TutorialTask(T tutorial, int id)
{ {
_tutorial = tutorial;
_id = id; _id = id;
_name = name;
_description = description; UtilServer.getServer().getPluginManager().registerEvents(this, _tutorial._manager.getPlugin());
_finishMessage = finishMessage;
} }
public int getID() protected DeployedTask deploy(final Player player)
{ {
return _id; DeployedTask task = customDeploy(player);
_deployedInstances.put(player.getName(), task);
UtilServer.getServer().getPluginManager().registerEvents(task, _tutorial._manager.getPlugin());
trySendDescription(player);
if (_autoCompleteTime != -1)
{
UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(_tutorial._manager.getPlugin(), new Runnable(){
public void run()
{
if (_deployedInstances.containsKey(player.getName()))
{
finishFor(player);
}
}
}, _autoCompleteTime);
}
task.postDeploy();
return task;
} }
public String getFinishMessage() public void trySendDescription(Player player)
{ {
return _finishMessage; if (!_tutorial.isInTutorial(player))
{
return;
}
TutorialClient client = _tutorial.get(player);
if (System.currentTimeMillis() - client.LastDescriptionSentTime > client.CurrentTask.getDescriptionWaitTime())
{
UtilPlayer.message(player, " ");
UtilPlayer.message(player, " ");
UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cDGreenB + C.Strike + "---------------------------------------------");
UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cYellowB + "Part " + _id + ": " + _displayName);
UtilPlayer.message(player, C.cWhite + _description.replace("{", C.cAqua).replace("}", C.cWhite));
UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cDGreenB + C.Strike + "---------------------------------------------");
client.LastDescriptionSentTime = System.currentTimeMillis();
}
} }
public String getFriendlyName() protected DeployedTask customDeploy(final Player player)
{ {
return _name; return new DeployedTask(player, this);
}
public final void startFor(Player player)
{
deploy(player);
}
public final boolean hasFinished(final Player player)
{
return _playersFinished.contains(player.getName());
}
public String getDisplayName()
{
return _displayName;
} }
public String getDescription() public String getDescription()
@ -41,26 +123,79 @@ public class TutorialTask
return _description; return _description;
} }
public String getUniqueId() public String getFinishMessage()
{ {
return _name.replace(" ", ""); return _finishMessage;
} }
public void sendDescriptionTo(final Player player) public String getTechnicalName()
{ {
UtilPlayer.message(player, C.cGreen + "==== Pt." + _id + ": " + _name + " ===="); return _technicalName;
UtilPlayer.message(player, C.cYellow + _description.replace("{", C.cAqua).replace("}", C.cYellow));
UtilPlayer.message(player, C.cGreen + UtilText.repeat("=", _name.length() + ("=== Pt." + _id + ": ===").length()));
} }
public void onFinish(final Player player) public int getID()
{ {
return _id;
}
public void finishFor(Player player)
{
_tutorial.finishTask(player, this);
}
public void visibleFinish(Player player)
{
_deployedInstances.get(player.getName()).kill();
_toCull.add(_deployedInstances.get(player.getName()));
_deployedInstances.remove(player.getName());
if (_finishMessage != null) if (_finishMessage != null)
{ {
UtilPlayer.message(player, C.cGreen + "=================="); UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cYellow + _finishMessage.replace("{", C.cAqua).replace("}", C.cYellow)); UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cGreen + "=================="); UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cDGreenB + C.Strike + "---------------------------------------------");
UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cWhite + _finishMessage.replace("{", C.cAqua).replace("}", C.cWhite));
UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cDGreenB + C.Strike + "---------------------------------------------");
} }
} }
@EventHandler
public void update(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
{
return;
}
Iterator<DeployedTask> iterator = _toCull.iterator();
while(iterator.hasNext())
{
DeployedTask task = iterator.next();
task.kill();
HandlerList.unregisterAll(task);
iterator.remove();
}
}
public void cleanup(Player player)
{
_deployedInstances.get(player.getName()).kill();
_toCull.add(_deployedInstances.get(player.getName()));
_playersFinished.remove(player.getName());
}
public long getDescriptionWaitTime()
{
return _descriptionWaitTime;
}
public T getTutorial()
{
return _tutorial;
}
} }

View File

@ -1,31 +0,0 @@
package mineplex.game.clans.tutorials.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;
public class TaskInfoCommand extends CommandBase<TutorialManager>
{
public TaskInfoCommand(final TutorialManager plugin)
{
super(plugin, Rank.ALL, "taskinfo", "ti");
}
@Override
public void Execute(final Player caller, final String[] args)
{
if (Plugin.isInTutorial(caller))
{
Plugin.getTutorial(caller).getTask(Plugin.getTutorial(caller).get(caller).getCurrentTask()).sendDescriptionTo(caller);
}
else
{
UtilPlayer.message(caller, F.main("Tutorials", "You are not currently in a tutorial."));
}
}
}

View File

@ -0,0 +1,62 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.entity.Player;
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.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
public class TaskClaim extends TutorialTask<TutorialGettingStarted>
{
public TaskClaim(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Claim some Territory";
_technicalName = "ClaimTerr";
_description = "Clans can claim 16x16 areas of Territory! "
+ "Once claimed, only your Clan can break/place blocks here. "
+ "This is the perfect place to build a base and stash your items! "
+ "You can only claim in the Wilderness, and not next to other Clans Territory. "
+ "Claim some Territory now, by typing {/c claim}!";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onClansCommand(ClansCommandExecutedEvent event)
{
if (!_player.equals(event.getPlayer()))
{
return;
}
if (!ClansManager.getInstance().isInClan(event.getPlayer()))
{
return;
}
if (event.getCommand().equals("claim"))
{
_task.finishFor(_player);
event.setCancelled(true);
}
}
}
}

View File

@ -0,0 +1,48 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import mineplex.game.clans.clans.event.ClanCreatedEvent;
import mineplex.game.clans.tutorials.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
public class TaskCreateClan extends TutorialTask<TutorialGettingStarted>
{
public TaskCreateClan(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Create a Clan";
_technicalName = "ClanCreation";
_description = "Before beginning, use the {/c create <ClanName>} command to start up your own Clan! ";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onClanCreated(ClanCreatedEvent event)
{
if (!_player.equals(event.getFounder()))
{
return;
}
_task.finishFor(_player);
}
}
}

View File

@ -0,0 +1,69 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
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.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.minecraft.game.classcombat.Class.ClientClass;
public class TaskCustomizeClass extends TutorialTask<TutorialGettingStarted>
{
public TaskCustomizeClass(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Customize Class";
_technicalName = "CustomizeKlass";
_description = "Now that you have Equipped a Class, use this enchantment table to customize your Class Builds. "
+ "Click on the enchantment table, and click the Edit Build button.";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@Override
public void postDeploy()
{
_player.teleport(new Location(Spawn.getSpawnWorld(), 6, 66, -300, -180f, 0f));
}
@EventHandler(priority = EventPriority.MONITOR)
public void onUpdate(final UpdateEvent event)
{
if (!event.getType().equals(UpdateType.SEC))
{
return;
}
if (checkForDeath())
{
return;
}
final ClientClass clientclass = ClansManager.getInstance().getClassManager().Get(_player);
if (clientclass != null && clientclass.GetSavingCustomBuild() != null)
{
_task.finishFor(_player);
}
}
}
}

View File

@ -0,0 +1,48 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import mineplex.game.clans.clans.event.ClanDisbandedEvent;
import mineplex.game.clans.tutorials.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
public class TaskDisbandClan extends TutorialTask<TutorialGettingStarted>
{
public TaskDisbandClan(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Disband your Clan";
_technicalName = "DisbandClan";
_description = "Finally, let's disband your Clan to end the Tutorial. "
+ "Simply type {/c disband} to do this. "
+ "This will delete your Clan, and you'll be able to create or join a new one!";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@EventHandler
public void sell(ClanDisbandedEvent event)
{
if (!_player.equals(event.getDisbander()))
{
return;
}
_task.finishFor(_player);
}
}
}

View File

@ -0,0 +1,116 @@
package mineplex.game.clans.tutorials.gettingstarted;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.UtilItem;
import mineplex.core.task.TaskManager;
import mineplex.game.clans.clans.ClansManager;
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.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.minecraft.game.classcombat.Class.event.ClassEquipEvent;
public class TaskEquipClass extends TutorialTask<TutorialGettingStarted>
{
public TaskEquipClass(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Equip a Class";
_technicalName = "AuszustattenKlasse";
_description = "Use the PvP Gear shop, and Right-Click the Villager. "
+ "Purchase Iron Armor from the PvP Shop. "
+ "Then put on your Armor to equip a Champions Class.";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
private List<Material> _bought = new ArrayList<>();
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@Override
public void postDeploy()
{
_player.teleport(new Location(Spawn.getSpawnWorld(), 19, 66, -305.844, -100f, 0f));
}
@EventHandler
public void onClassEquipped(ClassEquipEvent event)
{
if (!ClansManager.getInstance().getClassManager().Get(_player).equals(event.getPlayer()))
{
return;
}
_task.finishFor(_player);
}
@EventHandler
public void button(ClansShopAddButtonEvent event)
{
if (!_player.equals(event.getPlayer()))
{
return;
}
if (!(UtilItem.isArmor(event.getMaterial()) && UtilItem.isIronProduct(event.getMaterial())))
{
return;
}
if (!TaskManager.Instance.hasCompletedTask(event.getPlayer(), "tuttoooooe" + event.getMaterial().name()) && !_bought.contains(event.getMaterial()))
{
event.setBuyPrice(0);
event.setSellPrice(0);
}
}
@EventHandler
public void buy(final ClansPlayerBuyItemEvent event)
{
if (!_player.equals(event.getPlayer()))
{
return;
}
if (!(UtilItem.isArmor(event.getItem().getType()) && UtilItem.isIronProduct(event.getItem().getType())))
{
return;
}
if (event.getCost() == 0 && _bought.contains(event.getItem().getType()))
{
event.setCancelled(true);
return;
}
TaskManager.Instance.completedTask(new Callback<Boolean>() {
@Override
public void run(Boolean data)
{
}
}, event.getPlayer(), "tuttoooooe" + event.getItem().getType().name());
_bought.add(event.getItem().getType());
}
}
}

View File

@ -0,0 +1,87 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import mineplex.core.updater.UpdateType;
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.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
public class TaskExploreShops extends TutorialTask<TutorialGettingStarted>
{
public TaskExploreShops(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Welcome to the Shops";
_technicalName = "WillkommenZumGeschaft";
_description = "Welcome to the Shops! Here you can buy all kinds of things that you may require during your adventure. "
+ "You can also sell certain items to the Villagers to make a bit of extra Gold. "
+ "Go to the Energy Shop and buy {Max Energy}. (FREE)";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@Override
public void postDeploy()
{
_player.teleport(new Location(Spawn.getSpawnWorld(), 17, 66.5, -330, -180f, 0f));
ClansManager.getInstance().getClan(_player).adjustEnergy(-(ClansManager.getInstance().getClan(_player).getEnergyCostPerMinute() * 60));
}
@EventHandler
public void onItemPut(EnergyPageBuildEvent event)
{
if (!_player.equals(event.getPlayer()))
{
return;
}
if (!ClansManager.getInstance().isInClan(_player))
{
return;
}
if (ClansManager.getInstance().getClan(_player).getEnergyPurchasable() == 0)
{
_task.finishFor(_player);
return;
}
event.setFree(true);
}
@EventHandler
public void onUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.TWOSEC)
{
return;
}
if (ClansManager.getInstance().getClan(_player).getEnergy() == ClansManager.getInstance().getClan(_player).getEnergyMax())
{
_task.finishFor(_player);
}
}
}
}

View File

@ -0,0 +1,55 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.event.PlayerEnterTerritoryEvent;
import mineplex.game.clans.tutorials.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
public class TaskGoToWilderness extends TutorialTask<TutorialGettingStarted>
{
public TaskGoToWilderness(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Go To The Wilderness";
_technicalName = "GoToWildy";
_description = "Use your Map (Slot 9) to help find your way to the Wilderness. "
+ "The Wilderness is anywhere that is not colored on the Map. "
+ "If you don't have a map, you can get one at any time by typing {/map}. "
+ "You can zoom in/out by Left and Right Clicking!";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onTerritory(final PlayerEnterTerritoryEvent event)
{
if (!_player.equals(event.getPlayer()))
{
return;
}
if (event.getNewTerritory().contains("Wilderness"))
{
_task.finishFor(_player);
}
}
}
}

View File

@ -0,0 +1,69 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.event.PlayerEnterTerritoryEvent;
import mineplex.game.clans.tutorials.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
public class TaskLeaveSpawn extends TutorialTask<TutorialGettingStarted>
{
public TaskLeaveSpawn(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Leave Spawn Islands";
_technicalName = "LeaveSpawn";
_description = "Now you can leave the Spawn Island. "
+ "Don't worry, you won't get hurt from the fall! "
+ "Once you end the tutorial, PvP will be enabled down there, so be careful!";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@Override
public void postDeploy()
{
if (_player.getLocation().getY() < 100)
{
_task.finishFor(_player);
}
}
@EventHandler
public void update(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
{
return;
}
if (checkForDeath())
{
return;
}
if (_player.getLocation().getY() < 100){
_task.finishFor(_player);
}
}
}
}

View File

@ -0,0 +1,71 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
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.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
public class TaskMakingMoney extends TutorialTask<TutorialGettingStarted>
{
public TaskMakingMoney(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Making Money (Farming)";
_technicalName = "ImAFarmer";
_description = "We have given you a carrot to sell in the Organic Produce Shop. "
+ "Click on the Villager, and {Right-Click} the carrot to sell your carrots in exchange for Gold.";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
private int _carrotsSold;
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
player.getInventory().addItem(new ItemStack(Material.CARROT_ITEM, 1));
}
@Override
public void postDeploy()
{
_player.teleport(new Location(Spawn.getSpawnWorld(), 25.536, 66, -316.844, -100f, 0f));
}
@EventHandler
public void button(ClansPlayerSellItemEvent event)
{
if (!_player.equals(event.getPlayer()))
{
return;
}
if (!ClansManager.getInstance().isInClan(_player))
{
return;
}
if (!event.getItem().getType().equals(Material.CARROT_ITEM))
{
return;
}
_task.finishFor(_player);
}
}
}

View File

@ -0,0 +1,60 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.entity.Player;
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.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
public class TaskSetHome extends TutorialTask<TutorialGettingStarted>
{
public TaskSetHome(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Set Clan Home";
_technicalName = "SetClanHome";
_description = "You are now ready to set a Clan Home. "
+ "To do this, use the {/c sethome} command.";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onSetHome(ClansCommandExecutedEvent event)
{
if (!_player.equals(event.getPlayer()))
{
return;
}
if (!ClansManager.getInstance().isInClan(event.getPlayer()))
{
return;
}
if (!event.getCommand().equals("homeset"))
{
return;
}
_task.finishFor(_player);
}
}
}

View File

@ -0,0 +1,108 @@
package mineplex.game.clans.tutorials.gettingstarted;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import mineplex.core.common.util.Callback;
import mineplex.core.task.TaskManager;
import mineplex.game.clans.clans.event.ClansPlayerBuyItemEvent;
import mineplex.game.clans.clans.event.ClansShopAddButtonEvent;
import mineplex.game.clans.tutorials.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
public class TaskUseAbility extends TutorialTask<TutorialGettingStarted>
{
public TaskUseAbility(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Use a Class Ability";
_technicalName = "KlassAbilityUsage";
_description = "Now that you have Equipped a Class, you can start using Abilities. "
+ "Purchase an Iron Axe from the PvP Shop. "
+ "Right-Click with your Iron Axe to use your Axe Ability!";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
private List<Material> _bought = new ArrayList<>();
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@EventHandler
public void onAbilityUesd(SkillTriggerEvent event)
{
if (!_player.equals(event.GetPlayer()))
{
return;
}
_task.finishFor(_player);
}
@EventHandler
public void button(ClansShopAddButtonEvent event)
{
if (!_player.equals(event.getPlayer()))
{
return;
}
System.out.println(event.getDisplayName());
if (!event.getMaterial().equals(Material.IRON_AXE))
{
return;
}
if (!TaskManager.Instance.hasCompletedTask(event.getPlayer(), "tuttoooooe" + event.getMaterial().name()) && !_bought.contains(event.getMaterial()))
{
event.setBuyPrice(0);
event.setSellPrice(0);
}
}
@EventHandler
public void buy(final ClansPlayerBuyItemEvent event)
{
if (!_player.equals(event.getPlayer()))
{
return;
}
if (!event.getItem().getType().equals(Material.IRON_AXE))
{
return;
}
if (event.getCost() == 0 && _bought.contains(event.getItem().getType()))
{
event.setCancelled(true);
return;
}
TaskManager.Instance.completedTask(new Callback<Boolean>() {
@Override
public void run(Boolean data)
{
}
}, event.getPlayer(), "tuttoooooe" + event.getItem().getType().name());
_bought.add(event.getItem().getType());
}
}
}

View File

@ -0,0 +1,53 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import mineplex.game.clans.clans.event.ClansCommandExecutedEvent;
import mineplex.game.clans.tutorials.DeployedTask;
import mineplex.game.clans.tutorials.TutorialTask;
public class TaskViewClanDetails extends TutorialTask<TutorialGettingStarted>
{
public TaskViewClanDetails(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_displayName = "Viewing Clan Details";
_technicalName = "CommandClanX";
_description = "Now you can view information about your Clan. "
+ "To do this type {/c [Clan Name]}! "
+ "You can also use any Clans name to get some information about them as well.";
}
@Override
public DeployedTask customDeploy(Player player)
{
return new Deployed(player, this);
}
class Deployed extends DeployedTask
{
public Deployed(Player player, TutorialTask<?> task)
{
super(player, task);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onClansCommand(ClansCommandExecutedEvent event)
{
if (!_player.equals(event.getPlayer()))
{
return;
}
if (event.getCommand().equals("info"))
{
_task.finishFor(_player);
}
}
}
}

View File

@ -0,0 +1,21 @@
package mineplex.game.clans.tutorials.gettingstarted;
import mineplex.game.clans.tutorials.TutorialTask;
public class TaskWelcome extends TutorialTask<TutorialGettingStarted>
{
public TaskWelcome(TutorialGettingStarted tutorial, int id)
{
super(tutorial, id);
_autoCompleteTime = 20 * 10;
_displayName = "Welcome";
_technicalName = "Welcome";
_description = "Welcome to Clans! "
+ "In this game mode, you are able to create a Clan, invite your friends to the Clan, build a base, claim it to protect, and fight others with your new powerful Clan!"
+ "You can also join a friend's Clan if they invite you to it!"
+ "When you finish the tutorial, you will be awarded {30,000 Gold}";
}
}

View File

@ -0,0 +1,107 @@
package mineplex.game.clans.tutorials.gettingstarted;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.donation.DonationManager;
import mineplex.core.task.TaskManager;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.economy.GoldManager;
import mineplex.game.clans.spawn.Spawn;
import mineplex.game.clans.tutorials.Tutorial;
import mineplex.game.clans.tutorials.TutorialManager;
public class TutorialGettingStarted extends Tutorial
{
public TutorialGettingStarted(final TutorialManager manager, final ClansManager clansManager, final DonationManager donationManager, final GoldManager goldManager, final TaskManager taskManager)
{
super(goldManager, taskManager, clansManager, donationManager, manager);
// addTask(new TaskWelcome(this, 1));
int id = 0;
addTask(new TaskCreateClan(this, ++id));
addTask(new TaskViewClanDetails(this, ++id));
addTask(new TaskLeaveSpawn(this, ++id));
addTask(new TaskGoToWilderness(this, ++id));
addTask(new TaskClaim(this, ++id));
addTask(new TaskSetHome(this, ++id));
addTask(new TaskExploreShops(this, ++id));
addTask(new TaskEquipClass(this, ++id));
addTask(new TaskUseAbility(this, ++id));
addTask(new TaskCustomizeClass(this, ++id));
addTask(new TaskMakingMoney(this, ++id));
addTask(new TaskDisbandClan(this, ++id));
_doScoreboard = true;
_ghostMode = true;
_startOnJoin = true;
_goldReward = 30000;
_technicalName = "GettingStartedTutorial";
_displayName = "Getting Started";
}
@Override
public void onFinished(final Player player)
{
UtilPlayer.message(player, C.cDGreenB + C.Strike + "---------------------------------------------");
UtilPlayer.message(player, C.cYellowB + "CONGRATULATIONS");
UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cWhite + "You have completed the CLANS basic tutorial and have been awarded {30,000 Gold}.");
UtilPlayer.message(player, C.cWhite + "You can now begin your adventure but do take a moment to read the signs around spawn for more information.");
UtilPlayer.message(player, C.cDGreenB + C.Strike + "---------------------------------------------");
player.resetPlayerTime();
player.teleport(Spawn.getEastSpawn());
}
@Override
public void onBegin(final Player player)
{
UtilPlayer.message(player, " ");
UtilPlayer.message(player, " ");
UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cDGreenB + C.Strike + "---------------------------------------------");
UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cYellowB + "Getting Started");
UtilPlayer.message(player, C.cWhite + "Welcome to Clans! "
+ "In this game mode, you are able to create a Clan, invite your friends to the Clan, build a base, claim it to protect, and fight others with your new powerful Clan! "
+ "You can also join a friend's Clan if they invite you to it! "
+ "When you finish the tutorial, you will be awarded " + C.cAqua + "30,000 Gold");
UtilPlayer.message(player, " ");
UtilPlayer.message(player, C.cDGreenB + C.Strike + "---------------------------------------------");
}
@EventHandler(priority = EventPriority.MONITOR)
public void onUpdate(final UpdateEvent event)
{
if (!event.getType().equals(UpdateType.SEC))
{
return;
}
for (Player player : UtilServer.getPlayers())
{
if (isInTutorial(player))
{
for (Player other : UtilServer.getPlayers())
{
other.hidePlayer(player.getPlayer());
player.hidePlayer(other);
}
}
}
}
}

View File

@ -1,404 +0,0 @@
package mineplex.game.clans.tutorials.types;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilItem;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilItem.ItemCategory;
import mineplex.core.donation.DonationManager;
import mineplex.core.task.TaskManager;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClanRole;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.event.ClanCreatedEvent;
import mineplex.game.clans.clans.event.ClanDisbandedEvent;
import mineplex.game.clans.clans.event.ClanJoinEvent;
import mineplex.game.clans.clans.event.ClanSetHomeEvent;
import mineplex.game.clans.clans.event.ClansCommandExecutedEvent;
import mineplex.game.clans.clans.event.ClansPlayerBuyItemEvent;
import mineplex.game.clans.clans.event.ClansPlayerSellItemEvent;
import mineplex.game.clans.clans.event.ClansShopAddButtonEvent;
import mineplex.game.clans.clans.event.PlayerEnterTerritoryEvent;
import mineplex.game.clans.economy.GoldManager;
import mineplex.game.clans.spawn.Spawn;
import mineplex.game.clans.tutorials.Tutorial;
import mineplex.game.clans.tutorials.TutorialClient;
import mineplex.game.clans.tutorials.TutorialManager;
import mineplex.minecraft.game.classcombat.Class.ClientClass;
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
public class TutorialGettingStarted extends Tutorial
{
public TutorialGettingStarted(final TutorialManager manager, final ClansManager clansManager, final DonationManager donationManager, final GoldManager goldManager, final TaskManager taskManager)
{
super(goldManager, taskManager, clansManager, donationManager, manager);
addTask(1, "Welcome",
"Welcome to Clans! "
+ "In this game mode, you are able to create a Clan, invite your friends to the Clan, build a base, claim it to protect, and fight others with your new powerful Clan!"
+ "You can also join a friend's Clan if they invite you to it!"
+ "When you finish the tutorial, you will be awarded {30,000 Gold}");
addTask(2, "Create a clan",
"Before beginning, use the {/c create <ClanName>} command to start up your own Clan!"
+ "Alternatively, you can join a friend's Clan, if they have invited you, instead of making your own.");
addTask(3, "Viewing Clan Details",
"Now you can view information about your Clan. "
+ "To do this type {/c [Clan Name]}! "
+ "You can also use any Clans name to get some information about them as well.");
addTask(4, "Leave Spawn Islands",
"Now you can leave the Spawn Island. "
+ "Don't worry, you won't get hurt from the fall! "
+ "Once you end the tutorial, PvP will be enabled down there, so be careful!");
addTask(5, "Go To The Wilderness",
"Use your Map (Slot 9) to help find your way to the Wilderness. "
+ "The Wilderness is anywhere that is not colored on the Map. "
+ "If you don't have a map, you can get one at any time by typing {/map}. "
+ "You can zoom in/out by Left and Right Clicking!");
addTask(6, "Claim some Territory",
"Clans can claim 16x16 areas of Territory! "
+ "Once claimed, only your Clan can break/place blocks here. "
+ "This is the perfect place to build a base and stash your items!"
+ "You can only claim in the Wilderness, and not next to other Clans Territory. "
+ "Claim some Territory now, by typing {/c claim}! ",
"Good job! We won't actually claim this Territory yet!");
addTask(7, "Set Clan Home",
"You are now ready to set a Clan Home."
+ "To do this, use the {/c sethome} command.");
addTask(8, "Explore the Shops",
"You can buy all sorts of things at the Shops! "
+ "You can also sell things to the Villagers for Gold! "
+ "Look at your Map and take notice of where the Shops is. "
+ "You can also transfer {1,000 Gems} into {32,000 Clans Gold} each day.");
addTask(9, "Equip a Class",
"Find the PvP Gear shop, and Right-Click the Villager. "
+ "Purchase Iron Armor from the PvP Shop. (FREE) "
+ "Then put on your Armor to equip a Champions Class. ");
addTask(10, "Use a Class Ability",
"Now that you have Equipped a Class, you can start using Abilities. "
+ "Purchase a Sword from the PvP Shop. (FREE) "
+ "Right-Click with your Sword to use your Sword Ability!");
addTask(11, "Class Customization",
"To customize your Class, Right-Click an Enchantment Table! "
+ "There should be one nearby in the Shops!"
+ "Find it, and try customizing your Class! ");
addTask(12, "Making Money (Farming)",
"We have given you a few Carrots, as a starter for your Farming career. "
+ "Go to the Organic Produce Villager in one of the Shops, and sell the Carrots for {Gold}.");
addTask(13, "Disband your Clan",
"Finally, let's disband your Clan to end the Tutorial. "
+ "Simply type {/c disband} to do this. "
+ "This will delete your Clan, and you'll be able to create or join a new one!");
_doScoreboard = true;
_ghostMode = true;
_startOnJoin = true;
_goldReward = 30000;
_uniqueId = "GettingStartedTutorial";
_friendlyName = "Getting Started";
}
@Override
public void onFinished(final Player player)
{
UtilPlayer.message(player, F.main("Tutorials", "You are now ready to play, welcome to the game."));
player.resetPlayerTime();
}
@EventHandler
public void button(ClansShopAddButtonEvent event)
{
if (get(event.getPlayer()).hasFinishedTask(getTask("Explore the Shops")) && !get(event.getPlayer()).hasFinishedTask(getTask("Equip a Class")))
{
if (!(UtilItem.isArmor(event.getMaterial()) && UtilItem.isIronProduct(event.getMaterial())))
{
return;
}
if (!_taskManager.hasCompletedTask(event.getPlayer(), "GettingStartedBought" + event.getMaterial().name()))
{
event.setBuyPrice(0);
event.setSellPrice(0);
}
}
}
@EventHandler
public void swordbutton(ClansShopAddButtonEvent event)
{
if (get(event.getPlayer()).hasFinishedTask(getTask("Equip A Class")) && !get(event.getPlayer()).hasFinishedTask(getTask("Use a Class Ability")))
{
if (!(UtilItem.isSword(event.getMaterial())))
{
return;
}
if (!_taskManager.hasCompletedTask(event.getPlayer(), "GettingStartedBoughtSword"))
{
event.setBuyPrice(0);
event.setSellPrice(0);
}
}
}
@EventHandler
public void buy(final ClansPlayerBuyItemEvent event)
{
if (get(event.getPlayer()).hasFinishedTask(getTask("Explore the Shops")) && !get(event.getPlayer()).hasFinishedTask(getTask("Equip a Class")))
{
if (!(UtilItem.isArmor(event.getItem().getType()) && UtilItem.isIronProduct(event.getItem().getType())))
{
return;
}
_taskManager.completedTask(new Callback<Boolean>(){
@Override
public void run(Boolean data)
{
}
}, event.getPlayer(), "GettingStartedBought" + event.getItem().getType().name());
}
}
@EventHandler
public void buysword(final ClansPlayerBuyItemEvent event)
{
if (get(event.getPlayer()).hasFinishedTask(getTask("Equip A Class")) && !get(event.getPlayer()).hasFinishedTask(getTask("Use a Class Ability")))
{
if (UtilItem.isSword(event.getItem().getType()))
{
_taskManager.completedTask(new Callback<Boolean>() {
@Override
public void run(Boolean data)
{
}
}, event.getPlayer(), "GettingStartedBoughtSword");
}
}
}
@EventHandler
public void sell(ClansPlayerSellItemEvent event)
{
if (get(event.getPlayer()).hasFinishedTask(getTask("Class Customization")) && !get(event.getPlayer()).hasFinishedTask(getTask("Making Money (Farming)")))
{
finishTask(event.getPlayer(), "Making Money (Farming)");
}
}
@Override
public void onBegin(final Player player)
{
UtilPlayer.message(player, F.main("Tutorials", "Welcome to the " + F.elem("Getting Started Tutorial!")));
UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(_clansManager.getPlugin(), new Runnable() {
public void run()
{
finishTask(player, "Welcome");
UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(_clansManager.getPlugin(), new Runnable() {
public void run()
{
if (_clansManager.isInClan(player) && _clansManager.getClan(player).getClansPlayerFromName(player.getName()).getRole().has(ClanRole.ADMIN))
{
finishTask(player, "Create a clan");
}
}
}, 20L);
}
}, 80L);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onClanCreated(ClanCreatedEvent event)
{
if (event.getFounder() == null)
{
return;
}
if (isInTutorial(event.getFounder()) && get(event.getFounder()).hasFinishedTask(getTask("Welcome")) && !get(event.getFounder()).hasFinishedTask(getTask("Create a clan")))
{
finishTask(event.getFounder(), "Create a clan");
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onClanJoined(ClanJoinEvent event)
{
if (event.getPlayer() == null)
{
return;
}
if (isInTutorial(event.getPlayer()) && get(event.getPlayer()).hasFinishedTask(getTask("Welcome")) && !get(event.getPlayer()).hasFinishedTask(getTask("Create a clan")))
{
finishTask(event.getPlayer(), "Create a clan");
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void handlePlayerChat(AsyncPlayerChatEvent event)
{
for (TutorialClient player : _inTutorial.values())
{
if (event.getPlayer().equals(player.getPlayer()))
{
event.setCancelled(true);
continue;
}
event.getRecipients().remove(player.getPlayer());
}
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onClansCommand(ClansCommandExecutedEvent event)
{
if (event.getCommand().equals("info"))
{
if (isInTutorial(event.getPlayer()) && get(event.getPlayer()).hasFinishedTask(getTask("Create a clan")) && !get(event.getPlayer()).hasFinishedTask(getTask("Viewing Clan Details")))
{
finishTask(event.getPlayer(), "Viewing Clan Details");
}
}
else if (event.getCommand().equals("claim"))
{
if (isInTutorial(event.getPlayer()) && get(event.getPlayer()).hasFinishedTask(getTask("Go To The Wilderness")) && !get(event.getPlayer()).hasFinishedTask(getTask("Claiming Territory")))
{
finishTask(event.getPlayer(), "Claim some Territory");
event.getPlayer().teleport(Spawn.getNorthTown());
event.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onSethome(ClanSetHomeEvent event)
{
if (isInTutorial(event.getPlayer()) && get(event.getPlayer()).hasFinishedTask(getTask("Claim some Territory")) && !get(event.getPlayer()).hasFinishedTask(getTask("Set Clan Home")))
{
finishTask(event.getPlayer(), "Set Clan Home");
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onTerritory(final PlayerEnterTerritoryEvent event)
{
final Player player = event.getPlayer();
final String newTerritory = event.getNewTerritory();
if (isInTutorial(player) && newTerritory.contains("Spawn") && get(player).hasFinishedTask(getTask("Viewing Clan Details")) && !get(player).hasFinishedTask(getTask("Leave Spawn Islands")))
{
finishTask(player, "Leave Spawn Islands");
}
else if (isInTutorial(player) && newTerritory.contains("Wilderness") && get(player).hasFinishedTask(getTask("Leave Spawn Islands")) && !get(player).hasFinishedTask(getTask("Go To The Wilderness")))
{
finishTask(player, "Go To The Wilderness");
}
else if (isInTutorial(player) && newTerritory.contains("Shops") && get(player).hasFinishedTask(getTask("Claim some Territory")) && !get(player).hasFinishedTask(getTask("Explore the Shops")))
{
finishTask(player, "Explore the Shops");
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onSkillTriggered(final SkillTriggerEvent event)
{
final Player player = event.GetPlayer();
if (isInTutorial(player) && get(player).hasFinishedTask(getTask("Equip a Class")) && !get(player).hasFinishedTask(getTask("Use a Class Ability")))
{
finishTask(player, "Use a Class Ability");
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onUpdated(final UpdateEvent event)
{
for (Player player : UtilServer.getPlayers())
{
if (!isInTutorial(player))
{
continue;
}
ClientClass client = _clansManager.getClassManager().Get(player);
if (client == null)
{
continue;
}
if (client.GetGameClass() == null)
{
return;
}
if (isInTutorial(player) && get(player).hasFinishedTask(getTask("Explore the Shops")) && !get(player).hasFinishedTask(getTask("Equip a Class")))
{
finishTask(player, "Use a Class Ability");
}
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onUpdate(final UpdateEvent event)
{
if (!event.getType().equals(UpdateType.SEC))
{
return;
}
for (final TutorialClient client : _inTutorial.values())
{
if (isInTutorial(client.getPlayer()))
{
client.getPlayer().setPlayerTime(6000, false);
if (get(client.getPlayer()).hasFinishedTask(getTask("Equip a Class")) && !get(client.getPlayer()).hasFinishedTask(getTask("Class Customization")))
{
final ClientClass clientclass = _clansManager.getClassManager().Get(client.getPlayer());
if (clientclass != null && clientclass.GetSavingCustomBuild() != null)
{
finishTask(client.getPlayer(), "Class Customization");
client.getPlayer().getInventory().addItem(new ItemStack(Material.CARROT_ITEM, 5));
}
}
}
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onDeletedClan(final ClanDisbandedEvent event)
{
if (isInTutorial(event.getDisbander()) && get(event.getDisbander()).hasFinishedTask(getTask("Making Money (Farming)")) && !get(event.getDisbander()).hasFinishedTask(getTask("Disband your Clan")))
{
finishTask(event.getDisbander(), "Disband your Clan");
}
}
}

View File

@ -3,9 +3,12 @@ package mineplex.game.clans.world;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -38,7 +41,23 @@ public class WorldManager extends MiniPlugin
for (Entity ent : world.getEntities()) for (Entity ent : world.getEntities())
{ {
if (ent.getCustomName() == null) if (ent.getCustomName() == null)
_ents.get(ent.getType()).add(ent); {
boolean cull = true;
for (Player player : world.getPlayers())
{
if (player.getLocation().distance(ent.getLocation()) <= 64)
{
cull = false;
break;
}
}
if (cull)
{
_ents.get(ent.getType()).add(ent);
}
}
} }
for (EntityType type : _ents.keySet()) for (EntityType type : _ents.keySet())

View File

@ -17,9 +17,11 @@ import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.donation.Donor; import mineplex.core.donation.Donor;
import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.itemstack.ItemStackFactory;
import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
import mineplex.minecraft.game.classcombat.Class.event.ClassEquipEvent;
import mineplex.minecraft.game.classcombat.Class.repository.token.ClientClassToken; import mineplex.minecraft.game.classcombat.Class.repository.token.ClientClassToken;
import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken; import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken;
import mineplex.minecraft.game.classcombat.Class.repository.token.SlotToken; import mineplex.minecraft.game.classcombat.Class.repository.token.SlotToken;
@ -343,7 +345,16 @@ public class ClientClass
} }
ResetToDefaults(!skillsOnly, !skillsOnly); ResetToDefaults(!skillsOnly, !skillsOnly);
// Event
ClassEquipEvent event = new ClassEquipEvent(this, customBuild);
UtilServer.getServer().getPluginManager().callEvent(event);
if (event.isCancelled())
{
return;
}
if (notify) if (notify)
{ {
ListSkills(_client.GetPlayer()); ListSkills(_client.GetPlayer());

View File

@ -5,8 +5,10 @@ import java.util.concurrent.ConcurrentHashMap;
import mineplex.core.common.util.Callback; import mineplex.core.common.util.Callback;
import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilServer;
import mineplex.core.gadget.types.GadgetType; import mineplex.core.gadget.types.GadgetType;
import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.itemstack.ItemStackFactory;
import mineplex.minecraft.game.classcombat.Class.event.ClassEquipEvent;
import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken; import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken;
import mineplex.minecraft.game.classcombat.Skill.ISkill; import mineplex.minecraft.game.classcombat.Skill.ISkill;

View File

@ -0,0 +1,57 @@
package mineplex.minecraft.game.classcombat.Class.event;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import mineplex.minecraft.game.classcombat.Class.ClientClass;
import mineplex.minecraft.game.classcombat.Class.PvpClass;
import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken;
public class ClassEquipEvent extends Event
{
private static final HandlerList handlers = new HandlerList();
private ClientClass _client;
private CustomBuildToken _build;
private boolean _cancelled;
public ClassEquipEvent(ClientClass client, CustomBuildToken build)
{
_client = client;
_build = build;
}
public ClientClass getPlayer()
{
return _client;
}
public CustomBuildToken getBuild()
{
return _build;
}
public void setCancelled(boolean cancelled)
{
_cancelled = cancelled;
}
public boolean isCancelled()
{
return _cancelled;
}
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
}

View File

@ -170,6 +170,8 @@ public class BlockToss extends SkillCharge implements IThrown
return; return;
} }
event.getClickedBlock().setType(Material.AIR);
//Block to Item //Block to Item
FallingBlock block = player.getWorld().spawnFallingBlock(player.getEyeLocation(), event.getClickedBlock().getType(), event.getClickedBlock().getData()); FallingBlock block = player.getWorld().spawnFallingBlock(player.getEyeLocation(), event.getClickedBlock().getType(), event.getClickedBlock().getData());