commit
2ab0b2bbb6
40 changed files with 1635 additions and 565 deletions
30
.github/workflows/beta.yml
vendored
Normal file
30
.github/workflows/beta.yml
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
name: Beta
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [ 1.3.1 ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 1.8
|
||||
|
||||
- name: Build with Maven
|
||||
run: mvn -B package --file pom.xml
|
||||
|
||||
- name: Publish to GitHub Packages Apache Maven
|
||||
run: mvn deploy -s $GITHUB_WORKSPACE/settings.xml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
30
.github/workflows/release.yml
vendored
Normal file
30
.github/workflows/release.yml
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
name: Release
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 1.8
|
||||
|
||||
- name: Build with Maven
|
||||
run: mvn -B package --file pom.xml
|
||||
|
||||
- name: Publish to GitHub Packages Apache Maven
|
||||
run: mvn deploy -s $GITHUB_WORKSPACE/settings.xml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -4,3 +4,5 @@ project
|
|||
bin/
|
||||
target/
|
||||
.git/
|
||||
.idea
|
||||
*.iml
|
||||
|
|
23
.project
23
.project
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>hideandseek-plugin</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
66
pom.xml
66
pom.xml
|
@ -1,43 +1,43 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
|
||||
<groupId>net.tylermurphy</groupId>
|
||||
<artifactId>HideAndSeek</artifactId>
|
||||
<version>1.3.0</version>
|
||||
<name>Hide and Seek Plugin</name>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.3.2</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>spigot-repo</id>
|
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/public/</url>
|
||||
</repository>
|
||||
<groupId>net.tylermurphy</groupId>
|
||||
<artifactId>HideAndSeek</artifactId>
|
||||
<version>1.3.1</version>
|
||||
<name>Hide and Seek Plugin</name>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.3.2</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>dmulloy2-repo</id>
|
||||
<url>https://repo.dmulloy2.net/repository/public/</url>
|
||||
</repository>
|
||||
<id>spigot-repo</id>
|
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/public/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>dmulloy2-repo</id>
|
||||
<url>https://repo.dmulloy2.net/repository/public/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.17.1-R0.1-SNAPSHOT</version>
|
||||
<type>jar</type>
|
||||
<scope>provided</scope>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.comphenix.protocol</groupId>
|
||||
<artifactId>ProtocolLib</artifactId>
|
||||
<version>4.7.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<dependency>
|
||||
<groupId>com.comphenix.protocol</groupId>
|
||||
<artifactId>ProtocolLib</artifactId>
|
||||
<version>4.7.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -1,5 +1,7 @@
|
|||
package net.tylermurphy.hideAndSeek;
|
||||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Config.spawnWorld;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
@ -20,10 +22,12 @@ import net.tylermurphy.hideAndSeek.bukkit.TabCompleter;
|
|||
import net.tylermurphy.hideAndSeek.bukkit.Tick;
|
||||
import net.tylermurphy.hideAndSeek.configuration.Config;
|
||||
import net.tylermurphy.hideAndSeek.configuration.Localization;
|
||||
import net.tylermurphy.hideAndSeek.configuration.Items;
|
||||
import net.tylermurphy.hideAndSeek.events.Glow;
|
||||
import net.tylermurphy.hideAndSeek.events.Taunt;
|
||||
import net.tylermurphy.hideAndSeek.events.Worldborder;
|
||||
import net.tylermurphy.hideAndSeek.util.Board;
|
||||
import net.tylermurphy.hideAndSeek.world.WorldLoader;
|
||||
|
||||
public class Main extends JavaPlugin implements Listener {
|
||||
|
||||
|
@ -36,6 +40,8 @@ public class Main extends JavaPlugin implements Listener {
|
|||
|
||||
public Board board;
|
||||
|
||||
public WorldLoader worldLoader;
|
||||
|
||||
public Map<String,Player> playerList = new HashMap<String,Player>();
|
||||
|
||||
public String status = "Standby";
|
||||
|
@ -56,10 +62,12 @@ public class Main extends JavaPlugin implements Listener {
|
|||
data = this.getDataFolder();
|
||||
|
||||
// Init Configuration
|
||||
Main.plugin.saveResource("localization.yml", false);
|
||||
Main.plugin.saveResource("config.yml", false);
|
||||
Config.loadConfig();
|
||||
Localization.init();
|
||||
Localization.loadLocalization();
|
||||
Items.loadItems();
|
||||
|
||||
// Create World Loader
|
||||
worldLoader = new WorldLoader(spawnWorld);
|
||||
|
||||
// Register Commands
|
||||
CommandHandler.registerCommands();
|
||||
|
@ -69,20 +77,19 @@ public class Main extends JavaPlugin implements Listener {
|
|||
board.reload();
|
||||
|
||||
// Start Tick Timer
|
||||
onTickTask = Bukkit.getServer().getScheduler().runTaskTimer(this, new Runnable(){
|
||||
public void run(){
|
||||
try{
|
||||
Tick.onTick();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
},0,1);
|
||||
onTickTask = Bukkit.getServer().getScheduler().runTaskTimer(this, () -> {
|
||||
try{
|
||||
Tick.onTick();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
},0,1);
|
||||
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
onTickTask.cancel();
|
||||
if(onTickTask != null)
|
||||
onTickTask.cancel();
|
||||
}
|
||||
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
|
|
|
@ -35,6 +35,7 @@ public class CommandHandler {
|
|||
registerCommand(new SetBorder());
|
||||
registerCommand(new Reload());
|
||||
registerCommand(new SaveMap());
|
||||
registerCommand(new SetBounds());
|
||||
registerCommand(new Join());
|
||||
registerCommand(new Leave());
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.tylermurphy.hideAndSeek.bukkit;
|
|||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||
|
||||
import net.tylermurphy.hideAndSeek.command.Join;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
|
@ -27,7 +28,8 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
|||
import net.tylermurphy.hideAndSeek.util.Packet;
|
||||
import net.tylermurphy.hideAndSeek.util.Util;
|
||||
import net.tylermurphy.hideAndSeek.Main;
|
||||
import net.tylermurphy.hideAndSeek.command.Start;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
||||
|
||||
public class EventListener implements Listener {
|
||||
|
@ -37,60 +39,90 @@ public class EventListener implements Listener {
|
|||
event.getPlayer().setLevel(0);
|
||||
Main.plugin.board.remove(event.getPlayer());
|
||||
if(!Util.isSetup()) return;
|
||||
if(event.getPlayer().getWorld().getName().equals("hideandseek_"+spawnWorld) || event.getPlayer().getWorld().getName().equals(lobbyWorld)){
|
||||
event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
|
||||
event.getPlayer().setGameMode(GameMode.ADVENTURE);
|
||||
if(autoJoin){
|
||||
Join.join(event.getPlayer());
|
||||
} else if(teleportToExit) {
|
||||
if (event.getPlayer().getWorld().getName().equals("hideandseek_" + spawnWorld) || event.getPlayer().getWorld().getName().equals(lobbyWorld)) {
|
||||
event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
|
||||
event.getPlayer().setGameMode(GameMode.ADVENTURE);
|
||||
}
|
||||
} else {
|
||||
if (event.getPlayer().getWorld().getName().equals("hideandseek_" + spawnWorld)) {
|
||||
event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
|
||||
event.getPlayer().setGameMode(GameMode.ADVENTURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onQuit(PlayerQuitEvent event) {
|
||||
Main.plugin.board.remove(event.getPlayer());
|
||||
if(Main.plugin.status.equals("Standby")) {
|
||||
Main.plugin.board.reloadLobbyBoards();
|
||||
} else {
|
||||
Main.plugin.board.reloadGameBoards();
|
||||
}
|
||||
for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){
|
||||
event.getPlayer().removePotionEffect(effect.getType());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onKick(PlayerKickEvent event) {
|
||||
Main.plugin.board.remove(event.getPlayer());
|
||||
if(Main.plugin.status.equals("Standby")) {
|
||||
Main.plugin.board.reloadLobbyBoards();
|
||||
} else {
|
||||
Main.plugin.board.reloadGameBoards();
|
||||
}
|
||||
for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){
|
||||
event.getPlayer().removePotionEffect(effect.getType());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onEntityDamage(EntityDamageEvent event) {
|
||||
if(event.getEntity() instanceof Player) {
|
||||
Player p = (Player) event.getEntity();
|
||||
if(!Main.plugin.board.isPlayer(p)) return;
|
||||
if(!Main.plugin.status.equals("Playing")) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
Player attacker = null;
|
||||
if(event instanceof EntityDamageByEntityEvent) {
|
||||
Entity damager = ((EntityDamageByEntityEvent)event).getDamager();
|
||||
if(damager instanceof Player) {
|
||||
attacker = (Player) damager;
|
||||
if(Main.plugin.board.onSameTeam(p, attacker)) event.setCancelled(true);
|
||||
if(Main.plugin.board.isSpectator(p)) event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
Player player = (Player) event.getEntity();
|
||||
if(player.getHealth()-event.getDamage() < 0) {
|
||||
if(spawnPosition == null) return;
|
||||
event.setCancelled(true);
|
||||
player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
|
||||
player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
|
||||
Packet.playSound(player, Sound.ENTITY_PLAYER_DEATH, 1, 1);
|
||||
if(Main.plugin.board.isSeeker(player)) {
|
||||
Bukkit.broadcastMessage(message("GAME_PLAYER_DEATH").addPlayer(event.getEntity()).toString());
|
||||
try {
|
||||
if (event.getEntity() instanceof Player) {
|
||||
Player p = (Player) event.getEntity();
|
||||
if (!Main.plugin.board.isPlayer(p)) return;
|
||||
if (!Main.plugin.status.equals("Playing")) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if(Main.plugin.board.isHider(player)) {
|
||||
if(attacker == null) {
|
||||
Util.broadcastMessage(message("GAME_PLAYER_FOUND").addPlayer(event.getEntity()).toString());
|
||||
} else {
|
||||
Util.broadcastMessage(message("GAME_PLAYER_FOUND_BY").addPlayer(event.getEntity()).addPlayer(attacker).toString());
|
||||
Player attacker = null;
|
||||
if (event instanceof EntityDamageByEntityEvent) {
|
||||
Entity damager = ((EntityDamageByEntityEvent) event).getDamager();
|
||||
if (damager instanceof Player) {
|
||||
attacker = (Player) damager;
|
||||
if (Main.plugin.board.onSameTeam(p, attacker)) event.setCancelled(true);
|
||||
if (Main.plugin.board.isSpectator(p)) event.setCancelled(true);
|
||||
}
|
||||
Main.plugin.board.addSeeker(player);
|
||||
}
|
||||
Start.resetPlayer(player);
|
||||
Player player = (Player) event.getEntity();
|
||||
if (player.getHealth() - event.getDamage() < 0 || !pvpEnabled) {
|
||||
if (spawnPosition == null) return;
|
||||
event.setCancelled(true);
|
||||
player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
|
||||
player.teleport(new Location(Bukkit.getWorld("hideandseek_" + spawnWorld), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
|
||||
Packet.playSound(player, Sound.ENTITY_PLAYER_DEATH, 1, 1);
|
||||
if (Main.plugin.board.isSeeker(player)) {
|
||||
Bukkit.broadcastMessage(message("GAME_PLAYER_DEATH").addPlayer(event.getEntity()).toString());
|
||||
}
|
||||
if (Main.plugin.board.isHider(player)) {
|
||||
if (attacker == null) {
|
||||
Util.broadcastMessage(message("GAME_PLAYER_FOUND").addPlayer(event.getEntity()).toString());
|
||||
} else {
|
||||
Util.broadcastMessage(message("GAME_PLAYER_FOUND_BY").addPlayer(event.getEntity()).addPlayer(attacker).toString());
|
||||
}
|
||||
Main.plugin.board.addSeeker(player);
|
||||
}
|
||||
Util.resetPlayer(player);
|
||||
Main.plugin.board.reloadBoardTeams();
|
||||
}
|
||||
}
|
||||
} catch (Exception e){
|
||||
//Has shown to cause problems, so ignore if exception
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -98,6 +130,7 @@ public class EventListener implements Listener {
|
|||
public void onProjectile(ProjectileLaunchEvent event) {
|
||||
if(!Main.plugin.status.equals("Playing")) return;
|
||||
if(event.getEntity() instanceof Snowball) {
|
||||
if(!glowEnabled) return;
|
||||
Snowball snowball = (Snowball) event.getEntity();
|
||||
if(snowball.getShooter() instanceof Player) {
|
||||
Player player = (Player) snowball.getShooter();
|
||||
|
|
|
@ -40,9 +40,13 @@ public class Tick {
|
|||
else tick = 1;
|
||||
|
||||
for(Player hider : Main.plugin.board.getHiders()) {
|
||||
int distance = 100;
|
||||
int distance = 100, temp = 100;
|
||||
for(Player seeker : Main.plugin.board.getSeekers()) {
|
||||
int temp = (int) hider.getLocation().distance(seeker.getLocation());
|
||||
try {
|
||||
temp = (int) hider.getLocation().distance(seeker.getLocation());
|
||||
} catch (Exception e){
|
||||
//Players in different worlds, NOT OK!!!
|
||||
}
|
||||
if(distance > temp) {
|
||||
distance = temp;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ public class About implements ICommand {
|
|||
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
sender.sendMessage(
|
||||
String.format("%s%sHide and Seek %s(1.3.0%s)\n", ChatColor.AQUA, ChatColor.BOLD, ChatColor.GRAY,ChatColor.WHITE,ChatColor.GRAY) +
|
||||
String.format("%s%sHide and Seek %s(1.3.1%s)\n", ChatColor.AQUA, ChatColor.BOLD, ChatColor.GRAY,ChatColor.WHITE,ChatColor.GRAY) +
|
||||
String.format("%sAuthor: %s[KenshinEto]\n", ChatColor.GRAY, ChatColor.WHITE) +
|
||||
String.format("%sHelp Command: %s/hs %shelp", ChatColor.GRAY, ChatColor.AQUA, ChatColor.WHITE)
|
||||
);
|
||||
|
|
|
@ -30,17 +30,24 @@ public class Join implements ICommand {
|
|||
return;
|
||||
}
|
||||
|
||||
join(player);
|
||||
}
|
||||
|
||||
public static void join(Player player){
|
||||
if(Main.plugin.status.equals("Standby")) {
|
||||
player.getInventory().clear();
|
||||
Main.plugin.board.addHider(player);
|
||||
if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
|
||||
else Util.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
|
||||
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
|
||||
player.setGameMode(GameMode.ADVENTURE);
|
||||
Main.plugin.board.createLobbyBoard(player);
|
||||
Main.plugin.board.reloadLobbyBoards();
|
||||
} else {
|
||||
Main.plugin.board.addSeeker(player);
|
||||
Main.plugin.board.addSpectator(player);
|
||||
player.sendMessage(messagePrefix + message("GAME_JOIN_SPECTATOR"));
|
||||
player.setGameMode(GameMode.SPECTATOR);
|
||||
Main.plugin.board.createGameBoard(player);
|
||||
player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
|
||||
}
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ public class Leave implements ICommand {
|
|||
Main.plugin.board.reloadLobbyBoards();
|
||||
} else {
|
||||
Main.plugin.board.reloadGameBoards();
|
||||
Main.plugin.board.reloadBoardTeams();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.tylermurphy.hideAndSeek.command;
|
|||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||
|
||||
import net.tylermurphy.hideAndSeek.configuration.Items;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import net.tylermurphy.hideAndSeek.Main;
|
||||
|
@ -19,7 +20,8 @@ public class Reload implements ICommand {
|
|||
return;
|
||||
}
|
||||
Config.loadConfig();
|
||||
Localization.init();
|
||||
Localization.loadLocalization();
|
||||
Items.loadItems();
|
||||
sender.sendMessage(messagePrefix + message("CONFIG_RELOAD"));
|
||||
}
|
||||
|
||||
|
|
|
@ -2,15 +2,6 @@ package net.tylermurphy.hideAndSeek.command;
|
|||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
@ -36,67 +27,16 @@ public class SaveMap implements ICommand {
|
|||
Bukkit.getServer().getWorld(spawnWorld).save();
|
||||
BukkitRunnable runnable = new BukkitRunnable() {
|
||||
public void run() {
|
||||
File current = new File(Main.root+File.separator+spawnWorld);
|
||||
if(current.exists()) {
|
||||
File temp_destenation = new File(Main.root+File.separator+"temp_hideandseek_"+spawnWorld);
|
||||
File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
|
||||
copyFileStructure(current, temp_destenation);
|
||||
if(destenation.exists()) {
|
||||
deleteDirectory(destenation);
|
||||
destenation.mkdir();
|
||||
}
|
||||
temp_destenation.renameTo(destenation);
|
||||
sender.sendMessage(messagePrefix + message("MAPSAVE_END"));
|
||||
runningBackup = false;
|
||||
} else {
|
||||
sender.sendMessage(errorPrefix + message("MAPSAVE_ERROR"));
|
||||
}
|
||||
sender.sendMessage(
|
||||
Main.plugin.worldLoader.save()
|
||||
);
|
||||
runningBackup = false;
|
||||
}
|
||||
};
|
||||
runnable.runTaskAsynchronously(Main.plugin);
|
||||
runningBackup = true;
|
||||
}
|
||||
|
||||
private static void copyFileStructure(File source, File target){
|
||||
try {
|
||||
ArrayList<String> ignore = new ArrayList<>(Arrays.asList("uid.dat", "session.lock"));
|
||||
if(!ignore.contains(source.getName())) {
|
||||
if(source.isDirectory()) {
|
||||
if(!target.exists())
|
||||
if (!target.mkdirs())
|
||||
throw new IOException("Couldn't create world directory!");
|
||||
String files[] = source.list();
|
||||
for (String file : files) {
|
||||
File srcFile = new File(source, file);
|
||||
File destFile = new File(target, file);
|
||||
copyFileStructure(srcFile, destFile);
|
||||
}
|
||||
} else {
|
||||
InputStream in = new FileInputStream(source);
|
||||
OutputStream out = new FileOutputStream(target);
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = in.read(buffer)) > 0)
|
||||
out.write(buffer, 0, length);
|
||||
in.close();
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean deleteDirectory(File directoryToBeDeleted) {
|
||||
File[] allContents = directoryToBeDeleted.listFiles();
|
||||
if (allContents != null) {
|
||||
for (File file : allContents) {
|
||||
deleteDirectory(file);
|
||||
}
|
||||
}
|
||||
return directoryToBeDeleted.delete();
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return "saveMap";
|
||||
}
|
||||
|
|
|
@ -26,9 +26,7 @@ public class SetBorder implements ICommand {
|
|||
}
|
||||
if(args.length < 2) {
|
||||
worldborderEnabled = false;
|
||||
Map<String, Object> temp = new HashMap<String,Object>();
|
||||
temp.put("enabled", false);
|
||||
addToSection("worldBorder",temp);
|
||||
addToConfig("worldBorder.enabled",false);
|
||||
saveConfig();
|
||||
sender.sendMessage(messagePrefix + message("WORLDBORDER_DISABLE"));
|
||||
Worldborder.resetWorldborder(spawnWorld);
|
||||
|
@ -60,13 +58,11 @@ public class SetBorder implements ICommand {
|
|||
worldborderSize = num;
|
||||
worldborderDelay = delay;
|
||||
worldborderEnabled = true;
|
||||
Map<String, Object> temp = new HashMap<String,Object>();
|
||||
temp.put("x", worldborderPosition.getBlockX());
|
||||
temp.put("z", worldborderPosition.getBlockZ());
|
||||
temp.put("delay", worldborderDelay);
|
||||
temp.put("size", worldborderSize);
|
||||
temp.put("enabled", true);
|
||||
addToSection("worldBorder",temp);
|
||||
addToConfig("worldBorder.x", worldborderPosition.getBlockX());
|
||||
addToConfig("worldBorder.z", worldborderPosition.getBlockZ());
|
||||
addToConfig("worldBorder.delay", worldborderDelay);
|
||||
addToConfig("worldBorder.size", worldborderSize);
|
||||
addToConfig("worldBorder.enabled", true);
|
||||
sender.sendMessage(messagePrefix + message("WORLDBORDER_ENABLE").addAmount(num).addAmount(delay));
|
||||
saveConfig();
|
||||
Worldborder.resetWorldborder(spawnWorld);
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
package net.tylermurphy.hideAndSeek.command;
|
||||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.tylermurphy.hideAndSeek.Main;
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
||||
|
||||
public class SetBounds implements ICommand {
|
||||
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if(!Main.plugin.status.equals("Standby")) {
|
||||
sender.sendMessage(errorPrefix + message("GAME_INPROGRESS"));
|
||||
return;
|
||||
}
|
||||
if(spawnPosition == null) {
|
||||
sender.sendMessage(errorPrefix + message("ERROR_GAME_SPAWN"));
|
||||
return;
|
||||
}
|
||||
Player player = (Player) sender;
|
||||
if(!player.getWorld().getName().equals(spawnWorld)){
|
||||
sender.sendMessage(errorPrefix + message("BOUNDS_WRONG_WORLD"));
|
||||
return;
|
||||
}
|
||||
if(player.getLocation().getBlockX() == 0 || player.getLocation().getBlockZ() == 0){
|
||||
sender.sendMessage(errorPrefix + message("NOT_AT_ZERO"));
|
||||
return;
|
||||
}
|
||||
boolean first = true;
|
||||
if(saveMinX != 0 && saveMinZ != 0 && saveMaxX != 0 && saveMaxZ != 0) {
|
||||
saveMinX = 0; saveMinZ= 0; saveMaxX = 0; saveMaxZ = 0;
|
||||
}
|
||||
if(saveMaxX == 0) {
|
||||
addToConfig("bounds.max.x", player.getLocation().getBlockX());
|
||||
saveMaxX = player.getLocation().getBlockX();
|
||||
} else if(saveMaxX < player.getLocation().getBlockX()) {
|
||||
first = false;
|
||||
addToConfig("bounds.max.x", player.getLocation().getBlockX());
|
||||
addToConfig("bounds.min.x", saveMaxX);
|
||||
saveMinX = saveMaxX;
|
||||
saveMaxX = player.getLocation().getBlockX();
|
||||
} else {
|
||||
first = false;
|
||||
addToConfig("bounds.min.x", player.getLocation().getBlockX());
|
||||
saveMinX = player.getLocation().getBlockX();
|
||||
}
|
||||
if(saveMaxZ == 0) {
|
||||
addToConfig("bounds.max.z", player.getLocation().getBlockZ());
|
||||
saveMaxZ = player.getLocation().getBlockZ();
|
||||
} else if(saveMaxZ < player.getLocation().getBlockZ()) {
|
||||
first = false;
|
||||
addToConfig("bounds.max.z", player.getLocation().getBlockZ());
|
||||
addToConfig("bounds.min.z", saveMaxZ);
|
||||
saveMinZ = saveMaxZ;
|
||||
saveMaxZ = player.getLocation().getBlockZ();
|
||||
} else {
|
||||
first = false;
|
||||
addToConfig("bounds.min.z", player.getLocation().getBlockZ());
|
||||
saveMinZ = player.getLocation().getBlockZ();
|
||||
}
|
||||
sender.sendMessage(messagePrefix + message("BOUNDS").addAmount(first ? 1 : 2));
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return "setBounds";
|
||||
}
|
||||
|
||||
public String getUsage() {
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return "Sets the map bounds for the game.";
|
||||
}
|
||||
|
||||
}
|
|
@ -15,23 +15,25 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
|||
public class SetExitLocation implements ICommand {
|
||||
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
Vector newExitPosition = new Vector();
|
||||
Player player = (Player) sender;
|
||||
newExitPosition.setX(player.getLocation().getBlockX());
|
||||
newExitPosition.setY(player.getLocation().getBlockY());
|
||||
newExitPosition.setZ(player.getLocation().getBlockZ());
|
||||
if(!Main.plugin.status.equals("Standby")) {
|
||||
sender.sendMessage(errorPrefix + message("GAME_INPROGRESS"));
|
||||
return;
|
||||
}
|
||||
Vector newExitPosition = new Vector();
|
||||
Player player = (Player) sender;
|
||||
if(player.getLocation().getBlockX() == 0 || player.getLocation().getBlockZ() == 0 || player.getLocation().getBlockY() == 0){
|
||||
sender.sendMessage(errorPrefix + message("NOT_AT_ZERO"));
|
||||
return;
|
||||
}
|
||||
newExitPosition.setX(player.getLocation().getBlockX());
|
||||
newExitPosition.setY(player.getLocation().getBlockY());
|
||||
newExitPosition.setZ(player.getLocation().getBlockZ());
|
||||
exitPosition = newExitPosition;
|
||||
sender.sendMessage(messagePrefix + message("EXIT_SPAWN"));
|
||||
Map<String, Object> temp = new HashMap<String,Object>();
|
||||
temp.put("x", exitPosition.getX());
|
||||
temp.put("y", exitPosition.getY());
|
||||
temp.put("z", exitPosition.getZ());
|
||||
temp.put("world", player.getLocation().getWorld().getName());
|
||||
addToSection("spawns.exit",temp);
|
||||
addToConfig("spawns.exit.x", exitPosition.getX());
|
||||
addToConfig("spawns.exit.y", exitPosition.getY());
|
||||
addToConfig("spawns.exit.z", exitPosition.getZ());
|
||||
addToConfig("spawns.exit.world", player.getLocation().getWorld().getName());
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
|
|
|
@ -15,23 +15,25 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
|||
public class SetLobbyLocation implements ICommand {
|
||||
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
Vector newLobbyPosition = new Vector();
|
||||
Player player = (Player) sender;
|
||||
newLobbyPosition.setX(player.getLocation().getBlockX());
|
||||
newLobbyPosition.setY(player.getLocation().getBlockY());
|
||||
newLobbyPosition.setZ(player.getLocation().getBlockZ());
|
||||
if(!Main.plugin.status.equals("Standby")) {
|
||||
sender.sendMessage(errorPrefix + message("GAME_INPROGRESS"));
|
||||
return;
|
||||
}
|
||||
Vector newLobbyPosition = new Vector();
|
||||
Player player = (Player) sender;
|
||||
if(player.getLocation().getBlockX() == 0 || player.getLocation().getBlockZ() == 0 || player.getLocation().getBlockY() == 0){
|
||||
sender.sendMessage(errorPrefix + message("NOT_AT_ZERO"));
|
||||
return;
|
||||
}
|
||||
newLobbyPosition.setX(player.getLocation().getBlockX());
|
||||
newLobbyPosition.setY(player.getLocation().getBlockY());
|
||||
newLobbyPosition.setZ(player.getLocation().getBlockZ());
|
||||
lobbyPosition = newLobbyPosition;
|
||||
sender.sendMessage(messagePrefix + message("LOBBY_SPAWN"));
|
||||
Map<String, Object> temp = new HashMap<String,Object>();
|
||||
temp.put("x", lobbyPosition.getX());
|
||||
temp.put("y", lobbyPosition.getY());
|
||||
temp.put("z", lobbyPosition.getZ());
|
||||
temp.put("world", player.getLocation().getWorld().getName());
|
||||
addToSection("spawns.lobby",temp);
|
||||
addToConfig("spawns.lobby.x", lobbyPosition.getX());
|
||||
addToConfig("spawns.lobby.y", lobbyPosition.getY());
|
||||
addToConfig("spawns.lobby.z", lobbyPosition.getZ());
|
||||
addToConfig("spawns.lobby.world", player.getLocation().getWorld().getName());
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
|
|
|
@ -10,32 +10,36 @@ import org.bukkit.entity.Player;
|
|||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.tylermurphy.hideAndSeek.Main;
|
||||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Config.addToConfig;
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
||||
|
||||
public class SetSpawnLocation implements ICommand {
|
||||
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
Vector newSpawnPosition = new Vector();
|
||||
Player player = (Player) sender;
|
||||
newSpawnPosition.setX(player.getLocation().getBlockX());
|
||||
newSpawnPosition.setY(player.getLocation().getBlockY());
|
||||
newSpawnPosition.setZ(player.getLocation().getBlockZ());
|
||||
if(!Main.plugin.status.equals("Standby")) {
|
||||
sender.sendMessage(errorPrefix + message("GAME_INPROGRESS"));
|
||||
return;
|
||||
}
|
||||
if(worldborderEnabled && spawnPosition.distance(worldborderPosition) > 100) {
|
||||
Vector newSpawnPosition = new Vector();
|
||||
Player player = (Player) sender;
|
||||
if(player.getLocation().getBlockX() == 0 || player.getLocation().getBlockZ() == 0 || player.getLocation().getBlockY() == 0){
|
||||
sender.sendMessage(errorPrefix + message("NOT_AT_ZERO"));
|
||||
return;
|
||||
}
|
||||
newSpawnPosition.setX(player.getLocation().getBlockX());
|
||||
newSpawnPosition.setY(player.getLocation().getBlockY());
|
||||
newSpawnPosition.setZ(player.getLocation().getBlockZ());
|
||||
if(worldborderEnabled && newSpawnPosition.distance(worldborderPosition) > 100) {
|
||||
sender.sendMessage(errorPrefix + message("WORLDBORDER_POSITION"));
|
||||
return;
|
||||
}
|
||||
spawnPosition = newSpawnPosition;
|
||||
sender.sendMessage(messagePrefix + message("GAME_SPAWN"));
|
||||
Map<String, Object> temp = new HashMap<String,Object>();
|
||||
temp.put("x", spawnPosition.getX());
|
||||
temp.put("y", spawnPosition.getY());
|
||||
temp.put("z", spawnPosition.getZ());
|
||||
temp.put("world", player.getLocation().getWorld().getName());
|
||||
addToSection("spawns.game",temp);
|
||||
addToConfig("spawns.game.x", spawnPosition.getX());
|
||||
addToConfig("spawns.game.y", spawnPosition.getY());
|
||||
addToConfig("spawns.game.z", spawnPosition.getZ());
|
||||
addToConfig("spawns.game.world", player.getLocation().getWorld().getName());
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
|
|
|
@ -28,9 +28,13 @@ public class Setup implements ICommand {
|
|||
msg = msg + "\n" + message("SETUP_EXIT").toString();
|
||||
count++;
|
||||
}
|
||||
if(saveMinX == 0 || saveMinZ == 0 || saveMaxX == 0 || saveMaxZ == 0) {
|
||||
msg = msg + "\n" + message("SETUP_BOUNDS").toString();
|
||||
count++;
|
||||
}
|
||||
File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
|
||||
if(!destenation.exists()) {
|
||||
msg = msg + "\n" + message("SETUP_MAPSAVE").toString();
|
||||
msg = msg + "\n" + message("SETUP_SAVEMAP").toString();
|
||||
count++;
|
||||
}
|
||||
if(count < 1) {
|
||||
|
|
|
@ -49,9 +49,9 @@ public class Start implements ICommand {
|
|||
return;
|
||||
}
|
||||
if(Bukkit.getServer().getWorld("hideandseek_"+spawnWorld) != null) {
|
||||
Util.rollback("hideandseek_"+spawnWorld);
|
||||
Main.plugin.worldLoader.rollback();
|
||||
} else {
|
||||
Util.loadMap("hideandseek_"+spawnWorld);
|
||||
Main.plugin.worldLoader.loadMap();
|
||||
}
|
||||
String seekerName;
|
||||
if(args.length < 1) {
|
||||
|
@ -90,6 +90,9 @@ public class Start implements ICommand {
|
|||
player.sendTitle(ChatColor.GOLD + "" + ChatColor.BOLD + "HIDER", ChatColor.WHITE + message("HIDERS_SUBTITLE").toString(), 10, 70, 20);
|
||||
}
|
||||
Worldborder.resetWorldborder("hideandseek_"+spawnWorld);
|
||||
for(Player player : Main.plugin.board.getPlayers()){
|
||||
Main.plugin.board.createGameBoard(player);
|
||||
}
|
||||
Main.plugin.board.reloadGameBoards();
|
||||
Main.plugin.status = "Starting";
|
||||
int temp = Main.plugin.gameId;
|
||||
|
@ -106,7 +109,7 @@ public class Start implements ICommand {
|
|||
Util.broadcastMessage(messagePrefix + message("START"));
|
||||
Main.plugin.status = "Playing";
|
||||
for(Player player : Main.plugin.board.getPlayers()) {
|
||||
resetPlayer(player);
|
||||
Util.resetPlayer(player);
|
||||
}
|
||||
Main.plugin.worldborder = null;
|
||||
Main.plugin.taunt = null;
|
||||
|
@ -117,85 +120,23 @@ public class Start implements ICommand {
|
|||
Main.plugin.worldborder.schedule();
|
||||
}
|
||||
|
||||
Main.plugin.taunt = new Taunt(Main.plugin.gameId);
|
||||
Main.plugin.taunt.schedule();
|
||||
if(tauntEnabled) {
|
||||
Main.plugin.taunt = new Taunt(Main.plugin.gameId);
|
||||
Main.plugin.taunt.schedule();
|
||||
}
|
||||
|
||||
Main.plugin.glow = new Glow(Main.plugin.gameId);
|
||||
if (glowEnabled) {
|
||||
Main.plugin.glow = new Glow(Main.plugin.gameId);
|
||||
}
|
||||
|
||||
if(gameLength > 0) {
|
||||
Main.plugin.timeLeft = gameLength;
|
||||
for(Player player : Main.plugin.board.getPlayers()) {
|
||||
player.setLevel(gameLength);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 20 * 30);
|
||||
|
||||
}
|
||||
|
||||
public static void resetPlayer(Player player) {
|
||||
player.getInventory().clear();
|
||||
for(PotionEffect effect : player.getActivePotionEffects()){
|
||||
player.removePotionEffect(effect.getType());
|
||||
}
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.DOLPHINS_GRACE, 1000000, 1, false, false));
|
||||
if(Main.plugin.board.isSeeker(player)){
|
||||
ItemStack diamondSword = new ItemStack(Material.DIAMOND_SWORD,1);
|
||||
diamondSword.addEnchantment(Enchantment.DAMAGE_ALL, 1);
|
||||
ItemMeta diamondSwordMeta = diamondSword.getItemMeta();
|
||||
diamondSwordMeta.setDisplayName("Seeker Sword");
|
||||
diamondSwordMeta.setUnbreakable(true);
|
||||
diamondSword.setItemMeta(diamondSwordMeta);
|
||||
player.getInventory().addItem(diamondSword);
|
||||
|
||||
ItemStack wackyStick = new ItemStack(Material.STICK,1);
|
||||
wackyStick.addUnsafeEnchantment(Enchantment.KNOCKBACK, 3);
|
||||
ItemMeta wackyStickMeta = wackyStick.getItemMeta();
|
||||
wackyStickMeta.setDisplayName("Wacky Stick");
|
||||
wackyStick.setItemMeta(wackyStickMeta);
|
||||
player.getInventory().addItem(wackyStick);
|
||||
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 1000000, 2, false, false));
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 1000000, 1, false, false));
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 1000000, 1, false, false));
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 10, false, false));
|
||||
}
|
||||
else if(Main.plugin.board.isHider(player)){
|
||||
ItemStack stoneSword = new ItemStack(Material.STONE_SWORD,1);
|
||||
stoneSword.addEnchantment(Enchantment.DAMAGE_ALL, 2);
|
||||
ItemMeta stoneSwordMeta = stoneSword.getItemMeta();
|
||||
stoneSwordMeta.setDisplayName("Hider Sword");
|
||||
stoneSwordMeta.setUnbreakable(true);
|
||||
stoneSword.setItemMeta(stoneSwordMeta);
|
||||
player.getInventory().addItem(stoneSword);
|
||||
|
||||
ItemStack splashPotion = new ItemStack(Material.SPLASH_POTION,1);
|
||||
PotionMeta splashPotionMeta = (PotionMeta) splashPotion.getItemMeta();
|
||||
splashPotionMeta.setBasePotionData(new PotionData(PotionType.REGEN));
|
||||
splashPotion.setItemMeta(splashPotionMeta);
|
||||
player.getInventory().addItem(splashPotion);
|
||||
|
||||
ItemStack potion = new ItemStack(Material.POTION,2);
|
||||
PotionMeta potionMeta = (PotionMeta) potion.getItemMeta();
|
||||
potionMeta.setBasePotionData(new PotionData(PotionType.INSTANT_HEAL));
|
||||
potion.setItemMeta(potionMeta);
|
||||
player.getInventory().addItem(potion);
|
||||
|
||||
ItemStack snowball = new ItemStack(Material.SNOWBALL,1);
|
||||
ItemMeta snowballMeta = snowball.getItemMeta();
|
||||
snowballMeta.setDisplayName("Glow Powerup");
|
||||
List<String> snowballLore = new ArrayList<String>();
|
||||
snowballLore.add("Throw to make all seekers glow");
|
||||
snowballLore.add("Last 30s, all hiders can see it");
|
||||
snowballLore.add("Time stacks on multi use");
|
||||
snowballMeta.setLore(snowballLore);
|
||||
snowball.setItemMeta(snowballMeta);
|
||||
player.getInventory().addItem(snowball);
|
||||
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 1, false, false));
|
||||
}
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return "start";
|
||||
}
|
||||
|
|
|
@ -45,8 +45,8 @@ public class Stop implements ICommand {
|
|||
Main.plugin.timeLeft = 0;
|
||||
Worldborder.resetWorldborder("hideandseek_"+spawnWorld);
|
||||
for(Player player : Main.plugin.board.getPlayers()) {
|
||||
Main.plugin.board.createLobbyBoard(player);
|
||||
player.setGameMode(GameMode.ADVENTURE);
|
||||
player.setLevel(0);
|
||||
Main.plugin.board.addHider(player);
|
||||
player.getInventory().clear();
|
||||
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
|
||||
|
@ -58,7 +58,7 @@ public class Stop implements ICommand {
|
|||
Packet.setGlow(player, temp, false);
|
||||
}
|
||||
}
|
||||
Util.unloadMap("hideandseek_"+spawnWorld);
|
||||
Main.plugin.worldLoader.unloadMap();
|
||||
Main.plugin.board.reloadLobbyBoards();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,16 +1,11 @@
|
|||
package net.tylermurphy.hideAndSeek.configuration;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.tylermurphy.hideAndSeek.Main;
|
||||
|
||||
public class Config {
|
||||
|
||||
private static ConfigManager manager;
|
||||
|
||||
public static String
|
||||
messagePrefix,
|
||||
errorPrefix,
|
||||
|
@ -21,7 +16,8 @@ public class Config {
|
|||
warningPrefix,
|
||||
spawnWorld,
|
||||
exitWorld,
|
||||
lobbyWorld;
|
||||
lobbyWorld,
|
||||
local;
|
||||
|
||||
public static Vector
|
||||
spawnPosition,
|
||||
|
@ -33,94 +29,115 @@ public class Config {
|
|||
nametagsVisible,
|
||||
permissionsRequired,
|
||||
announceMessagesToNonPlayers,
|
||||
worldborderEnabled;
|
||||
worldborderEnabled,
|
||||
tauntEnabled,
|
||||
tauntCountdown,
|
||||
tauntLast,
|
||||
glowEnabled,
|
||||
glowStackable,
|
||||
pvpEnabled,
|
||||
autoJoin,
|
||||
teleportToExit;
|
||||
|
||||
public static int
|
||||
minPlayers,
|
||||
worldborderSize,
|
||||
worldborderDelay,
|
||||
currentWorldborderSize,
|
||||
gameLength;
|
||||
|
||||
public static FileConfiguration getConfig() {
|
||||
return Main.plugin.getConfig();
|
||||
}
|
||||
|
||||
public static void saveConfig() {
|
||||
Main.plugin.saveConfig();
|
||||
}
|
||||
gameLength,
|
||||
saveMinX,
|
||||
saveMinZ,
|
||||
saveMaxX,
|
||||
saveMaxZ,
|
||||
tauntDelay,
|
||||
glowLength;
|
||||
|
||||
public static void loadConfig() {
|
||||
|
||||
Main.plugin.reloadConfig();
|
||||
manager = new ConfigManager("config.yml");
|
||||
manager.saveConfig();
|
||||
|
||||
//Spawn
|
||||
spawnPosition = new Vector(
|
||||
getConfig().getDouble("spawns.game.x"),
|
||||
Math.max(0,Math.min(255,getConfig().getDouble("spawns.game.y"))),
|
||||
getConfig().getDouble("spawns.game.z")
|
||||
);
|
||||
spawnWorld = getConfig().getString("spawns.game.world");
|
||||
manager.getDouble("spawns.game.x"),
|
||||
Math.max(0, Math.min(255, manager.getDouble("spawns.game.y"))),
|
||||
manager.getDouble("spawns.game.z")
|
||||
);
|
||||
spawnWorld = manager.getString("spawns.game.world");
|
||||
|
||||
///Lobby
|
||||
lobbyPosition = new Vector(
|
||||
getConfig().getDouble("spawns.lobby.x"),
|
||||
Math.max(0,Math.min(255,getConfig().getDouble("spawns.lobby.y"))),
|
||||
getConfig().getDouble("spawns.lobby.z")
|
||||
);
|
||||
lobbyWorld = getConfig().getString("spawns.lobby.world");
|
||||
manager.getDouble("spawns.lobby.x"),
|
||||
Math.max(0, Math.min(255, manager.getDouble("spawns.lobby.y"))),
|
||||
manager.getDouble("spawns.lobby.z")
|
||||
);
|
||||
lobbyWorld = manager.getString("spawns.lobby.world");
|
||||
|
||||
announceMessagesToNonPlayers = getConfig().getBoolean("announceMessagesToNonPlayers");
|
||||
announceMessagesToNonPlayers = manager.getBoolean("announceMessagesToNonPlayers");
|
||||
|
||||
exitPosition = new Vector(
|
||||
getConfig().getDouble("spawns.exit.x"),
|
||||
Math.max(0,Math.min(255,getConfig().getDouble("spawns.exit.y"))),
|
||||
getConfig().getDouble("spawns.exit.z")
|
||||
);
|
||||
exitWorld = getConfig().getString("spawns.exit.world");
|
||||
manager.getDouble("spawns.exit.x"),
|
||||
Math.max(0, Math.min(255, manager.getDouble("spawns.exit.y"))),
|
||||
manager.getDouble("spawns.exit.z")
|
||||
);
|
||||
exitWorld = manager.getString("spawns.exit.world");
|
||||
|
||||
//World border
|
||||
worldborderPosition = new Vector(
|
||||
getConfig().getInt("worldBorder.x"),
|
||||
manager.getInt("worldBorder.x"),
|
||||
0,
|
||||
getConfig().getInt("worldBorder.z")
|
||||
);
|
||||
worldborderSize = Math.max(100,getConfig().getInt("worldBorder.size"));
|
||||
worldborderDelay = Math.max(1,getConfig().getInt("worldBorder.delay"));
|
||||
worldborderEnabled = getConfig().getBoolean("worldBorder.enabled");
|
||||
manager.getInt("worldBorder.z")
|
||||
);
|
||||
worldborderSize = Math.max(100, manager.getInt("worldBorder.size"));
|
||||
worldborderDelay = Math.max(1, manager.getInt("worldBorder.delay"));
|
||||
worldborderEnabled = manager.getBoolean("worldBorder.enabled");
|
||||
|
||||
//Prefix
|
||||
char SYMBOLE = '\u00A7';
|
||||
String SYMBOLE_STRING = new String(new char[] {SYMBOLE});
|
||||
String SYMBOLE_STRING = String.valueOf(SYMBOLE);
|
||||
|
||||
messagePrefix = getConfig().getString("prefix.default").replace("&", SYMBOLE_STRING);
|
||||
errorPrefix = getConfig().getString("prefix.error").replace("&", SYMBOLE_STRING);
|
||||
tauntPrefix = getConfig().getString("prefix.taunt").replace("&", SYMBOLE_STRING);
|
||||
worldborderPrefix = getConfig().getString("prefix.border").replace("&", SYMBOLE_STRING);
|
||||
abortPrefix = getConfig().getString("prefix.abort").replace("&", SYMBOLE_STRING);
|
||||
gameoverPrefix = getConfig().getString("prefix.gameover").replace("&", SYMBOLE_STRING);
|
||||
warningPrefix = getConfig().getString("prefix.warning").replace("&", SYMBOLE_STRING);
|
||||
messagePrefix = manager.getString("prefix.default").replace("&", SYMBOLE_STRING);
|
||||
errorPrefix = manager.getString("prefix.error").replace("&", SYMBOLE_STRING);
|
||||
tauntPrefix = manager.getString("prefix.taunt").replace("&", SYMBOLE_STRING);
|
||||
worldborderPrefix = manager.getString("prefix.border").replace("&", SYMBOLE_STRING);
|
||||
abortPrefix = manager.getString("prefix.abort").replace("&", SYMBOLE_STRING);
|
||||
gameoverPrefix = manager.getString("prefix.gameover").replace("&", SYMBOLE_STRING);
|
||||
warningPrefix = manager.getString("prefix.warning").replace("&", SYMBOLE_STRING);
|
||||
|
||||
//Map Bounds
|
||||
saveMinX = manager.getInt("bounds.min.x");
|
||||
saveMinZ = manager.getInt("bounds.min.z");
|
||||
saveMaxX = manager.getInt("bounds.max.x");
|
||||
saveMaxZ = manager.getInt("bounds.max.z");
|
||||
|
||||
//Taunt
|
||||
tauntEnabled = manager.getBoolean("taunt.enabled");
|
||||
tauntCountdown = manager.getBoolean("taunt.showCountdown");
|
||||
tauntDelay = Math.max(60,manager.getInt("taunt.delay"));
|
||||
tauntLast = manager.getBoolean("taunt.whenLastPerson");
|
||||
|
||||
//Glow
|
||||
glowLength = Math.max(1,manager.getInt("glow.time"));
|
||||
glowStackable = manager.getBoolean("glow.stackable");
|
||||
glowEnabled = manager.getBoolean("glow.enabled");
|
||||
|
||||
//Other
|
||||
nametagsVisible = getConfig().getBoolean("nametagsVisible");
|
||||
permissionsRequired = getConfig().getBoolean("permissionsRequired");
|
||||
minPlayers = Math.max(2,getConfig().getInt("minPlayers"));
|
||||
gameLength = getConfig().getInt("gameLength");
|
||||
|
||||
getConfig().options().copyDefaults(true);
|
||||
saveConfig();
|
||||
|
||||
nametagsVisible = manager.getBoolean("nametagsVisible");
|
||||
permissionsRequired = manager.getBoolean("permissionsRequired");
|
||||
minPlayers = Math.max(2, manager.getInt("minPlayers"));
|
||||
gameLength = manager.getInt("gameLength");
|
||||
pvpEnabled = manager.getBoolean("pvp");
|
||||
autoJoin = manager.getBoolean("autoJoin");
|
||||
teleportToExit = manager.getBoolean("teleportToExit");
|
||||
local = manager.getString("local");
|
||||
}
|
||||
|
||||
public static void addToSection(String sectionName, Map<String,Object> values) {
|
||||
ConfigurationSection section = getConfig().getConfigurationSection(sectionName);
|
||||
if(section == null) section = getConfig().createSection(sectionName);
|
||||
Map<String,Object> sectionValues = section.getValues(true);
|
||||
for(Entry<String, Object> entry : values.entrySet()) {
|
||||
sectionValues.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
getConfig().createSection(sectionName, sectionValues);
|
||||
saveConfig();
|
||||
public static void addToConfig(String path, Object value) {
|
||||
manager.set(path, value);
|
||||
}
|
||||
|
||||
public static void saveConfig() {
|
||||
manager.saveConfig();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,176 @@
|
|||
package net.tylermurphy.hideAndSeek.configuration;
|
||||
|
||||
import net.tylermurphy.hideAndSeek.Main;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Map;
|
||||
|
||||
public class ConfigManager {
|
||||
|
||||
private File file;
|
||||
private YamlConfiguration config,defaultConfig;
|
||||
|
||||
public ConfigManager(String filename){
|
||||
this.file = new File(Main.plugin.getDataFolder(), filename);
|
||||
|
||||
if(!file.exists()){
|
||||
saveDefaultConfiguration();
|
||||
}
|
||||
|
||||
this.config = YamlConfiguration.loadConfiguration(file);
|
||||
|
||||
InputStream input = Main.plugin.getResource(file.getName());
|
||||
InputStreamReader reader = new InputStreamReader(input);
|
||||
this.defaultConfig = YamlConfiguration.loadConfiguration(reader);
|
||||
try{
|
||||
input.close();
|
||||
reader.close();
|
||||
} catch (IOException e){}
|
||||
}
|
||||
|
||||
public ConfigManager(String filename, String defaultFilename){
|
||||
this.file = new File(Main.plugin.getDataFolder(), filename);
|
||||
|
||||
if(!file.exists()){
|
||||
saveDefaultConfiguration();
|
||||
}
|
||||
|
||||
this.config = YamlConfiguration.loadConfiguration(file);
|
||||
|
||||
InputStream input = Main.plugin.getResource(defaultFilename);
|
||||
InputStreamReader reader = new InputStreamReader(input);
|
||||
this.defaultConfig = YamlConfiguration.loadConfiguration(reader);
|
||||
try{
|
||||
input.close();
|
||||
reader.close();
|
||||
} catch (IOException e){
|
||||
Main.plugin.getLogger().severe("Couldn't find "+defaultFilename+" internally. Did you set an incorrect local?");
|
||||
Main.plugin.getServer().getPluginManager().disablePlugin(Main.plugin);
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
private void saveDefaultConfiguration(){
|
||||
try{
|
||||
InputStream input = Main.plugin.getResource(file.getName());
|
||||
java.nio.file.Files.copy(input, file.toPath());
|
||||
input.close();
|
||||
} catch(IOException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void addToConfig(String path, Object value) {
|
||||
config.set(path, value);
|
||||
}
|
||||
|
||||
public double getDouble(String path){
|
||||
double value = config.getDouble(path);
|
||||
if(value == 0.0D){
|
||||
return defaultConfig.getDouble(path);
|
||||
} else {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public int getInt(String path){
|
||||
int value = config.getInt(path);
|
||||
if(value == 0){
|
||||
return defaultConfig.getInt(path);
|
||||
} else {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public String getString(String path){
|
||||
String value = config.getString(path);
|
||||
if(value == null){
|
||||
return defaultConfig.getString(path);
|
||||
} else {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public void reset(String path){
|
||||
config.set(path, defaultConfig.get(path));
|
||||
}
|
||||
|
||||
public void resetConfig(){
|
||||
config = defaultConfig;
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
public boolean getBoolean(String path){
|
||||
boolean value = config.getBoolean(path);
|
||||
if(value == false){
|
||||
return defaultConfig.getBoolean(path);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public ConfigurationSection getConfigurationSection(String path){
|
||||
ConfigurationSection section = config.getConfigurationSection(path);
|
||||
if(section == null){
|
||||
return defaultConfig.getConfigurationSection(path);
|
||||
} else {
|
||||
return section;
|
||||
}
|
||||
}
|
||||
|
||||
public void set(String path, Object value){
|
||||
config.set(path, value);
|
||||
}
|
||||
|
||||
public void saveConfig(){
|
||||
try {
|
||||
InputStream is = Main.plugin.getResource(file.getName());
|
||||
StringBuilder textBuilder = new StringBuilder();
|
||||
Reader reader = new BufferedReader(new InputStreamReader(is, Charset.forName(StandardCharsets.UTF_8.name())));
|
||||
int c = 0;
|
||||
while((c = reader.read()) != -1){
|
||||
textBuilder.append((char) c);
|
||||
}
|
||||
String yamlString = textBuilder.toString();
|
||||
Map<String, Object> temp = config.getValues(true);
|
||||
for(Map.Entry<String, Object> entry: temp.entrySet()){
|
||||
if(entry.getValue() instanceof Integer || entry.getValue() instanceof Double || entry.getValue() instanceof String || entry.getValue() instanceof Boolean){
|
||||
String[] parts = entry.getKey().split("\\.");
|
||||
int index = 0;
|
||||
int i = 0;
|
||||
for(String part : parts) {
|
||||
if(i == 0) {
|
||||
index = yamlString.indexOf(part, index);
|
||||
} else {
|
||||
index = yamlString.indexOf(" " + part, index);
|
||||
index++;
|
||||
}
|
||||
i++;
|
||||
if(index == -1) break;
|
||||
}
|
||||
if(index == -1) continue;;
|
||||
int start = yamlString.indexOf(' ', index);
|
||||
int end = yamlString.indexOf('\n', index);
|
||||
if(end == -1) end = yamlString.length();
|
||||
String replace = entry.getValue().toString();
|
||||
if(entry.getValue() instanceof String){
|
||||
replace = "\"" + replace + "\"";
|
||||
}
|
||||
StringBuilder builder = new StringBuilder(yamlString);
|
||||
builder.replace(start+1, end == -1 ? yamlString.length() : end, replace);
|
||||
yamlString = builder.toString();
|
||||
}
|
||||
}
|
||||
PrintWriter out = new PrintWriter(file);
|
||||
out.print(yamlString);
|
||||
out.close();
|
||||
} catch (IOException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,129 @@
|
|||
package net.tylermurphy.hideAndSeek.configuration;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.potion.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class Items {
|
||||
|
||||
public static List<ItemStack> HIDER_ITEMS, SEEKER_ITEMS;
|
||||
public static List<PotionEffect> HIDER_EFFECTS, SEEKER_EFFECTS;
|
||||
|
||||
public static void loadItems() {
|
||||
|
||||
ConfigManager manager = new ConfigManager("items.yml");
|
||||
|
||||
SEEKER_ITEMS = new ArrayList<>();
|
||||
ConfigurationSection SeekerItems = manager.getConfigurationSection("items.seeker");
|
||||
int i = 1;
|
||||
while (true) {
|
||||
ConfigurationSection section = SeekerItems.getConfigurationSection(String.valueOf(i));
|
||||
if(section == null) break;
|
||||
ItemStack item = createItem(section);
|
||||
if(item != null) SEEKER_ITEMS.add(item);
|
||||
i++;
|
||||
}
|
||||
|
||||
HIDER_ITEMS = new ArrayList<>();
|
||||
ConfigurationSection HiderItems = manager.getConfigurationSection("items.hider");
|
||||
i = 1;
|
||||
while (true) {
|
||||
ConfigurationSection section = HiderItems.getConfigurationSection(String.valueOf(i));
|
||||
if(section == null) break;
|
||||
ItemStack item = createItem(section);
|
||||
if(item != null) HIDER_ITEMS.add(item);
|
||||
i++;
|
||||
}
|
||||
|
||||
SEEKER_EFFECTS = new ArrayList<>();
|
||||
ConfigurationSection SeekerEffects = manager.getConfigurationSection("effects.seeker");
|
||||
i = 1;
|
||||
while (true) {
|
||||
ConfigurationSection section = SeekerEffects.getConfigurationSection(String.valueOf(i));
|
||||
if(section == null) break;
|
||||
PotionEffect effect = getPotionEffect(section);
|
||||
if(effect != null) SEEKER_EFFECTS.add(effect);
|
||||
i++;
|
||||
}
|
||||
|
||||
HIDER_EFFECTS = new ArrayList<>();
|
||||
ConfigurationSection HiderEffects = manager.getConfigurationSection("effects.hider");
|
||||
i = 1;
|
||||
while (true) {
|
||||
ConfigurationSection section = HiderEffects.getConfigurationSection(String.valueOf(i));
|
||||
if(section == null) break;
|
||||
PotionEffect effect = getPotionEffect(section);
|
||||
if(effect != null) HIDER_EFFECTS.add(effect);
|
||||
i++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static ItemStack createItem(ConfigurationSection item) {
|
||||
String material_string = item.getString("material");
|
||||
if(material_string == null) return null;
|
||||
Material material = Material.valueOf(material_string.toUpperCase());
|
||||
int amount = item.getInt("amount");
|
||||
ItemStack stack = new ItemStack(material, amount);
|
||||
if(material == Material.POTION || material == Material.SPLASH_POTION || material == Material.LINGERING_POTION){
|
||||
PotionMeta meta = getPotionMeta(stack, item);
|
||||
stack.setItemMeta(meta);
|
||||
} else {
|
||||
ConfigurationSection enchantments = item.getConfigurationSection("enchantments");
|
||||
if (enchantments != null)
|
||||
for (String enchantment_string : enchantments.getKeys(false)) {
|
||||
Enchantment enchantment = Enchantment.getByKey(NamespacedKey.minecraft(enchantment_string));
|
||||
if (enchantment == null) continue;
|
||||
stack.addUnsafeEnchantment(
|
||||
enchantment,
|
||||
enchantments.getInt(enchantment_string)
|
||||
);
|
||||
}
|
||||
ItemMeta meta = getItemMeta(stack,item);
|
||||
stack.setItemMeta(meta);
|
||||
}
|
||||
return stack;
|
||||
}
|
||||
|
||||
private static ItemMeta getItemMeta(ItemStack stack, ConfigurationSection item){
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
assert meta != null;
|
||||
String name = item.getString("name");
|
||||
if(name != null)
|
||||
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name));
|
||||
meta.setUnbreakable(item.getBoolean("unbreakable"));
|
||||
meta.setLore(item.getStringList("lore"));
|
||||
return meta;
|
||||
}
|
||||
|
||||
private static PotionMeta getPotionMeta(ItemStack stack, ConfigurationSection item){
|
||||
String type = item.getString("type");
|
||||
PotionMeta meta = (PotionMeta) stack.getItemMeta();
|
||||
if(type==null) return meta;
|
||||
assert meta != null;
|
||||
meta.setBasePotionData(new PotionData((PotionType.valueOf(type.toUpperCase()))));
|
||||
return meta;
|
||||
}
|
||||
|
||||
private static PotionEffect getPotionEffect(ConfigurationSection item){
|
||||
String type = item.getString("type");
|
||||
if(type == null) return null;
|
||||
return new PotionEffect(
|
||||
Objects.requireNonNull(PotionEffectType.getByName(type.toUpperCase())),
|
||||
item.getInt("duration"),
|
||||
item.getInt("amplifier"),
|
||||
item.getBoolean("ambient"),
|
||||
item.getBoolean("particles")
|
||||
);
|
||||
}
|
||||
}
|
|
@ -4,34 +4,51 @@ import java.io.File;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.tylermurphy.hideAndSeek.Main;
|
||||
|
||||
public class Localization {
|
||||
|
||||
public static final Map<String,LocalizationString> LOCAL = new HashMap<String,LocalizationString>();
|
||||
public static final Map<String,LocalizationString> LOCAL = new HashMap<>();
|
||||
|
||||
static YamlConfiguration config;
|
||||
private static String[][] CHANGES = {{"WORLDBORDER_DECREASING"}};
|
||||
|
||||
public static boolean init() {
|
||||
Main.plugin.saveResource("localization.yml", false);
|
||||
String path = Main.data.getAbsolutePath()+File.separator + "localization.yml";
|
||||
config = YamlConfiguration.loadConfiguration(new File(path));
|
||||
for(String key : config.getConfigurationSection("Localization").getKeys(false)) {
|
||||
public static void loadLocalization() {
|
||||
|
||||
ConfigManager manager = new ConfigManager("localization.yml", "lang"+File.separator+"localization_"+Config.local+".yml");
|
||||
|
||||
int PLUGIN_VERSION = 2;
|
||||
int VERSION = manager.getInt("version");
|
||||
if(VERSION < PLUGIN_VERSION){
|
||||
for(int i = VERSION; i < PLUGIN_VERSION; i++){
|
||||
if(i < 1) continue;
|
||||
String[] changeList = CHANGES[i-1];
|
||||
for(String change : changeList)
|
||||
manager.reset("Localization." + change);
|
||||
}
|
||||
manager.reset("version");
|
||||
}
|
||||
|
||||
String SELECTED_LOCAL = manager.getString("local");
|
||||
if(!SELECTED_LOCAL.equals(Config.local)){
|
||||
manager.resetConfig();
|
||||
}
|
||||
|
||||
|
||||
manager.saveConfig();
|
||||
|
||||
for(String key : manager.getConfigurationSection("Localization").getKeys(false)) {
|
||||
LOCAL.put(
|
||||
key,
|
||||
new LocalizationString( ChatColor.translateAlternateColorCodes('&', config.getString("Localization."+key) ) )
|
||||
new LocalizationString( ChatColor.translateAlternateColorCodes('&', manager.getString("Localization."+key) ) )
|
||||
);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static LocalizationString message(String key) {
|
||||
LocalizationString temp = LOCAL.get(key);
|
||||
if(temp == null)
|
||||
return new LocalizationString(key+" missing from localization.yml");
|
||||
if(temp == null) {
|
||||
return new LocalizationString(ChatColor.RED + "" + ChatColor.ITALIC + key + "is not found in localization.yml. This is a plugin issue, please report it.");
|
||||
}
|
||||
return new LocalizationString(temp.toString());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@ import org.bukkit.entity.Player;
|
|||
import net.tylermurphy.hideAndSeek.Main;
|
||||
import net.tylermurphy.hideAndSeek.util.Packet;
|
||||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||
|
||||
public class Glow {
|
||||
|
||||
private final int temp;
|
||||
|
@ -18,7 +20,8 @@ public class Glow {
|
|||
}
|
||||
|
||||
public void onProjectilve() {
|
||||
glowTime++;
|
||||
if(glowStackable) glowTime += glowLength;
|
||||
else glowTime = glowLength;
|
||||
if(!running)
|
||||
startGlow();
|
||||
}
|
||||
|
@ -34,26 +37,29 @@ public class Glow {
|
|||
}
|
||||
|
||||
private void waitGlow() {
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
||||
public void run() {
|
||||
if(temp != Main.plugin.gameId) return;
|
||||
glowTime--;
|
||||
glowTime = Math.max(glowTime, 0);
|
||||
if(glowTime == 0) {
|
||||
stopGlow();
|
||||
} else {
|
||||
waitGlow();
|
||||
}
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, () -> {
|
||||
if(temp != Main.plugin.gameId) return;
|
||||
glowTime--;
|
||||
glowTime = Math.max(glowTime, 0);
|
||||
if(glowTime == 0) {
|
||||
stopGlow();
|
||||
} else {
|
||||
waitGlow();
|
||||
}
|
||||
}, 20*30);
|
||||
}, 20);
|
||||
}
|
||||
|
||||
private void stopGlow() {
|
||||
running = false;
|
||||
for(Player hider : Main.plugin.board.getHiders()) {
|
||||
for(Player seeker : Main.plugin.board.getSeekers()) {
|
||||
for (Player seeker : Main.plugin.board.getSeekers()) {
|
||||
Packet.setGlow(hider, seeker, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
return running;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,41 +18,33 @@ public class Taunt {
|
|||
|
||||
private final int temp;
|
||||
private String tauntPlayer;
|
||||
private int delay;
|
||||
private boolean running;
|
||||
|
||||
public Taunt(int temp) {
|
||||
this.temp = temp;
|
||||
this.delay = 0;
|
||||
}
|
||||
|
||||
public void schedule() {
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
||||
public void run() {
|
||||
tryTaunt();
|
||||
}
|
||||
},20*60*5);
|
||||
delay = tauntDelay;
|
||||
waitTaunt();
|
||||
}
|
||||
|
||||
private void waitTaunt() {
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
||||
public void run() {
|
||||
tryTaunt();
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, () -> {
|
||||
if(delay == 0) {
|
||||
if(!tauntLast && Main.plugin.board.size() < 2) return;
|
||||
else executeTaunt();
|
||||
} else {
|
||||
delay--;
|
||||
waitTaunt();
|
||||
}
|
||||
},20*60);
|
||||
}
|
||||
|
||||
private void tryTaunt() {
|
||||
if(temp != Main.plugin.gameId) return;
|
||||
if(Math.random() > .8) {
|
||||
executeTaunt();
|
||||
} else {
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
||||
public void run() {
|
||||
tryTaunt();
|
||||
}
|
||||
},20*60);
|
||||
}
|
||||
},20);
|
||||
}
|
||||
|
||||
private void executeTaunt() {
|
||||
if(temp != Main.plugin.gameId) return;
|
||||
Player taunted = null;
|
||||
int rand = (int) (Math.random()*Main.plugin.board.sizeHider());
|
||||
for(Player player : Main.plugin.board.getPlayers()) {
|
||||
|
@ -65,37 +57,45 @@ public class Taunt {
|
|||
}
|
||||
}
|
||||
if(taunted != null) {
|
||||
running = true;
|
||||
taunted.sendMessage(message("TAUNTED").toString());
|
||||
Util.broadcastMessage(tauntPrefix + message("TAUNT"));
|
||||
tauntPlayer = taunted.getName();
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
||||
public void run() {
|
||||
if(temp != Main.plugin.gameId) return;
|
||||
Player taunted = Main.plugin.board.getPlayer(tauntPlayer);
|
||||
if(taunted != null) {
|
||||
Firework fw = (Firework) taunted.getLocation().getWorld().spawnEntity(taunted.getLocation(), EntityType.FIREWORK);
|
||||
FireworkMeta fwm = fw.getFireworkMeta();
|
||||
fwm.setPower(4);
|
||||
fwm.addEffect(FireworkEffect.builder()
|
||||
.withColor(Color.BLUE)
|
||||
.withColor(Color.RED)
|
||||
.withColor(Color.YELLOW)
|
||||
.with(FireworkEffect.Type.STAR)
|
||||
.with(FireworkEffect.Type.BALL)
|
||||
.with(FireworkEffect.Type.BALL_LARGE)
|
||||
.flicker(true)
|
||||
.withTrail()
|
||||
.build());
|
||||
fw.setFireworkMeta(fwm);
|
||||
Util.broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
|
||||
}
|
||||
tauntPlayer = "";
|
||||
waitTaunt();
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, () -> {
|
||||
if(temp != Main.plugin.gameId) return;
|
||||
Player taunted1 = Main.plugin.board.getPlayer(tauntPlayer);
|
||||
if(taunted1 != null) {
|
||||
Firework fw = (Firework) taunted1.getLocation().getWorld().spawnEntity(taunted1.getLocation(), EntityType.FIREWORK);
|
||||
FireworkMeta fwm = fw.getFireworkMeta();
|
||||
fwm.setPower(4);
|
||||
fwm.addEffect(FireworkEffect.builder()
|
||||
.withColor(Color.BLUE)
|
||||
.withColor(Color.RED)
|
||||
.withColor(Color.YELLOW)
|
||||
.with(FireworkEffect.Type.STAR)
|
||||
.with(FireworkEffect.Type.BALL)
|
||||
.with(FireworkEffect.Type.BALL_LARGE)
|
||||
.flicker(true)
|
||||
.withTrail()
|
||||
.build());
|
||||
fw.setFireworkMeta(fwm);
|
||||
Util.broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
|
||||
}
|
||||
tauntPlayer = "";
|
||||
running = false;
|
||||
schedule();
|
||||
},20*30);
|
||||
} else {
|
||||
waitTaunt();
|
||||
schedule();
|
||||
}
|
||||
}
|
||||
|
||||
public int getDelay(){
|
||||
return delay;
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
return running;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,32 +13,38 @@ import net.tylermurphy.hideAndSeek.util.Util;
|
|||
public class Worldborder {
|
||||
|
||||
private final int temp;
|
||||
private int delay;
|
||||
private boolean running;
|
||||
|
||||
public Worldborder(int temp) {
|
||||
this.temp = temp;
|
||||
}
|
||||
|
||||
public void schedule() {
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
||||
public void run() {
|
||||
decreaceWorldborder();
|
||||
delay = 60*worldborderDelay;
|
||||
running = false;
|
||||
waitBorder();
|
||||
}
|
||||
|
||||
private void waitBorder(){
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, () -> {
|
||||
if(delay == 0) decreaceWorldborder();
|
||||
else {
|
||||
delay--; waitBorder();
|
||||
}
|
||||
},20*60*worldborderDelay);
|
||||
}, 20);
|
||||
}
|
||||
|
||||
private void decreaceWorldborder() {
|
||||
if(temp != Main.plugin.gameId) return;
|
||||
if(currentWorldborderSize-100 > 100) {
|
||||
running = true;
|
||||
Util.broadcastMessage(worldborderPrefix + message("WORLDBORDER_DECREASING"));
|
||||
currentWorldborderSize -= 100;
|
||||
World world = Bukkit.getWorld("hideandseek_"+spawnWorld);
|
||||
WorldBorder border = world.getWorldBorder();
|
||||
border.setSize(border.getSize()-100,30);
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
||||
public void run() {
|
||||
decreaceWorldborder();
|
||||
}
|
||||
},20*60*worldborderDelay);
|
||||
schedule();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -57,4 +63,12 @@ public class Worldborder {
|
|||
}
|
||||
}
|
||||
|
||||
public int getDelay(){
|
||||
return delay;
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
return running;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ public class Board {
|
|||
|
||||
private List<String> Hider, Seeker, Spectator;
|
||||
private Map<String, Player> playerList = new HashMap<String,Player>();
|
||||
private Map<String, CustomBoard> customBoards = new HashMap<String, CustomBoard>();
|
||||
|
||||
public boolean isPlayer(Player player) {
|
||||
return playerList.containsKey(player.getName());
|
||||
|
@ -146,63 +147,90 @@ public class Board {
|
|||
}
|
||||
}
|
||||
|
||||
private void createLobbyBoard(Player player) {
|
||||
|
||||
Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
|
||||
Objective obj = board.registerNewObjective("LobbyScoreboard", "dummy",
|
||||
ChatColor.translateAlternateColorCodes('&', "&l&eHIDE AND SEEK"));
|
||||
createTeamsForBoard(board);
|
||||
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
Score waiting = obj.getScore("Waiting to start...");
|
||||
waiting.setScore(6);
|
||||
Score blank1 = obj.getScore(ChatColor.RESET.toString());
|
||||
blank1.setScore(5);
|
||||
Score players = obj.getScore("Players: "+playerList.values().size());
|
||||
players.setScore(4);
|
||||
Score blank2 = obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString());
|
||||
blank2.setScore(3);
|
||||
Score seeker = obj.getScore(ChatColor.BOLD + "" + ChatColor.RED + "SEEKER%" + ChatColor.WHITE + getSeekerPercent());
|
||||
seeker.setScore(2);
|
||||
Score hider = obj.getScore(ChatColor.BOLD + "" + ChatColor.GOLD + "HIDER%" + ChatColor.WHITE + getHiderPercent());
|
||||
hider.setScore(1);
|
||||
player.setScoreboard(board);
|
||||
public void createLobbyBoard(Player player) {
|
||||
createLobbyBoard(player, true);
|
||||
}
|
||||
|
||||
private void createGameBoard(Player player) {
|
||||
Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
|
||||
Objective obj = board.registerNewObjective("GameScoreboard", "dummy",
|
||||
ChatColor.translateAlternateColorCodes('&', "&l&eHIDE AND SEEK"));
|
||||
createTeamsForBoard(board);
|
||||
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
Score team = obj.getScore("Team: " + getTeam(player));
|
||||
team.setScore(6);
|
||||
Score blank1 = obj.getScore(ChatColor.RESET.toString());
|
||||
blank1.setScore(5);
|
||||
if(gameLength > 0) {
|
||||
Score waiting = obj.getScore(ChatColor.GREEN + "Time Left: " + ChatColor.WHITE + Main.plugin.timeLeft/60 + "m" + Main.plugin.timeLeft%60 + "s");
|
||||
waiting.setScore(4);
|
||||
Score blank2 = obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString());
|
||||
blank2.setScore(3);
|
||||
private void createLobbyBoard(Player player, boolean recreate) {
|
||||
CustomBoard board = customBoards.get(player.getName());
|
||||
if(recreate) {
|
||||
board = new CustomBoard(player, "&l&eHIDE AND SEEK");
|
||||
board.updateTeams();
|
||||
}
|
||||
Score seeker = obj.getScore(ChatColor.BOLD + "" + ChatColor.RED + "SEEKERS:" + ChatColor.WHITE + " " + Seeker.size());
|
||||
seeker.setScore(2);
|
||||
Score hider = obj.getScore(ChatColor.BOLD + "" + ChatColor.GOLD + "HIDERS:" + ChatColor.WHITE + " " + Hider.size());
|
||||
hider.setScore(1);
|
||||
player.setScoreboard(board);
|
||||
board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDER%" + ChatColor.WHITE + getHiderPercent());
|
||||
board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKER%" + ChatColor.WHITE + getSeekerPercent());
|
||||
board.addBlank();
|
||||
board.setLine("players", "Players: " + playerList.values().size());
|
||||
board.addBlank();
|
||||
board.setLine("waiting", "Waiting to start...");
|
||||
board.display();
|
||||
customBoards.put(player.getName(), board);
|
||||
}
|
||||
|
||||
public void createGameBoard(Player player){
|
||||
createGameBoard(player, true);
|
||||
}
|
||||
|
||||
private void createGameBoard(Player player, boolean recreate){
|
||||
CustomBoard board = customBoards.get(player.getName());
|
||||
if(recreate) {
|
||||
board = new CustomBoard(player, "&l&eHIDE AND SEEK");
|
||||
}
|
||||
board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDERS:" + ChatColor.WHITE + " " + Hider.size());
|
||||
board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKERS:" + ChatColor.WHITE + " " + Seeker.size());
|
||||
board.addBlank();
|
||||
if(glowEnabled){
|
||||
if(Main.plugin.glow == null || Main.plugin.status.equals("Starting") || !Main.plugin.glow.isRunning())
|
||||
board.setLine("glow", "Glow: " + ChatColor.RED + "Inactive");
|
||||
else
|
||||
board.setLine("glow", "Glow: " + ChatColor.GREEN + "Active");
|
||||
}
|
||||
if(tauntEnabled && tauntCountdown){
|
||||
if(Main.plugin.taunt == null || Main.plugin.status.equals("Starting"))
|
||||
board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "0m0s");
|
||||
else if(!tauntLast && Hider.size() == 1){
|
||||
board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "Expired");
|
||||
} else if(!Main.plugin.taunt.isRunning())
|
||||
board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + Main.plugin.taunt.getDelay()/60 + "m" + Main.plugin.taunt.getDelay()%60 + "s");
|
||||
else
|
||||
board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "Active");
|
||||
}
|
||||
if(worldborderEnabled){
|
||||
if(Main.plugin.worldborder == null || Main.plugin.status.equals("Starting")){
|
||||
board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + "0m0s");
|
||||
} else if(!Main.plugin.worldborder.isRunning()) {
|
||||
board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + Main.plugin.worldborder.getDelay()/60 + "m" + Main.plugin.worldborder.getDelay()%60 + "s");
|
||||
} else {
|
||||
board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + "Decreasing");
|
||||
}
|
||||
}
|
||||
if(glowEnabled || (tauntEnabled && tauntCountdown) || worldborderEnabled)
|
||||
board.addBlank();
|
||||
board.setLine("time", "Time Left: " + ChatColor.GREEN + Main.plugin.timeLeft/60 + "m" + Main.plugin.timeLeft%60 + "s");
|
||||
board.addBlank();
|
||||
board.setLine("team", "Team: " + getTeam(player));
|
||||
board.display();
|
||||
customBoards.put(player.getName(), board);
|
||||
}
|
||||
|
||||
public void removeBoard(Player player) {
|
||||
player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard());
|
||||
customBoards.remove(player.getName());
|
||||
}
|
||||
|
||||
public void reloadLobbyBoards() {
|
||||
for(Player player : playerList.values())
|
||||
createLobbyBoard(player);
|
||||
createLobbyBoard(player, false);
|
||||
}
|
||||
|
||||
public void reloadGameBoards() {
|
||||
for(Player player : playerList.values())
|
||||
createGameBoard(player);
|
||||
createGameBoard(player, false);
|
||||
}
|
||||
|
||||
public void reloadBoardTeams() {
|
||||
for(CustomBoard board : customBoards.values())
|
||||
board.updateTeams();
|
||||
}
|
||||
|
||||
private String getSeekerPercent() {
|
||||
|
|
121
src/main/java/net/tylermurphy/hideAndSeek/util/CustomBoard.java
Normal file
121
src/main/java/net/tylermurphy/hideAndSeek/util/CustomBoard.java
Normal file
|
@ -0,0 +1,121 @@
|
|||
package net.tylermurphy.hideAndSeek.util;
|
||||
|
||||
import net.tylermurphy.hideAndSeek.Main;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||
|
||||
public class CustomBoard {
|
||||
|
||||
private final Scoreboard board;
|
||||
private final Objective obj;
|
||||
private final Player player;
|
||||
private final Map<String,Line> LINES;
|
||||
private int blanks;
|
||||
private boolean displayed;
|
||||
|
||||
public CustomBoard(Player player, String title){
|
||||
this.board = Bukkit.getScoreboardManager().getNewScoreboard();
|
||||
this.LINES = new HashMap<String,Line>();
|
||||
this.player = player;
|
||||
this.obj = board.registerNewObjective(
|
||||
"Scoreboard", "dummy", ChatColor.translateAlternateColorCodes('&', title));
|
||||
this.blanks = 0;
|
||||
this.displayed = false;
|
||||
this.updateTeams();
|
||||
}
|
||||
|
||||
public void updateTeams() {
|
||||
try{ board.registerNewTeam("Hider"); } catch (Exception e){}
|
||||
try{ board.registerNewTeam("Seeker"); } catch (Exception e){}
|
||||
Team hiderTeam = board.getTeam("Hider");
|
||||
for(String entry : hiderTeam.getEntries())
|
||||
hiderTeam.removeEntry(entry);
|
||||
for(Player player : Main.plugin.board.getHiders())
|
||||
hiderTeam.addEntry(player.getName());
|
||||
Team seekerTeam = board.getTeam("Seeker");
|
||||
for(String entry : seekerTeam.getEntries())
|
||||
seekerTeam.removeEntry(entry);
|
||||
for(Player player : Main.plugin.board.getSeekers())
|
||||
seekerTeam.addEntry(player.getName());
|
||||
if(nametagsVisible) {
|
||||
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);
|
||||
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OTHER_TEAMS);
|
||||
} else {
|
||||
hiderTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
|
||||
seekerTeam.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.NEVER);
|
||||
}
|
||||
hiderTeam.setColor(ChatColor.GOLD);
|
||||
seekerTeam.setColor(ChatColor.RED);
|
||||
}
|
||||
|
||||
public void setLine(String key, String message){
|
||||
Line line = LINES.get(key);
|
||||
if(line == null)
|
||||
addLine(key, message);
|
||||
else
|
||||
updateLine(key, message);
|
||||
}
|
||||
|
||||
private void addLine(String key, String message){
|
||||
Score score = obj.getScore(message);
|
||||
score.setScore(LINES.values().size()+1);
|
||||
Line line = new Line(LINES.values().size()+1, message);
|
||||
LINES.put(key, line);
|
||||
}
|
||||
|
||||
public void addBlank(){
|
||||
if(displayed) return;
|
||||
String temp = "";
|
||||
for(int i = 0; i <= blanks; i ++)
|
||||
temp += ChatColor.RESET;
|
||||
blanks++;
|
||||
addLine("blank"+blanks, temp);
|
||||
}
|
||||
|
||||
private void updateLine(String key, String message){
|
||||
Line line = LINES.get(key);
|
||||
board.resetScores(line.getMessage());
|
||||
line.setMessage(message);
|
||||
Score newScore = obj.getScore(message);
|
||||
|
||||
newScore.setScore(line.getScore());
|
||||
}
|
||||
|
||||
public void display() {
|
||||
displayed = true;
|
||||
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
player.setScoreboard(board);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Line {
|
||||
|
||||
private int score;
|
||||
private String message;
|
||||
|
||||
public Line(int score, String message){
|
||||
this.score = score;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public int getScore() {
|
||||
return score;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
}
|
|
@ -2,13 +2,27 @@ package net.tylermurphy.hideAndSeek.util;
|
|||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.tylermurphy.hideAndSeek.configuration.Items;
|
||||
import net.tylermurphy.hideAndSeek.configuration.LocalizationString;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.WorldCreator;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.tylermurphy.hideAndSeek.Main;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.potion.PotionData;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.potion.PotionType;
|
||||
|
||||
public class Util {
|
||||
|
||||
|
@ -24,27 +38,10 @@ public class Util {
|
|||
if(exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0) return false;
|
||||
File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
|
||||
if(!destenation.exists()) return false;
|
||||
if(saveMinX == 0 || saveMinZ == 0 || saveMaxX == 0 || saveMaxZ == 0) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void unloadMap(String mapname){
|
||||
if(Bukkit.getServer().unloadWorld(Bukkit.getServer().getWorld(mapname), false)){
|
||||
Main.plugin.getLogger().info("Successfully unloaded " + mapname);
|
||||
}else{
|
||||
Main.plugin.getLogger().severe("COULD NOT UNLOAD " + mapname);
|
||||
}
|
||||
}
|
||||
|
||||
public static void loadMap(String mapname){
|
||||
Bukkit.getServer().createWorld(new WorldCreator(mapname));
|
||||
Bukkit.getServer().getWorld("hideandseek_"+spawnWorld).setAutoSave(false);
|
||||
}
|
||||
|
||||
public static void rollback(String mapname){
|
||||
unloadMap(mapname);
|
||||
loadMap(mapname);
|
||||
}
|
||||
|
||||
public static void sendDelayedMessage(String message, int gameId, int delay) {
|
||||
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.plugin, new Runnable() {
|
||||
public void run() {
|
||||
|
@ -54,4 +51,35 @@ public class Util {
|
|||
}, delay);
|
||||
}
|
||||
|
||||
public static void resetPlayer(Player player) {
|
||||
player.getInventory().clear();
|
||||
for (PotionEffect effect : player.getActivePotionEffects()) {
|
||||
player.removePotionEffect(effect.getType());
|
||||
}
|
||||
if (Main.plugin.board.isSeeker(player)) {
|
||||
if(pvpEnabled)
|
||||
for(ItemStack item : Items.SEEKER_ITEMS)
|
||||
player.getInventory().addItem(item);
|
||||
for(PotionEffect effect : Items.SEEKER_EFFECTS)
|
||||
player.addPotionEffect(effect);
|
||||
} else if (Main.plugin.board.isHider(player)) {
|
||||
if(pvpEnabled)
|
||||
for(ItemStack item : Items.HIDER_ITEMS)
|
||||
player.getInventory().addItem(item);
|
||||
for(PotionEffect effect : Items.HIDER_EFFECTS)
|
||||
player.addPotionEffect(effect);
|
||||
if(glowEnabled) {
|
||||
ItemStack snowball = new ItemStack(Material.SNOWBALL, 1);
|
||||
ItemMeta snowballMeta = snowball.getItemMeta();
|
||||
snowballMeta.setDisplayName("Glow Powerup");
|
||||
List<String> snowballLore = new ArrayList<String>();
|
||||
snowballLore.add("Throw to make all seekers glow");
|
||||
snowballLore.add("Last 30s, all hiders can see it");
|
||||
snowballLore.add("Time stacks on multi use");
|
||||
snowballMeta.setLore(snowballLore);
|
||||
snowball.setItemMeta(snowballMeta);
|
||||
player.getInventory().addItem(snowball);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
package net.tylermurphy.hideAndSeek.world;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
|
||||
public class VoidGenerator extends ChunkGenerator{
|
||||
|
||||
@Override
|
||||
public List<BlockPopulator> getDefaultPopulators(World world) {
|
||||
return Collections.<BlockPopulator>emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateNoise() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateSurface() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateBedrock() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateCaves() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateDecorations() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateMobs() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateStructures() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canSpawn(World world, int x, int z) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
129
src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java
Normal file
129
src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java
Normal file
|
@ -0,0 +1,129 @@
|
|||
package net.tylermurphy.hideAndSeek.world;
|
||||
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||
import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.WorldCreator;
|
||||
|
||||
import net.tylermurphy.hideAndSeek.Main;
|
||||
|
||||
public class WorldLoader {
|
||||
|
||||
String mapname;
|
||||
String savename;
|
||||
|
||||
public WorldLoader(String mapname) {
|
||||
this.mapname = mapname;
|
||||
this.savename = "hideandseek_"+mapname;
|
||||
}
|
||||
|
||||
public void unloadMap(){
|
||||
if(Bukkit.getServer().unloadWorld(Bukkit.getServer().getWorld(savename), false)){
|
||||
Main.plugin.getLogger().info("Successfully unloaded " + savename);
|
||||
}else{
|
||||
Main.plugin.getLogger().severe("COULD NOT UNLOAD " + savename);
|
||||
}
|
||||
}
|
||||
|
||||
public void loadMap(){
|
||||
Bukkit.getServer().createWorld(new WorldCreator(savename).generator(new VoidGenerator()));
|
||||
Bukkit.getServer().getWorld(savename).setAutoSave(false);
|
||||
}
|
||||
|
||||
public void rollback(){
|
||||
unloadMap();
|
||||
loadMap();
|
||||
}
|
||||
|
||||
public String save() {
|
||||
File current = new File(Main.root+File.separator+mapname);
|
||||
if(current.exists()) {
|
||||
try {
|
||||
File destenation = new File(Main.root+File.separator+savename);
|
||||
File temp_destenation = new File(Main.root+File.separator+"temp_"+savename);
|
||||
copyFileFolder("region",true);
|
||||
copyFileFolder("entities",true);
|
||||
copyFileFolder("datapacks",false);
|
||||
File srcFile = new File(current, "level.dat");
|
||||
File destFile = new File(temp_destenation, "level.dat");
|
||||
copyFile(srcFile,destFile);
|
||||
if(destenation.exists()) {
|
||||
deleteDirectory(destenation);
|
||||
destenation.mkdir();
|
||||
}
|
||||
temp_destenation.renameTo(destenation);
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
return errorPrefix + message("COMMAND_ERROR");
|
||||
}
|
||||
return messagePrefix + message("MAPSAVE_END");
|
||||
} else {
|
||||
return errorPrefix + message("MAPSAVE_ERROR");
|
||||
}
|
||||
}
|
||||
|
||||
private void copyFileFolder(String name, Boolean isMca) throws IOException {
|
||||
File region = new File(Main.root+File.separator+mapname+File.separator+name);
|
||||
File temp = new File(Main.root+File.separator+"temp_"+savename+File.separator+name);
|
||||
if(region.exists() && region.isDirectory()) {
|
||||
if(!temp.exists())
|
||||
if(!temp.mkdirs())
|
||||
throw new IOException("Couldn't create region directory!");
|
||||
String files[] = region.list();
|
||||
for (String file : files) {
|
||||
|
||||
if(isMca) {
|
||||
int minX = (int)Math.floor(saveMinX / 32.0);
|
||||
int minZ = (int)Math.floor(saveMinZ / 32.0);
|
||||
int maxX = (int)Math.floor(saveMaxX / 32.0);
|
||||
int maxZ = (int)Math.floor(saveMaxZ / 32.0);
|
||||
|
||||
String[] parts = file.split(".");
|
||||
if(parts.length > 1) {
|
||||
Main.plugin.getLogger().info(file);
|
||||
if( Integer.parseInt(parts[1]) < minX || Integer.parseInt(parts[1]) > maxX ||Integer.parseInt(parts[2]) < minZ || Integer.parseInt(parts[2]) > maxZ )
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
File srcFile = new File(region, file);
|
||||
if(srcFile.isDirectory()) {
|
||||
copyFileFolder(name+File.separator+file, false);
|
||||
} else {
|
||||
File destFile = new File(temp, file);
|
||||
copyFile(srcFile, destFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void copyFile(File source, File target) throws IOException {
|
||||
InputStream in = new FileInputStream(source);
|
||||
OutputStream out = new FileOutputStream(target);
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = in.read(buffer)) > 0)
|
||||
out.write(buffer, 0, length);
|
||||
in.close();
|
||||
out.close();
|
||||
}
|
||||
|
||||
private boolean deleteDirectory(File directoryToBeDeleted) {
|
||||
File[] allContents = directoryToBeDeleted.listFiles();
|
||||
if (allContents != null) {
|
||||
for (File file : allContents) {
|
||||
deleteDirectory(file);
|
||||
}
|
||||
}
|
||||
return directoryToBeDeleted.delete();
|
||||
}
|
||||
|
||||
}
|
|
@ -10,14 +10,98 @@ announceMessagesToNonPlayers: true
|
|||
# default: false
|
||||
nametagsVisible: false
|
||||
|
||||
# Require bukkit permessions though a plugin to run commands, recomended on large servers
|
||||
# Require bukkit permissions though a plugin to run commands, recommended on large servers
|
||||
# default: true
|
||||
permissionsRequired: true
|
||||
|
||||
# Minimum ammount of players to start the game. Cannot go lower than 2.
|
||||
# Minimum amount of players to start the game. Cannot go lower than 2.
|
||||
# default: 2
|
||||
minPlayers: 2
|
||||
|
||||
# This plugin by default functions as not tag to catch Hiders, but to pvp. All players are given weapons,
|
||||
# and seekers slightly better weapons (this can be changed in items.yml). If you want, you can disable this
|
||||
# entire pvp functionality, and make Hiders get found on a single hit. Hiders would also not be able to fight
|
||||
# back against Seekers if disabled.
|
||||
# default: true
|
||||
pvp: true
|
||||
|
||||
# Players that join the server will automatically be placed into the lobby.
|
||||
# default: false
|
||||
autoJoin: false
|
||||
|
||||
# (When autoJoin is false), when players join the world containing the lobby, they are automatically teleported
|
||||
# to the designated exit position so that they possibly don't spawn in the lobby while not in the queue. Anyone
|
||||
# who ever joins in the game world (the duplicated world where the game is played) will always be teleported
|
||||
# out regardless.
|
||||
# default: false
|
||||
teleportToExit: false
|
||||
|
||||
countdown:
|
||||
|
||||
|
||||
# The worldborder closes every interval, which is evey [delay] in minutes.
|
||||
# Thw worldborder starts at [size], and decreases 100 blocks every interval.
|
||||
# x & z are the center location. [enabled] is whenever the border is enabled.
|
||||
# You can choose if Hiders are warned 30 seconds before the border moves.
|
||||
worldBorder:
|
||||
x: 0
|
||||
z: 0
|
||||
delay: 10
|
||||
size: 500
|
||||
warn: true
|
||||
enabled: false
|
||||
|
||||
# The taunt will activate every delay set in seconds. It will spawn a firework
|
||||
# on a random Hider to alert a Seeker where someone may be. You can choose
|
||||
# to publicly show the taunt countdown, and have the taunt run with only
|
||||
# one Hider left. Taunt delay must at least be 60s.
|
||||
taunt:
|
||||
delay: 360
|
||||
whenLastPerson: false
|
||||
showCountdown: true
|
||||
enabled: true
|
||||
|
||||
# The glow powerup allows all Hiders to see where every Seeker is. It last for
|
||||
# the amount of time set in seconds. You can allow it to be stackable, meaning
|
||||
# when multiple Hiders use the powerup at the same time, it stacks the times, or
|
||||
# just overwrites. Only Hiders can see that the Seekers are glowing. Delay must
|
||||
# be longer than 1s.
|
||||
glow:
|
||||
time: 30
|
||||
stackable: true
|
||||
enabled: true
|
||||
|
||||
# The message prefixes displayed before messages. The message contents themselves
|
||||
# can be changed in localization.yml.
|
||||
prefix:
|
||||
default: '&9Hide and Seek > &f'
|
||||
error: '&cError > &f'
|
||||
taunt: '&eTaunt > &f'
|
||||
border: '&cWorld Border > &f'
|
||||
abort: '&cAbort > &f'
|
||||
gameover: '&aGame Over > &f'
|
||||
warning: '&cWarning > &f'
|
||||
|
||||
# Changes the default plugin language. Currently, Supported localizations are:
|
||||
# en-US (United States)
|
||||
# de-DE (German)
|
||||
local: "en-US"
|
||||
|
||||
# ---------------------------------------------------------- #
|
||||
# ONLY EDIT BEYOND THIS POINT IF YOU KNOW WHAT YOU ARE DOING #
|
||||
# ---------------------------------------------------------- #
|
||||
|
||||
# The 2 coordinate bounds that will contain your hideAndSeek map. Its recommended
|
||||
# that you use /hs setbounds for this, and not edit this directly, as breaking
|
||||
# this section will completely break the entire plugin when you run /hs mapsave.
|
||||
bounds:
|
||||
min:
|
||||
x: 0
|
||||
z: 0
|
||||
max:
|
||||
x: 0
|
||||
z: 0
|
||||
|
||||
# Spawn locations where players are teleported
|
||||
spawns:
|
||||
# Location where players are teleported into the game (/hs start)
|
||||
|
@ -38,24 +122,3 @@ spawns:
|
|||
y: 0
|
||||
z: 0
|
||||
world: world
|
||||
|
||||
# The worldborder closes every interval, whish is evey [delay] in minutes.
|
||||
# Thw worldborder stharts at [size], and decreaces 100 blocks every interval.
|
||||
# x & z are the center location. [enabled] is whenever the border is enabled.
|
||||
worldBorder:
|
||||
x: 0
|
||||
z: 0
|
||||
delay: 10
|
||||
size: 500
|
||||
enabled: false
|
||||
|
||||
# The message prefixes displayed before messages. The message contents themselvs
|
||||
# can be changed in localization.yml.
|
||||
prefix:
|
||||
default: '&9Hide and Seek > &f'
|
||||
error: '&cError > &f'
|
||||
taunt: '&eTaunt > &f'
|
||||
border: '&cWorld Border > &f'
|
||||
abort: '&cAbort > &f'
|
||||
gameover: '&aGame Over > &f'
|
||||
warning: '&cWarning > &f'
|
87
src/main/resources/items.yml
Normal file
87
src/main/resources/items.yml
Normal file
|
@ -0,0 +1,87 @@
|
|||
# For materials, look at https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html
|
||||
# For potion types, look at https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/potion/PotionType.html
|
||||
# For effects, look at https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/potion/PotionEffectType.html
|
||||
# If pvp is disabled in config.yml, only effects will be given to players.
|
||||
items:
|
||||
seeker:
|
||||
'1':
|
||||
material: DIAMOND_SWORD
|
||||
amount: 1
|
||||
enchantments:
|
||||
sharpness: 1
|
||||
name: 'Seeker Sword'
|
||||
unbreakable: true
|
||||
lore:
|
||||
- 'This is the seeker sword'
|
||||
'2':
|
||||
material: STICK
|
||||
amount: 1
|
||||
enchantments:
|
||||
knockback: 3
|
||||
name: 'Wacky Stick'
|
||||
lore:
|
||||
- 'It will launch people very far'
|
||||
- 'Use wisely!'
|
||||
hider:
|
||||
'1':
|
||||
material: STONE_SWORD
|
||||
amount: 1
|
||||
enchantments:
|
||||
sharpness: 2
|
||||
name: 'Hider Sword'
|
||||
unbreakable: true
|
||||
lore:
|
||||
- 'This is the hider sword'
|
||||
'2':
|
||||
material: SPLASH_POTION
|
||||
amount: 1
|
||||
type: REGEN
|
||||
'3':
|
||||
material: POTION
|
||||
amount: 2
|
||||
type: INSTANT_HEAL
|
||||
effects:
|
||||
seeker:
|
||||
'1':
|
||||
type: SPEED
|
||||
duration: 1000000
|
||||
amplifier: 2
|
||||
ambient: false
|
||||
particles: false
|
||||
'2':
|
||||
type: JUMP
|
||||
duration: 1000000
|
||||
amplifier: 1
|
||||
ambient: false
|
||||
particles: false
|
||||
'3':
|
||||
type: SLOW_FALLING
|
||||
duration: 1000000
|
||||
amplifier: 1
|
||||
ambient: false
|
||||
particles: false
|
||||
'4':
|
||||
type: WATER_BREATHING
|
||||
duration: 1000000
|
||||
amplifier: 10
|
||||
ambient: false
|
||||
particles: false
|
||||
'5':
|
||||
type: DOLPHINS_GRACE
|
||||
duration: 1000000
|
||||
amplifier: 1
|
||||
ambient: false
|
||||
particles: false
|
||||
hider:
|
||||
'1':
|
||||
type: WATER_BREATHING
|
||||
duration: 1000000
|
||||
amplifier: 1
|
||||
ambient: false
|
||||
particles: false
|
||||
'2':
|
||||
type: DOLPHINS_GRACE
|
||||
duration: 1000000
|
||||
amplifier: 1
|
||||
ambient: false
|
||||
particles: false
|
60
src/main/resources/lang/localization_de-DE.yml
Normal file
60
src/main/resources/lang/localization_de-DE.yml
Normal file
|
@ -0,0 +1,60 @@
|
|||
#============================================================#
|
||||
# +--------------------------------------------------------+ #
|
||||
# | Kenshins Hide and Seek | #
|
||||
# | German language file | #
|
||||
# | by HerrMelodious | #
|
||||
# +--------------------------------------------------------+ #
|
||||
#============================================================#
|
||||
|
||||
Localization:
|
||||
COMMAND_PLAYER_ONLY: "Dieser Befehl kann nur als Spieler ausgeführt werden."
|
||||
COMMAND_NOT_ALLOWED: "Es ist dir nicht gestattet diesen Befehl auszuführen."
|
||||
COMMAND_ERROR: "Ein unbekannter Fehler ist aufgetreten."
|
||||
GAME_PLAYER_DEATH: "&c{PLAYER}&f ist gestorben."
|
||||
GAME_PLAYER_FOUND: "&e{PLAYER}&f wurde gefunden und ist nun ein Seeker."
|
||||
GAME_PLAYER_FOUND_BY: "&e{PLAYER}&f wurde von &c{PLAYER}&f gefunden und ist nun ein Seeker."
|
||||
GAME_GAMEOVER_HIDERS_FOUND: "Alle Hider wurden gefunden."
|
||||
GAME_GAMEOVER_SEEKERS_QUIT: "All Seeker haben das Spiel verlassen."
|
||||
GAME_GAMEOVER_TIME: "Seekers haben keine Spielzeit mehr. Die Hiders haben gewonnen!"
|
||||
GAME_SETUP: "Spiel wurde noch nicht eingerichtet. Führe &c/hs setup&f aus, um die Einrichtungsschritte zu sehen."
|
||||
GAME_INGAME: "Du bist bereits in der Lobby oder im Spiel."
|
||||
GAME_NOT_INGAME: "Du bist weder in einer Lobby noch in einem Spiel."
|
||||
GAME_INPROGRESS: "Es läuft bereits ein Spiel."
|
||||
GAME_NOT_INPROGRESS: "Es läuft kein Spiel."
|
||||
GAME_JOIN: "{PLAYER} hat die Hide and Seek Lobby betreten."
|
||||
GAME_JOIN_SPECTATOR: "Du bist als Beobachter einem laufenden Spiel beigetreten."
|
||||
GAME_LEAVE: "{PLAYER} hat die Hide and Seek Lobby verlassen."
|
||||
CONFIG_RELOAD: "Konfiguration neu geladen."
|
||||
MAPSAVE_INPROGRESS: "Weltkarte wird aktuell gespeichert. Versuche es später nochmal."
|
||||
MAPSAVE_START: "Starte Speichervorgang der Weltkarte"
|
||||
MAPSAVE_WARNING: "All commands will be disabled whenthe save is in progress. Do not turn off the server."
|
||||
MAPSAVE_END: "Speichervorgang abgeschlossen."
|
||||
MAPSAVE_ERROR: "Aktuelle Weltkarte konnte nicht gefunden werden."
|
||||
WORLDBORDER_DISABLE: "World Border ausgeschaltet."
|
||||
WORLDBORDER_INVALID_INPUT: "Ungültiger Wert: {AMOUNT}"
|
||||
WORLDBORDER_MIN_SIZE: "World Border darf nicht geringer als 100 Blöcke sein."
|
||||
WORLDBORDER_POSITION: "Spawn muss mindestens 100 Blöcke vom Zentrum der World Border entfernt sein."
|
||||
WORLDBORDER_ENABLE: "Setze World Border zentriert von dieser Position aus. Größe: {AMOUNT}. Verzögerung: {AMOUNT}."
|
||||
WORLDBORDER_DECREASING: "World Norder schrumpoft 100 Blöcke über die nächsten 30 Sekunden!"
|
||||
TAUNTED: "$c$oOh nein! Du wurdest geärgert!"
|
||||
TAUNT: "Ein zufälliger Hider wird in den nächsten 30 Sekunden geärgert."
|
||||
TAUNT_ACTIVATE: "Ärgern wurde aktiviert"
|
||||
ERROR_GAME_SPAWN: "Bitte erst die Spawn-Position für das Spiel festlegen."
|
||||
SETUP: "&f&lFühre die folgenden Schritte zur Einrichtung aus:"
|
||||
SETUP_GAME: "&c&l- &fTeleport-Position für den Spielbeginn festlegen mit /hs setspawn"
|
||||
SETUP_LOBBY: "&c&l- &fTeleport-Position für die Lobby festlegen mit /hs setlobby"
|
||||
SETUP_EXIT: "&c&l- &fTeleport-Position für das Spielende festlegen mit /hs setexit"
|
||||
SETUP_SAVEMAP: "&c&l- &fHide and Seek Weltkarte speichern mit /hs savemap (nach /hs setspawn)"
|
||||
SETUP_COMPLETE: "Alles eingerichtet! Hide and Seek ist spielbereit."
|
||||
GAME_SPAWN: "Teleport-Position für Spielbeginn festgelegt"
|
||||
LOBBY_SPAWN: "Teleport-Position für Lobby festgelegt"
|
||||
EXIT_SPAWN: "Teleport-Position für Spielende festgelegt"
|
||||
START_MIN_PLAYERS: "Um das Spiel zu starten benötigst du mindestens {AMOUNT} Spieler."
|
||||
START_INVALID_NAME: "Ungültiger Spieler: {PLAYER}."
|
||||
START_COUNTDOWN: "Die Hider haben {AMOUNT} Sekunden Zeit sich zu verstecken!"
|
||||
START: "Los, Seeker! Es ist Zeit, die Hider zu finden."
|
||||
STOP: "Das Spiel wurde gestoppt."
|
||||
HIDERS_SUBTITLE: "Verstecke dich gut vor den Seekern!"
|
||||
SEEKERS_SUBTITLE: "Finde alle Hider!"
|
||||
|
||||
type: "de-DE"
|
64
src/main/resources/lang/localization_en-US.yml
Normal file
64
src/main/resources/lang/localization_en-US.yml
Normal file
|
@ -0,0 +1,64 @@
|
|||
#============================================================#
|
||||
# +--------------------------------------------------------+ #
|
||||
# | Kenshins Hide and Seek | #
|
||||
# | English language file | #
|
||||
# | by KenshinEto | #
|
||||
# +--------------------------------------------------------+ #
|
||||
#============================================================#
|
||||
|
||||
Localization:
|
||||
COMMAND_PLAYER_ONLY: "This command can only be run as a player."
|
||||
COMMAND_NOT_ALLOWED: "You are not allowed to run this command."
|
||||
COMMAND_ERROR: "An internal error has occurred."
|
||||
GAME_PLAYER_DEATH: "&c{PLAYER}&f was killed."
|
||||
GAME_PLAYER_FOUND: "&e{PLAYER}&f was found and became a seeker."
|
||||
GAME_PLAYER_FOUND_BY: "&e{PLAYER}&f was found by &c{PLAYER}&f and became a seeker."
|
||||
GAME_GAMEOVER_HIDERS_FOUND: "All hiders have been found."
|
||||
GAME_GAMEOVER_SEEKERS_QUIT: "All seekers have quit."
|
||||
GAME_GAMEOVER_TIME: "Seekers ran out of time. Hiders win!"
|
||||
GAME_SETUP: "Game is not setup. Run /hs setup to see what you need to do."
|
||||
GAME_INGAME: "You are already in the lobby/game."
|
||||
GAME_NOT_INGAME: "You are not in a lobby/game."
|
||||
GAME_INPROGRESS: "There is currently a game in progress."
|
||||
GAME_NOT_INPROGRESS: "There is no game in progress."
|
||||
GAME_JOIN: "{PLAYER} has joined the HideAndSeek lobby."
|
||||
GAME_JOIN_SPECTATOR: "You have joined mid game and are now a spectator."
|
||||
GAME_LEAVE: "{PLAYER} has left the HideAndSeek lobby."
|
||||
CONFIG_RELOAD: "Reloaded the config."
|
||||
MAPSAVE_INPROGRESS: "Map save is currently in progress. Try again later."
|
||||
MAPSAVE_START: "Starting map save."
|
||||
MAPSAVE_WARNING: "All commands will be disabled when the save is in progress. Do not turn off the server."
|
||||
MAPSAVE_END: "Map save complete."
|
||||
MAPSAVE_ERROR: "Couldn't find current map."
|
||||
WORLDBORDER_DISABLE: "Disabled world border."
|
||||
WORLDBORDER_INVALID_INPUT: "Invalid integer {AMOUNT}."
|
||||
WORLDBORDER_MIN_SIZE: "World border cannot be smaller than 100 blocks."
|
||||
WORLDBORDER_POSITION: "Spawn position must be 100 from world border center."
|
||||
WORLDBORDER_ENABLE: "Set border center to current location, size to {AMOUNT}, and delay to {AMOUNT}."
|
||||
WORLDBORDER_DECREASING: "World border decreasing by 100 blocks over the next 30s."
|
||||
TAUNTED: "$c$oOh no! You have been chosen to be taunted."
|
||||
TAUNT: "A random hider will be taunted in the next 30s."
|
||||
TAUNT_ACTIVATE: "Taunt has been activated."
|
||||
ERROR_GAME_SPAWN: "Please set game spawn location first"
|
||||
SETUP: "&f&lThe following is needed for setup..."
|
||||
SETUP_GAME: "&c&l- &fGame spawn isn't set, /hs setspawn"
|
||||
SETUP_LOBBY: "&c&l- &fLobby spawn isn't set, /hs setlobby"
|
||||
SETUP_EXIT: "&c&l- &fQuit/exit teleport location isn't set, /hs setexit"
|
||||
SETUP_SAVEMAP: "&c&l- &fHide and seek map isn't saved, /hs savemap (after /hs setspawn)"
|
||||
SETUP_BOUNDS: "&c&l- &fPlease set game bounds in 2 opposite corners of the game map, /hs setbounds"
|
||||
SETUP_COMPLETE: "Everything is setup and ready to go!"
|
||||
GAME_SPAWN: "Set game spawn position to current location"
|
||||
LOBBY_SPAWN: "Set lobby position to current location"
|
||||
EXIT_SPAWN: "Set exit position to current location"
|
||||
START_MIN_PLAYERS: "You must have at least {AMOUNT} players to start."
|
||||
START_INVALID_NAME: "Invalid player: {PLAYER}."
|
||||
START_COUNTDOWN: "Hiders have {AMOUNT} seconds to hide!"
|
||||
START: "Attention SEEKERS, its time to fin the hiders!"
|
||||
STOP: "Game has been force stopped."
|
||||
HIDERS_SUBTITLE: "Hide away from the seekers"
|
||||
SEEKERS_SUBTITLE: "Eliminate all hiders"
|
||||
BOUNDS_WRONG_WORLD: "Please run this command in the game world."
|
||||
BOUNDS: "Successfully set bounds at this position ({AMOUNT}/2)."
|
||||
NOT_AT_ZERO: "Please do not set at a location containing a coordinate at 0."
|
||||
|
||||
type: "en-US"
|
|
@ -1,7 +1,7 @@
|
|||
Localization:
|
||||
COMMAND_PLAYER_ONLY: "This command can only be run as a player."
|
||||
COMMAND_NOT_ALLOWED: "You are not allowed to run this command."
|
||||
COMMAND_ERROR: "An internal error has occoured."
|
||||
COMMAND_ERROR: "An internal error has occurred."
|
||||
GAME_PLAYER_DEATH: "&c{PLAYER}&f was killed."
|
||||
GAME_PLAYER_FOUND: "&e{PLAYER}&f was found and became a seeker."
|
||||
GAME_PLAYER_FOUND_BY: "&e{PLAYER}&f was found by &c{PLAYER}&f and became a seeker."
|
||||
|
@ -11,32 +11,33 @@ Localization:
|
|||
GAME_SETUP: "Game is not setup. Run /hs setup to see what you need to do."
|
||||
GAME_INGAME: "You are already in the lobby/game."
|
||||
GAME_NOT_INGAME: "You are not in a lobby/game."
|
||||
GAME_INPROGRESS: "There is currently a game inprogress."
|
||||
GAME_NOT_INPROGRESS: "There is no game inprogress."
|
||||
GAME_INPROGRESS: "There is currently a game in progress."
|
||||
GAME_NOT_INPROGRESS: "There is no game in progress."
|
||||
GAME_JOIN: "{PLAYER} has joined the HideAndSeek lobby."
|
||||
GAME_JOIN_SPECTATOR: "You have joined midgame and are now a spectator."
|
||||
GAME_JOIN_SPECTATOR: "You have joined mid game and are now a spectator."
|
||||
GAME_LEAVE: "{PLAYER} has left the HideAndSeek lobby."
|
||||
CONFIG_RELOAD: "Reloaded the config."
|
||||
MAPSAVE_INPROGRESS: "Map save is currently in progress. Try again later."
|
||||
MAPSAVE_START: "Starting map save."
|
||||
MAPSAVE_WARNING: "All commands will be disabled whenthe save is in progress. Do not turn off the server."
|
||||
MAPSAVE_WARNING: "All commands will be disabled when the save is in progress. Do not turn off the server."
|
||||
MAPSAVE_END: "Map save complete."
|
||||
MAPSAVE_ERROR: "Coudnt find current map."
|
||||
WORLDBORDER_DISABLE: "Disabled worldborder."
|
||||
MAPSAVE_ERROR: "Couldn't find current map."
|
||||
WORLDBORDER_DISABLE: "Disabled world border."
|
||||
WORLDBORDER_INVALID_INPUT: "Invalid integer {AMOUNT}."
|
||||
WORLDBORDER_MIN_SIZE: "Worldborder cannot be smaller than 100 blocks."
|
||||
WORLDBORDER_POSITION: "Spawn position must be 100 from worldborder center."
|
||||
WORLDBORDER_MIN_SIZE: "World border cannot be smaller than 100 blocks."
|
||||
WORLDBORDER_POSITION: "Spawn position must be 100 from world border center."
|
||||
WORLDBORDER_ENABLE: "Set border center to current location, size to {AMOUNT}, and delay to {AMOUNT}."
|
||||
WORLDBORDER_DECREASING: "Worlderborder decreasing by 100 blocks over the next 30s."
|
||||
WORLDBORDER_DECREASING: "World border decreasing by 100 blocks over the next 30s."
|
||||
TAUNTED: "$c$oOh no! You have been chosen to be taunted."
|
||||
TAUNT: "A random hider will be taunted in the next 30s."
|
||||
TAUNT_ACTIVATE: "Taunt has been activated."
|
||||
ERROR_GAME_SPAWN: "Please set game spawn location first"
|
||||
SETUP: "&f&lThe following is needed for setup..."
|
||||
SETUP_GAME: "&c&l- &fGame spawn isnt set, /hs setspawn"
|
||||
SETUP_LOBBY: "&c&l- &fLobby spawn isnt set, /hs setlobby"
|
||||
SETUP_EXIT: "&c&l- &fQuit/exit teleport location isnt set, /hs setexit"
|
||||
SETUP_SAVEMAP: "&c&l- &fHide and seek map isnt saved, /hs savemap (after /hs setspawn)"
|
||||
SETUP_GAME: "&c&l- &fGame spawn isn't set, /hs setspawn"
|
||||
SETUP_LOBBY: "&c&l- &fLobby spawn isn't set, /hs setlobby"
|
||||
SETUP_EXIT: "&c&l- &fQuit/exit teleport location isn't set, /hs setexit"
|
||||
SETUP_SAVEMAP: "&c&l- &fHide and seek map isn't saved, /hs savemap (after /hs setspawn)"
|
||||
SETUP_BOUNDS: "&c&l- &fPlease set game bounds in 2 opposite corners of the game map, /hs setbounds"
|
||||
SETUP_COMPLETE: "Everything is setup and ready to go!"
|
||||
GAME_SPAWN: "Set game spawn position to current location"
|
||||
LOBBY_SPAWN: "Set lobby position to current location"
|
||||
|
@ -44,7 +45,14 @@ Localization:
|
|||
START_MIN_PLAYERS: "You must have at least {AMOUNT} players to start."
|
||||
START_INVALID_NAME: "Invalid player: {PLAYER}."
|
||||
START_COUNTDOWN: "Hiders have {AMOUNT} seconds to hide!"
|
||||
START: "Attetion SEEKERS, its time to fin the hiders!"
|
||||
STOP: "Game has been force stopped"
|
||||
START: "Attention SEEKERS, its time to fin the hiders!"
|
||||
STOP: "Game has been force stopped."
|
||||
HIDERS_SUBTITLE: "Hide away from the seekers"
|
||||
SEEKERS_SUBTITLE: "Eliminate all hiders"
|
||||
BOUNDS_WRONG_WORLD: "Please run this command in the game world."
|
||||
BOUNDS: "Successfully set bounds at this position ({AMOUNT}/2)."
|
||||
NOT_AT_ZERO: "Please do not set at a location containing a coordinate at 0."
|
||||
|
||||
# DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE
|
||||
version: 2
|
||||
type: "en-US"
|
|
@ -1,6 +1,6 @@
|
|||
name: HideAndSeek
|
||||
main: net.tylermurphy.hideAndSeek.Main
|
||||
version: 1.3.0
|
||||
version: 1.3.1
|
||||
author: KenshinEto
|
||||
load: STARTUP
|
||||
api-version: 1.17
|
||||
|
@ -21,6 +21,7 @@ permissions:
|
|||
hideandseek.setspawn: true
|
||||
hideandseek.setlobby: true
|
||||
hideandseek.setexit: true
|
||||
hideadnseek.setbounds: true
|
||||
hideandseek.setup: true
|
||||
hideandseek.start: true
|
||||
hideandseek.stop: true
|
||||
|
@ -48,6 +49,9 @@ permissions:
|
|||
hideandseek.setexit:
|
||||
description: Allows you to set the game exit point
|
||||
default: op
|
||||
hideandseek.setbounds:
|
||||
description: Allows you to set bounds for the game map
|
||||
default: op
|
||||
hideandseek.setup:
|
||||
description: Allows you to see what needs to be setup for the plugin to function
|
||||
default: op
|
||||
|
|
Loading…
Reference in a new issue