Made a join command and let the game work for a bit.

This commit is contained in:
Steffion 2013-08-04 15:05:07 +02:00
parent 4409b147fa
commit ea8eed6010
6 changed files with 178 additions and 10 deletions

View File

@ -1,10 +1,12 @@
package nl.Steffion.BlockHunt; package nl.Steffion.BlockHunt;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import nl.Steffion.BlockHunt.Serializables.LocationSerializable; import nl.Steffion.BlockHunt.Serializables.LocationSerializable;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class Arena { public class Arena {
public String arenaName; public String arenaName;
@ -16,12 +18,18 @@ public class Arena {
public int timeInLobbyUntilStart; public int timeInLobbyUntilStart;
public int waitingTimeSeeker; public int waitingTimeSeeker;
public int gameTime; public int gameTime;
public ArrayList<ItemStack> disguiseBlocks;
public List<Player> playersInArena; public List<Player> playersInArena;
public ArenaState gameState;
public int timer;
public List<Player> seekers;
public Arena (String arenaName, LocationSerializable pos1, public Arena (String arenaName, LocationSerializable pos1,
LocationSerializable pos2, int maxPlayers, int minPlayers, LocationSerializable pos2, int maxPlayers, int minPlayers,
int amountSeekersOnStart, int timeInLobbyUntilStart, int amountSeekersOnStart, int timeInLobbyUntilStart,
int waitingTimeSeeker, int gameTime, List<Player> playersInArena) { int waitingTimeSeeker, int gameTime,
ArrayList<ItemStack> disguiseBlocks, List<Player> playersInArena,
ArenaState gameState, int timer, List<Player> seekers) {
this.arenaName = arenaName; this.arenaName = arenaName;
this.pos1 = pos1; this.pos1 = pos1;
this.pos2 = pos2; this.pos2 = pos2;
@ -31,7 +39,11 @@ public class Arena {
this.timeInLobbyUntilStart = timeInLobbyUntilStart; this.timeInLobbyUntilStart = timeInLobbyUntilStart;
this.waitingTimeSeeker = waitingTimeSeeker; this.waitingTimeSeeker = waitingTimeSeeker;
this.gameTime = gameTime; this.gameTime = gameTime;
this.disguiseBlocks = disguiseBlocks;
this.playersInArena = playersInArena; this.playersInArena = playersInArena;
this.gameState = gameState;
this.timer = timer;
this.seekers = seekers;
} }
public enum ArenaType { public enum ArenaType {
@ -42,4 +54,8 @@ public class Arena {
waitingTimeSeeker, waitingTimeSeeker,
gameTime; gameTime;
} }
public enum ArenaState {
WAITING, STARTING, INGAME, RESTARTING, DISABLED;
}
} }

View File

@ -1,6 +1,10 @@
package nl.Steffion.BlockHunt; package nl.Steffion.BlockHunt;
import java.util.LinkedList;
import nl.Steffion.BlockHunt.Arena.ArenaState;
import nl.Steffion.BlockHunt.Listeners.OnInventoryClickEvent; import nl.Steffion.BlockHunt.Listeners.OnInventoryClickEvent;
import nl.Steffion.BlockHunt.Listeners.OnInventoryCloseEvent;
import nl.Steffion.BlockHunt.Listeners.OnPlayerInteractEvent; import nl.Steffion.BlockHunt.Listeners.OnPlayerInteractEvent;
import nl.Steffion.BlockHunt.Managers.CommandC; import nl.Steffion.BlockHunt.Managers.CommandC;
import nl.Steffion.BlockHunt.Managers.ConfigC; import nl.Steffion.BlockHunt.Managers.ConfigC;
@ -13,8 +17,13 @@ import org.bukkit.command.CommandSender;
import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import pgDev.bukkit.DisguiseCraft.DisguiseCraft;
import pgDev.bukkit.DisguiseCraft.disguise.Disguise;
import pgDev.bukkit.DisguiseCraft.disguise.DisguiseType;
public class BlockHunt extends JavaPlugin implements Listener { public class BlockHunt extends JavaPlugin implements Listener {
/* /*
* Made by @author Steffion, © 2013. * Made by @author Steffion, © 2013.
@ -26,6 +35,8 @@ public class BlockHunt extends JavaPlugin implements Listener {
new OnPlayerInteractEvent(), this); new OnPlayerInteractEvent(), this);
getServer().getPluginManager().registerEvents( getServer().getPluginManager().registerEvents(
new OnInventoryClickEvent(), this); new OnInventoryClickEvent(), this);
getServer().getPluginManager().registerEvents(
new OnInventoryCloseEvent(), this);
ConfigurationSerialization.registerClass(LocationSerializable.class, ConfigurationSerialization.registerClass(LocationSerializable.class,
"Location"); "Location");
@ -36,9 +47,117 @@ public class BlockHunt extends JavaPlugin implements Listener {
ArenaHandler.loadArenas(); ArenaHandler.loadArenas();
W.dcAPI = DisguiseCraft.getAPI();
MessageM.sendFMessage(null, ConfigC.log_Enabled, true, "name-" MessageM.sendFMessage(null, ConfigC.log_Enabled, true, "name-"
+ W.pluginName, "version-" + W.pluginVersion, "autors-" + W.pluginName, "version-" + W.pluginVersion, "autors-"
+ W.pluginAutors); + W.pluginAutors);
getServer().getScheduler().runTaskTimer(this, new Runnable() {
@Override
public void run() {
for (Arena arena : W.arenaList) {
if (arena.gameState == ArenaState.WAITING) {
if (arena.playersInArena.size() >= arena.minPlayers) {
arena.gameState = ArenaState.STARTING;
arena.timer = arena.timeInLobbyUntilStart;
ArenaHandler.sendFMessage(arena,
ConfigC.normal_lobbyArenaIsStarting, true,
"1-" + arena.timeInLobbyUntilStart);
}
} else if (arena.gameState == ArenaState.STARTING) {
if (arena.timer > 0) {
arena.timer = arena.timer - 1;
if (arena.timer == 60) {
ArenaHandler.sendFMessage(arena,
ConfigC.normal_lobbyArenaIsStarting,
true, "1-60");
} else if (arena.timer == 30) {
ArenaHandler.sendFMessage(arena,
ConfigC.normal_lobbyArenaIsStarting,
true, "1-30");
} else if (arena.timer == 10) {
ArenaHandler.sendFMessage(arena,
ConfigC.normal_lobbyArenaIsStarting,
true, "1-10");
} else if (arena.timer == 5) {
ArenaHandler.sendFMessage(arena,
ConfigC.normal_lobbyArenaIsStarting,
true, "1-5");
} else if (arena.timer == 4) {
ArenaHandler.sendFMessage(arena,
ConfigC.normal_lobbyArenaIsStarting,
true, "1-4");
} else if (arena.timer == 3) {
ArenaHandler.sendFMessage(arena,
ConfigC.normal_lobbyArenaIsStarting,
true, "1-3");
} else if (arena.timer == 2) {
ArenaHandler.sendFMessage(arena,
ConfigC.normal_lobbyArenaIsStarting,
true, "1-2");
} else if (arena.timer == 1) {
ArenaHandler.sendFMessage(arena,
ConfigC.normal_lobbyArenaIsStarting,
true, "1-1");
}
} else {
arena.gameState = ArenaState.INGAME;
arena.timer = arena.gameTime;
ArenaHandler.sendFMessage(arena,
ConfigC.normal_lobbyArenaStarted, true);
for (int i = arena.amountSeekersOnStart; i > 0; i = i - 1) {
Player seeker = arena.playersInArena
.get(W.random
.nextInt(arena.playersInArena
.size()));
ArenaHandler.sendFMessage(arena,
ConfigC.normal_ingameSeekerChoosen,
true, "seeker-" + seeker.getName());
arena.seekers.add(seeker);
}
for (Player arenaPlayer : arena.playersInArena) {
if (!arena.seekers.contains(arenaPlayer)) {
ItemStack block = arena.disguiseBlocks.get(W.random
.nextInt(arena.disguiseBlocks
.size()));
LinkedList<String> data = new LinkedList<String>();
data.add("blockID:" + block.getTypeId());
data.add("blockData:"
+ block.getDurability());
Disguise disguise = new Disguise(W.dcAPI
.newEntityID(), data,
DisguiseType.FallingBlock);
if (W.dcAPI.isDisguised(arenaPlayer)) {
W.dcAPI.changePlayerDisguise(
arenaPlayer, disguise);
} else {
W.dcAPI.disguisePlayer(arenaPlayer,
disguise);
}
MessageM.sendFMessage(
arenaPlayer,
ConfigC.normal_ingameBlock,
true,
"block-"
+ block.getType()
.name()
.replaceAll("_", "")
.replaceAll(
"BLOCK", "")
.toLowerCase()
+ ":"
+ block.getDurability());
}
}
}
}
}
}
}, 0, 20);
} }
public void onDisable() { public void onDisable() {

View File

@ -31,8 +31,8 @@ public class CMDcreate extends DefaultCMD {
ArenaSerializable arena = new ArenaSerializable( ArenaSerializable arena = new ArenaSerializable(
args[1], W.pos1.get(player), args[1], W.pos1.get(player),
W.pos2.get(player), 12, 3, 1, 90, 20, 200, W.pos2.get(player), 12, 3, 1, 90, 20, 300,
null); null, null, null, 0, null);
W.arenas.getFile().set(args[1], arena); W.arenas.getFile().set(args[1], arena);
W.arenas.save(); W.arenas.save();
ArenaHandler.loadArenas(); ArenaHandler.loadArenas();

View File

@ -38,12 +38,26 @@ public class CMDjoin extends DefaultCMD {
for (Arena arena : W.arenaList) { for (Arena arena : W.arenaList) {
if (arena.arenaName.equalsIgnoreCase(args[1])) { if (arena.arenaName.equalsIgnoreCase(args[1])) {
found = true; found = true;
if (arena.disguiseBlocks.isEmpty()) {
MessageM.sendFMessage(player,
ConfigC.error_joinNoBlocksSet, true);
} else {
arena.playersInArena.add(player); arena.playersInArena.add(player);
ArenaHandler.sendFMessage(arena, ArenaHandler.sendFMessage(arena,
ConfigC.normal_joinJoinedArena, true, ConfigC.normal_joinJoinedArena,
"playername-" + player.getName(), "1-" true,
+ arena.playersInArena.size(), "playername-" + player.getName(),
"1-" + arena.playersInArena.size(),
"2-" + arena.maxPlayers); "2-" + arena.maxPlayers);
if (arena.playersInArena.size() < arena.minPlayers) {
ArenaHandler
.sendFMessage(
arena,
ConfigC.warning_lobbyNeedAtleast,
true,
"1-" + arena.minPlayers);
}
}
} }
} }
} else { } else {

View File

@ -60,6 +60,17 @@ public enum ConfigC {
W.messages), W.messages),
normal_createCreatedArena ("%NCreated an arena with the name '%A%name%%N'.", normal_createCreatedArena ("%NCreated an arena with the name '%A%name%%N'.",
W.messages), W.messages),
normal_lobbyArenaIsStarting ("%NThe arena will start in %A%1%%N second(s)!",
W.messages),
normal_lobbyArenaStarted ("%NThe arena has been started! The seeker is comming to find you!",
W.messages),
normal_ingameSeekerChoosen ("%NPlayer %A%seeker%%N has been choosen as seeker!",
W.messages),
normal_ingameBlock ("%NYou're disguised as a(n) '%A%block%%N' block.",
W.messages),
warning_lobbyNeedAtleast ("%WYou need atleast %A%1%%W player(s) to start the game!",
W.messages),
error_noPermission ("%EYou don't have the permissions to do that!", error_noPermission ("%EYou don't have the permissions to do that!",
W.messages), W.messages),
@ -71,6 +82,8 @@ public enum ConfigC {
error_noArena ("%ENo arena found with the name '%A%name%%E'.", W.messages), error_noArena ("%ENo arena found with the name '%A%name%%E'.", W.messages),
error_onlyIngame ("%EThis is an only in-game command!", W.messages), error_onlyIngame ("%EThis is an only in-game command!", W.messages),
error_joinAlreadyJoined ("%EYou've already joined an arena!", W.messages), error_joinAlreadyJoined ("%EYou've already joined an arena!", W.messages),
error_joinNoBlocksSet ("%EThere are none blocks set for this arena. Notify the administrator.",
W.messages),
error_createSelectionFirst ("%EMake a selection first. Use the wand command: %A/" error_createSelectionFirst ("%EMake a selection first. Use the wand command: %A/"
+ W.pluginName + " <wand|w>%E.", + W.pluginName + " <wand|w>%E.",
W.messages), W.messages),
@ -79,7 +92,8 @@ public enum ConfigC {
error_setTooHighNumber ("%EThat amount is too high! Max amount is: %A%max%%E.", error_setTooHighNumber ("%EThat amount is too high! Max amount is: %A%max%%E.",
W.messages), W.messages),
error_setTooLowNumber ("%EThat amount is too low! Minimal amount is: %A%min%%E.", error_setTooLowNumber ("%EThat amount is too low! Minimal amount is: %A%min%%E.",
W.messages); W.messages),
error_setNotABlock ("%EThat is not a block!", W.messages);
public Object value; public Object value;
public ConfigM config; public ConfigM config;

View File

@ -2,9 +2,12 @@ package nl.Steffion.BlockHunt;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Random;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import pgDev.bukkit.DisguiseCraft.api.DisguiseCraftAPI;
import nl.Steffion.BlockHunt.Managers.ConfigM; import nl.Steffion.BlockHunt.Managers.ConfigM;
import nl.Steffion.BlockHunt.Managers.MessageM; import nl.Steffion.BlockHunt.Managers.MessageM;
import nl.Steffion.BlockHunt.Serializables.LocationSerializable; import nl.Steffion.BlockHunt.Serializables.LocationSerializable;
@ -27,6 +30,8 @@ public class W {
public static ConfigM messages = new ConfigM("messages", ""); public static ConfigM messages = new ConfigM("messages", "");
public static ConfigM arenas = new ConfigM("arenas", ""); public static ConfigM arenas = new ConfigM("arenas", "");
public static ArrayList<Arena> arenaList = new ArrayList<Arena>(); public static ArrayList<Arena> arenaList = new ArrayList<Arena>();
public static Random random = new Random();
public static DisguiseCraftAPI dcAPI;
public static void newFiles() { public static void newFiles() {
ConfigM.setDefaults(); ConfigM.setDefaults();