added hub tutorial
This commit is contained in:
parent
5aec6509ca
commit
835d78e0e7
@ -64,6 +64,7 @@ import mineplex.core.disguise.disguises.DisguisePlayer;
|
||||
import mineplex.core.donation.DonationManager;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.hub.tutorial.Tutorial;
|
||||
|
||||
public class HubManager extends MiniClientPlugin<HubClient>
|
||||
{
|
||||
@ -71,6 +72,9 @@ public class HubManager extends MiniClientPlugin<HubClient>
|
||||
private DonationManager _donationManager;
|
||||
private DisguiseManager _disguiseManager;
|
||||
|
||||
private Tutorial _tutorial;
|
||||
private TextCreator _textCreator;
|
||||
|
||||
private Location _spawn;
|
||||
private int _scoreboardTick = 0;
|
||||
|
||||
@ -91,9 +95,12 @@ public class HubManager extends MiniClientPlugin<HubClient>
|
||||
|
||||
_spawn = new Location(UtilWorld.getWorld("world"), 0.5, 74, 0.5);
|
||||
|
||||
new TextCreator(this);
|
||||
_textCreator = new TextCreator(this);
|
||||
|
||||
new Dragon(this);
|
||||
|
||||
_tutorial = new Tutorial(this, _textCreator);
|
||||
|
||||
DragonTextB = GetDragonText();
|
||||
}
|
||||
|
||||
@ -252,6 +259,9 @@ public class HubManager extends MiniClientPlugin<HubClient>
|
||||
|
||||
for (Player other : UtilServer.getPlayers())
|
||||
{
|
||||
if (_tutorial.InTutorial(other))
|
||||
continue;
|
||||
|
||||
UtilPlayer.message(other, rankStr + C.cYellow + player.getName() + " " + C.cWhite + event.getMessage());
|
||||
}
|
||||
}
|
||||
@ -540,7 +550,7 @@ public class HubManager extends MiniClientPlugin<HubClient>
|
||||
if (player.equals(other))
|
||||
continue;
|
||||
|
||||
if (UtilMath.offset(player.getLocation(), GetSpawn()) < 4)
|
||||
if (UtilMath.offset(player.getLocation(), GetSpawn()) < 4 || _tutorial.InTutorial(other))
|
||||
{
|
||||
((CraftPlayer)other).hidePlayer(player, true, false);
|
||||
}
|
||||
|
@ -14,10 +14,10 @@ public class TextCreator extends MiniPlugin
|
||||
{
|
||||
public HubManager Manager;
|
||||
|
||||
Location locComp;
|
||||
Location locArcade;
|
||||
Location locSurvival;
|
||||
Location locOther;
|
||||
public Location locComp;
|
||||
public Location locArcade;
|
||||
public Location locSurvival;
|
||||
public Location locClassics;
|
||||
|
||||
BlockFace faceComp = BlockFace.SOUTH;
|
||||
BlockFace faceArcade = BlockFace.WEST;
|
||||
@ -38,7 +38,7 @@ public class TextCreator extends MiniPlugin
|
||||
locComp = manager.GetSpawn().add(40, 10, 0);
|
||||
locArcade = manager.GetSpawn().add(0, 10, 40);
|
||||
locSurvival = manager.GetSpawn().add(-40, 10, 0);
|
||||
locOther = manager.GetSpawn().add(0, 10, -40);
|
||||
locClassics = manager.GetSpawn().add(0, 10, -40);
|
||||
|
||||
arcadeGames = new String[]
|
||||
{
|
||||
@ -84,14 +84,14 @@ public class TextCreator extends MiniPlugin
|
||||
|
||||
|
||||
//Other
|
||||
UtilText.MakeText("CLASSICS", locOther, faceOther, 159, (byte)5, TextAlign.CENTER);
|
||||
UtilText.MakeText("CLASSICS", locOther.add(0, 0, -1), faceOther, 159, (byte)15, TextAlign.CENTER);
|
||||
UtilText.MakeText("CLASSICS", locClassics, faceOther, 159, (byte)5, TextAlign.CENTER);
|
||||
UtilText.MakeText("CLASSICS", locClassics.add(0, 0, -1), faceOther, 159, (byte)15, TextAlign.CENTER);
|
||||
|
||||
UtilText.MakeText("SUPER SMASH MOBS", locOther.clone().add(0, 14, -15), faceOther, 159, (byte)4, TextAlign.CENTER);
|
||||
UtilText.MakeText("SUPER SMASH MOBS", locOther.clone().add(0, 14, -16), faceOther, 159, (byte)15, TextAlign.CENTER);
|
||||
UtilText.MakeText("SUPER SMASH MOBS", locClassics.clone().add(0, 14, -15), faceOther, 159, (byte)4, TextAlign.CENTER);
|
||||
UtilText.MakeText("SUPER SMASH MOBS", locClassics.clone().add(0, 14, -16), faceOther, 159, (byte)15, TextAlign.CENTER);
|
||||
|
||||
UtilText.MakeText("MINEKART", locOther.clone().add(0, 21, -15), faceOther, 159, (byte)1, TextAlign.CENTER);
|
||||
UtilText.MakeText("MINEKART", locOther.clone().add(0, 21, -16), faceOther, 159, (byte)15, TextAlign.CENTER);
|
||||
UtilText.MakeText("MINEKART", locClassics.clone().add(0, 21, -15), faceOther, 159, (byte)1, TextAlign.CENTER);
|
||||
UtilText.MakeText("MINEKART", locClassics.clone().add(0, 21, -16), faceOther, 159, (byte)15, TextAlign.CENTER);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -134,8 +134,8 @@ public class TextCreator extends MiniPlugin
|
||||
//UtilText.MakeText("SUPER SMASH MOBS", locOther, faceOther, 159, color, TextAlign.CENTER);
|
||||
//UtilText.MakeText("SUPER SMASH MOBS", locOther.clone().add(0, 0, -1), faceOther, 159, (byte)15, TextAlign.CENTER);
|
||||
|
||||
UtilText.MakeText("SUPER SMASH MOBS", locOther.clone().add(0, 14, -15), faceOther, 159, color, TextAlign.CENTER);
|
||||
UtilText.MakeText("SUPER SMASH MOBS", locOther.clone().add(0, 14, -16), faceOther, 159, (byte)15, TextAlign.CENTER);
|
||||
UtilText.MakeText("SUPER SMASH MOBS", locClassics.clone().add(0, 14, -15), faceOther, 159, color, TextAlign.CENTER);
|
||||
UtilText.MakeText("SUPER SMASH MOBS", locClassics.clone().add(0, 14, -16), faceOther, 159, (byte)15, TextAlign.CENTER);
|
||||
|
||||
UtilText.MakeText("DOMINATE", locComp.clone().add(15, 14, 0), faceComp, 159, color, TextAlign.CENTER);
|
||||
UtilText.MakeText("DOMINATE", locComp.clone().add(16, 14, 0), faceComp, 159, (byte)15, TextAlign.CENTER);
|
||||
|
224
Plugins/Mineplex.Hub/src/mineplex/hub/tutorial/Tutorial.java
Normal file
224
Plugins/Mineplex.Hub/src/mineplex/hub/tutorial/Tutorial.java
Normal file
@ -0,0 +1,224 @@
|
||||
package mineplex.hub.tutorial;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
import mineplex.core.MiniPlugin;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.hub.HubManager;
|
||||
import mineplex.hub.TextCreator;
|
||||
|
||||
public class Tutorial extends MiniPlugin
|
||||
{
|
||||
private TextCreator HubText;
|
||||
|
||||
private ArrayList<TutorialPhase> phases = new ArrayList<TutorialPhase>();
|
||||
private HashMap<Player, TutorialData> tute = new HashMap<Player, TutorialData>();
|
||||
|
||||
private String main = ChatColor.RESET + "";
|
||||
private String elem = C.cYellow + C.Bold;
|
||||
|
||||
public Tutorial(HubManager manager, TextCreator text)
|
||||
{
|
||||
super("Hub Tutorial", manager.GetPlugin());
|
||||
|
||||
HubText = text;
|
||||
|
||||
double y = -manager.GetSpawn().getY();
|
||||
|
||||
//Welcome
|
||||
phases.add(new TutorialPhase(
|
||||
manager.GetSpawn().add(-40, y+85, 0),
|
||||
manager.GetSpawn(),
|
||||
"Welcome to Mineplex",
|
||||
new String[]
|
||||
{
|
||||
"Hello!",
|
||||
"This is a very quick tutorial to help you start.",
|
||||
"If you complete it, you will get " + elem + "5000 Gems" + main + "!",
|
||||
"Seriously, it will only take 30 seconds!!!",
|
||||
"",
|
||||
"Mineplex has many different games to play.",
|
||||
"I will show you them, and tell you how to join!"
|
||||
}
|
||||
));
|
||||
|
||||
//Arcade
|
||||
phases.add(new TutorialPhase(
|
||||
manager.GetSpawn().add(0, -3, 13),
|
||||
HubText.locArcade,
|
||||
"Arcade",
|
||||
new String[]
|
||||
{
|
||||
"This is the " + elem + "Arcade" + main + " game mode.",
|
||||
"",
|
||||
"Servers will rotate through many different games.",
|
||||
"So there's no need to quit after each game!",
|
||||
"",
|
||||
"They are all quick, fun 16 player games!"
|
||||
}
|
||||
));
|
||||
|
||||
//Bridges
|
||||
phases.add(new TutorialPhase(
|
||||
manager.GetSpawn().add(-13, -3, 0),
|
||||
HubText.locSurvival,
|
||||
"Survival",
|
||||
new String[]
|
||||
{
|
||||
"This is the " + elem + "The Bridges" + main + " game mode.",
|
||||
"This is a great team combat game.",
|
||||
"You get 10 minutes to prepare for battle,",
|
||||
"then the bridges drop, and you fight to the death!",
|
||||
"",
|
||||
elem + "Hunger Games" + main + " will be added here soon!"
|
||||
}
|
||||
));
|
||||
|
||||
//Pig
|
||||
phases.add(new TutorialPhase(
|
||||
manager.GetSpawn().add(-9, y+73, 53),
|
||||
manager.GetSpawn().add(-11, y+72.5, 57),
|
||||
"???",
|
||||
new String[]
|
||||
{
|
||||
"",
|
||||
"",
|
||||
"This is a pig standing on a log."
|
||||
}
|
||||
));
|
||||
|
||||
//Classics
|
||||
phases.add(new TutorialPhase(
|
||||
manager.GetSpawn().add(0, -3, -13),
|
||||
HubText.locClassics,
|
||||
"Classics",
|
||||
new String[]
|
||||
{
|
||||
"Here, you can play our " + elem + "Classics" + main + " game modes.",
|
||||
"",
|
||||
elem + "MineKart" + main + " is an exciting racing game.",
|
||||
"Complete with weapons, drifting and more!",
|
||||
"",
|
||||
"In " + elem + "Super Smash Mobs" + main + " you become a monster,",
|
||||
"then fight to the death with other players, using fun skills!"
|
||||
}
|
||||
));
|
||||
|
||||
//Comp
|
||||
phases.add(new TutorialPhase(
|
||||
manager.GetSpawn().add(13, -3, 0),
|
||||
HubText.locComp,
|
||||
"Champions",
|
||||
new String[]
|
||||
{
|
||||
"Finally, these are the " + elem + "Champions" + main + " games.",
|
||||
"These are extremely competitive skill based games.",
|
||||
"",
|
||||
"Each class can be customised with unlockable skills.",
|
||||
"",
|
||||
"Fight with other in three different game types!"
|
||||
}
|
||||
));
|
||||
|
||||
//HORSE
|
||||
phases.add(new TutorialPhase(
|
||||
manager.GetSpawn().add(0, -3, 19),
|
||||
manager.GetSpawn().add(0, -3.1, 23),
|
||||
"Joining Games",
|
||||
new String[]
|
||||
{
|
||||
"Click on this " + elem + "HORSE" + main + " to join an " + elem + "ARCADE" + main + " server.",
|
||||
"This will open the server select menu.",
|
||||
"Click an " + elem + "Emerald Block" + main + " to join a server!",
|
||||
"",
|
||||
"Easy huh?",
|
||||
"",
|
||||
"Thanks for listening! Have fun!"
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void PlayerJoin(PlayerJoinEvent event)
|
||||
{
|
||||
//XXX IF BLA BLA BLA JOINED
|
||||
tute.put(event.getPlayer(), new TutorialData(event.getPlayer(), phases.get(0)));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void PlayerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
tute.remove(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void InteractCancel(PlayerInteractEvent event)
|
||||
{
|
||||
if (InTutorial(event.getPlayer()))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void MoveCancel(PlayerMoveEvent event)
|
||||
{
|
||||
if (InTutorial(event.getPlayer()))
|
||||
event.setTo(event.getFrom());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
return;
|
||||
|
||||
Iterator<Player> tuteIterator = tute.keySet().iterator();
|
||||
|
||||
while (tuteIterator.hasNext())
|
||||
{
|
||||
Player player = tuteIterator.next();
|
||||
TutorialData data = tute.get(player);
|
||||
|
||||
if (data.Update())
|
||||
{
|
||||
if (data.PhaseStep < phases.size())
|
||||
{
|
||||
data.SetNextPhase(phases.get(data.PhaseStep));
|
||||
}
|
||||
else
|
||||
{
|
||||
tuteIterator.remove();
|
||||
|
||||
System.out.println("Completed Tutorial: " + player.getName());
|
||||
|
||||
//XXX SET BLA BLA BLA FINISHED
|
||||
//XXX Give 5000 Gems
|
||||
|
||||
UtilPlayer.message(player, C.cAqua + C.Bold + "You completed the Tutorial.");
|
||||
UtilPlayer.message(player, C.cGreen + C.Bold + "You received 5000 Gems.");
|
||||
|
||||
player.playSound(player.getLocation(), Sound.LEVEL_UP, 2f, 1.5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean InTutorial(Player player)
|
||||
{
|
||||
return tute.containsKey(player);
|
||||
}
|
||||
}
|
@ -0,0 +1,87 @@
|
||||
package mineplex.hub.tutorial;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class TutorialData
|
||||
{
|
||||
public Player Player;
|
||||
|
||||
public TutorialPhase Phase;
|
||||
public int PhaseStep;
|
||||
|
||||
public int TextStep;
|
||||
|
||||
public long Sleep;
|
||||
|
||||
public TutorialData(Player player, TutorialPhase phase)
|
||||
{
|
||||
Player = player;
|
||||
Phase = phase;
|
||||
|
||||
TextStep = 0;
|
||||
PhaseStep = 0;
|
||||
|
||||
Sleep = System.currentTimeMillis() + 3000;
|
||||
}
|
||||
|
||||
public boolean Update()
|
||||
{
|
||||
if (!Player.getLocation().equals(Phase.Location))
|
||||
Player.teleport(Phase.Location);
|
||||
|
||||
if (System.currentTimeMillis() < Sleep)
|
||||
return false;
|
||||
|
||||
//Next Phase
|
||||
if (TextStep >= Phase.Text.length)
|
||||
{
|
||||
PhaseStep++;
|
||||
Sleep = System.currentTimeMillis() + 2000;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//Display Text
|
||||
String text = Phase.Text[TextStep];
|
||||
|
||||
UtilPlayer.message(Player, " ");
|
||||
UtilPlayer.message(Player, " ");
|
||||
UtilPlayer.message(Player, " ");
|
||||
UtilPlayer.message(Player, C.cGreen + C.Strike + C.Bold + "========================================");
|
||||
UtilPlayer.message(Player, C.cGold + C.Bold + Phase.Header);
|
||||
UtilPlayer.message(Player, " ");
|
||||
|
||||
for (int i=0 ; i<=TextStep ; i++)
|
||||
UtilPlayer.message(Player, " " + Phase.Text[i]);
|
||||
|
||||
for (int i=TextStep ; i<=5 ; i++)
|
||||
UtilPlayer.message(Player, " ");
|
||||
|
||||
UtilPlayer.message(Player, C.cGreen + C.Strike + C.Bold + "========================================");
|
||||
|
||||
if (text.length() > 0)
|
||||
{
|
||||
Player.playSound(Player.getLocation(), Sound.ORB_PICKUP, 2f, 1.5f);
|
||||
Sleep = System.currentTimeMillis() + 1200 + (60*text.length());
|
||||
}
|
||||
else
|
||||
{
|
||||
Sleep = System.currentTimeMillis() + 600;
|
||||
}
|
||||
|
||||
TextStep++;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void SetNextPhase(TutorialPhase phase)
|
||||
{
|
||||
Phase = phase;
|
||||
TextStep = 0;
|
||||
Player.teleport(Phase.Location);
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package mineplex.hub.tutorial;
|
||||
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
public class TutorialPhase
|
||||
{
|
||||
public Location Location;
|
||||
public String Header;
|
||||
public String[] Text;
|
||||
|
||||
public TutorialPhase(Location player, Location target, String header, String[] text)
|
||||
{
|
||||
Location = player;
|
||||
|
||||
Location.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(player, target)));
|
||||
Location.setPitch(UtilAlg.GetPitch(UtilAlg.getTrajectory(player, target)));
|
||||
|
||||
Header = header;
|
||||
Text = text;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user