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/
|
bin/
|
||||||
target/
|
target/
|
||||||
.git/
|
.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>
|
<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>
|
<groupId>net.tylermurphy</groupId>
|
||||||
<artifactId>HideAndSeek</artifactId>
|
<artifactId>HideAndSeek</artifactId>
|
||||||
<version>1.3.0</version>
|
<version>1.3.1</version>
|
||||||
<name>Hide and Seek Plugin</name>
|
<name>Hide and Seek Plugin</name>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>2.3.2</version>
|
<version>2.3.2</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.8</source>
|
<source>1.8</source>
|
||||||
<target>1.8</target>
|
<target>1.8</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
|
||||||
<id>spigot-repo</id>
|
|
||||||
<url>https://hub.spigotmc.org/nexus/content/repositories/public/</url>
|
|
||||||
</repository>
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>dmulloy2-repo</id>
|
<id>spigot-repo</id>
|
||||||
<url>https://repo.dmulloy2.net/repository/public/</url>
|
<url>https://hub.spigotmc.org/nexus/content/repositories/public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>dmulloy2-repo</id>
|
||||||
|
<url>https://repo.dmulloy2.net/repository/public/</url>
|
||||||
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.17.1-R0.1-SNAPSHOT</version>
|
<version>1.17.1-R0.1-SNAPSHOT</version>
|
||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.comphenix.protocol</groupId>
|
<groupId>com.comphenix.protocol</groupId>
|
||||||
<artifactId>ProtocolLib</artifactId>
|
<artifactId>ProtocolLib</artifactId>
|
||||||
<version>4.7.0</version>
|
<version>4.7.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
|
@ -1,5 +1,7 @@
|
||||||
package net.tylermurphy.hideAndSeek;
|
package net.tylermurphy.hideAndSeek;
|
||||||
|
|
||||||
|
import static net.tylermurphy.hideAndSeek.configuration.Config.spawnWorld;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -20,10 +22,12 @@ import net.tylermurphy.hideAndSeek.bukkit.TabCompleter;
|
||||||
import net.tylermurphy.hideAndSeek.bukkit.Tick;
|
import net.tylermurphy.hideAndSeek.bukkit.Tick;
|
||||||
import net.tylermurphy.hideAndSeek.configuration.Config;
|
import net.tylermurphy.hideAndSeek.configuration.Config;
|
||||||
import net.tylermurphy.hideAndSeek.configuration.Localization;
|
import net.tylermurphy.hideAndSeek.configuration.Localization;
|
||||||
|
import net.tylermurphy.hideAndSeek.configuration.Items;
|
||||||
import net.tylermurphy.hideAndSeek.events.Glow;
|
import net.tylermurphy.hideAndSeek.events.Glow;
|
||||||
import net.tylermurphy.hideAndSeek.events.Taunt;
|
import net.tylermurphy.hideAndSeek.events.Taunt;
|
||||||
import net.tylermurphy.hideAndSeek.events.Worldborder;
|
import net.tylermurphy.hideAndSeek.events.Worldborder;
|
||||||
import net.tylermurphy.hideAndSeek.util.Board;
|
import net.tylermurphy.hideAndSeek.util.Board;
|
||||||
|
import net.tylermurphy.hideAndSeek.world.WorldLoader;
|
||||||
|
|
||||||
public class Main extends JavaPlugin implements Listener {
|
public class Main extends JavaPlugin implements Listener {
|
||||||
|
|
||||||
|
@ -36,6 +40,8 @@ public class Main extends JavaPlugin implements Listener {
|
||||||
|
|
||||||
public Board board;
|
public Board board;
|
||||||
|
|
||||||
|
public WorldLoader worldLoader;
|
||||||
|
|
||||||
public Map<String,Player> playerList = new HashMap<String,Player>();
|
public Map<String,Player> playerList = new HashMap<String,Player>();
|
||||||
|
|
||||||
public String status = "Standby";
|
public String status = "Standby";
|
||||||
|
@ -56,10 +62,12 @@ public class Main extends JavaPlugin implements Listener {
|
||||||
data = this.getDataFolder();
|
data = this.getDataFolder();
|
||||||
|
|
||||||
// Init Configuration
|
// Init Configuration
|
||||||
Main.plugin.saveResource("localization.yml", false);
|
|
||||||
Main.plugin.saveResource("config.yml", false);
|
|
||||||
Config.loadConfig();
|
Config.loadConfig();
|
||||||
Localization.init();
|
Localization.loadLocalization();
|
||||||
|
Items.loadItems();
|
||||||
|
|
||||||
|
// Create World Loader
|
||||||
|
worldLoader = new WorldLoader(spawnWorld);
|
||||||
|
|
||||||
// Register Commands
|
// Register Commands
|
||||||
CommandHandler.registerCommands();
|
CommandHandler.registerCommands();
|
||||||
|
@ -69,20 +77,19 @@ public class Main extends JavaPlugin implements Listener {
|
||||||
board.reload();
|
board.reload();
|
||||||
|
|
||||||
// Start Tick Timer
|
// Start Tick Timer
|
||||||
onTickTask = Bukkit.getServer().getScheduler().runTaskTimer(this, new Runnable(){
|
onTickTask = Bukkit.getServer().getScheduler().runTaskTimer(this, () -> {
|
||||||
public void run(){
|
try{
|
||||||
try{
|
Tick.onTick();
|
||||||
Tick.onTick();
|
} catch (Exception e) {
|
||||||
} catch (Exception e) {
|
e.printStackTrace();
|
||||||
e.printStackTrace();
|
}
|
||||||
}
|
},0,1);
|
||||||
}
|
|
||||||
},0,1);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
onTickTask.cancel();
|
if(onTickTask != null)
|
||||||
|
onTickTask.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||||
|
|
|
@ -35,6 +35,7 @@ public class CommandHandler {
|
||||||
registerCommand(new SetBorder());
|
registerCommand(new SetBorder());
|
||||||
registerCommand(new Reload());
|
registerCommand(new Reload());
|
||||||
registerCommand(new SaveMap());
|
registerCommand(new SaveMap());
|
||||||
|
registerCommand(new SetBounds());
|
||||||
registerCommand(new Join());
|
registerCommand(new Join());
|
||||||
registerCommand(new Leave());
|
registerCommand(new Leave());
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package net.tylermurphy.hideAndSeek.bukkit;
|
||||||
|
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||||
|
|
||||||
|
import net.tylermurphy.hideAndSeek.command.Join;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
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.Packet;
|
||||||
import net.tylermurphy.hideAndSeek.util.Util;
|
import net.tylermurphy.hideAndSeek.util.Util;
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
import net.tylermurphy.hideAndSeek.command.Start;
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
||||||
|
|
||||||
public class EventListener implements Listener {
|
public class EventListener implements Listener {
|
||||||
|
@ -37,60 +39,90 @@ public class EventListener implements Listener {
|
||||||
event.getPlayer().setLevel(0);
|
event.getPlayer().setLevel(0);
|
||||||
Main.plugin.board.remove(event.getPlayer());
|
Main.plugin.board.remove(event.getPlayer());
|
||||||
if(!Util.isSetup()) return;
|
if(!Util.isSetup()) return;
|
||||||
if(event.getPlayer().getWorld().getName().equals("hideandseek_"+spawnWorld) || event.getPlayer().getWorld().getName().equals(lobbyWorld)){
|
if(autoJoin){
|
||||||
event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
|
Join.join(event.getPlayer());
|
||||||
event.getPlayer().setGameMode(GameMode.ADVENTURE);
|
} 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
|
@EventHandler
|
||||||
public void onQuit(PlayerQuitEvent event) {
|
public void onQuit(PlayerQuitEvent event) {
|
||||||
Main.plugin.board.remove(event.getPlayer());
|
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
|
@EventHandler
|
||||||
public void onKick(PlayerKickEvent event) {
|
public void onKick(PlayerKickEvent event) {
|
||||||
Main.plugin.board.remove(event.getPlayer());
|
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)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onEntityDamage(EntityDamageEvent event) {
|
public void onEntityDamage(EntityDamageEvent event) {
|
||||||
if(event.getEntity() instanceof Player) {
|
try {
|
||||||
Player p = (Player) event.getEntity();
|
if (event.getEntity() instanceof Player) {
|
||||||
if(!Main.plugin.board.isPlayer(p)) return;
|
Player p = (Player) event.getEntity();
|
||||||
if(!Main.plugin.status.equals("Playing")) {
|
if (!Main.plugin.board.isPlayer(p)) return;
|
||||||
event.setCancelled(true);
|
if (!Main.plugin.status.equals("Playing")) {
|
||||||
return;
|
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());
|
|
||||||
}
|
}
|
||||||
if(Main.plugin.board.isHider(player)) {
|
Player attacker = null;
|
||||||
if(attacker == null) {
|
if (event instanceof EntityDamageByEntityEvent) {
|
||||||
Util.broadcastMessage(message("GAME_PLAYER_FOUND").addPlayer(event.getEntity()).toString());
|
Entity damager = ((EntityDamageByEntityEvent) event).getDamager();
|
||||||
} else {
|
if (damager instanceof Player) {
|
||||||
Util.broadcastMessage(message("GAME_PLAYER_FOUND_BY").addPlayer(event.getEntity()).addPlayer(attacker).toString());
|
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) {
|
public void onProjectile(ProjectileLaunchEvent event) {
|
||||||
if(!Main.plugin.status.equals("Playing")) return;
|
if(!Main.plugin.status.equals("Playing")) return;
|
||||||
if(event.getEntity() instanceof Snowball) {
|
if(event.getEntity() instanceof Snowball) {
|
||||||
|
if(!glowEnabled) return;
|
||||||
Snowball snowball = (Snowball) event.getEntity();
|
Snowball snowball = (Snowball) event.getEntity();
|
||||||
if(snowball.getShooter() instanceof Player) {
|
if(snowball.getShooter() instanceof Player) {
|
||||||
Player player = (Player) snowball.getShooter();
|
Player player = (Player) snowball.getShooter();
|
||||||
|
|
|
@ -40,9 +40,13 @@ public class Tick {
|
||||||
else tick = 1;
|
else tick = 1;
|
||||||
|
|
||||||
for(Player hider : Main.plugin.board.getHiders()) {
|
for(Player hider : Main.plugin.board.getHiders()) {
|
||||||
int distance = 100;
|
int distance = 100, temp = 100;
|
||||||
for(Player seeker : Main.plugin.board.getSeekers()) {
|
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) {
|
if(distance > temp) {
|
||||||
distance = temp;
|
distance = temp;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ public class About implements ICommand {
|
||||||
|
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(CommandSender sender, String[] args) {
|
||||||
sender.sendMessage(
|
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("%sAuthor: %s[KenshinEto]\n", ChatColor.GRAY, ChatColor.WHITE) +
|
||||||
String.format("%sHelp Command: %s/hs %shelp", ChatColor.GRAY, ChatColor.AQUA, ChatColor.WHITE)
|
String.format("%sHelp Command: %s/hs %shelp", ChatColor.GRAY, ChatColor.AQUA, ChatColor.WHITE)
|
||||||
);
|
);
|
||||||
|
|
|
@ -29,21 +29,28 @@ public class Join implements ICommand {
|
||||||
sender.sendMessage(errorPrefix + message("GAME_INGAME"));
|
sender.sendMessage(errorPrefix + message("GAME_INGAME"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
join(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void join(Player player){
|
||||||
if(Main.plugin.status.equals("Standby")) {
|
if(Main.plugin.status.equals("Standby")) {
|
||||||
|
player.getInventory().clear();
|
||||||
Main.plugin.board.addHider(player);
|
Main.plugin.board.addHider(player);
|
||||||
if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
|
if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
|
||||||
else Util.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.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
|
||||||
player.setGameMode(GameMode.ADVENTURE);
|
player.setGameMode(GameMode.ADVENTURE);
|
||||||
|
Main.plugin.board.createLobbyBoard(player);
|
||||||
Main.plugin.board.reloadLobbyBoards();
|
Main.plugin.board.reloadLobbyBoards();
|
||||||
} else {
|
} else {
|
||||||
Main.plugin.board.addSeeker(player);
|
Main.plugin.board.addSpectator(player);
|
||||||
player.sendMessage(messagePrefix + message("GAME_JOIN_SPECTATOR"));
|
player.sendMessage(messagePrefix + message("GAME_JOIN_SPECTATOR"));
|
||||||
player.setGameMode(GameMode.SPECTATOR);
|
player.setGameMode(GameMode.SPECTATOR);
|
||||||
|
Main.plugin.board.createGameBoard(player);
|
||||||
player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
|
player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
|
||||||
}
|
}
|
||||||
|
|
||||||
player.setFoodLevel(20);
|
player.setFoodLevel(20);
|
||||||
player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue());
|
player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue());
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class Leave implements ICommand {
|
||||||
Main.plugin.board.reloadLobbyBoards();
|
Main.plugin.board.reloadLobbyBoards();
|
||||||
} else {
|
} else {
|
||||||
Main.plugin.board.reloadGameBoards();
|
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 static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||||
|
|
||||||
|
import net.tylermurphy.hideAndSeek.configuration.Items;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
|
@ -19,7 +20,8 @@ public class Reload implements ICommand {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Config.loadConfig();
|
Config.loadConfig();
|
||||||
Localization.init();
|
Localization.loadLocalization();
|
||||||
|
Items.loadItems();
|
||||||
sender.sendMessage(messagePrefix + message("CONFIG_RELOAD"));
|
sender.sendMessage(messagePrefix + message("CONFIG_RELOAD"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,6 @@ package net.tylermurphy.hideAndSeek.command;
|
||||||
|
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
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.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
@ -36,66 +27,15 @@ public class SaveMap implements ICommand {
|
||||||
Bukkit.getServer().getWorld(spawnWorld).save();
|
Bukkit.getServer().getWorld(spawnWorld).save();
|
||||||
BukkitRunnable runnable = new BukkitRunnable() {
|
BukkitRunnable runnable = new BukkitRunnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
File current = new File(Main.root+File.separator+spawnWorld);
|
sender.sendMessage(
|
||||||
if(current.exists()) {
|
Main.plugin.worldLoader.save()
|
||||||
File temp_destenation = new File(Main.root+File.separator+"temp_hideandseek_"+spawnWorld);
|
);
|
||||||
File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
|
runningBackup = false;
|
||||||
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"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
runnable.runTaskAsynchronously(Main.plugin);
|
runnable.runTaskAsynchronously(Main.plugin);
|
||||||
runningBackup = true;
|
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() {
|
public String getLabel() {
|
||||||
return "saveMap";
|
return "saveMap";
|
||||||
|
|
|
@ -26,9 +26,7 @@ public class SetBorder implements ICommand {
|
||||||
}
|
}
|
||||||
if(args.length < 2) {
|
if(args.length < 2) {
|
||||||
worldborderEnabled = false;
|
worldborderEnabled = false;
|
||||||
Map<String, Object> temp = new HashMap<String,Object>();
|
addToConfig("worldBorder.enabled",false);
|
||||||
temp.put("enabled", false);
|
|
||||||
addToSection("worldBorder",temp);
|
|
||||||
saveConfig();
|
saveConfig();
|
||||||
sender.sendMessage(messagePrefix + message("WORLDBORDER_DISABLE"));
|
sender.sendMessage(messagePrefix + message("WORLDBORDER_DISABLE"));
|
||||||
Worldborder.resetWorldborder(spawnWorld);
|
Worldborder.resetWorldborder(spawnWorld);
|
||||||
|
@ -60,13 +58,11 @@ public class SetBorder implements ICommand {
|
||||||
worldborderSize = num;
|
worldborderSize = num;
|
||||||
worldborderDelay = delay;
|
worldborderDelay = delay;
|
||||||
worldborderEnabled = true;
|
worldborderEnabled = true;
|
||||||
Map<String, Object> temp = new HashMap<String,Object>();
|
addToConfig("worldBorder.x", worldborderPosition.getBlockX());
|
||||||
temp.put("x", worldborderPosition.getBlockX());
|
addToConfig("worldBorder.z", worldborderPosition.getBlockZ());
|
||||||
temp.put("z", worldborderPosition.getBlockZ());
|
addToConfig("worldBorder.delay", worldborderDelay);
|
||||||
temp.put("delay", worldborderDelay);
|
addToConfig("worldBorder.size", worldborderSize);
|
||||||
temp.put("size", worldborderSize);
|
addToConfig("worldBorder.enabled", true);
|
||||||
temp.put("enabled", true);
|
|
||||||
addToSection("worldBorder",temp);
|
|
||||||
sender.sendMessage(messagePrefix + message("WORLDBORDER_ENABLE").addAmount(num).addAmount(delay));
|
sender.sendMessage(messagePrefix + message("WORLDBORDER_ENABLE").addAmount(num).addAmount(delay));
|
||||||
saveConfig();
|
saveConfig();
|
||||||
Worldborder.resetWorldborder(spawnWorld);
|
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 class SetExitLocation implements ICommand {
|
||||||
|
|
||||||
public void execute(CommandSender sender, String[] args) {
|
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")) {
|
if(!Main.plugin.status.equals("Standby")) {
|
||||||
sender.sendMessage(errorPrefix + message("GAME_INPROGRESS"));
|
sender.sendMessage(errorPrefix + message("GAME_INPROGRESS"));
|
||||||
return;
|
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;
|
exitPosition = newExitPosition;
|
||||||
sender.sendMessage(messagePrefix + message("EXIT_SPAWN"));
|
sender.sendMessage(messagePrefix + message("EXIT_SPAWN"));
|
||||||
Map<String, Object> temp = new HashMap<String,Object>();
|
addToConfig("spawns.exit.x", exitPosition.getX());
|
||||||
temp.put("x", exitPosition.getX());
|
addToConfig("spawns.exit.y", exitPosition.getY());
|
||||||
temp.put("y", exitPosition.getY());
|
addToConfig("spawns.exit.z", exitPosition.getZ());
|
||||||
temp.put("z", exitPosition.getZ());
|
addToConfig("spawns.exit.world", player.getLocation().getWorld().getName());
|
||||||
temp.put("world", player.getLocation().getWorld().getName());
|
|
||||||
addToSection("spawns.exit",temp);
|
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,23 +15,25 @@ import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
||||||
public class SetLobbyLocation implements ICommand {
|
public class SetLobbyLocation implements ICommand {
|
||||||
|
|
||||||
public void execute(CommandSender sender, String[] args) {
|
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")) {
|
if(!Main.plugin.status.equals("Standby")) {
|
||||||
sender.sendMessage(errorPrefix + message("GAME_INPROGRESS"));
|
sender.sendMessage(errorPrefix + message("GAME_INPROGRESS"));
|
||||||
return;
|
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;
|
lobbyPosition = newLobbyPosition;
|
||||||
sender.sendMessage(messagePrefix + message("LOBBY_SPAWN"));
|
sender.sendMessage(messagePrefix + message("LOBBY_SPAWN"));
|
||||||
Map<String, Object> temp = new HashMap<String,Object>();
|
addToConfig("spawns.lobby.x", lobbyPosition.getX());
|
||||||
temp.put("x", lobbyPosition.getX());
|
addToConfig("spawns.lobby.y", lobbyPosition.getY());
|
||||||
temp.put("y", lobbyPosition.getY());
|
addToConfig("spawns.lobby.z", lobbyPosition.getZ());
|
||||||
temp.put("z", lobbyPosition.getZ());
|
addToConfig("spawns.lobby.world", player.getLocation().getWorld().getName());
|
||||||
temp.put("world", player.getLocation().getWorld().getName());
|
|
||||||
addToSection("spawns.lobby",temp);
|
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,32 +10,36 @@ import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
|
|
||||||
|
import static net.tylermurphy.hideAndSeek.configuration.Config.addToConfig;
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
|
||||||
|
|
||||||
public class SetSpawnLocation implements ICommand {
|
public class SetSpawnLocation implements ICommand {
|
||||||
|
|
||||||
public void execute(CommandSender sender, String[] args) {
|
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")) {
|
if(!Main.plugin.status.equals("Standby")) {
|
||||||
sender.sendMessage(errorPrefix + message("GAME_INPROGRESS"));
|
sender.sendMessage(errorPrefix + message("GAME_INPROGRESS"));
|
||||||
return;
|
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"));
|
sender.sendMessage(errorPrefix + message("WORLDBORDER_POSITION"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
spawnPosition = newSpawnPosition;
|
spawnPosition = newSpawnPosition;
|
||||||
sender.sendMessage(messagePrefix + message("GAME_SPAWN"));
|
sender.sendMessage(messagePrefix + message("GAME_SPAWN"));
|
||||||
Map<String, Object> temp = new HashMap<String,Object>();
|
addToConfig("spawns.game.x", spawnPosition.getX());
|
||||||
temp.put("x", spawnPosition.getX());
|
addToConfig("spawns.game.y", spawnPosition.getY());
|
||||||
temp.put("y", spawnPosition.getY());
|
addToConfig("spawns.game.z", spawnPosition.getZ());
|
||||||
temp.put("z", spawnPosition.getZ());
|
addToConfig("spawns.game.world", player.getLocation().getWorld().getName());
|
||||||
temp.put("world", player.getLocation().getWorld().getName());
|
|
||||||
addToSection("spawns.game",temp);
|
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,9 +28,13 @@ public class Setup implements ICommand {
|
||||||
msg = msg + "\n" + message("SETUP_EXIT").toString();
|
msg = msg + "\n" + message("SETUP_EXIT").toString();
|
||||||
count++;
|
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);
|
File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
|
||||||
if(!destenation.exists()) {
|
if(!destenation.exists()) {
|
||||||
msg = msg + "\n" + message("SETUP_MAPSAVE").toString();
|
msg = msg + "\n" + message("SETUP_SAVEMAP").toString();
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if(count < 1) {
|
if(count < 1) {
|
||||||
|
|
|
@ -49,9 +49,9 @@ public class Start implements ICommand {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(Bukkit.getServer().getWorld("hideandseek_"+spawnWorld) != null) {
|
if(Bukkit.getServer().getWorld("hideandseek_"+spawnWorld) != null) {
|
||||||
Util.rollback("hideandseek_"+spawnWorld);
|
Main.plugin.worldLoader.rollback();
|
||||||
} else {
|
} else {
|
||||||
Util.loadMap("hideandseek_"+spawnWorld);
|
Main.plugin.worldLoader.loadMap();
|
||||||
}
|
}
|
||||||
String seekerName;
|
String seekerName;
|
||||||
if(args.length < 1) {
|
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);
|
player.sendTitle(ChatColor.GOLD + "" + ChatColor.BOLD + "HIDER", ChatColor.WHITE + message("HIDERS_SUBTITLE").toString(), 10, 70, 20);
|
||||||
}
|
}
|
||||||
Worldborder.resetWorldborder("hideandseek_"+spawnWorld);
|
Worldborder.resetWorldborder("hideandseek_"+spawnWorld);
|
||||||
|
for(Player player : Main.plugin.board.getPlayers()){
|
||||||
|
Main.plugin.board.createGameBoard(player);
|
||||||
|
}
|
||||||
Main.plugin.board.reloadGameBoards();
|
Main.plugin.board.reloadGameBoards();
|
||||||
Main.plugin.status = "Starting";
|
Main.plugin.status = "Starting";
|
||||||
int temp = Main.plugin.gameId;
|
int temp = Main.plugin.gameId;
|
||||||
|
@ -106,7 +109,7 @@ public class Start implements ICommand {
|
||||||
Util.broadcastMessage(messagePrefix + message("START"));
|
Util.broadcastMessage(messagePrefix + message("START"));
|
||||||
Main.plugin.status = "Playing";
|
Main.plugin.status = "Playing";
|
||||||
for(Player player : Main.plugin.board.getPlayers()) {
|
for(Player player : Main.plugin.board.getPlayers()) {
|
||||||
resetPlayer(player);
|
Util.resetPlayer(player);
|
||||||
}
|
}
|
||||||
Main.plugin.worldborder = null;
|
Main.plugin.worldborder = null;
|
||||||
Main.plugin.taunt = null;
|
Main.plugin.taunt = null;
|
||||||
|
@ -116,86 +119,24 @@ public class Start implements ICommand {
|
||||||
Main.plugin.worldborder = new Worldborder(Main.plugin.gameId);
|
Main.plugin.worldborder = new Worldborder(Main.plugin.gameId);
|
||||||
Main.plugin.worldborder.schedule();
|
Main.plugin.worldborder.schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
Main.plugin.taunt = new Taunt(Main.plugin.gameId);
|
if(tauntEnabled) {
|
||||||
Main.plugin.taunt.schedule();
|
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) {
|
if(gameLength > 0) {
|
||||||
Main.plugin.timeLeft = gameLength;
|
Main.plugin.timeLeft = gameLength;
|
||||||
for(Player player : Main.plugin.board.getPlayers()) {
|
|
||||||
player.setLevel(gameLength);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 20 * 30);
|
}, 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() {
|
public String getLabel() {
|
||||||
return "start";
|
return "start";
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,8 +45,8 @@ public class Stop implements ICommand {
|
||||||
Main.plugin.timeLeft = 0;
|
Main.plugin.timeLeft = 0;
|
||||||
Worldborder.resetWorldborder("hideandseek_"+spawnWorld);
|
Worldborder.resetWorldborder("hideandseek_"+spawnWorld);
|
||||||
for(Player player : Main.plugin.board.getPlayers()) {
|
for(Player player : Main.plugin.board.getPlayers()) {
|
||||||
|
Main.plugin.board.createLobbyBoard(player);
|
||||||
player.setGameMode(GameMode.ADVENTURE);
|
player.setGameMode(GameMode.ADVENTURE);
|
||||||
player.setLevel(0);
|
|
||||||
Main.plugin.board.addHider(player);
|
Main.plugin.board.addHider(player);
|
||||||
player.getInventory().clear();
|
player.getInventory().clear();
|
||||||
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
|
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);
|
Packet.setGlow(player, temp, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Util.unloadMap("hideandseek_"+spawnWorld);
|
Main.plugin.worldLoader.unloadMap();
|
||||||
Main.plugin.board.reloadLobbyBoards();
|
Main.plugin.board.reloadLobbyBoards();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,10 @@
|
||||||
package net.tylermurphy.hideAndSeek.configuration;
|
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 org.bukkit.util.Vector;
|
||||||
|
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
|
||||||
|
|
||||||
public class Config {
|
public class Config {
|
||||||
|
|
||||||
|
private static ConfigManager manager;
|
||||||
|
|
||||||
public static String
|
public static String
|
||||||
messagePrefix,
|
messagePrefix,
|
||||||
|
@ -21,7 +16,8 @@ public class Config {
|
||||||
warningPrefix,
|
warningPrefix,
|
||||||
spawnWorld,
|
spawnWorld,
|
||||||
exitWorld,
|
exitWorld,
|
||||||
lobbyWorld;
|
lobbyWorld,
|
||||||
|
local;
|
||||||
|
|
||||||
public static Vector
|
public static Vector
|
||||||
spawnPosition,
|
spawnPosition,
|
||||||
|
@ -33,94 +29,115 @@ public class Config {
|
||||||
nametagsVisible,
|
nametagsVisible,
|
||||||
permissionsRequired,
|
permissionsRequired,
|
||||||
announceMessagesToNonPlayers,
|
announceMessagesToNonPlayers,
|
||||||
worldborderEnabled;
|
worldborderEnabled,
|
||||||
|
tauntEnabled,
|
||||||
|
tauntCountdown,
|
||||||
|
tauntLast,
|
||||||
|
glowEnabled,
|
||||||
|
glowStackable,
|
||||||
|
pvpEnabled,
|
||||||
|
autoJoin,
|
||||||
|
teleportToExit;
|
||||||
|
|
||||||
public static int
|
public static int
|
||||||
minPlayers,
|
minPlayers,
|
||||||
worldborderSize,
|
worldborderSize,
|
||||||
worldborderDelay,
|
worldborderDelay,
|
||||||
currentWorldborderSize,
|
currentWorldborderSize,
|
||||||
gameLength;
|
gameLength,
|
||||||
|
saveMinX,
|
||||||
public static FileConfiguration getConfig() {
|
saveMinZ,
|
||||||
return Main.plugin.getConfig();
|
saveMaxX,
|
||||||
}
|
saveMaxZ,
|
||||||
|
tauntDelay,
|
||||||
public static void saveConfig() {
|
glowLength;
|
||||||
Main.plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void loadConfig() {
|
public static void loadConfig() {
|
||||||
|
|
||||||
Main.plugin.reloadConfig();
|
manager = new ConfigManager("config.yml");
|
||||||
|
manager.saveConfig();
|
||||||
|
|
||||||
//Spawn
|
//Spawn
|
||||||
spawnPosition = new Vector(
|
spawnPosition = new Vector(
|
||||||
getConfig().getDouble("spawns.game.x"),
|
manager.getDouble("spawns.game.x"),
|
||||||
Math.max(0,Math.min(255,getConfig().getDouble("spawns.game.y"))),
|
Math.max(0, Math.min(255, manager.getDouble("spawns.game.y"))),
|
||||||
getConfig().getDouble("spawns.game.z")
|
manager.getDouble("spawns.game.z")
|
||||||
);
|
);
|
||||||
spawnWorld = getConfig().getString("spawns.game.world");
|
spawnWorld = manager.getString("spawns.game.world");
|
||||||
|
|
||||||
///Lobby
|
///Lobby
|
||||||
lobbyPosition = new Vector(
|
lobbyPosition = new Vector(
|
||||||
getConfig().getDouble("spawns.lobby.x"),
|
manager.getDouble("spawns.lobby.x"),
|
||||||
Math.max(0,Math.min(255,getConfig().getDouble("spawns.lobby.y"))),
|
Math.max(0, Math.min(255, manager.getDouble("spawns.lobby.y"))),
|
||||||
getConfig().getDouble("spawns.lobby.z")
|
manager.getDouble("spawns.lobby.z")
|
||||||
);
|
);
|
||||||
lobbyWorld = getConfig().getString("spawns.lobby.world");
|
lobbyWorld = manager.getString("spawns.lobby.world");
|
||||||
|
|
||||||
announceMessagesToNonPlayers = getConfig().getBoolean("announceMessagesToNonPlayers");
|
announceMessagesToNonPlayers = manager.getBoolean("announceMessagesToNonPlayers");
|
||||||
|
|
||||||
exitPosition = new Vector(
|
exitPosition = new Vector(
|
||||||
getConfig().getDouble("spawns.exit.x"),
|
manager.getDouble("spawns.exit.x"),
|
||||||
Math.max(0,Math.min(255,getConfig().getDouble("spawns.exit.y"))),
|
Math.max(0, Math.min(255, manager.getDouble("spawns.exit.y"))),
|
||||||
getConfig().getDouble("spawns.exit.z")
|
manager.getDouble("spawns.exit.z")
|
||||||
);
|
);
|
||||||
exitWorld = getConfig().getString("spawns.exit.world");
|
exitWorld = manager.getString("spawns.exit.world");
|
||||||
|
|
||||||
//World border
|
//World border
|
||||||
worldborderPosition = new Vector(
|
worldborderPosition = new Vector(
|
||||||
getConfig().getInt("worldBorder.x"),
|
manager.getInt("worldBorder.x"),
|
||||||
0,
|
0,
|
||||||
getConfig().getInt("worldBorder.z")
|
manager.getInt("worldBorder.z")
|
||||||
);
|
);
|
||||||
worldborderSize = Math.max(100,getConfig().getInt("worldBorder.size"));
|
worldborderSize = Math.max(100, manager.getInt("worldBorder.size"));
|
||||||
worldborderDelay = Math.max(1,getConfig().getInt("worldBorder.delay"));
|
worldborderDelay = Math.max(1, manager.getInt("worldBorder.delay"));
|
||||||
worldborderEnabled = getConfig().getBoolean("worldBorder.enabled");
|
worldborderEnabled = manager.getBoolean("worldBorder.enabled");
|
||||||
|
|
||||||
//Prefix
|
//Prefix
|
||||||
char SYMBOLE = '\u00A7';
|
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);
|
messagePrefix = manager.getString("prefix.default").replace("&", SYMBOLE_STRING);
|
||||||
errorPrefix = getConfig().getString("prefix.error").replace("&", SYMBOLE_STRING);
|
errorPrefix = manager.getString("prefix.error").replace("&", SYMBOLE_STRING);
|
||||||
tauntPrefix = getConfig().getString("prefix.taunt").replace("&", SYMBOLE_STRING);
|
tauntPrefix = manager.getString("prefix.taunt").replace("&", SYMBOLE_STRING);
|
||||||
worldborderPrefix = getConfig().getString("prefix.border").replace("&", SYMBOLE_STRING);
|
worldborderPrefix = manager.getString("prefix.border").replace("&", SYMBOLE_STRING);
|
||||||
abortPrefix = getConfig().getString("prefix.abort").replace("&", SYMBOLE_STRING);
|
abortPrefix = manager.getString("prefix.abort").replace("&", SYMBOLE_STRING);
|
||||||
gameoverPrefix = getConfig().getString("prefix.gameover").replace("&", SYMBOLE_STRING);
|
gameoverPrefix = manager.getString("prefix.gameover").replace("&", SYMBOLE_STRING);
|
||||||
warningPrefix = getConfig().getString("prefix.warning").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
|
//Other
|
||||||
nametagsVisible = getConfig().getBoolean("nametagsVisible");
|
nametagsVisible = manager.getBoolean("nametagsVisible");
|
||||||
permissionsRequired = getConfig().getBoolean("permissionsRequired");
|
permissionsRequired = manager.getBoolean("permissionsRequired");
|
||||||
minPlayers = Math.max(2,getConfig().getInt("minPlayers"));
|
minPlayers = Math.max(2, manager.getInt("minPlayers"));
|
||||||
gameLength = getConfig().getInt("gameLength");
|
gameLength = manager.getInt("gameLength");
|
||||||
|
pvpEnabled = manager.getBoolean("pvp");
|
||||||
getConfig().options().copyDefaults(true);
|
autoJoin = manager.getBoolean("autoJoin");
|
||||||
saveConfig();
|
teleportToExit = manager.getBoolean("teleportToExit");
|
||||||
|
local = manager.getString("local");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addToSection(String sectionName, Map<String,Object> values) {
|
public static void addToConfig(String path, Object value) {
|
||||||
ConfigurationSection section = getConfig().getConfigurationSection(sectionName);
|
manager.set(path, value);
|
||||||
if(section == null) section = getConfig().createSection(sectionName);
|
}
|
||||||
Map<String,Object> sectionValues = section.getValues(true);
|
|
||||||
for(Entry<String, Object> entry : values.entrySet()) {
|
public static void saveConfig() {
|
||||||
sectionValues.put(entry.getKey(), entry.getValue());
|
manager.saveConfig();
|
||||||
}
|
|
||||||
getConfig().createSection(sectionName, sectionValues);
|
|
||||||
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.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
|
||||||
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
|
||||||
|
|
||||||
public class Localization {
|
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() {
|
public static void loadLocalization() {
|
||||||
Main.plugin.saveResource("localization.yml", false);
|
|
||||||
String path = Main.data.getAbsolutePath()+File.separator + "localization.yml";
|
ConfigManager manager = new ConfigManager("localization.yml", "lang"+File.separator+"localization_"+Config.local+".yml");
|
||||||
config = YamlConfiguration.loadConfiguration(new File(path));
|
|
||||||
for(String key : config.getConfigurationSection("Localization").getKeys(false)) {
|
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(
|
LOCAL.put(
|
||||||
key,
|
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) {
|
public static LocalizationString message(String key) {
|
||||||
LocalizationString temp = LOCAL.get(key);
|
LocalizationString temp = LOCAL.get(key);
|
||||||
if(temp == null)
|
if(temp == null) {
|
||||||
return new LocalizationString(key+" missing from localization.yml");
|
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());
|
return new LocalizationString(temp.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,8 @@ import org.bukkit.entity.Player;
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
import net.tylermurphy.hideAndSeek.Main;
|
||||||
import net.tylermurphy.hideAndSeek.util.Packet;
|
import net.tylermurphy.hideAndSeek.util.Packet;
|
||||||
|
|
||||||
|
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||||
|
|
||||||
public class Glow {
|
public class Glow {
|
||||||
|
|
||||||
private final int temp;
|
private final int temp;
|
||||||
|
@ -18,7 +20,8 @@ public class Glow {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onProjectilve() {
|
public void onProjectilve() {
|
||||||
glowTime++;
|
if(glowStackable) glowTime += glowLength;
|
||||||
|
else glowTime = glowLength;
|
||||||
if(!running)
|
if(!running)
|
||||||
startGlow();
|
startGlow();
|
||||||
}
|
}
|
||||||
|
@ -34,26 +37,29 @@ public class Glow {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void waitGlow() {
|
private void waitGlow() {
|
||||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, () -> {
|
||||||
public void run() {
|
if(temp != Main.plugin.gameId) return;
|
||||||
if(temp != Main.plugin.gameId) return;
|
glowTime--;
|
||||||
glowTime--;
|
glowTime = Math.max(glowTime, 0);
|
||||||
glowTime = Math.max(glowTime, 0);
|
if(glowTime == 0) {
|
||||||
if(glowTime == 0) {
|
stopGlow();
|
||||||
stopGlow();
|
} else {
|
||||||
} else {
|
waitGlow();
|
||||||
waitGlow();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}, 20*30);
|
}, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stopGlow() {
|
private void stopGlow() {
|
||||||
|
running = false;
|
||||||
for(Player hider : Main.plugin.board.getHiders()) {
|
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);
|
Packet.setGlow(hider, seeker, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isRunning() {
|
||||||
|
return running;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,41 +18,33 @@ public class Taunt {
|
||||||
|
|
||||||
private final int temp;
|
private final int temp;
|
||||||
private String tauntPlayer;
|
private String tauntPlayer;
|
||||||
|
private int delay;
|
||||||
|
private boolean running;
|
||||||
|
|
||||||
public Taunt(int temp) {
|
public Taunt(int temp) {
|
||||||
this.temp = temp;
|
this.temp = temp;
|
||||||
|
this.delay = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void schedule() {
|
public void schedule() {
|
||||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
delay = tauntDelay;
|
||||||
public void run() {
|
waitTaunt();
|
||||||
tryTaunt();
|
|
||||||
}
|
|
||||||
},20*60*5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void waitTaunt() {
|
private void waitTaunt() {
|
||||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, () -> {
|
||||||
public void run() {
|
if(delay == 0) {
|
||||||
tryTaunt();
|
if(!tauntLast && Main.plugin.board.size() < 2) return;
|
||||||
|
else executeTaunt();
|
||||||
|
} else {
|
||||||
|
delay--;
|
||||||
|
waitTaunt();
|
||||||
}
|
}
|
||||||
},20*60);
|
},20);
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void executeTaunt() {
|
private void executeTaunt() {
|
||||||
|
if(temp != Main.plugin.gameId) return;
|
||||||
Player taunted = null;
|
Player taunted = null;
|
||||||
int rand = (int) (Math.random()*Main.plugin.board.sizeHider());
|
int rand = (int) (Math.random()*Main.plugin.board.sizeHider());
|
||||||
for(Player player : Main.plugin.board.getPlayers()) {
|
for(Player player : Main.plugin.board.getPlayers()) {
|
||||||
|
@ -65,37 +57,45 @@ public class Taunt {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(taunted != null) {
|
if(taunted != null) {
|
||||||
|
running = true;
|
||||||
taunted.sendMessage(message("TAUNTED").toString());
|
taunted.sendMessage(message("TAUNTED").toString());
|
||||||
Util.broadcastMessage(tauntPrefix + message("TAUNT"));
|
Util.broadcastMessage(tauntPrefix + message("TAUNT"));
|
||||||
tauntPlayer = taunted.getName();
|
tauntPlayer = taunted.getName();
|
||||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, () -> {
|
||||||
public void run() {
|
if(temp != Main.plugin.gameId) return;
|
||||||
if(temp != Main.plugin.gameId) return;
|
Player taunted1 = Main.plugin.board.getPlayer(tauntPlayer);
|
||||||
Player taunted = Main.plugin.board.getPlayer(tauntPlayer);
|
if(taunted1 != null) {
|
||||||
if(taunted != null) {
|
Firework fw = (Firework) taunted1.getLocation().getWorld().spawnEntity(taunted1.getLocation(), EntityType.FIREWORK);
|
||||||
Firework fw = (Firework) taunted.getLocation().getWorld().spawnEntity(taunted.getLocation(), EntityType.FIREWORK);
|
FireworkMeta fwm = fw.getFireworkMeta();
|
||||||
FireworkMeta fwm = fw.getFireworkMeta();
|
fwm.setPower(4);
|
||||||
fwm.setPower(4);
|
fwm.addEffect(FireworkEffect.builder()
|
||||||
fwm.addEffect(FireworkEffect.builder()
|
.withColor(Color.BLUE)
|
||||||
.withColor(Color.BLUE)
|
.withColor(Color.RED)
|
||||||
.withColor(Color.RED)
|
.withColor(Color.YELLOW)
|
||||||
.withColor(Color.YELLOW)
|
.with(FireworkEffect.Type.STAR)
|
||||||
.with(FireworkEffect.Type.STAR)
|
.with(FireworkEffect.Type.BALL)
|
||||||
.with(FireworkEffect.Type.BALL)
|
.with(FireworkEffect.Type.BALL_LARGE)
|
||||||
.with(FireworkEffect.Type.BALL_LARGE)
|
.flicker(true)
|
||||||
.flicker(true)
|
.withTrail()
|
||||||
.withTrail()
|
.build());
|
||||||
.build());
|
fw.setFireworkMeta(fwm);
|
||||||
fw.setFireworkMeta(fwm);
|
Util.broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
|
||||||
Util.broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
|
|
||||||
}
|
|
||||||
tauntPlayer = "";
|
|
||||||
waitTaunt();
|
|
||||||
}
|
}
|
||||||
|
tauntPlayer = "";
|
||||||
|
running = false;
|
||||||
|
schedule();
|
||||||
},20*30);
|
},20*30);
|
||||||
} else {
|
} 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 {
|
public class Worldborder {
|
||||||
|
|
||||||
private final int temp;
|
private final int temp;
|
||||||
|
private int delay;
|
||||||
|
private boolean running;
|
||||||
|
|
||||||
public Worldborder(int temp) {
|
public Worldborder(int temp) {
|
||||||
this.temp = temp;
|
this.temp = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void schedule() {
|
public void schedule() {
|
||||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
delay = 60*worldborderDelay;
|
||||||
public void run() {
|
running = false;
|
||||||
decreaceWorldborder();
|
waitBorder();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void waitBorder(){
|
||||||
|
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, () -> {
|
||||||
|
if(delay == 0) decreaceWorldborder();
|
||||||
|
else {
|
||||||
|
delay--; waitBorder();
|
||||||
}
|
}
|
||||||
},20*60*worldborderDelay);
|
}, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void decreaceWorldborder() {
|
private void decreaceWorldborder() {
|
||||||
if(temp != Main.plugin.gameId) return;
|
if(temp != Main.plugin.gameId) return;
|
||||||
if(currentWorldborderSize-100 > 100) {
|
if(currentWorldborderSize-100 > 100) {
|
||||||
|
running = true;
|
||||||
Util.broadcastMessage(worldborderPrefix + message("WORLDBORDER_DECREASING"));
|
Util.broadcastMessage(worldborderPrefix + message("WORLDBORDER_DECREASING"));
|
||||||
currentWorldborderSize -= 100;
|
currentWorldborderSize -= 100;
|
||||||
World world = Bukkit.getWorld("hideandseek_"+spawnWorld);
|
World world = Bukkit.getWorld("hideandseek_"+spawnWorld);
|
||||||
WorldBorder border = world.getWorldBorder();
|
WorldBorder border = world.getWorldBorder();
|
||||||
border.setSize(border.getSize()-100,30);
|
border.setSize(border.getSize()-100,30);
|
||||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
|
schedule();
|
||||||
public void run() {
|
|
||||||
decreaceWorldborder();
|
|
||||||
}
|
|
||||||
},20*60*worldborderDelay);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,5 +62,13 @@ public class Worldborder {
|
||||||
border.setCenter(0, 0);
|
border.setCenter(0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getDelay(){
|
||||||
|
return delay;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRunning() {
|
||||||
|
return running;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,8 @@ public class Board {
|
||||||
|
|
||||||
private List<String> Hider, Seeker, Spectator;
|
private List<String> Hider, Seeker, Spectator;
|
||||||
private Map<String, Player> playerList = new HashMap<String,Player>();
|
private Map<String, Player> playerList = new HashMap<String,Player>();
|
||||||
|
private Map<String, CustomBoard> customBoards = new HashMap<String, CustomBoard>();
|
||||||
|
|
||||||
public boolean isPlayer(Player player) {
|
public boolean isPlayer(Player player) {
|
||||||
return playerList.containsKey(player.getName());
|
return playerList.containsKey(player.getName());
|
||||||
}
|
}
|
||||||
|
@ -145,64 +146,91 @@ public class Board {
|
||||||
seekerTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER);
|
seekerTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createLobbyBoard(Player player) {
|
public void createLobbyBoard(Player player) {
|
||||||
|
createLobbyBoard(player, true);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createGameBoard(Player player) {
|
private void createLobbyBoard(Player player, boolean recreate) {
|
||||||
Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
|
CustomBoard board = customBoards.get(player.getName());
|
||||||
Objective obj = board.registerNewObjective("GameScoreboard", "dummy",
|
if(recreate) {
|
||||||
ChatColor.translateAlternateColorCodes('&', "&l&eHIDE AND SEEK"));
|
board = new CustomBoard(player, "&l&eHIDE AND SEEK");
|
||||||
createTeamsForBoard(board);
|
board.updateTeams();
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
Score seeker = obj.getScore(ChatColor.BOLD + "" + ChatColor.RED + "SEEKERS:" + ChatColor.WHITE + " " + Seeker.size());
|
board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDER%" + ChatColor.WHITE + getHiderPercent());
|
||||||
seeker.setScore(2);
|
board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKER%" + ChatColor.WHITE + getSeekerPercent());
|
||||||
Score hider = obj.getScore(ChatColor.BOLD + "" + ChatColor.GOLD + "HIDERS:" + ChatColor.WHITE + " " + Hider.size());
|
board.addBlank();
|
||||||
hider.setScore(1);
|
board.setLine("players", "Players: " + playerList.values().size());
|
||||||
player.setScoreboard(board);
|
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) {
|
public void removeBoard(Player player) {
|
||||||
player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard());
|
player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard());
|
||||||
|
customBoards.remove(player.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reloadLobbyBoards() {
|
public void reloadLobbyBoards() {
|
||||||
for(Player player : playerList.values())
|
for(Player player : playerList.values())
|
||||||
createLobbyBoard(player);
|
createLobbyBoard(player, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reloadGameBoards() {
|
public void reloadGameBoards() {
|
||||||
for(Player player : playerList.values())
|
for(Player player : playerList.values())
|
||||||
createGameBoard(player);
|
createGameBoard(player, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reloadBoardTeams() {
|
||||||
|
for(CustomBoard board : customBoards.values())
|
||||||
|
board.updateTeams();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getSeekerPercent() {
|
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 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.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 org.bukkit.entity.Player;
|
||||||
|
|
||||||
import net.tylermurphy.hideAndSeek.Main;
|
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 {
|
public class Util {
|
||||||
|
|
||||||
|
@ -24,27 +38,10 @@ public class Util {
|
||||||
if(exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0) return false;
|
if(exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0) return false;
|
||||||
File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
|
File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
|
||||||
if(!destenation.exists()) return false;
|
if(!destenation.exists()) return false;
|
||||||
|
if(saveMinX == 0 || saveMinZ == 0 || saveMaxX == 0 || saveMaxZ == 0) return false;
|
||||||
return true;
|
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) {
|
public static void sendDelayedMessage(String message, int gameId, int delay) {
|
||||||
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.plugin, new Runnable() {
|
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.plugin, new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -53,5 +50,36 @@ public class Util {
|
||||||
}
|
}
|
||||||
}, delay);
|
}, 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
|
# default: false
|
||||||
nametagsVisible: 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
|
# default: true
|
||||||
permissionsRequired: 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
|
# default: 2
|
||||||
minPlayers: 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
|
# Spawn locations where players are teleported
|
||||||
spawns:
|
spawns:
|
||||||
# Location where players are teleported into the game (/hs start)
|
# Location where players are teleported into the game (/hs start)
|
||||||
|
@ -37,25 +121,4 @@ spawns:
|
||||||
x: 0
|
x: 0
|
||||||
y: 0
|
y: 0
|
||||||
z: 0
|
z: 0
|
||||||
world: world
|
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:
|
Localization:
|
||||||
COMMAND_PLAYER_ONLY: "This command can only be run as a player."
|
COMMAND_PLAYER_ONLY: "This command can only be run as a player."
|
||||||
COMMAND_NOT_ALLOWED: "You are not allowed to run this command."
|
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_DEATH: "&c{PLAYER}&f was killed."
|
||||||
GAME_PLAYER_FOUND: "&e{PLAYER}&f was found and became a seeker."
|
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_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_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_INGAME: "You are already in the lobby/game."
|
||||||
GAME_NOT_INGAME: "You are not in a lobby/game."
|
GAME_NOT_INGAME: "You are not in a lobby/game."
|
||||||
GAME_INPROGRESS: "There is currently a game inprogress."
|
GAME_INPROGRESS: "There is currently a game in progress."
|
||||||
GAME_NOT_INPROGRESS: "There is no game inprogress."
|
GAME_NOT_INPROGRESS: "There is no game in progress."
|
||||||
GAME_JOIN: "{PLAYER} has joined the HideAndSeek lobby."
|
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."
|
GAME_LEAVE: "{PLAYER} has left the HideAndSeek lobby."
|
||||||
CONFIG_RELOAD: "Reloaded the config."
|
CONFIG_RELOAD: "Reloaded the config."
|
||||||
MAPSAVE_INPROGRESS: "Map save is currently in progress. Try again later."
|
MAPSAVE_INPROGRESS: "Map save is currently in progress. Try again later."
|
||||||
MAPSAVE_START: "Starting map save."
|
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_END: "Map save complete."
|
||||||
MAPSAVE_ERROR: "Coudnt find current map."
|
MAPSAVE_ERROR: "Couldn't find current map."
|
||||||
WORLDBORDER_DISABLE: "Disabled worldborder."
|
WORLDBORDER_DISABLE: "Disabled world border."
|
||||||
WORLDBORDER_INVALID_INPUT: "Invalid integer {AMOUNT}."
|
WORLDBORDER_INVALID_INPUT: "Invalid integer {AMOUNT}."
|
||||||
WORLDBORDER_MIN_SIZE: "Worldborder cannot be smaller than 100 blocks."
|
WORLDBORDER_MIN_SIZE: "World border cannot be smaller than 100 blocks."
|
||||||
WORLDBORDER_POSITION: "Spawn position must be 100 from worldborder center."
|
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_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."
|
TAUNTED: "$c$oOh no! You have been chosen to be taunted."
|
||||||
TAUNT: "A random hider will be taunted in the next 30s."
|
TAUNT: "A random hider will be taunted in the next 30s."
|
||||||
TAUNT_ACTIVATE: "Taunt has been activated."
|
TAUNT_ACTIVATE: "Taunt has been activated."
|
||||||
ERROR_GAME_SPAWN: "Please set game spawn location first"
|
ERROR_GAME_SPAWN: "Please set game spawn location first"
|
||||||
SETUP: "&f&lThe following is needed for setup..."
|
SETUP: "&f&lThe following is needed for setup..."
|
||||||
SETUP_GAME: "&c&l- &fGame spawn isnt set, /hs setspawn"
|
SETUP_GAME: "&c&l- &fGame spawn isn't set, /hs setspawn"
|
||||||
SETUP_LOBBY: "&c&l- &fLobby spawn isnt set, /hs setlobby"
|
SETUP_LOBBY: "&c&l- &fLobby spawn isn't set, /hs setlobby"
|
||||||
SETUP_EXIT: "&c&l- &fQuit/exit teleport location isnt set, /hs setexit"
|
SETUP_EXIT: "&c&l- &fQuit/exit teleport location isn't set, /hs setexit"
|
||||||
SETUP_SAVEMAP: "&c&l- &fHide and seek map isnt saved, /hs savemap (after /hs setspawn)"
|
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!"
|
SETUP_COMPLETE: "Everything is setup and ready to go!"
|
||||||
GAME_SPAWN: "Set game spawn position to current location"
|
GAME_SPAWN: "Set game spawn position to current location"
|
||||||
LOBBY_SPAWN: "Set lobby 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_MIN_PLAYERS: "You must have at least {AMOUNT} players to start."
|
||||||
START_INVALID_NAME: "Invalid player: {PLAYER}."
|
START_INVALID_NAME: "Invalid player: {PLAYER}."
|
||||||
START_COUNTDOWN: "Hiders have {AMOUNT} seconds to hide!"
|
START_COUNTDOWN: "Hiders have {AMOUNT} seconds to hide!"
|
||||||
START: "Attetion SEEKERS, its time to fin the hiders!"
|
START: "Attention SEEKERS, its time to fin the hiders!"
|
||||||
STOP: "Game has been force stopped"
|
STOP: "Game has been force stopped."
|
||||||
HIDERS_SUBTITLE: "Hide away from the seekers"
|
HIDERS_SUBTITLE: "Hide away from the seekers"
|
||||||
SEEKERS_SUBTITLE: "Eliminate all hiders"
|
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
|
name: HideAndSeek
|
||||||
main: net.tylermurphy.hideAndSeek.Main
|
main: net.tylermurphy.hideAndSeek.Main
|
||||||
version: 1.3.0
|
version: 1.3.1
|
||||||
author: KenshinEto
|
author: KenshinEto
|
||||||
load: STARTUP
|
load: STARTUP
|
||||||
api-version: 1.17
|
api-version: 1.17
|
||||||
|
@ -21,6 +21,7 @@ permissions:
|
||||||
hideandseek.setspawn: true
|
hideandseek.setspawn: true
|
||||||
hideandseek.setlobby: true
|
hideandseek.setlobby: true
|
||||||
hideandseek.setexit: true
|
hideandseek.setexit: true
|
||||||
|
hideadnseek.setbounds: true
|
||||||
hideandseek.setup: true
|
hideandseek.setup: true
|
||||||
hideandseek.start: true
|
hideandseek.start: true
|
||||||
hideandseek.stop: true
|
hideandseek.stop: true
|
||||||
|
@ -48,6 +49,9 @@ permissions:
|
||||||
hideandseek.setexit:
|
hideandseek.setexit:
|
||||||
description: Allows you to set the game exit point
|
description: Allows you to set the game exit point
|
||||||
default: op
|
default: op
|
||||||
|
hideandseek.setbounds:
|
||||||
|
description: Allows you to set bounds for the game map
|
||||||
|
default: op
|
||||||
hideandseek.setup:
|
hideandseek.setup:
|
||||||
description: Allows you to see what needs to be setup for the plugin to function
|
description: Allows you to see what needs to be setup for the plugin to function
|
||||||
default: op
|
default: op
|
||||||
|
|
Loading…
Reference in a new issue