Skip to content

Commit

Permalink
Add spectating, lang.yml, focus mode, permissions, etc.
Browse files Browse the repository at this point in the history
  • Loading branch information
Efnilite committed Jan 8, 2021
1 parent 3ae183f commit db3f757
Show file tree
Hide file tree
Showing 16 changed files with 711 additions and 354 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>dev.efnilite</groupId>
<artifactId>witp</artifactId>
<version>1.0</version>
<version>1.8</version>
<build>
<plugins>
<plugin>
Expand Down
42 changes: 29 additions & 13 deletions src/main/java/dev/efnilite/witp/WITP.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import dev.efnilite.witp.generator.subarea.SubareaDivider;
import dev.efnilite.witp.hook.PlaceholderHook;
import dev.efnilite.witp.player.ParkourPlayer;
import dev.efnilite.witp.player.ParkourUser;
import dev.efnilite.witp.util.Configuration;
import dev.efnilite.witp.util.Util;
import dev.efnilite.witp.util.Verbose;
Expand Down Expand Up @@ -61,7 +62,7 @@ public void onEnable() {
break;
default:
Verbose.error("You are trying to start this plugin using an invalid server version");
Verbose.error("This plugin only works in version 1.16.4");
Verbose.error("This plugin only works in version 1.16.4, 1.16.3 or 1.16.2");
this.getServer().getPluginManager().disablePlugin(this);
return;
}
Expand Down Expand Up @@ -118,16 +119,18 @@ public void join(PlayerJoinEvent event) {
Player player = event.getPlayer();
World world = WITP.getDivider().getWorld();
if (configuration.getFile("config").getBoolean("bungeecord.enabled")) {
if (configuration.getFile("config").getBoolean("messages.join-leave-enabled")) {
event.setJoinMessage(configuration.getString("config", "messages.join").replaceAll("%[a-z]",
player.getName()));
}
try {
ParkourPlayer.register(player);
} catch (IOException ex) {
ex.printStackTrace();
Verbose.error("Something went wrong while trying to fetch a player's (" + player.getName() + ") data");
}
if (configuration.getFile("lang").getBoolean("messages.join-leave-enabled")) {
event.setJoinMessage(null);
for (ParkourUser user : ParkourUser.getUsers()) {
user.sendTranslated("join", player.getName());
}
}
} else if (player.getWorld() == WITP.getDivider().getWorld()) {
World fallback = Bukkit.getWorld(configuration.getString("config", "world.fall-back"));
if (fallback != null) {
Expand All @@ -149,29 +152,40 @@ public void join(PlayerJoinEvent event) {
@EventHandler
public void damage(EntityDamageEvent event) {
if (event.getEntity() instanceof Player) {
if (ParkourPlayer.getPlayer((Player) event.getEntity()) != null) {
if (ParkourUser.getUser((Player) event.getEntity()) != null) {
event.setCancelled(true);
}
}
}

@EventHandler
public void command(PlayerCommandPreprocessEvent event) {
if (ParkourGenerator.Configurable.FOCUS_MODE) {
ParkourUser user = ParkourUser.getUser(event.getPlayer());
if (user != null && !(event.getMessage().toLowerCase().contains("witp"))) {
event.setCancelled(true);
user.sendTranslated("cant-do");
}
}
}

@EventHandler
public void onDrop(PlayerDropItemEvent event) {
if (ParkourPlayer.getPlayer(event.getPlayer()) != null) {
if (ParkourUser.getUser(event.getPlayer()) != null) {
event.setCancelled(true);
}
}

@EventHandler
public void onPlace(BlockPlaceEvent event) {
if (ParkourPlayer.getPlayer(event.getPlayer()) != null) {
if (ParkourUser.getUser(event.getPlayer()) != null) {
event.setCancelled(true);
}
}

@EventHandler
public void onBreak(BlockBreakEvent event) {
if (ParkourPlayer.getPlayer(event.getPlayer()) != null) {
if (ParkourUser.getUser(event.getPlayer()) != null) {
event.setCancelled(true);
}
}
Expand All @@ -196,7 +210,7 @@ public void interact(PlayerInteractEvent event) {
@EventHandler
public void onSwitch(PlayerChangedWorldEvent event) {
ParkourPlayer player = ParkourPlayer.getPlayer(event.getPlayer());
if (player != null && player.getPlayer().getWorld().getName().equals(WITP.getDivider().getWorld().getName())) {
if (player != null && player.getPlayer().getWorld().getUID() != WITP.getDivider().getWorld().getUID()) {
try {
ParkourPlayer.unregister(player, true);
} catch (IOException ex) {
Expand All @@ -210,9 +224,11 @@ public void onSwitch(PlayerChangedWorldEvent event) {
public void leave(PlayerQuitEvent event) {
ParkourPlayer player = ParkourPlayer.getPlayer(event.getPlayer());
if (player != null) {
if (configuration.getFile("config").getBoolean("messages.join-leave-enabled")) {
event.setQuitMessage(configuration.getString("config", "messages.leave").replaceAll("%p",
event.getPlayer().getName()));
if (configuration.getFile("lang").getBoolean("messages.join-leave-enabled")) {
event.setQuitMessage(null);
for (ParkourUser user : ParkourUser.getUsers()) {
user.sendTranslated("leave", player.getPlayer().getName());
}
}
try {
ParkourPlayer.unregister(player, false);
Expand Down
53 changes: 49 additions & 4 deletions src/main/java/dev/efnilite/witp/command/MainCommand.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package dev.efnilite.witp.command;

import dev.efnilite.witp.player.ParkourPlayer;
import dev.efnilite.witp.player.ParkourSpectator;
import dev.efnilite.witp.player.ParkourUser;
import dev.efnilite.witp.util.Util;
import dev.efnilite.witp.util.Verbose;
import dev.efnilite.witp.util.wrapper.BukkitCommand;
Expand All @@ -9,6 +11,7 @@
import org.bukkit.entity.Player;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

Expand All @@ -26,6 +29,7 @@ public boolean execute(CommandSender sender, String[] args) {
sender.sendMessage(Util.color("&a/witp join [player] &f- &7Join the game on this server or make another player join"));
sender.sendMessage(Util.color("&a/witp leave &f- &7Leave the game on this server"));
sender.sendMessage(Util.color("&a/witp menu &f- &7Open the customization menu"));
sender.sendMessage(Util.color("&a/witp gamemode &f- &7Open the gamemode menu"));
sender.sendMessage(Util.color("&a/witp leaderboard &f- &7Open the leaderboard"));
return true;
} else if (args.length == 1) {
Expand All @@ -37,7 +41,7 @@ public boolean execute(CommandSender sender, String[] args) {
ParkourPlayer.register(player);
ParkourPlayer pp = ParkourPlayer.getPlayer(player);
if (pp != null) {
pp.send("&aYou joined the parkour");
pp.sendTranslated("joined");
}
} catch (IOException ex) {
ex.printStackTrace();
Expand All @@ -47,7 +51,7 @@ public boolean execute(CommandSender sender, String[] args) {
ParkourPlayer pp = ParkourPlayer.getPlayer(player);
if (pp != null) {
try {
pp.send("&cYou left the parkour");
pp.sendTranslated("left");
ParkourPlayer.unregister(pp, true);
} catch (IOException ex) {
ex.printStackTrace();
Expand All @@ -59,6 +63,16 @@ public boolean execute(CommandSender sender, String[] args) {
if (pp != null) {
pp.menu();
}
} else if (args[0].equalsIgnoreCase("gamemode") || args[0].equalsIgnoreCase("gm")) {
ParkourUser user = ParkourUser.getUser(player);
if (user != null) {
user.gamemode();
}
} else if (args[0].equalsIgnoreCase("leaderboard")) {
ParkourUser user = ParkourUser.getUser(player);
if (user != null) {
user.scoreboard(1);
}
}
} else if (args.length == 2) {
if (args[0].equalsIgnoreCase("leaderboard") && args[1] != null && player != null) {
Expand All @@ -78,20 +92,51 @@ public boolean execute(CommandSender sender, String[] args) {
ParkourPlayer.register(join);
ParkourPlayer pp = ParkourPlayer.getPlayer(join);
if (pp != null) {
pp.send("&aYou joined the parkour");
pp.sendTranslated("joined");
}
} catch (IOException ex) {
ex.printStackTrace();
Verbose.error("Error while joining");
}
}
} else if (args[0].equalsIgnoreCase("search") && player != null) {
ParkourUser user = ParkourUser.getUser(player);
if (user != null) {
if (args[1] == null || player.getName().equalsIgnoreCase(args[1])) {
user.sendTranslated("not-there-search");
} else {
Player search = Bukkit.getPlayer(args[1]);
if (search != null) {
ParkourUser searchUser = ParkourUser.getUser(search);
if (searchUser instanceof ParkourPlayer) {
ParkourPlayer searchPp = (ParkourPlayer) searchUser;
if (searchPp.getGenerator() != null) {
new ParkourSpectator(user, searchPp);
}
}
}
}
}
}
}
return true;
}

@Override
public List<String> tabComplete(Player player, String[] args) {
return Arrays.asList("join", "generate", "customize", "leave");
if (args.length == 2) {
if (args[0].equalsIgnoreCase("search")) {
List<String> names = new ArrayList<>();
for (ParkourPlayer pp : ParkourUser.getActivePlayers()) {
String name = pp.getPlayer().getName();
if (player.getName().equals(name)) {
continue;
}
names.add(name);
}
return names;
}
}
return Arrays.asList("join", "leave", "menu", "leaderboard", "gamemode");
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.efnilite.witp.events;

import dev.efnilite.witp.player.ParkourPlayer;
import dev.efnilite.witp.generator.ParkourGenerator;
import dev.efnilite.witp.player.ParkourPlayer;
import dev.efnilite.witp.util.wrapper.EventWrapper;
import org.bukkit.block.Block;

Expand Down
36 changes: 22 additions & 14 deletions src/main/java/dev/efnilite/witp/generator/ParkourGenerator.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package dev.efnilite.witp.generator;

import dev.efnilite.witp.player.ParkourPlayer;
import dev.efnilite.witp.WITP;
import dev.efnilite.witp.events.BlockGenerateEvent;
import dev.efnilite.witp.events.PlayerFallEvent;
import dev.efnilite.witp.events.PlayerScoreEvent;
import dev.efnilite.witp.generator.subarea.SubareaPoint;
import dev.efnilite.witp.player.ParkourPlayer;
import dev.efnilite.witp.util.Util;
import dev.efnilite.witp.util.Verbose;
import dev.efnilite.witp.util.particle.ParticleData;
Expand Down Expand Up @@ -113,10 +113,14 @@ public void run() {
if (stopped) {
this.cancel();
return;
}
} // todo check if first location isn't current
Location playerLoc = player.getPlayer().getLocation();
if (playerLoc.getWorld() != lastPlayer.getWorld()) {
lastPlayer = playerLoc.clone();
if (playerLoc.getWorld().getUID() != lastPlayer.getWorld().getUID()) {
Verbose.error("Worlds are not the same (1)");
return;
}
if (playerLoc.getWorld().getUID() != playerSpawn.getWorld().getUID()) {
Verbose.error("Worlds are not the same (2)");
return;
}
// Fall check
Expand All @@ -136,9 +140,6 @@ public void run() {
// Structure deletion check
if (structureBlocks.contains(current) && current.getType() == Material.RED_WOOL && !deleteStructure) {
score += 10;
if (player.showScoreboard && Configurable.SCOREBOARD) {
player.updateScoreboard();
}
structureCooldown = 20;
generateNext(player.blockLead);
deleteStructure = true;
Expand Down Expand Up @@ -166,9 +167,6 @@ public void run() {
}

new PlayerScoreEvent(player).call();
if (player.showScoreboard && Configurable.SCOREBOARD) {
player.updateScoreboard();
}
List<String> locations = new ArrayList<>(buildLog.keySet());
int lastIndex = locations.indexOf(last) + 1;
int size = locations.size();
Expand All @@ -195,6 +193,7 @@ public void run() {
if (player.showScoreboard && Configurable.SCOREBOARD) {
player.updateScoreboard();
}
player.updateSpectators();
}
}, Configurable.GENERATOR_CHECK);
}
Expand All @@ -212,14 +211,14 @@ public void reset(boolean regenerate) {
for (Block block : structureBlocks) {
block.setType(Material.AIR);
}
structureBlocks.clear();
for (String s : buildLog.keySet()) {
Util.parseLocation(s).getBlock().setType(Material.AIR);
}
structureBlocks.clear();
structureCooldown = 20;
buildLog.clear();
player.getPlayer().teleport(playerSpawn);
if (player.showDeathMsg) {
if (player.showDeathMsg && regenerate) {
String message;
int number = 0;
if (score == player.highScore) {
Expand All @@ -237,7 +236,7 @@ public void reset(boolean regenerate) {
player.sendTranslated("divider");
player.sendTranslated("score", Integer.toString(score));
player.sendTranslated("time", time);
player.sendTranslated("highscore", Integer.toString(score));
player.sendTranslated("highscore", Integer.toString(player.highScore));
player.sendTranslated(message, Integer.toString(number));
player.sendTranslated("divider");
} else {
Expand Down Expand Up @@ -495,7 +494,7 @@ public void generateNext() {
break;
}

int listSize = player.blockLead + 7; // the size of the queue of parkour blocks
int listSize = player.blockLead + 10; // the size of the queue of parkour blocks
listSize--;
List<String> locations = new ArrayList<>(buildLog.keySet());
if (locations.size() > listSize) {
Expand All @@ -522,6 +521,7 @@ public void generateNext() {
*/
public void generateFirst(Location spawn, Location block) {
playerSpawn = spawn.clone();
lastPlayer = spawn.clone();
blockSpawn = block.clone();
lastSpawn = block.clone();
generateNext(player.blockLead);
Expand Down Expand Up @@ -625,6 +625,10 @@ public static class Configurable {

public static boolean SCOREBOARD;
public static boolean INVENTORY_HANDLING;
public static String SCOREBOARD_TITLE;
public static List<String> SCOREBOARD_LINES;
public static boolean PERMISSIONS;
public static boolean FOCUS_MODE;

// Advanced settings
public static double BORDER_SIZE;
Expand Down Expand Up @@ -676,7 +680,11 @@ public static void init() {
}

SCOREBOARD = config.getBoolean("scoreboard.enabled");
SCOREBOARD_TITLE = Util.color(config.getString("scoreboard.title"));
SCOREBOARD_LINES = Util.color(config.getStringList("scoreboard.lines"));
INVENTORY_HANDLING = config.getBoolean("options.inventory-handling");
PERMISSIONS = config.getBoolean("permissions.enabled");
FOCUS_MODE = config.getBoolean("focus-mode.enabled");

SOUND_TYPE = Sound.valueOf(config.getString("particles.sound-type").toUpperCase());
SOUND_PITCH = config.getInt("particles.sound-pitch");
Expand Down
Loading

0 comments on commit db3f757

Please sign in to comment.