use of com.gmail.stefvanschiedev.buildinggame.utils.potential.PotentialBlockPosition in project buildinggame by stefvanschie.
the class ClickLeaveSign method onPlayerInteract.
/**
* Handles players clicking on a leave sign
*
* @param e an event representing a player interacting
* @see PlayerInteractEvent
* @since 2.1.0
*/
@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) {
if (e.getHand() != EquipmentSlot.HAND) {
return;
}
var player = e.getPlayer();
var clickedBlock = e.getClickedBlock();
if (clickedBlock == null)
return;
BlockState state = clickedBlock.getState();
if (e.getAction() != Action.RIGHT_CLICK_BLOCK || !(state instanceof Sign))
return;
for (PotentialBlockPosition blockPos : SignManager.getInstance().getLeaveSigns()) {
Block block = blockPos.getBlock();
if (block == null || !block.equals(clickedBlock)) {
continue;
}
Arena arena = ArenaManager.getInstance().getArena(player);
if (arena == null) {
MessageManager.getInstance().send(player, ChatColor.RED + "You're not in an arena");
return;
}
arena.leave(player);
break;
}
}
use of com.gmail.stefvanschiedev.buildinggame.utils.potential.PotentialBlockPosition in project buildinggame by stefvanschie.
the class SignManager method setup.
/**
* Loads/Reloads all signs
*
* @since 2.1.0
*/
public void setup() {
YamlConfiguration config = SettingsManager.getInstance().getConfig();
YamlConfiguration signs = SettingsManager.getInstance().getSigns();
for (Arena arena : ArenaManager.getInstance().getArenas()) {
arena.clearSigns();
}
randomJoinSigns.clear();
leaveSigns.clear();
statSigns.clear();
spectateSigns.clear();
for (var string : signs.getKeys(false)) {
int x = signs.getInt(string + ".x");
int y = signs.getInt(string + ".y");
int z = signs.getInt(string + ".z");
var blockPos = new PotentialBlockPosition(() -> Bukkit.getWorld(signs.getString(string + ".world")), x, y, z);
ChunkCoordinates chunkCoordinates = blockPos.getChunkCoordinates();
if (!signs.contains(string + ".type"))
signs.set(string + ".type", "join");
switch(signs.getString(string + ".type")) {
case "join":
var arena = ArenaManager.getInstance().getArena(signs.getString(string + ".arena"));
if (arena == null) {
randomJoinSigns.putIfAbsent(chunkCoordinates, new HashSet<>());
randomJoinSigns.get(chunkCoordinates).add(blockPos);
continue;
}
arena.addSign(blockPos);
if (config.getBoolean("debug"))
Main.getInstance().getLogger().info("Found join sign for arena " + arena.getName());
break;
case "leave":
leaveSigns.putIfAbsent(chunkCoordinates, new HashSet<>());
leaveSigns.get(chunkCoordinates).add(blockPos);
if (config.getBoolean("debug"))
Main.getInstance().getLogger().info("Found leave sign");
break;
case "stat":
statSigns.add(new StatSign(blockPos, StatType.valueOf(signs.getString(string + ".stat")), Integer.parseInt(signs.getString(string + ".number"))));
if (config.getBoolean("debug"))
Main.getInstance().getLogger().info("Found stat sign");
break;
case "spectate":
UUID uuid = UUID.fromString(signs.getString(string + ".player"));
spectateSigns.putIfAbsent(chunkCoordinates, new HashSet<>());
spectateSigns.get(chunkCoordinates).add(new SpectateSign(blockPos, Bukkit.getOfflinePlayer(uuid)));
if (config.getBoolean("debug"))
Main.getInstance().getLogger().info("Found spectate sign");
break;
}
}
if (config.getBoolean("signs.glass-colors-enabled")) {
config.getConfigurationSection("signs.glass-colors").getKeys(false).forEach(key -> {
try {
if (config.isInt("signs.glass-colors." + key))
gameStatesColor.put(GameState.valueOf(key.toUpperCase(Locale.getDefault())), DyeColor.values()[config.getInt("signs.glass-colors." + key)]);
else
gameStatesColor.put(GameState.valueOf(key.toUpperCase(Locale.getDefault())), DyeColor.valueOf(config.getString("signs.glass-colors." + key)));
} catch (IllegalArgumentException e) {
// catch IllegalArgumentException for the easy of your clients.
Main.getInstance().getLogger().warning("Wrong parameter in config at: sign.glass-colors." + key + '.');
}
});
}
updateSigns();
SettingsManager.getInstance().save();
}
use of com.gmail.stefvanschiedev.buildinggame.utils.potential.PotentialBlockPosition in project buildinggame by stefvanschie.
the class ClickJoinSign method onPlayerInteract.
/**
* Handles players clicking on join signs
*
* @param e an event representing a player interacting
* @see PlayerInteractEvent
* @since 2.1.0
*/
@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) {
if (e.getHand() != EquipmentSlot.HAND) {
return;
}
var player = e.getPlayer();
var clickedBlock = e.getClickedBlock();
if (clickedBlock == null)
return;
BlockState state = clickedBlock.getState();
if (e.getAction() != Action.RIGHT_CLICK_BLOCK || !(state instanceof Sign))
return;
Arena arena = null;
for (Arena a : ArenaManager.getInstance().getArenas()) {
for (PotentialBlockPosition blockPos : a.getSigns()) {
Block block = blockPos.getBlock();
if (block != null && block.equals(clickedBlock)) {
arena = a;
break;
}
}
}
var playerArena = ArenaManager.getInstance().getArena(player);
if (arena == null) {
for (PotentialBlockPosition blockPos : SignManager.getInstance().getRandomJoinSigns()) {
Block block = blockPos.getBlock();
if (block == null || !block.equals(clickedBlock)) {
continue;
}
arena = getRandomArena();
if (arena == null)
MessageManager.getInstance().send(player, ChatColor.RED + "Unable to join an arena right now");
else if (playerArena != null)
MessageManager.getInstance().send(player, ChatColor.RED + "You're already in an arena");
else
arena.join(player);
}
} else {
if (playerArena != null)
MessageManager.getInstance().send(player, ChatColor.RED + "You're already in an arena");
else
arena.join(player);
}
e.setCancelled(true);
}
use of com.gmail.stefvanschiedev.buildinggame.utils.potential.PotentialBlockPosition in project buildinggame by stefvanschie.
the class StatSignUpdater method run.
/**
* {@inheritDoc}
*/
@Override
public void run() {
YamlConfiguration config = SettingsManager.getInstance().getConfig();
YamlConfiguration messages = SettingsManager.getInstance().getMessages();
Map<StatSign, String[]> signTexts = new HashMap<>();
SignManager.getInstance().getStatSigns().forEach(sign -> {
String[] lines = new String[4];
if (sign.getType().isEnabled(config)) {
var stats = StatManager.getInstance().getStats(sign.getType());
if (stats == null)
return;
OfflinePlayer offlinePlayer = null;
int value = -1;
if (stats.size() > sign.getNumber() - 1) {
Stat stat = stats.get(sign.getNumber() - 1);
offlinePlayer = stat.getPlayer();
value = stat.getValue();
}
for (int i = 0; i < 4; i++) lines[i] = replace(MessageManager.translate(messages.getString("signs.stat." + sign.getType().toString().toLowerCase(Locale.getDefault()).replace("_", "-") + ".line-" + (i + 1))), sign, offlinePlayer, value);
} else {
lines[0] = "";
lines[1] = ChatColor.RED + "Stat type";
lines[2] = ChatColor.RED + "is disabled";
lines[3] = "";
}
signTexts.put(sign, lines);
});
if (!Main.getInstance().isEnabled())
return;
new BukkitRunnable() {
@Override
public void run() {
signTexts.forEach((statSign, lines) -> {
PotentialBlockPosition blockPos = statSign.getBlockPosition();
Block block = blockPos.getBlock();
if (block == null || !(block.getState() instanceof Sign)) {
return;
}
Sign sign = (Sign) block.getState();
var length = lines.length;
for (var i = 0; i < length; i++) sign.setLine(i, lines[i]);
sign.update();
});
}
}.runTask(Main.getInstance());
}
Aggregations