mirror of
https://github.com/Ajneb97/MineChess.git
synced 2024-11-25 08:35:11 +01:00
Initial commit
This commit is contained in:
commit
f039a6f534
23
.classpath
Normal file
23
.classpath
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/Paper-1.12.2-b1600.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/spigot-1.13.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Servers Minecraft/PaperSpigot 1.8/spigot1.8.8.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/craftbukkit-1.8.3-R0.1-SNAPSHOT.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/craftbukkit-1.8-R0.1-SNAPSHOT.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/craftbukkit-1.9.4-R0.1-SNAPSHOT.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/craftbukkit-1.9-R0.1-SNAPSHOT.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/craftbukkit-1.10.2-R0.1-SNAPSHOT.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/craftbukkit-1.11.2-R0.1-SNAPSHOT.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Servers Minecraft/HolographicDisplays.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Servers Minecraft/1.16/Paper-1.16.2-latest.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Servers Minecraft/1.16/Paper-1.16.1-latest.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Servers Minecraft/1.16/Paper-1.16.4-latest.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Servers Minecraft/PaperSpigot 1.8/plugins/PlaceholderAPI-2.10.9.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/spigot-1.13.2.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/spigot-1.14.4.jar"/>
|
||||
<classpathentry kind="lib" path="D:/Mis Documentos/Minecraft Mods/Jars/spigot-1.15.2.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
23
.gitignore
vendored
Normal file
23
.gitignore
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
# Compiled class file
|
||||
*.class
|
||||
|
||||
# Log file
|
||||
*.log
|
||||
|
||||
# BlueJ files
|
||||
*.ctxt
|
||||
|
||||
# Mobile Tools for Java (J2ME)
|
||||
.mtj.tmp/
|
||||
|
||||
# Package Files #
|
||||
*.jar
|
||||
*.war
|
||||
*.nar
|
||||
*.ear
|
||||
*.zip
|
||||
*.tar.gz
|
||||
*.rar
|
||||
|
||||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||
hs_err_pid*
|
17
.project
Normal file
17
.project
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>MineChess</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
12
.settings/org.eclipse.jdt.core.prefs
Normal file
12
.settings/org.eclipse.jdt.core.prefs
Normal file
@ -0,0 +1,12 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 Ajneb97
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
2
README.md
Normal file
2
README.md
Normal file
@ -0,0 +1,2 @@
|
||||
# MineChess
|
||||
https://www.spigotmc.org/resources/74178/
|
1
arenas.yml
Normal file
1
arenas.yml
Normal file
@ -0,0 +1 @@
|
||||
Arenas:
|
160
config.yml
Normal file
160
config.yml
Normal file
@ -0,0 +1,160 @@
|
||||
Messages:
|
||||
prefix: "&7[&2&lChess&7] "
|
||||
configReloaded: "&aConfig Reloaded!"
|
||||
noPermissions: "&cYou don't have permissions."
|
||||
commandCreateErrorUse: "&cYou need to use &7/chess create <arena>"
|
||||
arenaAlreadyExists: "&cThat arena already exists."
|
||||
arenaCreated: "&aArena created! Use &7/chess build %arena% &ato automatically construct the arena in your position."
|
||||
arenaDoesNotExists: "&cThat arena doesn't exists."
|
||||
commandBuildErrorUse: "&cYou need to use &7/chess build <arena>"
|
||||
arenaBuilt: "&aThe arena was built correctly!"
|
||||
commandSetSpawnErrorUse: "&cYou need to use &7/chess setspawn <arena>"
|
||||
spawnSet: "&aSpawn set for arena &e%arena%&a."
|
||||
mainLobbyDefined: "&aMain Lobby defined correctly."
|
||||
commandJoinErrorUse: "&cYou need to use &7/chess join <arena>"
|
||||
playerJoin: "&7%player% &ehas joined the game (&b%current_players%&8/&b2&e)"
|
||||
playerLeave: "&7%player% &ehas left the game (&b%current_players%&8/&b2&e)"
|
||||
arenaStartingMessage: "&eThe game starts in &7%time% &eseconds!"
|
||||
gameStartingCancelled: "&7There are not enough players to start the game."
|
||||
gameStarted: "&aGame started!"
|
||||
blackPiecesInfo: "&eYou are the &0&lBLACK &epieces."
|
||||
whitePiecesInfo: "&eYou are the &f&lWHITE &epieces."
|
||||
gameFinished:
|
||||
- "&e&m "
|
||||
- "&6%player% &ewon the game with &9%points% Points&e!"
|
||||
- "&e&m "
|
||||
gameFinishedTie:
|
||||
- "&e&m "
|
||||
- "&e There was a tie!"
|
||||
- "&e&m "
|
||||
arenaDisabledError: "&cThe arena is disabled."
|
||||
alreadyInArena: "&cYou are already in an arena."
|
||||
arenaAlreadyStarted: "&cThe arena already started."
|
||||
arenaIsFull: "&cThe arena is full."
|
||||
notInAGame: "&cYou are not in a game."
|
||||
commandEnableErrorUse: "&cYou need to use: &7/chess enable <arena>"
|
||||
arenaAlreadyEnabled: "&cThe arena is already enabled."
|
||||
enableArenaBuildError: "&cYou need to build the arena first by using &7/chess build <arena>"
|
||||
enableArenaSpawnError: "&cYou need to set the arena spawn first by using &7/chess setspawn <arena>"
|
||||
arenaEnabled: "&aArena &e%arena% &aenabled."
|
||||
commandDisableErrorUse: "&cYou need to use: &7/chess disable <arena>"
|
||||
arenaAlreadyDisabled: "&cThe arena is already disabled."
|
||||
arenaDisabled: "&aArena &e%arena% &adisabled."
|
||||
noMainLobby: "&cBefore creating an arena you need to set the Main Lobby with: &7/chess setmainlobby"
|
||||
commandDeleteErrorUse: "&cYou need to use: &7/chess delete <arena>"
|
||||
arenaDeleted: "&aArena &e%arena% &adeleted."
|
||||
notYourTurn: "&cIs not your turn!"
|
||||
notYourPiece: "&cThat is not your piece!"
|
||||
pieceSelected: "&7&l%piece% &eselected."
|
||||
piecePawn: "&aPawn"
|
||||
pieceRook: "&aRook"
|
||||
pieceKnight: "&aKnight"
|
||||
pieceBishop: "&aBishop"
|
||||
pieceQueen: "&aQueen"
|
||||
pieceKing: "&aKing"
|
||||
changeTurn: "&6➤ &eIt's &a%player% &eTurn."
|
||||
pieceMove: "&6➤ &a%player% &emoved &a%piece% &eto &7[%coords%]&e."
|
||||
pieceCaptured: "&6➤ &a%player% &emoved &a%piece% &eto &7[%coords%] &eand captured &c%player2%'s %player2_piece%&e."
|
||||
castling: "&6➤ &a%player% &ecastled his King to &7[%coords%]&e."
|
||||
promotion: "&6➤ &a%player% &epromoted his Pawn to &a%piece%&e."
|
||||
check: "&6➤ &a%player%'s &cKing is in check!"
|
||||
checkmate: "&6➤ &a%player%'s &cKing is in checkmate!"
|
||||
actionbarPlayerTurn: "&9It's &e%player% &9Turn. &8(&6%time%&8)"
|
||||
actionbarYourTurn: "&9It's your Turn. &8(&6%time%&8)"
|
||||
gameScoreboardTitle: "&bMineChess"
|
||||
gameScoreboardBody:
|
||||
- "&1"
|
||||
- "&cStatus:"
|
||||
- "&e%status%"
|
||||
- "&2"
|
||||
- "&a&l%player_1% &cPoints: &a%player_1_points%"
|
||||
- "&a&l%player_2% &cPoints: &a%player_2_points%"
|
||||
- "&3"
|
||||
- "&cmc.server.com"
|
||||
statusWaiting: "&eWAITING"
|
||||
statusStarting: "&eSTARTING IN &a%time%"
|
||||
statusIngame: "&eENDS IN &a%time%"
|
||||
statusFinishing: "&eFINISHING IN &a%time%"
|
||||
gameScoreboardWaitingPlayer: "Player"
|
||||
pawnPromotionInventoryTitle: "&cPawn Promotion"
|
||||
promoteItemName: "&ePromote to: &a%piece%"
|
||||
signFormat:
|
||||
- "&8[&2Chess&8]"
|
||||
- "&9%arena%"
|
||||
- "%status%"
|
||||
- "&a%current_players%&8/&a%max_players%"
|
||||
signStatusWaiting: "&1WAITING"
|
||||
signStatusStarting: "&6STARTING"
|
||||
signStatusIngame: "&cINGAME"
|
||||
signStatusDisabled: "&8DISABLED"
|
||||
signStatusFinishing: "&4FINISHING"
|
||||
titleKingInCheck: "&a%player%'s &cKing is in check!"
|
||||
titleKingInCheckmate: "&a%player%'s &cKing is in checkmate!"
|
||||
commandSpectateErrorUse: "&cYou need to use &7/chess spectate <arena>/<player>"
|
||||
commandSpectateAllError: "&cThe arena doesn't exists or that player is not playing on it."
|
||||
arenaMustHaveStarted: "&cThe arena must have started to spectate it!"
|
||||
errorPlayerNotExists: "&7Player &e%player% &7doesn't have any stored stats."
|
||||
commandPlayerStats:
|
||||
- "&9&lStats of &e%player%"
|
||||
- "&7Wins: &e%wins%"
|
||||
- "&7Ties: &e%ties%"
|
||||
- "&7Loses: &e%loses%"
|
||||
- "&7Time Played: &d%time%"
|
||||
noArenasAvailable: "&cThere are no arenas available."
|
||||
errorClearInventory: "&c&lERROR! &7To join an arena clear your inventory first."
|
||||
Config:
|
||||
arena_starting_cooldown: 10
|
||||
arena_ending_phase_cooldown: 10
|
||||
arena_time: 1200
|
||||
piece_holograms_enabled: true
|
||||
teleport_last_location: false
|
||||
empty_inventory_to_join: false
|
||||
click_distance: 15
|
||||
time_in_each_turn:
|
||||
enabled: true
|
||||
time: 60
|
||||
action_when_time_runs_out: move
|
||||
leave_item_enabled: true
|
||||
leave_item:
|
||||
item: IRON_DOOR
|
||||
name: "&7[&c&lLeave&7]"
|
||||
lore:
|
||||
- "&7Right Click to leave the game."
|
||||
select_item:
|
||||
item: NAME_TAG
|
||||
name: "&7[&a&lSelect and Move&7]"
|
||||
lore:
|
||||
- "&eLeft Click &7to select a piece."
|
||||
- "&eRight Click &7to move a selected piece."
|
||||
commands_whitelist:
|
||||
- "/chess leave"
|
||||
- "/help"
|
||||
per_arena_chat: true
|
||||
soundCapturePiece: "BLOCK_NOTE_BLOCK_PLING;10;2"
|
||||
soundLosePiece: "BLOCK_NOTE_BLOCK_PLING;10;0.1"
|
||||
soundMovePiece: "BLOCK_STONE_STEP;10;1"
|
||||
soundCastling: "BLOCK_PISTON_EXTEND;10;1.5"
|
||||
soundSelectPiece: "UI_BUTTON_CLICK;10;1"
|
||||
soundPromotion: "ENTITY_PLAYER_LEVELUP;10;2"
|
||||
soundCheck: "ENTITY_BLAZE_DEATH;10;0.5"
|
||||
pointsPawn: 1
|
||||
pointsRook: 3
|
||||
pointsKnight: 3
|
||||
pointsBishop: 3
|
||||
pointsQueen: 10
|
||||
pointsKing: 20
|
||||
winners_command_rewards:
|
||||
- "msg %player% &aHere, take a reward!"
|
||||
- "eco give %player% %random_5*points-10*points%"
|
||||
losers_command_rewards:
|
||||
- "msg %player% &aYou've lost! Here, take this compensation reward."
|
||||
- "eco give %player% %random_2*points-3*points%"
|
||||
minimum_time_for_rewards: 240
|
||||
rewards_executed_after_teleport: true
|
||||
mysql_database:
|
||||
enabled: false
|
||||
host: localhost
|
||||
port: 3306
|
||||
username: root
|
||||
password: root
|
||||
database: database
|
1
players.yml
Normal file
1
players.yml
Normal file
@ -0,0 +1 @@
|
||||
Players:
|
9
plugin.yml
Normal file
9
plugin.yml
Normal file
@ -0,0 +1,9 @@
|
||||
main: mc.ajneb97.MineChess
|
||||
version: 1.12.1
|
||||
name: MineChess
|
||||
api-version: 1.13
|
||||
softdepend: [Multiverse-Core,HolographicDisplays,PlaceholderAPI]
|
||||
|
||||
commands:
|
||||
chess:
|
||||
description: Main command of MineChess
|
392
src/mc/ajneb97/Comando.java
Normal file
392
src/mc/ajneb97/Comando.java
Normal file
@ -0,0 +1,392 @@
|
||||
package mc.ajneb97;
|
||||
|
||||
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mc.ajneb97.juego.Estado;
|
||||
import mc.ajneb97.juego.Jugador;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
import mc.ajneb97.juego.Tablero;
|
||||
import mc.ajneb97.managers.PartidaManager;
|
||||
import mc.ajneb97.mysql.MySQL;
|
||||
import mc.ajneb97.mysql.MySQLJugadorCallback;
|
||||
import mc.ajneb97.otros.Utilidades;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
|
||||
|
||||
|
||||
public class Comando implements CommandExecutor {
|
||||
|
||||
private MineChess plugin;
|
||||
public Comando(MineChess plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
|
||||
if (!(sender instanceof Player)){
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
String prefix = ChatColor.translateAlternateColorCodes('&', config.getString("Messages.prefix"));
|
||||
if(args.length > 0) {
|
||||
if(args[0].equalsIgnoreCase("reload")) {
|
||||
plugin.reloadConfig();
|
||||
sender.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.configReloaded")));
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
Player jugador = (Player)sender;
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
String prefix = ChatColor.translateAlternateColorCodes('&', config.getString("Messages.prefix"));
|
||||
if(args.length > 0) {
|
||||
if(args[0].equalsIgnoreCase("create")) {
|
||||
// /chess create <arena>
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
if(args.length >= 2) {
|
||||
if(plugin.getPartida(args[1]) == null) {
|
||||
if(!config.contains("MainLobby")) {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noMainLobby")));
|
||||
return true;
|
||||
}
|
||||
|
||||
Partida partida = new Partida(args[1]);
|
||||
plugin.agregarPartida(partida);
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaCreated").replace("%arena%", args[1])));
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaAlreadyExists")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.commandCreateErrorUse")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
}
|
||||
}else if(args[0].equalsIgnoreCase("build")) {
|
||||
// /chess build <arena>
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
if(args.length >= 2) {
|
||||
Partida partida = plugin.getPartida(args[1]);
|
||||
if(partida != null) {
|
||||
//161 8 9 -> 184 8 32
|
||||
Tablero.construirTablero(jugador.getLocation());
|
||||
Location esquina1 = jugador.getLocation().clone().add(0,-1,0);
|
||||
Tablero.crearPiezas(esquina1);
|
||||
partida.setEsquina1(new Location(esquina1.getWorld(),esquina1.getBlockX(),esquina1.getBlockY(),esquina1.getBlockZ()));
|
||||
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaBuilt")));
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDoesNotExists")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.commandBuildErrorUse")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
}
|
||||
}else if(args[0].equalsIgnoreCase("setspawn")) {
|
||||
// /chess setspawn <arena>
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
if(args.length >= 2) {
|
||||
Partida partida = plugin.getPartida(args[1]);
|
||||
if(partida != null) {
|
||||
partida.setSpawn(jugador.getLocation().clone());
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.spawnSet").replace("%arena%", args[1])));
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDoesNotExists")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.commandSetSpawnErrorUse")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
}
|
||||
}else if(args[0].equalsIgnoreCase("setmainlobby")) {
|
||||
// /chess setmainlobby
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
Location l = jugador.getLocation();
|
||||
config.set("MainLobby.x", l.getX()+"");
|
||||
config.set("MainLobby.y", l.getY()+"");
|
||||
config.set("MainLobby.z", l.getZ()+"");
|
||||
config.set("MainLobby.world", l.getWorld().getName());
|
||||
config.set("MainLobby.pitch", l.getPitch());
|
||||
config.set("MainLobby.yaw", l.getYaw());
|
||||
plugin.saveConfig();
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.mainLobbyDefined")));
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
}
|
||||
}else if(args[0].equalsIgnoreCase("spectate")) {
|
||||
// /chess spectate <arena> o <player>
|
||||
if(args.length >= 2) {
|
||||
Partida partida = plugin.getPartida(args[1]);
|
||||
if(partida == null) {
|
||||
partida = plugin.getPartidaJugador(args[1]);
|
||||
if(partida == null) {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.commandSpectateAllError")));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(partida.estaActivada()) {
|
||||
if(plugin.getPartidaJugador(jugador.getName()) == null) {
|
||||
if(partida.estaIniciada()) {
|
||||
PartidaManager.espectadorEntra(partida, jugador, plugin);
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaMustHaveStarted")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.alreadyInArena")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDisabledError")));
|
||||
}
|
||||
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.commandSpectateErrorUse")));
|
||||
}
|
||||
}
|
||||
else if(args[0].equalsIgnoreCase("join")) {
|
||||
// /chess join <arena>
|
||||
if(args.length >= 2) {
|
||||
Partida partida = plugin.getPartida(args[1]);
|
||||
if(partida != null) {
|
||||
if(partida.estaActivada()) {
|
||||
if(plugin.getPartidaJugador(jugador.getName()) == null) {
|
||||
if(!partida.estaIniciada()) {
|
||||
if(!partida.estaLlena()) {
|
||||
if(!Utilidades.pasaConfigInventario(jugador, config)) {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.errorClearInventory")));
|
||||
return true;
|
||||
}
|
||||
PartidaManager.jugadorEntra(partida, jugador,plugin);
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaIsFull")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaAlreadyStarted")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.alreadyInArena")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDisabledError")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDoesNotExists")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.commandJoinErrorUse")));
|
||||
}
|
||||
}else if(args[0].equalsIgnoreCase("joinrandom")) {
|
||||
// /chess joinrandom
|
||||
Partida partidaNueva = PartidaManager.getPartidaDisponible(plugin);
|
||||
if(partidaNueva == null) {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noArenasAvailable")));
|
||||
}else {
|
||||
if(plugin.getPartidaJugador(jugador.getName()) == null) {
|
||||
PartidaManager.jugadorEntra(partidaNueva, jugador,plugin);
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.alreadyInArena")));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if(args[0].equalsIgnoreCase("leave")) {
|
||||
// /chess leave
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
Jugador j = partida.getJugador(jugador.getName());
|
||||
if(j.esEspectador()) {
|
||||
PartidaManager.espectadorSale(partida, jugador, plugin);
|
||||
}else {
|
||||
PartidaManager.jugadorSale(partida, jugador, false, plugin, false);
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.notInAGame")));
|
||||
}
|
||||
}else if(args[0].equalsIgnoreCase("enable")) {
|
||||
// /chess enable <arena>
|
||||
//Para activar una arena todo debe estar definido
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
if(args.length >= 2) {
|
||||
Partida partida = plugin.getPartida(args[1]);
|
||||
if(partida != null) {
|
||||
if(partida.estaActivada()) {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaAlreadyEnabled")));
|
||||
}else {
|
||||
if(partida.getEsquina1() == null) {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.enableArenaBuildError")));
|
||||
return true;
|
||||
}
|
||||
if(partida.getSpawn() == null) {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.enableArenaSpawnError")));
|
||||
return true;
|
||||
}
|
||||
|
||||
partida.setEstado(Estado.ESPERANDO);
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaEnabled").replace("%arena%", args[1])));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDoesNotExists")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.commandEnableErrorUse")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
}
|
||||
}else if(args[0].equalsIgnoreCase("disable")) {
|
||||
// /chess disable <arena>
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
if(args.length >= 2) {
|
||||
Partida partida = plugin.getPartida(args[1]);
|
||||
if(partida != null) {
|
||||
if(!partida.estaActivada()) {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaAlreadyDisabled")));
|
||||
}else {
|
||||
partida.setEstado(Estado.DESACTIVADA);
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDisabled").replace("%arena%", args[1])));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDoesNotExists")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.commandDisableErrorUse")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
}
|
||||
}else if(args[0].equalsIgnoreCase("delete")) {
|
||||
// /chess delete <nombre>
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
if(args.length >= 2) {
|
||||
Partida partida = plugin.getPartida(args[1]);
|
||||
if(partida != null) {
|
||||
Location l = partida.getEsquina1();
|
||||
Location l2 = l.clone().add(24,5,24);
|
||||
for(int x=l.getBlockX();x<l2.getBlockX();x++) {
|
||||
for(int y=l.getBlockY();y<l2.getBlockY();y++) {
|
||||
for(int z=l.getBlockZ();z<l2.getBlockZ();z++) {
|
||||
Location nueva = new Location(l.getWorld(),x,y,z);
|
||||
if(nueva != null) {
|
||||
Block b = nueva.getBlock();
|
||||
if(b != null) {
|
||||
b.setType(Material.AIR);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
plugin.removerPartida(args[1]);
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDeleted").replace("%arena%", args[1])));
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDoesNotExists")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.commandDeleteErrorUse")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
}
|
||||
}else if(args[0].equalsIgnoreCase("stats")) {
|
||||
comandoStats(args,jugador,config,prefix);
|
||||
}
|
||||
else if(args[0].equalsIgnoreCase("reload")) {
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
plugin.reloadConfig();
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.configReloaded")));
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
enviarAyuda(jugador);
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
}
|
||||
|
||||
}
|
||||
}else {
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
enviarAyuda(jugador);
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
public void comandoStats(String[] args, final Player jugador, final FileConfiguration config, final String prefix) {
|
||||
// /chess stats -> Stats del jugador
|
||||
// /chess stats <usuario> -> Stats de ese usuario
|
||||
JugadorDatos j = null;
|
||||
String nombreJugador = "";
|
||||
if (args.length == 1) {
|
||||
if (jugador.isOp() || jugador.hasPermission("chess.stats")) {
|
||||
nombreJugador = jugador.getName();
|
||||
j = plugin.getJugador(nombreJugador);
|
||||
} else {
|
||||
jugador.sendMessage(prefix
|
||||
+ ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (jugador.isOp() || jugador.hasPermission("chess.stats.others")) {
|
||||
nombreJugador = args[1];
|
||||
j = plugin.getJugador(nombreJugador);
|
||||
} else {
|
||||
jugador.sendMessage(prefix
|
||||
+ ChatColor.translateAlternateColorCodes('&', config.getString("Messages.noPermissions")));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (j != null) {
|
||||
List<String> msg = config.getStringList("Messages.commandPlayerStats");
|
||||
for (int i = 0; i < msg.size(); i++) {
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
msg.get(i).replace("%player%", j.getPlayer()).replace("%wins%", j.getWins() + "")
|
||||
.replace("%ties%", j.getTies() + "").replace("%loses%", j.getLoses() + "")
|
||||
.replace("%time%", Utilidades.getTiempoJugado(j.getMillisJugados()))));
|
||||
}
|
||||
} else {
|
||||
jugador.sendMessage(prefix + ChatColor.translateAlternateColorCodes('&',
|
||||
config.getString("Messages.errorPlayerNotExists").replace("%player%", nombreJugador)));
|
||||
}
|
||||
}
|
||||
|
||||
public void enviarAyuda(Player jugador) {
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&7[ [ &8[&9MineChess&8] &7] ]"));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',""));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess create <arena> &8Creates a new arena."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess delete <arena> &8Deletes an arena."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess join <arena> &8Joins an arena."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess joinrandom &8Joins a random arena."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess leave &8Leaves from the arena."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess spectate <arena>/<player> &8Spectates an arena or player."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess setmainlobby &8Defines the minigame main lobby."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess enable <arena> &8Enables an arena."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess disable <arena> &8Disables an arena."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess build <arena> &8Builds the arena in your current position."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess setspawn <arena> &8Sets the arena spawn."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess reload &8Reloads the configuration files."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&6/chess stats <player> &8Check stats of player."));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',""));
|
||||
jugador.sendMessage(ChatColor.translateAlternateColorCodes('&',"&7[ [ &8[&9MineChess&8] &7] ]"));
|
||||
}
|
||||
}
|
79
src/mc/ajneb97/JugadorDatos.java
Normal file
79
src/mc/ajneb97/JugadorDatos.java
Normal file
@ -0,0 +1,79 @@
|
||||
package mc.ajneb97;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import mc.ajneb97.mysql.MySQL;
|
||||
|
||||
public class JugadorDatos {
|
||||
|
||||
private String player;
|
||||
private String uuid;
|
||||
private int wins;
|
||||
private int loses;
|
||||
private int ties;
|
||||
private long millisJugados;
|
||||
|
||||
public JugadorDatos(String player, String uuid,int wins,int loses,int ties,long millisJugados) {
|
||||
this.uuid = uuid;
|
||||
this.player = player;
|
||||
this.wins = wins;
|
||||
this.loses = loses;
|
||||
this.ties = ties;
|
||||
this.millisJugados = millisJugados;
|
||||
}
|
||||
|
||||
public void aumentarMillisJugados(long millis,FileConfiguration config,MineChess plugin) {
|
||||
this.millisJugados = this.millisJugados+millis;
|
||||
if(MySQL.isEnabled(config)) {
|
||||
MySQL.modificarJugador(plugin, this);
|
||||
}
|
||||
}
|
||||
|
||||
public long getMillisJugados() {
|
||||
return this.millisJugados;
|
||||
}
|
||||
|
||||
public String getUUID() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
public String getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public int getWins() {
|
||||
return wins;
|
||||
}
|
||||
|
||||
public int getLoses() {
|
||||
return loses;
|
||||
}
|
||||
|
||||
public int getTies() {
|
||||
return ties;
|
||||
}
|
||||
|
||||
public void aumentarWins(FileConfiguration config,MineChess plugin) {
|
||||
this.wins++;
|
||||
if(MySQL.isEnabled(config)) {
|
||||
MySQL.modificarJugador(plugin, this);
|
||||
}
|
||||
}
|
||||
|
||||
public void aumentarLoses(FileConfiguration config,MineChess plugin) {
|
||||
this.loses++;
|
||||
if(MySQL.isEnabled(config)) {
|
||||
MySQL.modificarJugador(plugin, this);
|
||||
}
|
||||
}
|
||||
|
||||
public void aumentarTies(FileConfiguration config,MineChess plugin) {
|
||||
this.ties++;
|
||||
if(MySQL.isEnabled(config)) {
|
||||
MySQL.modificarJugador(plugin, this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
561
src/mc/ajneb97/MineChess.java
Normal file
561
src/mc/ajneb97/MineChess.java
Normal file
@ -0,0 +1,561 @@
|
||||
package mc.ajneb97;
|
||||
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.sql.Connection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import mc.ajneb97.api.ChessAPI;
|
||||
import mc.ajneb97.api.ExpansionMineChess;
|
||||
import mc.ajneb97.juego.Estado;
|
||||
import mc.ajneb97.juego.Jugador;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
import mc.ajneb97.managers.CartelesListener;
|
||||
import mc.ajneb97.managers.Entrar;
|
||||
import mc.ajneb97.managers.InventarioCoronacion;
|
||||
import mc.ajneb97.managers.PartidaListener;
|
||||
import mc.ajneb97.managers.PartidaManager;
|
||||
import mc.ajneb97.managers.ScoreboardAdmin;
|
||||
import mc.ajneb97.managers.SignAdmin;
|
||||
import mc.ajneb97.mysql.ConexionMySQL;
|
||||
import mc.ajneb97.mysql.MySQL;
|
||||
|
||||
//JAQUE: Al realizar un movimiento, comprobar por todas las piezas del jugador en su turno y ver si alguna posicion
|
||||
// coincide con la del rey contrario.
|
||||
//JAQUE: Si el rey esta en jaque, en su turno solo mostrar los movimientos posibles para salir de jaque.
|
||||
// Para esto hay que obtener TODOS los movimientos posibles del rey, y por cada uno de ellos comprobar si
|
||||
// el rey ya no esta en jaque. Los movimientos validos que permiten al rey salir de jaque seran los movimientos
|
||||
// finales.
|
||||
//JAQUE: Si el rey esta en jaque, al seleccionar una pieza comprobar por cada movimiento posible si ese movimiento
|
||||
// saca del jaque al rey, y agregarlo a la lista. Para ver si el movimiento saca del jaque al rey, hay
|
||||
// que comprobar por todas las piezas contrarias si pueden comer al rey o no
|
||||
//JAQUE: Eliminar los movimientos que harian que tu rey este en jaque
|
||||
|
||||
public class MineChess extends JavaPlugin {
|
||||
|
||||
PluginDescriptionFile pdfFile = getDescription();
|
||||
public String version = pdfFile.getVersion();
|
||||
public String latestversion;
|
||||
private ArrayList<Partida> partidas;
|
||||
private FileConfiguration arenas = null;
|
||||
private File arenasFile = null;
|
||||
private FileConfiguration signs = null;
|
||||
private File signsFile = null;
|
||||
private FileConfiguration players = null;
|
||||
private File playersFile = null;
|
||||
private ArrayList<JugadorDatos> jugadores;
|
||||
public String rutaConfig;
|
||||
public static String prefix = ChatColor.translateAlternateColorCodes('&', "&8[&2&lMineChess&8] ");
|
||||
|
||||
private ConexionMySQL conexionDatabase;
|
||||
|
||||
public void onEnable(){
|
||||
partidas = new ArrayList<Partida>();
|
||||
jugadores = new ArrayList<JugadorDatos>();
|
||||
registerEvents();
|
||||
registerCommands();
|
||||
registerConfig();
|
||||
registerArenas();
|
||||
registerPlayers();
|
||||
cargarPartidas();
|
||||
if(MySQL.isEnabled(getConfig())) {
|
||||
conexionDatabase = new ConexionMySQL();
|
||||
conexionDatabase.setupMySql(this, getConfig());
|
||||
}
|
||||
cargarJugadores();
|
||||
|
||||
SignAdmin signs = new SignAdmin(this);
|
||||
signs.actualizarSigns();
|
||||
ScoreboardAdmin scoreboards = new ScoreboardAdmin(this);
|
||||
scoreboards.crearScoreboards();
|
||||
|
||||
ChessAPI api = new ChessAPI(this);
|
||||
if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null){
|
||||
new ExpansionMineChess(this).register();
|
||||
}
|
||||
checkMessagesUpdate();
|
||||
|
||||
|
||||
Bukkit.getConsoleSender().sendMessage(prefix+ChatColor.YELLOW + "Has been enabled! " + ChatColor.WHITE + "Version: " + version);
|
||||
Bukkit.getConsoleSender().sendMessage(prefix+ChatColor.YELLOW + "Thanks for using my plugin! " + ChatColor.WHITE + "~Ajneb97");
|
||||
updateChecker();
|
||||
}
|
||||
|
||||
public void onDisable(){
|
||||
if(partidas != null) {
|
||||
for(int i=0;i<partidas.size();i++) {
|
||||
if(!partidas.get(i).getEstado().equals(Estado.DESACTIVADA)) {
|
||||
PartidaManager.finalizarPartida(partidas.get(i),null,this,true);
|
||||
}
|
||||
}
|
||||
}
|
||||
guardarPartidas();
|
||||
guardarJugadores();
|
||||
Bukkit.getConsoleSender().sendMessage(prefix+ChatColor.YELLOW + "Has been disabled! " + ChatColor.WHITE + "Version: " + version);
|
||||
}
|
||||
public void registerCommands(){
|
||||
this.getCommand("chess").setExecutor(new Comando(this));
|
||||
}
|
||||
|
||||
public void registerEvents(){
|
||||
PluginManager pm = getServer().getPluginManager();
|
||||
pm.registerEvents(new PartidaListener(this), this);
|
||||
pm.registerEvents(new InventarioCoronacion(this), this);
|
||||
pm.registerEvents(new CartelesListener(this), this);
|
||||
pm.registerEvents(new Entrar(this), this);
|
||||
}
|
||||
|
||||
public Partida getPartidaJugador(String jugador) {
|
||||
for(int i=0;i<partidas.size();i++) {
|
||||
ArrayList<Jugador> jugadores = partidas.get(i).getJugadores();
|
||||
for(int c=0;c<jugadores.size();c++) {
|
||||
if(jugadores.get(c).getJugador().getName().equals(jugador)) {
|
||||
return partidas.get(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ArrayList<Partida> getPartidas() {
|
||||
return this.partidas;
|
||||
}
|
||||
|
||||
public Partida getPartida(String nombre) {
|
||||
for(int i=0;i<partidas.size();i++) {
|
||||
if(partidas.get(i).getNombre().equals(nombre)) {
|
||||
return partidas.get(i);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void agregarPartida(Partida partida) {
|
||||
this.partidas.add(partida);
|
||||
}
|
||||
|
||||
public void removerPartida(String nombre) {
|
||||
for(int i=0;i<partidas.size();i++) {
|
||||
if(partidas.get(i).getNombre().equals(nombre)) {
|
||||
partidas.remove(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void registerConfig(){
|
||||
File config = new File(this.getDataFolder(),"config.yml");
|
||||
rutaConfig = config.getPath();
|
||||
if(!config.exists()){
|
||||
this.getConfig().options().copyDefaults(true);
|
||||
saveConfig();
|
||||
}
|
||||
}
|
||||
|
||||
public void registerArenas(){
|
||||
arenasFile = new File(this.getDataFolder(), "arenas.yml");
|
||||
if(!arenasFile.exists()){
|
||||
this.getArenas().options().copyDefaults(true);
|
||||
saveArenas();
|
||||
}
|
||||
}
|
||||
public void saveArenas() {
|
||||
try {
|
||||
arenas.save(arenasFile);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public FileConfiguration getArenas() {
|
||||
if (arenas == null) {
|
||||
reloadArenas();
|
||||
}
|
||||
return arenas;
|
||||
}
|
||||
|
||||
public void reloadArenas() {
|
||||
if (arenas == null) {
|
||||
arenasFile = new File(getDataFolder(), "arenas.yml");
|
||||
}
|
||||
arenas = YamlConfiguration.loadConfiguration(arenasFile);
|
||||
|
||||
Reader defConfigStream;
|
||||
try {
|
||||
defConfigStream = new InputStreamReader(this.getResource("arenas.yml"), "UTF8");
|
||||
if (defConfigStream != null) {
|
||||
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
|
||||
arenas.setDefaults(defConfig);
|
||||
}
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void cargarPartidas() {
|
||||
this.partidas = new ArrayList<Partida>();
|
||||
FileConfiguration arenas = getArenas();
|
||||
if(arenas.contains("Arenas")) {
|
||||
for(String key : arenas.getConfigurationSection("Arenas").getKeys(false)) {
|
||||
Location lSpawn = null;
|
||||
if(arenas.contains("Arenas."+key+".Spawn")) {
|
||||
double xSpawn = Double.valueOf(arenas.getString("Arenas."+key+".Spawn.x"));
|
||||
double ySpawn = Double.valueOf(arenas.getString("Arenas."+key+".Spawn.y"));
|
||||
double zSpawn = Double.valueOf(arenas.getString("Arenas."+key+".Spawn.z"));
|
||||
String worldSpawn = arenas.getString("Arenas."+key+".Spawn.world");
|
||||
float pitchSpawn = Float.valueOf(arenas.getString("Arenas."+key+".Spawn.pitch"));
|
||||
float yawSpawn = Float.valueOf(arenas.getString("Arenas."+key+".Spawn.yaw"));
|
||||
lSpawn = new Location(Bukkit.getWorld(worldSpawn),xSpawn,ySpawn,zSpawn,yawSpawn,pitchSpawn);
|
||||
}
|
||||
Location lLocation = null;
|
||||
if(arenas.contains("Arenas."+key+".Location")) {
|
||||
double xLocation = Double.valueOf(arenas.getString("Arenas."+key+".Location.x"));
|
||||
double yLocation = Double.valueOf(arenas.getString("Arenas."+key+".Location.y"));
|
||||
double zLocation = Double.valueOf(arenas.getString("Arenas."+key+".Location.z"));
|
||||
String worldLocation = arenas.getString("Arenas."+key+".Location.world");
|
||||
lLocation = new Location(Bukkit.getWorld(worldLocation),xLocation,yLocation,zLocation);
|
||||
}
|
||||
|
||||
Partida partida = new Partida(key);
|
||||
partida.setSpawn(lSpawn);
|
||||
partida.setEsquina1(lLocation);
|
||||
String enabled = arenas.getString("Arenas."+key+".enabled");
|
||||
if(enabled.equals("true")) {
|
||||
partida.setEstado(Estado.ESPERANDO);
|
||||
}else {
|
||||
partida.setEstado(Estado.DESACTIVADA);
|
||||
}
|
||||
|
||||
this.partidas.add(partida);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void guardarPartidas() {
|
||||
FileConfiguration arenas = getArenas();
|
||||
arenas.set("Arenas", null);
|
||||
for(Partida p : this.partidas) {
|
||||
String nombre = p.getNombre();
|
||||
Location lSpawn = p.getSpawn();
|
||||
if(lSpawn != null) {
|
||||
arenas.set("Arenas."+nombre+".Spawn.x", lSpawn.getX()+"");
|
||||
arenas.set("Arenas."+nombre+".Spawn.y", lSpawn.getY()+"");
|
||||
arenas.set("Arenas."+nombre+".Spawn.z", lSpawn.getZ()+"");
|
||||
arenas.set("Arenas."+nombre+".Spawn.world", lSpawn.getWorld().getName());
|
||||
arenas.set("Arenas."+nombre+".Spawn.pitch", lSpawn.getPitch());
|
||||
arenas.set("Arenas."+nombre+".Spawn.yaw", lSpawn.getYaw());
|
||||
}
|
||||
|
||||
Location lEsquina = p.getEsquina1();
|
||||
if(lEsquina != null) {
|
||||
arenas.set("Arenas."+nombre+".Location.x", lEsquina.getX()+"");
|
||||
arenas.set("Arenas."+nombre+".Location.y", lEsquina.getY()+"");
|
||||
arenas.set("Arenas."+nombre+".Location.z", lEsquina.getZ()+"");
|
||||
arenas.set("Arenas."+nombre+".Location.world", lEsquina.getWorld().getName());
|
||||
}
|
||||
|
||||
if(p.getEstado().equals(Estado.DESACTIVADA)) {
|
||||
arenas.set("Arenas."+nombre+".enabled", "false");
|
||||
}else {
|
||||
arenas.set("Arenas."+nombre+".enabled", "true");
|
||||
}
|
||||
}
|
||||
this.saveArenas();
|
||||
}
|
||||
|
||||
public void registerSigns(){
|
||||
signsFile = new File(this.getDataFolder(), "signs.yml");
|
||||
if(!signsFile.exists()){
|
||||
this.getSigns().options().copyDefaults(true);
|
||||
saveSigns();
|
||||
}
|
||||
}
|
||||
public void saveSigns() {
|
||||
try {
|
||||
signs.save(signsFile);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public FileConfiguration getSigns() {
|
||||
if (signs == null) {
|
||||
reloadSigns();
|
||||
}
|
||||
return signs;
|
||||
}
|
||||
|
||||
public void reloadSigns() {
|
||||
if (signs == null) {
|
||||
signsFile = new File(getDataFolder(), "signs.yml");
|
||||
}
|
||||
signs = YamlConfiguration.loadConfiguration(signsFile);
|
||||
|
||||
Reader defConfigStream;
|
||||
try {
|
||||
defConfigStream = new InputStreamReader(this.getResource("signs.yml"), "UTF8");
|
||||
if (defConfigStream != null) {
|
||||
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
|
||||
signs.setDefaults(defConfig);
|
||||
}
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void cargarJugadores() {
|
||||
if(MySQL.isEnabled(getConfig())) {
|
||||
this.jugadores = MySQL.getJugadores(this);
|
||||
return;
|
||||
}
|
||||
FileConfiguration config = getPlayers();
|
||||
if(config.contains("Players")) {
|
||||
for(String key : config.getConfigurationSection("Players").getKeys(false)) {
|
||||
String player = config.getString("Players."+key+".name");
|
||||
int wins = 0;
|
||||
int loses = 0;
|
||||
int ties = 0;
|
||||
long millis = 0;
|
||||
if(config.contains("Players."+key+".wins")){
|
||||
wins = Integer.valueOf(config.getString("Players."+key+".wins"));
|
||||
}
|
||||
if(config.contains("Players."+key+".loses")){
|
||||
loses = Integer.valueOf(config.getString("Players."+key+".loses"));
|
||||
}
|
||||
if(config.contains("Players."+key+".ties")){
|
||||
ties = Integer.valueOf(config.getString("Players."+key+".ties"));
|
||||
}
|
||||
if(config.contains("Players."+key+".played_time")) {
|
||||
millis = Long.valueOf(config.getString("Players."+key+".played_time"));
|
||||
}
|
||||
agregarJugadorDatos(new JugadorDatos(player,key,wins,loses,ties,millis));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void guardarJugadores() {
|
||||
if(MySQL.isEnabled(getConfig())) {
|
||||
return;
|
||||
}
|
||||
FileConfiguration players = getPlayers();
|
||||
for(JugadorDatos j : jugadores) {
|
||||
String uuid = j.getUUID();
|
||||
String name = j.getPlayer();
|
||||
int wins = j.getWins();
|
||||
int loses = j.getLoses();
|
||||
int ties = j.getTies();
|
||||
players.set("Players."+uuid+".name", name);
|
||||
players.set("Players."+uuid+".wins", wins);
|
||||
players.set("Players."+uuid+".loses", loses);
|
||||
players.set("Players."+uuid+".ties", ties);
|
||||
players.set("Players."+uuid+".played_time", j.getMillisJugados());
|
||||
}
|
||||
savePlayers();
|
||||
}
|
||||
|
||||
public void agregarJugadorDatos(JugadorDatos jugador) {
|
||||
jugadores.add(jugador);
|
||||
}
|
||||
|
||||
public void removerJugadorDatos(String jugador) {
|
||||
for(int i=0;i<jugadores.size();i++) {
|
||||
if(jugadores.get(i).getPlayer().equals(jugador)) {
|
||||
jugadores.remove(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public JugadorDatos getJugador(String jugador) {
|
||||
for(JugadorDatos j : jugadores) {
|
||||
if(j.getPlayer().equals(jugador)) {
|
||||
return j;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ArrayList<JugadorDatos> getJugadores(){
|
||||
return this.jugadores;
|
||||
}
|
||||
|
||||
public void updateChecker(){
|
||||
|
||||
try {
|
||||
HttpURLConnection con = (HttpURLConnection) new URL(
|
||||
"https://api.spigotmc.org/legacy/update.php?resource=74178").openConnection();
|
||||
int timed_out = 1250;
|
||||
con.setConnectTimeout(timed_out);
|
||||
con.setReadTimeout(timed_out);
|
||||
latestversion = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine();
|
||||
if (latestversion.length() <= 7) {
|
||||
if(!version.equals(latestversion)){
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.RED +"There is a new version available. "+ChatColor.YELLOW+
|
||||
"("+ChatColor.GRAY+latestversion+ChatColor.YELLOW+")");
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"You can download it at: "+ChatColor.WHITE+"https://www.spigotmc.org/resources/74178/");
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Bukkit.getConsoleSender().sendMessage(prefix + ChatColor.RED +"Error while checking update.");
|
||||
}
|
||||
}
|
||||
|
||||
public void registerPlayers(){
|
||||
playersFile = new File(this.getDataFolder(), "players.yml");
|
||||
if(!playersFile.exists()){
|
||||
this.getPlayers().options().copyDefaults(true);
|
||||
savePlayers();
|
||||
}
|
||||
}
|
||||
public void savePlayers() {
|
||||
try {
|
||||
players.save(playersFile);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public FileConfiguration getPlayers() {
|
||||
if (players == null) {
|
||||
reloadPlayers();
|
||||
}
|
||||
return players;
|
||||
}
|
||||
|
||||
|
||||
public void reloadPlayers() {
|
||||
if (players == null) {
|
||||
playersFile = new File(getDataFolder(), "players.yml");
|
||||
}
|
||||
players = YamlConfiguration.loadConfiguration(playersFile);
|
||||
|
||||
Reader defConfigStream;
|
||||
try {
|
||||
|
||||
defConfigStream = new InputStreamReader(this.getResource("players.yml"), "UTF8");
|
||||
if (defConfigStream != null) {
|
||||
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
|
||||
players.setDefaults(defConfig);
|
||||
}
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void checkMessagesUpdate(){
|
||||
Path archivo = Paths.get(rutaConfig);
|
||||
try{
|
||||
String texto = new String(Files.readAllBytes(archivo));
|
||||
if(!texto.contains("click_distance:")){
|
||||
getConfig().set("Config.click_distance", 15);
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("mysql_database:")){
|
||||
getConfig().set("Config.mysql_database.enabled", false);
|
||||
getConfig().set("Config.mysql_database.host", "localhost");
|
||||
getConfig().set("Config.mysql_database.port", 3306);
|
||||
getConfig().set("Config.mysql_database.username", "root");
|
||||
getConfig().set("Config.mysql_database.password", "root");
|
||||
getConfig().set("Config.mysql_database.database", "database");
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("errorClearInventory:")){
|
||||
getConfig().set("Messages.errorClearInventory", "&c&lERROR! &7To join an arena clear your inventory first.");
|
||||
getConfig().set("Config.empty_inventory_to_join", false);
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("noArenasAvailable:")){
|
||||
getConfig().set("Messages.noArenasAvailable", "&cThere are no arenas available.");
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("losers_command_rewards:")){
|
||||
List<String> lista = new ArrayList<String>();
|
||||
lista.add("msg %player% &aYou've lost! Here, take this compensation reward.");
|
||||
lista.add("eco give %player% %random_2*points-3*points%");
|
||||
getConfig().set("Config.losers_command_rewards", lista);
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("minimum_time_for_rewards:")){
|
||||
|
||||
getConfig().set("Config.minimum_time_for_rewards", 240);
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("teleport_last_location:")){
|
||||
getConfig().set("Config.teleport_last_location", false);
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("rewards_executed_after_teleport:")){
|
||||
getConfig().set("Config.rewards_executed_after_teleport", true);
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("time_in_each_turn:")){
|
||||
getConfig().set("Config.time_in_each_turn.enabled", true);
|
||||
getConfig().set("Config.time_in_each_turn.time", 60);
|
||||
getConfig().set("Config.time_in_each_turn.action_when_time_runs_out", "move");
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("errorPlayerNotExists:")){
|
||||
getConfig().set("Messages.errorPlayerNotExists", "&7Player &e%player% &7doesn't have any stored stats.");
|
||||
List<String> lista = new ArrayList<String>();
|
||||
lista.add("&9&lStats of &e%player%");
|
||||
lista.add("&7Wins: &e%wins%");
|
||||
lista.add("&7Ties: &e%ties%");
|
||||
lista.add("&7Loses: &e%loses%");
|
||||
getConfig().set("Messages.commandPlayerStats", lista);
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("commandSpectateErrorUse:")){
|
||||
getConfig().set("Messages.commandSpectateErrorUse", "&cYou need to use &7/chess spectate <arena>");
|
||||
getConfig().set("Messages.arenaMustHaveStarted", "&cThe arena must have started to spectate it!");
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("titleKingInCheck:")){
|
||||
getConfig().set("Messages.titleKingInCheck", "&a%player%'s &cKing is in check!");
|
||||
getConfig().set("Messages.check", "&6➤ &a%player%'s &cKing is in check!");
|
||||
getConfig().set("Messages.titleKingInCheckmate", "&a%player%'s &cKing is in checkmate!");
|
||||
getConfig().set("Messages.checkmate", "&6➤ &a%player%'s &cKing is in checkmate!");
|
||||
getConfig().set("Config.soundCheck", "ENTITY_BLAZE_DEATH;10;0.5");
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("per_arena_chat:")){
|
||||
getConfig().set("Config.per_arena_chat", true);
|
||||
saveConfig();
|
||||
}
|
||||
if(!texto.contains("piece_holograms_enabled:")){
|
||||
getConfig().set("Config.piece_holograms_enabled", true);
|
||||
saveConfig();
|
||||
}
|
||||
}catch(IOException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public Connection getConnection() {
|
||||
return this.conexionDatabase.getConnection();
|
||||
}
|
||||
|
||||
public void crearJugadorDatosSQL(String nombre,String uuid) {
|
||||
MySQL.crearJugador(this, nombre, uuid);
|
||||
}
|
||||
}
|
106
src/mc/ajneb97/api/ChessAPI.java
Normal file
106
src/mc/ajneb97/api/ChessAPI.java
Normal file
@ -0,0 +1,106 @@
|
||||
package mc.ajneb97.api;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mc.ajneb97.JugadorDatos;
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.juego.Estado;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
import mc.ajneb97.otros.Utilidades;
|
||||
|
||||
public class ChessAPI {
|
||||
|
||||
private static MineChess plugin;
|
||||
|
||||
public ChessAPI(MineChess plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public static int getWins(String player) {
|
||||
JugadorDatos jugador = plugin.getJugador(player);
|
||||
if(jugador != null) {
|
||||
return jugador.getWins();
|
||||
}else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static int getLoses(String player) {
|
||||
JugadorDatos jugador = plugin.getJugador(player);
|
||||
if(jugador != null) {
|
||||
return jugador.getLoses();
|
||||
}else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static int getTies(String player) {
|
||||
JugadorDatos jugador = plugin.getJugador(player);
|
||||
if(jugador != null) {
|
||||
return jugador.getTies();
|
||||
}else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static long getPlayedTime(String player) {
|
||||
JugadorDatos jugador = plugin.getJugador(player);
|
||||
if(jugador != null) {
|
||||
return jugador.getMillisJugados();
|
||||
}else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getPlayedTimeFormatted(String player) {
|
||||
JugadorDatos jugador = plugin.getJugador(player);
|
||||
if(jugador != null) {
|
||||
long millis = jugador.getMillisJugados();
|
||||
String formatted = Utilidades.getTiempoJugado(millis);
|
||||
return formatted;
|
||||
}else {
|
||||
return "00:00";
|
||||
}
|
||||
}
|
||||
|
||||
public static int getPlayersArena(String arena) {
|
||||
Partida partida = plugin.getPartida(arena);
|
||||
if(partida != null) {
|
||||
return partida.getCantidadActualJugadores();
|
||||
}else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getStatusArena(String arena) {
|
||||
Partida partida = plugin.getPartida(arena);
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
if(partida != null) {
|
||||
if(partida.getEstado().equals(Estado.COMENZANDO)) {
|
||||
return config.getString("Messages.signStatusStarting");
|
||||
}else if(partida.getEstado().equals(Estado.DESACTIVADA)) {
|
||||
return config.getString("Messages.signStatusDisabled");
|
||||
}else if(partida.getEstado().equals(Estado.ESPERANDO)) {
|
||||
return config.getString("Messages.signStatusWaiting");
|
||||
}else if(partida.getEstado().equals(Estado.JUGANDO)) {
|
||||
return config.getString("Messages.signStatusIngame");
|
||||
}else {
|
||||
return config.getString("Messages.signStatusFinishing");
|
||||
}
|
||||
}else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static ArrayList<ChessPlayer> getPlayerData(){
|
||||
ArrayList<JugadorDatos> jugadores = plugin.getJugadores();
|
||||
ArrayList<ChessPlayer> players = new ArrayList<ChessPlayer>();
|
||||
for(JugadorDatos j : jugadores) {
|
||||
players.add(new ChessPlayer(j.getPlayer(),j.getWins(),j.getLoses(),j.getTies(),j.getMillisJugados()));
|
||||
}
|
||||
return players;
|
||||
}
|
||||
}
|
10
src/mc/ajneb97/api/ChessArenaStatus.java
Normal file
10
src/mc/ajneb97/api/ChessArenaStatus.java
Normal file
@ -0,0 +1,10 @@
|
||||
package mc.ajneb97.api;
|
||||
|
||||
public enum ChessArenaStatus {
|
||||
|
||||
WAITING,
|
||||
STARTING,
|
||||
INGAME,
|
||||
FINISHING,
|
||||
DISABLED;
|
||||
}
|
40
src/mc/ajneb97/api/ChessPlayer.java
Normal file
40
src/mc/ajneb97/api/ChessPlayer.java
Normal file
@ -0,0 +1,40 @@
|
||||
package mc.ajneb97.api;
|
||||
|
||||
public class ChessPlayer {
|
||||
|
||||
private String player;
|
||||
private int wins;
|
||||
private int loses;
|
||||
private int ties;
|
||||
private long playedTime;
|
||||
|
||||
public ChessPlayer(String player,int wins,int loses,int ties,long playedTime) {
|
||||
this.player = player;
|
||||
this.wins = wins;
|
||||
this.loses = loses;
|
||||
this.ties = ties;
|
||||
this.playedTime = playedTime;
|
||||
}
|
||||
|
||||
public String getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public int getWins() {
|
||||
return wins;
|
||||
}
|
||||
|
||||
public int getLoses() {
|
||||
return loses;
|
||||
}
|
||||
|
||||
public int getTies() {
|
||||
return ties;
|
||||
}
|
||||
|
||||
public long getPlayedTime() {
|
||||
return playedTime;
|
||||
}
|
||||
|
||||
|
||||
}
|
135
src/mc/ajneb97/api/ExpansionMineChess.java
Normal file
135
src/mc/ajneb97/api/ExpansionMineChess.java
Normal file
@ -0,0 +1,135 @@
|
||||
package mc.ajneb97.api;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.api.ChessAPI;
|
||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||
/**
|
||||
* This class will automatically register as a placeholder expansion
|
||||
* when a jar including this class is added to the directory
|
||||
* {@code /plugins/PlaceholderAPI/expansions} on your server.
|
||||
* <br>
|
||||
* <br>If you create such a class inside your own plugin, you have to
|
||||
* register it manually in your plugins {@code onEbale()} by using
|
||||
* {@code new YourExpansionClass().register();}
|
||||
*/
|
||||
public class ExpansionMineChess extends PlaceholderExpansion {
|
||||
|
||||
// We get an instance of the plugin later.
|
||||
private MineChess plugin;
|
||||
|
||||
public ExpansionMineChess(MineChess plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
/**
|
||||
* Because this is an internal class,
|
||||
* you must override this method to let PlaceholderAPI know to not unregister your expansion class when
|
||||
* PlaceholderAPI is reloaded
|
||||
*
|
||||
* @return true to persist through reloads
|
||||
*/
|
||||
@Override
|
||||
public boolean persist(){
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* Since this expansion requires api access to the plugin "SomePlugin"
|
||||
* we must check if said plugin is on the server or not.
|
||||
*
|
||||
* @return true or false depending on if the required plugin is installed.
|
||||
*/
|
||||
@Override
|
||||
public boolean canRegister(){
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* The name of the person who created this expansion should go here.
|
||||
*
|
||||
* @return The name of the author as a String.
|
||||
*/
|
||||
@Override
|
||||
public String getAuthor(){
|
||||
return "Ajneb97";
|
||||
}
|
||||
|
||||
/**
|
||||
* The placeholder identifier should go here.
|
||||
* <br>This is what tells PlaceholderAPI to call our onRequest
|
||||
* method to obtain a value if a placeholder starts with our
|
||||
* identifier.
|
||||
* <br>This must be unique and can not contain % or _
|
||||
*
|
||||
* @return The identifier in {@code %<identifier>_<value>%} as String.
|
||||
*/
|
||||
@Override
|
||||
public String getIdentifier(){
|
||||
return "minechess";
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the version of this expansion.
|
||||
* <br>You don't have to use numbers, since it is set as a String.
|
||||
*
|
||||
* @return The version as a String.
|
||||
*/
|
||||
@Override
|
||||
public String getVersion(){
|
||||
return plugin.getDescription().getVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the method called when a placeholder with our identifier
|
||||
* is found and needs a value.
|
||||
* <br>We specify the value identifier in this method.
|
||||
* <br>Since version 2.9.1 can you use OfflinePlayers in your requests.
|
||||
*
|
||||
* @param player
|
||||
* A {@link org.bukkit.Player Player}.
|
||||
* @param identifier
|
||||
* A String containing the identifier/value.
|
||||
*
|
||||
* @return possibly-null String of the requested identifier.
|
||||
*/
|
||||
@Override
|
||||
public String onPlaceholderRequest(Player player, String identifier){
|
||||
|
||||
if(player == null){
|
||||
return "";
|
||||
}
|
||||
|
||||
if(identifier.equals("wins")){
|
||||
return ChessAPI.getWins(player.getName())+"";
|
||||
}
|
||||
|
||||
if(identifier.equals("loses")){
|
||||
return ChessAPI.getLoses(player.getName())+"";
|
||||
}
|
||||
|
||||
if(identifier.equals("ties")){
|
||||
return ChessAPI.getTies(player.getName())+"";
|
||||
}
|
||||
|
||||
if(identifier.equals("played_time")){
|
||||
return ChessAPI.getPlayedTimeFormatted(player.getName())+"";
|
||||
}
|
||||
|
||||
if(identifier.startsWith("arenaplayers_count_")){
|
||||
String arena = identifier.replace("arenaplayers_count_", "");
|
||||
return ChessAPI.getPlayersArena(arena)+"";
|
||||
}
|
||||
|
||||
if(identifier.startsWith("arena_status_")){
|
||||
String arena = identifier.replace("arena_status_", "");
|
||||
return ChessAPI.getStatusArena(arena)+"";
|
||||
}
|
||||
|
||||
// We return null if an invalid placeholder (f.e. %someplugin_placeholder3%)
|
||||
// was provided
|
||||
return null;
|
||||
}
|
||||
}
|
598
src/mc/ajneb97/juego/Ajedrez.java
Normal file
598
src/mc/ajneb97/juego/Ajedrez.java
Normal file
@ -0,0 +1,598 @@
|
||||
package mc.ajneb97.juego;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
|
||||
public class Ajedrez {
|
||||
|
||||
public static ArrayList<MovimientoPosible> getMovimientosPosibles(Partida partida,Pieza[][] tablero,int x,int y,boolean enroqueBloqueado){
|
||||
Pieza pieza = tablero[y][x];
|
||||
if(pieza.getTipo().equals("caballo")) {
|
||||
return getMovimientosPosiblesCaballo(partida,tablero,x,y);
|
||||
}else if(pieza.getTipo().equals("peon")) {
|
||||
return getMovimientosPosiblesPeon(partida,tablero,x,y);
|
||||
}else if(pieza.getTipo().equals("torre")) {
|
||||
return getMovimientosPosiblesTorre(partida,tablero,x,y);
|
||||
}else if(pieza.getTipo().equals("alfil")) {
|
||||
return getMovimientosPosiblesAlfil(partida,tablero,x,y);
|
||||
}else if(pieza.getTipo().equals("rey")) {
|
||||
return getMovimientosPosiblesRey(partida,tablero,x,y,enroqueBloqueado);
|
||||
}else if(pieza.getTipo().equals("reina")) {
|
||||
return getMovimientosPosiblesReina(partida,tablero,x,y);
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static ArrayList<MovimientoPosible> getMovimientosPosiblesCaballo(Partida partida,Pieza[][] tablero,int x,int y){
|
||||
ArrayList<MovimientoPosible> locations = new ArrayList<MovimientoPosible>();
|
||||
Pieza piezaOriginal = tablero[y][x];
|
||||
int xNueva = x+1;
|
||||
int yNueva = y+2;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
xNueva = x-1;
|
||||
yNueva = y+2;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
xNueva = x+2;
|
||||
yNueva = y+1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
xNueva = x+2;
|
||||
yNueva = y-1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
xNueva = x-2;
|
||||
yNueva = y+1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
xNueva = x-2;
|
||||
yNueva = y-1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
xNueva = x-1;
|
||||
yNueva = y-2;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
xNueva = x+1;
|
||||
yNueva = y-2;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
return locations;
|
||||
}
|
||||
|
||||
public static ArrayList<MovimientoPosible> getMovimientosPosiblesPeon(Partida partida,Pieza[][] tablero,int x,int y){
|
||||
ArrayList<MovimientoPosible> locations = new ArrayList<MovimientoPosible>();
|
||||
Pieza piezaOriginal = tablero[y][x];
|
||||
if(piezaOriginal.getColor().equals("b")) {
|
||||
//En-passant (comprueba a los lados)
|
||||
int xNueva = x-1;
|
||||
int yNueva = y;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null && posicionNueva.getTipo().equals("peon") && !posicionNueva.getColor().equals(piezaOriginal.getColor())
|
||||
&& posicionNueva.isEnPassant()) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva+1),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x+1;
|
||||
yNueva = y;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null && posicionNueva.getTipo().equals("peon") && !posicionNueva.getColor().equals(piezaOriginal.getColor())
|
||||
&& posicionNueva.isEnPassant()) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva+1),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
xNueva = x;
|
||||
yNueva = y+1;
|
||||
boolean bloqueadoAdelante = false;
|
||||
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}else {
|
||||
bloqueadoAdelante = true;
|
||||
}
|
||||
}
|
||||
if(!bloqueadoAdelante) {
|
||||
xNueva = x;
|
||||
yNueva = y+2;
|
||||
if(y == 1 && xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
xNueva = x+1;
|
||||
yNueva = y+1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null && !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x-1;
|
||||
yNueva = y+1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null && !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
}else {
|
||||
//En-passant (comprueba a los lados)
|
||||
int xNueva = x-1;
|
||||
int yNueva = y;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null && posicionNueva.getTipo().equals("peon") && !posicionNueva.getColor().equals(piezaOriginal.getColor())
|
||||
&& posicionNueva.isEnPassant()) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva-1),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x+1;
|
||||
yNueva = y;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null && posicionNueva.getTipo().equals("peon") && !posicionNueva.getColor().equals(piezaOriginal.getColor())
|
||||
&& posicionNueva.isEnPassant()) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva-1),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
xNueva = x;
|
||||
yNueva = y-1;
|
||||
boolean bloqueadoAdelante = false;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}else {
|
||||
bloqueadoAdelante = true;
|
||||
}
|
||||
}
|
||||
if(!bloqueadoAdelante) {
|
||||
xNueva = x;
|
||||
yNueva = y-2;
|
||||
if(y == 6 && xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
}
|
||||
xNueva = x+1;
|
||||
yNueva = y-1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null && !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x-1;
|
||||
yNueva = y-1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null && !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
}
|
||||
return locations;
|
||||
}
|
||||
|
||||
public static ArrayList<MovimientoPosible> getMovimientosPosiblesTorre(Partida partida,Pieza[][] tablero,int x,int y){
|
||||
ArrayList<MovimientoPosible> locations = new ArrayList<MovimientoPosible>();
|
||||
Pieza piezaOriginal = tablero[y][x];
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x+i;
|
||||
if(xNueva <= tablero.length-1 && xNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[y][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, y),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, y),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x-i;
|
||||
if(xNueva <= tablero.length-1 && xNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[y][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, y),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, y),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int yNueva = y+i;
|
||||
if(yNueva <= tablero.length-1 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][x];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(x, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(x, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int yNueva = y-i;
|
||||
if(yNueva <= tablero.length-1 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][x];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(x, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(x, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return locations;
|
||||
}
|
||||
|
||||
public static ArrayList<MovimientoPosible> getMovimientosPosiblesAlfil(Partida partida,Pieza[][] tablero,int x,int y){
|
||||
ArrayList<MovimientoPosible> locations = new ArrayList<MovimientoPosible>();
|
||||
Pieza piezaOriginal = tablero[y][x];
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x+i;
|
||||
int yNueva = y+i;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x-i;
|
||||
int yNueva = y+i;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x+i;
|
||||
int yNueva = y-i;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x-i;
|
||||
int yNueva = y-i;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return locations;
|
||||
}
|
||||
|
||||
public static ArrayList<MovimientoPosible> getMovimientosPosiblesRey(Partida partida,Pieza[][] tablero,int x,int y, boolean enroqueBloqueado){
|
||||
ArrayList<MovimientoPosible> locations = new ArrayList<MovimientoPosible>();
|
||||
Pieza piezaOriginal = tablero[y][x];
|
||||
int xNueva = x;
|
||||
int yNueva = y-1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x+1;
|
||||
yNueva = y;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x-1;
|
||||
yNueva = y;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x;
|
||||
yNueva = y+1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x+1;
|
||||
yNueva = y+1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x+1;
|
||||
yNueva = y-1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x-1;
|
||||
yNueva = y+1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
xNueva = x-1;
|
||||
yNueva = y-1;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null || !posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}
|
||||
|
||||
//ENROQUE
|
||||
if(!enroqueBloqueado) {
|
||||
if(!piezaOriginal.seHaMovido()) {
|
||||
//CORTO
|
||||
for(int i=1;i<=3;i++) {
|
||||
xNueva = x-i;
|
||||
yNueva = y;
|
||||
if(i == 3) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null && posicionNueva.getTipo().equals("torre") && posicionNueva.getColor().equals(piezaOriginal.getColor())
|
||||
&& !posicionNueva.seHaMovido()) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}else {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//LARGO
|
||||
for(int i=1;i<=4;i++) {
|
||||
xNueva = x+i;
|
||||
yNueva = y;
|
||||
if(i == 4) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null && posicionNueva.getTipo().equals("torre") && posicionNueva.getColor().equals(piezaOriginal.getColor())
|
||||
&& !posicionNueva.seHaMovido()) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}
|
||||
}else {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva != null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return locations;
|
||||
}
|
||||
|
||||
public static ArrayList<MovimientoPosible> getMovimientosPosiblesReina(Partida partida,Pieza[][] tablero,int x,int y){
|
||||
ArrayList<MovimientoPosible> locations = new ArrayList<MovimientoPosible>();
|
||||
Pieza piezaOriginal = tablero[y][x];
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x+i;
|
||||
int yNueva = y+i;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x-i;
|
||||
int yNueva = y+i;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x+i;
|
||||
int yNueva = y-i;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x-i;
|
||||
int yNueva = y-i;
|
||||
if(xNueva <= tablero.length-1 && yNueva <= tablero.length-1 && xNueva >= 0 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x+i;
|
||||
if(xNueva <= tablero.length-1 && xNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[y][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, y),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, y),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int xNueva = x-i;
|
||||
if(xNueva <= tablero.length-1 && xNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[y][xNueva];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, y),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(xNueva, y),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int yNueva = y+i;
|
||||
if(yNueva <= tablero.length-1 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][x];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(x, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(x, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int i=1;i<8;i++) {
|
||||
int yNueva = y-i;
|
||||
if(yNueva <= tablero.length-1 && yNueva >= 0) {
|
||||
Pieza posicionNueva = tablero[yNueva][x];
|
||||
if(posicionNueva == null) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(x, yNueva),piezaOriginal));
|
||||
}else if(!posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
locations.add(new MovimientoPosible(partida.getLocationDesdeTablero(x, yNueva),piezaOriginal));
|
||||
break;
|
||||
}else if(posicionNueva.getColor().equals(piezaOriginal.getColor())) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return locations;
|
||||
}
|
||||
}
|
89
src/mc/ajneb97/juego/ElementosGuardados.java
Normal file
89
src/mc/ajneb97/juego/ElementosGuardados.java
Normal file
@ -0,0 +1,89 @@
|
||||
package mc.ajneb97.juego;
|
||||
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
||||
public class ElementosGuardados {
|
||||
|
||||
private ItemStack[] inventarioGuardado;
|
||||
private ItemStack[] equipamientoGuardado;
|
||||
private GameMode gamemodeGuardado;
|
||||
private float experienciaGuardada;
|
||||
private int levelGuardado;
|
||||
private int hambreGuardada;
|
||||
private double vidaGuardada;
|
||||
private double maxVidaGuardada;
|
||||
private Location lastLocation;
|
||||
private boolean allowFligth;
|
||||
private boolean isFlying;
|
||||
|
||||
public ElementosGuardados(Location lastLocation, ItemStack[] inventarioGuardado,ItemStack[] equipamientoGuardado,GameMode gamemodeGuardado,float experienciaGuardada,int levelGuardado,int hambreGuardada,
|
||||
double vidaGuardada,double maxVidaGuardada,boolean allowFligth,boolean isFlying) {
|
||||
this.lastLocation = lastLocation;
|
||||
this.inventarioGuardado = inventarioGuardado;
|
||||
this.equipamientoGuardado = equipamientoGuardado;
|
||||
this.gamemodeGuardado = gamemodeGuardado;
|
||||
this.experienciaGuardada = experienciaGuardada;
|
||||
this.levelGuardado = levelGuardado;
|
||||
this.hambreGuardada = hambreGuardada;
|
||||
this.vidaGuardada = vidaGuardada;
|
||||
this.maxVidaGuardada = maxVidaGuardada;
|
||||
this.allowFligth = allowFligth;
|
||||
this.isFlying = isFlying;
|
||||
}
|
||||
|
||||
public boolean isAllowFligth() {
|
||||
return allowFligth;
|
||||
}
|
||||
|
||||
public void setAllowFligth(boolean allowFligth) {
|
||||
this.allowFligth = allowFligth;
|
||||
}
|
||||
|
||||
public boolean isFlying() {
|
||||
return isFlying;
|
||||
}
|
||||
|
||||
public void setFlying(boolean isFlying) {
|
||||
this.isFlying = isFlying;
|
||||
}
|
||||
|
||||
public Location getLastLocation() {
|
||||
return this.lastLocation;
|
||||
}
|
||||
|
||||
public ItemStack[] getInventarioGuardado() {
|
||||
return inventarioGuardado;
|
||||
}
|
||||
|
||||
public ItemStack[] getEquipamientoGuardado() {
|
||||
return equipamientoGuardado;
|
||||
}
|
||||
|
||||
public GameMode getGamemodeGuardado() {
|
||||
return gamemodeGuardado;
|
||||
}
|
||||
|
||||
public float getXPGuardada() {
|
||||
return experienciaGuardada;
|
||||
}
|
||||
|
||||
public int getLevelGuardado() {
|
||||
return this.levelGuardado;
|
||||
}
|
||||
|
||||
public int getHambreGuardada() {
|
||||
return this.hambreGuardada;
|
||||
}
|
||||
|
||||
public double getVidaGuardada() {
|
||||
return vidaGuardada;
|
||||
}
|
||||
|
||||
public double getMaxVidaGuardada() {
|
||||
return maxVidaGuardada;
|
||||
}
|
||||
}
|
10
src/mc/ajneb97/juego/Estado.java
Normal file
10
src/mc/ajneb97/juego/Estado.java
Normal file
@ -0,0 +1,10 @@
|
||||
package mc.ajneb97.juego;
|
||||
|
||||
public enum Estado {
|
||||
|
||||
ESPERANDO,
|
||||
COMENZANDO,
|
||||
JUGANDO,
|
||||
TERMINANDO,
|
||||
DESACTIVADA;
|
||||
}
|
134
src/mc/ajneb97/juego/Jugador.java
Normal file
134
src/mc/ajneb97/juego/Jugador.java
Normal file
@ -0,0 +1,134 @@
|
||||
package mc.ajneb97.juego;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
||||
public class Jugador {
|
||||
|
||||
private Player jugador;
|
||||
private int puntos;
|
||||
private String color;
|
||||
private ElementosGuardados guardados;
|
||||
private Pieza piezaObservada;
|
||||
private Pieza piezaSeleccionada;
|
||||
private ArrayList<MovimientoPosible> movimientosPiezaSeleccionada;
|
||||
private int[] celdaObservada;
|
||||
private boolean coronandoPeon;
|
||||
private boolean enJaque;
|
||||
private boolean espectador;
|
||||
private int tiempo;
|
||||
private long millisAntes; //Tiempo al iniciar la partida
|
||||
|
||||
public Jugador(Player jugador,boolean espectador) {
|
||||
this.jugador = jugador;
|
||||
this.tiempo = 0;
|
||||
this.espectador = espectador;
|
||||
this.guardados = new ElementosGuardados(jugador.getLocation().clone(),jugador.getInventory().getContents().clone(),jugador.getEquipment().getArmorContents().clone(),jugador.getGameMode()
|
||||
,jugador.getExp(),jugador.getLevel(),jugador.getFoodLevel(),jugador.getHealth(),jugador.getMaxHealth(),jugador.getAllowFlight(),jugador.isFlying());
|
||||
}
|
||||
|
||||
public long getMillisAntes() {
|
||||
return this.millisAntes;
|
||||
}
|
||||
|
||||
public void setMillisAntes() {
|
||||
this.millisAntes = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public int getTiempo() {
|
||||
return this.tiempo;
|
||||
}
|
||||
|
||||
public void setTiempo(int tiempo) {
|
||||
this.tiempo = tiempo;
|
||||
}
|
||||
|
||||
public void disminuirTiempo() {
|
||||
this.tiempo--;
|
||||
}
|
||||
|
||||
public boolean esEspectador() {
|
||||
return this.espectador;
|
||||
}
|
||||
|
||||
public void setEspectador(boolean espectador) {
|
||||
this.espectador = espectador;
|
||||
}
|
||||
|
||||
public void setMovimientos(ArrayList<MovimientoPosible> movimientos) {
|
||||
this.movimientosPiezaSeleccionada = movimientos;
|
||||
}
|
||||
|
||||
public ArrayList<MovimientoPosible> getMovimientos(){
|
||||
return this.movimientosPiezaSeleccionada;
|
||||
}
|
||||
|
||||
public boolean enJaque() {
|
||||
return this.enJaque;
|
||||
}
|
||||
|
||||
public void setEnJaque(boolean enJaque) {
|
||||
this.enJaque = enJaque;
|
||||
}
|
||||
|
||||
public boolean estaCoronandoPeon() {
|
||||
return this.coronandoPeon;
|
||||
}
|
||||
|
||||
public void setCoronandoPeon(boolean coronando) {
|
||||
this.coronandoPeon = coronando;
|
||||
}
|
||||
|
||||
public int[] getCeldaObservada() {
|
||||
return celdaObservada;
|
||||
}
|
||||
|
||||
public void setCeldaObservada(int[] celdaObservada) {
|
||||
this.celdaObservada = celdaObservada;
|
||||
}
|
||||
|
||||
public Pieza getPiezaSeleccionada() {
|
||||
return piezaSeleccionada;
|
||||
}
|
||||
public void setPiezaSeleccionada(Pieza piezaSeleccionada) {
|
||||
this.piezaSeleccionada = piezaSeleccionada;
|
||||
}
|
||||
public void setPiezaObservada(Pieza piezaObservada) {
|
||||
this.piezaObservada = piezaObservada;
|
||||
}
|
||||
public Pieza getPiezaObservada() {
|
||||
return this.piezaObservada;
|
||||
}
|
||||
public Player getJugador() {
|
||||
return jugador;
|
||||
}
|
||||
public void setJugador(Player jugador) {
|
||||
this.jugador = jugador;
|
||||
}
|
||||
public int getPuntos() {
|
||||
return puntos;
|
||||
}
|
||||
public void setPuntos(int puntos) {
|
||||
this.puntos = puntos;
|
||||
}
|
||||
public void aumentarPuntos(int puntos) {
|
||||
this.puntos = this.puntos+puntos;
|
||||
}
|
||||
public String getColor() {
|
||||
return color;
|
||||
}
|
||||
public void setColor(String color) {
|
||||
this.color = color;
|
||||
}
|
||||
public ElementosGuardados getGuardados() {
|
||||
return guardados;
|
||||
}
|
||||
public void setGuardados(ElementosGuardados guardados) {
|
||||
this.guardados = guardados;
|
||||
}
|
||||
|
||||
|
||||
}
|
28
src/mc/ajneb97/juego/MovimientoPosible.java
Normal file
28
src/mc/ajneb97/juego/MovimientoPosible.java
Normal file
@ -0,0 +1,28 @@
|
||||
package mc.ajneb97.juego;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
public class MovimientoPosible {
|
||||
|
||||
private Location location;
|
||||
private Pieza pieza; //pieza original
|
||||
|
||||
public MovimientoPosible(Location location, Pieza pieza) {
|
||||
this.location = location;
|
||||
this.pieza = pieza;
|
||||
}
|
||||
public Location getLocation() {
|
||||
return location;
|
||||
}
|
||||
public void setLocation(Location location) {
|
||||
this.location = location;
|
||||
}
|
||||
public Pieza getPieza() {
|
||||
return pieza;
|
||||
}
|
||||
public void setPieza(Pieza pieza) {
|
||||
this.pieza = pieza;
|
||||
}
|
||||
|
||||
|
||||
}
|
390
src/mc/ajneb97/juego/Partida.java
Normal file
390
src/mc/ajneb97/juego/Partida.java
Normal file
@ -0,0 +1,390 @@
|
||||
package mc.ajneb97.juego;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class Partida {
|
||||
|
||||
private Jugador jugador1;
|
||||
private Jugador jugador2;
|
||||
private Pieza[][] tablero = new Pieza[8][8];
|
||||
private Estado estado;
|
||||
private String nombre;
|
||||
private Location esquina1;
|
||||
private int tiempoMaximo;
|
||||
private int tiempo;
|
||||
private Location spawn;
|
||||
private Jugador turno;
|
||||
private ArrayList<Jugador> espectadores;
|
||||
private int tiempoEnTerminar;
|
||||
|
||||
public Partida(String nombre) {
|
||||
this.nombre = nombre;
|
||||
this.estado = Estado.DESACTIVADA;
|
||||
this.espectadores = new ArrayList<Jugador>();
|
||||
this.tiempo = 0;
|
||||
this.tiempoEnTerminar = 0;
|
||||
reiniciarPiezas();
|
||||
}
|
||||
|
||||
public int getTiempoEnTerminar() {
|
||||
return this.tiempoEnTerminar;
|
||||
}
|
||||
|
||||
public void setTiempoEnTerminar(int tiempo) {
|
||||
this.tiempoEnTerminar = tiempo;
|
||||
}
|
||||
|
||||
public void agregarEspectador(Player espectador) {
|
||||
espectadores.add(new Jugador(espectador,true));
|
||||
}
|
||||
|
||||
public void removerEspectador(String nombre) {
|
||||
for(int i=0;i<espectadores.size();i++) {
|
||||
if(espectadores.get(i).getJugador().getName().equals(nombre)) {
|
||||
espectadores.remove(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int getTiempo() {
|
||||
return tiempo;
|
||||
}
|
||||
|
||||
public void setTiempo(int tiempo) {
|
||||
this.tiempo = tiempo;
|
||||
}
|
||||
|
||||
public void disminuirTiempo() {
|
||||
this.tiempo--;
|
||||
}
|
||||
|
||||
public Jugador getTurno() {
|
||||
return turno;
|
||||
}
|
||||
|
||||
public void setTurno(Jugador turno) {
|
||||
this.turno = turno;
|
||||
}
|
||||
|
||||
public Location getSpawn() {
|
||||
return spawn;
|
||||
}
|
||||
|
||||
public void setSpawn(Location spawn) {
|
||||
this.spawn = spawn;
|
||||
}
|
||||
|
||||
public int getTiempoMaximo() {
|
||||
return tiempoMaximo;
|
||||
}
|
||||
|
||||
public void setTiempoMaximo(int tiempoMaximo) {
|
||||
this.tiempoMaximo = tiempoMaximo;
|
||||
}
|
||||
|
||||
public Location getEsquina1() {
|
||||
return esquina1;
|
||||
}
|
||||
|
||||
public void setEsquina1(Location esquina1) {
|
||||
this.esquina1 = esquina1;
|
||||
}
|
||||
|
||||
public ArrayList<Jugador> getJugadores(){
|
||||
ArrayList<Jugador> jugadores = new ArrayList<Jugador>();
|
||||
if(jugador1 != null) {
|
||||
jugadores.add(jugador1);
|
||||
}
|
||||
if(jugador2 != null) {
|
||||
jugadores.add(jugador2);
|
||||
}
|
||||
for(int i=0;i<espectadores.size();i++) {
|
||||
jugadores.add(espectadores.get(i));
|
||||
}
|
||||
|
||||
return jugadores;
|
||||
}
|
||||
|
||||
public void reiniciarPiezas() {
|
||||
for(int i=0;i<tablero.length;i++) {
|
||||
for(int c=0;c<tablero.length;c++) {
|
||||
tablero[i][c] = null;
|
||||
}
|
||||
}
|
||||
|
||||
tablero[0][0] = new Pieza(1,"torre","b",false,false);
|
||||
tablero[0][1] = new Pieza(2,"caballo","b",false,false);
|
||||
tablero[0][2] = new Pieza(3,"alfil","b",false,false);
|
||||
tablero[0][3] = new Pieza(4,"rey","b",false,false);
|
||||
tablero[0][4] = new Pieza(5,"reina","b",false,false);
|
||||
tablero[0][5] = new Pieza(6,"alfil","b",false,false);
|
||||
tablero[0][6] = new Pieza(7,"caballo","b",false,false);
|
||||
tablero[0][7] = new Pieza(8,"torre","b",false,false);
|
||||
tablero[1][0] = new Pieza(9,"peon","b",false,false);
|
||||
tablero[1][1] = new Pieza(10,"peon","b",false,false);
|
||||
tablero[1][2] = new Pieza(11,"peon","b",false,false);
|
||||
tablero[1][3] = new Pieza(12,"peon","b",false,false);
|
||||
tablero[1][4] = new Pieza(13,"peon","b",false,false);
|
||||
tablero[1][5] = new Pieza(14,"peon","b",false,false);
|
||||
tablero[1][6] = new Pieza(15,"peon","b",false,false);
|
||||
tablero[1][7] = new Pieza(16,"peon","b",false,false);
|
||||
|
||||
tablero[7][0] = new Pieza(17,"torre","n",false,false);
|
||||
tablero[7][1] = new Pieza(18,"caballo","n",false,false);
|
||||
tablero[7][2] = new Pieza(19,"alfil","n",false,false);
|
||||
tablero[7][3] = new Pieza(20,"rey","n",false,false);
|
||||
tablero[7][4] = new Pieza(21,"reina","n",false,false);
|
||||
tablero[7][5] = new Pieza(22,"alfil","n",false,false);
|
||||
tablero[7][6] = new Pieza(23,"caballo","n",false,false);
|
||||
tablero[7][7] = new Pieza(24,"torre","n",false,false);
|
||||
tablero[6][0] = new Pieza(25,"peon","n",false,false);
|
||||
tablero[6][1] = new Pieza(26,"peon","n",false,false);
|
||||
tablero[6][2] = new Pieza(27,"peon","n",false,false);
|
||||
tablero[6][3] = new Pieza(28,"peon","n",false,false);
|
||||
tablero[6][4] = new Pieza(29,"peon","n",false,false);
|
||||
tablero[6][5] = new Pieza(30,"peon","n",false,false);
|
||||
tablero[6][6] = new Pieza(31,"peon","n",false,false);
|
||||
tablero[6][7] = new Pieza(32,"peon","n",false,false);
|
||||
}
|
||||
|
||||
public void moverPieza(int[] cInicial, int[] cFinal, boolean isEnPassant) {
|
||||
Pieza aux = tablero[cInicial[1]][cInicial[0]];
|
||||
Pieza nueva = new Pieza(aux.getId(),aux.getTipo(),aux.getColor(),true,isEnPassant);
|
||||
tablero[cFinal[1]][cFinal[0]] = nueva;
|
||||
tablero[cInicial[1]][cInicial[0]] = null;
|
||||
}
|
||||
|
||||
public void reemplazarPieza(int[] coordenadas,Pieza nueva) {
|
||||
tablero[coordenadas[1]][coordenadas[0]] = nueva;
|
||||
}
|
||||
|
||||
public void mostrarTablero() {
|
||||
for(int i=0;i<tablero.length;i++) {
|
||||
String linea = "";
|
||||
for(int c=0;c<tablero.length;c++) {
|
||||
if(tablero[i][c] == null) {
|
||||
linea = linea+"0 ";
|
||||
}else {
|
||||
linea = linea+"1 ";
|
||||
}
|
||||
|
||||
}
|
||||
Bukkit.getConsoleSender().sendMessage(linea);
|
||||
}
|
||||
}
|
||||
|
||||
public Jugador getJugador1() {
|
||||
return jugador1;
|
||||
}
|
||||
|
||||
public void setJugador1(Jugador jugador1) {
|
||||
this.jugador1 = jugador1;
|
||||
}
|
||||
|
||||
public Jugador getJugador2() {
|
||||
return jugador2;
|
||||
}
|
||||
|
||||
public void setJugador2(Jugador jugador2) {
|
||||
this.jugador2 = jugador2;
|
||||
}
|
||||
|
||||
public Pieza[][] getTablero() {
|
||||
return tablero;
|
||||
}
|
||||
|
||||
public void setTablero(Pieza[][] tablero) {
|
||||
this.tablero = tablero;
|
||||
}
|
||||
|
||||
public Estado getEstado() {
|
||||
return estado;
|
||||
}
|
||||
|
||||
public void setEstado(Estado estado) {
|
||||
this.estado = estado;
|
||||
}
|
||||
|
||||
public String getNombre() {
|
||||
return nombre;
|
||||
}
|
||||
|
||||
public void setNombre(String nombre) {
|
||||
this.nombre = nombre;
|
||||
}
|
||||
|
||||
public int[] getPosicionDesdeCoordenada(Location l) {
|
||||
// Si esquina es 231,3,63
|
||||
|
||||
// Fix sera 232,3,64 (sumar de 3 en 3)
|
||||
// Si la location es 247,4,67
|
||||
Location fix = this.esquina1.clone().add(1,0,1);
|
||||
Location aux = fix.clone();
|
||||
for(int i=0;i<tablero.length;i++) {
|
||||
for(int c=0;c<tablero.length;c++) {
|
||||
if(l.getWorld().equals(aux.getWorld()) && l.getX() == aux.getX() && l.getZ() == aux.getZ()) {
|
||||
int[] nuevo = {c,i};
|
||||
return nuevo;
|
||||
}
|
||||
aux.add(3, 0, 0);
|
||||
}
|
||||
aux.add(-24,0,3);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Pieza getPiezaDesdeCoordenada(Location l) {
|
||||
// Si esquina es 231,3,63
|
||||
|
||||
// Fix sera 232,3,64 (sumar de 3 en 3)
|
||||
// Si la location es 247,4,67
|
||||
Location fix = this.esquina1.clone().add(1,0,1);
|
||||
Location aux = fix.clone();
|
||||
for(int i=0;i<tablero.length;i++) {
|
||||
for(int c=0;c<tablero.length;c++) {
|
||||
if(l.getWorld().equals(aux.getWorld()) && l.getX() == aux.getX() && l.getZ() == aux.getZ()) {
|
||||
return this.tablero[i][c];
|
||||
}
|
||||
aux.add(3, 0, 0);
|
||||
}
|
||||
aux.add(-24,0,3);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Location getLocationRey(String color) {
|
||||
for(int i=0;i<tablero.length;i++) {
|
||||
for(int c=0;c<tablero.length;c++) {
|
||||
if(tablero[c][i] != null && tablero[c][i].getColor().equals(color) && tablero[c][i].getTipo().equals("rey")) {
|
||||
Pieza p = tablero[c][i];
|
||||
return getLocationDesdePieza(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Location getLocationDesdeTablero(int x,int y) {
|
||||
Location fix = this.esquina1.clone().add(1,0,1);
|
||||
// Si Fix es 215,3,47
|
||||
// Y x=4 y y=1
|
||||
// Location nueva es 215+4*3,3,47+1*3 = 227,3,50
|
||||
int xNueva = fix.getBlockX()+(x*3);
|
||||
int zNueva = fix.getBlockZ()+(y*3);
|
||||
Location nueva = new Location(fix.getWorld(),xNueva,fix.getBlockY(),zNueva);
|
||||
return nueva;
|
||||
}
|
||||
|
||||
public Location getLocationDesdePieza(Pieza pieza) {
|
||||
int[] pos = getPosicion(pieza);
|
||||
if(pos == null) {
|
||||
return null;
|
||||
}else {
|
||||
return getLocationDesdeTablero(pos[0],pos[1]);
|
||||
}
|
||||
}
|
||||
|
||||
public int[] getPosicion(Pieza pieza) {
|
||||
for(int i=0;i<tablero.length;i++) {
|
||||
for(int c=0;c<tablero.length;c++) {
|
||||
if(tablero[c][i] != null && pieza.getId() == tablero[c][i].getId()) {
|
||||
int[] nuevo = {i,c};
|
||||
return nuevo;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void agregarJugador(Jugador j) {
|
||||
if(this.jugador1 == null) {
|
||||
this.jugador1 = j;
|
||||
}else {
|
||||
this.jugador2 = j;
|
||||
}
|
||||
}
|
||||
|
||||
public Jugador getJugador(String name) {
|
||||
if(jugador1 != null && jugador1.getJugador().getName().equals(name)) {
|
||||
return jugador1;
|
||||
}
|
||||
if(jugador2 != null && jugador2.getJugador().getName().equals(name)) {
|
||||
return jugador2;
|
||||
}
|
||||
for(int i=0;i<espectadores.size();i++) {
|
||||
if(espectadores.get(i).getJugador().getName().equals(name)) {
|
||||
return espectadores.get(i);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void removerJugador(String name) {
|
||||
if(jugador1 != null && jugador1.getJugador().getName().equals(name)) {
|
||||
jugador1 = null;
|
||||
}
|
||||
if(jugador2 != null && jugador2.getJugador().getName().equals(name)) {
|
||||
jugador2 = null;
|
||||
}
|
||||
}
|
||||
|
||||
public int getCantidadActualJugadores() {
|
||||
int cantidad = 0;
|
||||
if(this.jugador1 != null) {
|
||||
cantidad++;
|
||||
}
|
||||
if(this.jugador2 != null) {
|
||||
cantidad++;
|
||||
}
|
||||
return cantidad;
|
||||
}
|
||||
|
||||
public boolean estaLlena() {
|
||||
if(jugador1 != null && jugador2 != null) {
|
||||
return true;
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean estaActivada() {
|
||||
if(!estado.equals(Estado.DESACTIVADA)) {
|
||||
return true;
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean estaIniciada() {
|
||||
if(estado.equals(Estado.JUGANDO) || estado.equals(Estado.TERMINANDO)) {
|
||||
return true;
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public Jugador getGanador() {
|
||||
if(jugador1 == null) {
|
||||
return jugador2;
|
||||
}
|
||||
if(jugador2 == null) {
|
||||
return jugador1;
|
||||
}
|
||||
|
||||
int puntos1 = jugador1.getPuntos();
|
||||
int puntos2 = jugador2.getPuntos();
|
||||
if(puntos1 > puntos2) {
|
||||
return jugador1;
|
||||
}else if(puntos2 > puntos1) {
|
||||
return jugador2;
|
||||
}else {
|
||||
return null; //empate
|
||||
}
|
||||
}
|
||||
|
||||
}
|
51
src/mc/ajneb97/juego/Pieza.java
Normal file
51
src/mc/ajneb97/juego/Pieza.java
Normal file
@ -0,0 +1,51 @@
|
||||
package mc.ajneb97.juego;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
public class Pieza {
|
||||
|
||||
private int id;
|
||||
private String tipo;
|
||||
private String color;
|
||||
private boolean movida;
|
||||
private boolean enPassant;
|
||||
|
||||
public Pieza(int id,String tipo, String color, boolean movida, boolean enPassant) {
|
||||
this.tipo = tipo;
|
||||
this.color = color;
|
||||
this.id = id;
|
||||
this.movida = movida;
|
||||
this.enPassant = enPassant;
|
||||
}
|
||||
public void setEnPassant(boolean enPassant) {
|
||||
this.enPassant = enPassant;
|
||||
}
|
||||
public boolean isEnPassant() {
|
||||
return this.enPassant;
|
||||
}
|
||||
public String getColor() {
|
||||
return color;
|
||||
}
|
||||
public void setColor(String color) {
|
||||
this.color = color;
|
||||
}
|
||||
public String getTipo() {
|
||||
return tipo;
|
||||
}
|
||||
public void setTipo(String tipo) {
|
||||
this.tipo = tipo;
|
||||
}
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
public boolean seHaMovido() {
|
||||
return movida;
|
||||
}
|
||||
public void setMovida(boolean movida) {
|
||||
this.movida = movida;
|
||||
}
|
||||
|
||||
}
|
322
src/mc/ajneb97/juego/Tablero.java
Normal file
322
src/mc/ajneb97/juego/Tablero.java
Normal file
@ -0,0 +1,322 @@
|
||||
package mc.ajneb97.juego;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.Hologram;
|
||||
import com.gmail.filoghost.holographicdisplays.api.HologramsAPI;
|
||||
import com.gmail.filoghost.holographicdisplays.api.VisibilityManager;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.otros.Utilidades;
|
||||
|
||||
public class Tablero {
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static void construirCelda(Location l,String color) {
|
||||
Material m = null;
|
||||
if(color.equals("b")) {
|
||||
if(Bukkit.getVersion().contains("1.13") || Bukkit.getVersion().contains("1.14") || Bukkit.getVersion().contains("1.15")
|
||||
|| Bukkit.getVersion().contains("1.16") || Bukkit.getVersion().contains("1.17")) {
|
||||
m = Material.valueOf("WHITE_WOOL");
|
||||
}else {
|
||||
m = Material.WOOL;
|
||||
}
|
||||
|
||||
l.getBlock().setType(m);
|
||||
l.clone().add(1,0,0).getBlock().setType(m);
|
||||
l.clone().add(2,0,0).getBlock().setType(m);
|
||||
l.clone().add(0,0,1).getBlock().setType(m);
|
||||
l.clone().add(1,0,1).getBlock().setType(m);
|
||||
l.clone().add(2,0,1).getBlock().setType(m);
|
||||
l.clone().add(0,0,2).getBlock().setType(m);
|
||||
l.clone().add(1,0,2).getBlock().setType(m);
|
||||
l.clone().add(2,0,2).getBlock().setType(m);
|
||||
}else {
|
||||
if(Bukkit.getVersion().contains("1.13") || Bukkit.getVersion().contains("1.14") || Bukkit.getVersion().contains("1.15")
|
||||
|| Bukkit.getVersion().contains("1.16") || Bukkit.getVersion().contains("1.17")) {
|
||||
m = Material.valueOf("GRAY_WOOL");
|
||||
l.getBlock().setType(m);
|
||||
l.clone().add(1,0,0).getBlock().setType(m);
|
||||
l.clone().add(2,0,0).getBlock().setType(m);
|
||||
l.clone().add(0,0,1).getBlock().setType(m);
|
||||
l.clone().add(1,0,1).getBlock().setType(m);
|
||||
l.clone().add(2,0,1).getBlock().setType(m);
|
||||
l.clone().add(0,0,2).getBlock().setType(m);
|
||||
l.clone().add(1,0,2).getBlock().setType(m);
|
||||
l.clone().add(2,0,2).getBlock().setType(m);
|
||||
}else {
|
||||
m = Material.valueOf("WOOL");
|
||||
l.getBlock().setType(m);
|
||||
l.getBlock().setData((byte) 8);
|
||||
Location l2 = l.clone().add(1,0,0);
|
||||
l2.getBlock().setType(m);
|
||||
l2.getBlock().setData((byte) 8);
|
||||
Location l3 = l.clone().add(2,0,0);
|
||||
l3.getBlock().setType(m);
|
||||
l3.getBlock().setData((byte) 8);
|
||||
Location l4 = l.clone().add(0,0,1);
|
||||
l4.getBlock().setType(m);
|
||||
l4.getBlock().setData((byte) 8);
|
||||
Location l5 = l.clone().add(1,0,1);
|
||||
l5.getBlock().setType(m);
|
||||
l5.getBlock().setData((byte) 8);
|
||||
Location l6 = l.clone().add(2,0,1);
|
||||
l6.getBlock().setType(m);
|
||||
l6.getBlock().setData((byte) 8);
|
||||
Location l7 = l.clone().add(0,0,2);
|
||||
l7.getBlock().setType(m);
|
||||
l7.getBlock().setData((byte) 8);
|
||||
Location l8 = l.clone().add(1,0,2);
|
||||
l8.getBlock().setType(m);
|
||||
l8.getBlock().setData((byte) 8);
|
||||
Location l9 = l.clone().add(2,0,2);
|
||||
l9.getBlock().setType(m);
|
||||
l9.getBlock().setData((byte) 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void construirTablero(Location l) {
|
||||
Location actual = l.clone().add(0,-1,0);
|
||||
String color = "b";
|
||||
for(int i=0;i<8;i++) {
|
||||
for(int c=0;c<8;c++) {
|
||||
construirCelda(actual,color);
|
||||
if(c != 7) {
|
||||
if(color.equals("b")) {
|
||||
color = "n";
|
||||
}else {
|
||||
color = "b";
|
||||
}
|
||||
}
|
||||
actual.add(3,0,0);
|
||||
}
|
||||
actual.add(-24,0,3);
|
||||
}
|
||||
}
|
||||
|
||||
public static void crearPiezas(Location esquina) {
|
||||
Location nueva = esquina.clone().add(1,1,1);
|
||||
for(int i=0;i<8;i++) {
|
||||
if(i==0 || i==7) {
|
||||
crearPieza(nueva,"torre","b");
|
||||
}else if(i==1 || i==6) {
|
||||
crearPieza(nueva,"caballo","b");
|
||||
}else if(i==2 || i==5) {
|
||||
crearPieza(nueva,"alfil","b");
|
||||
}else if(i==3) {
|
||||
crearPieza(nueva,"rey","b");
|
||||
}else {
|
||||
crearPieza(nueva,"reina","b");
|
||||
}
|
||||
nueva.add(3,0,0);
|
||||
}
|
||||
|
||||
nueva = esquina.clone().add(1,1,4);
|
||||
for(int i=0;i<8;i++) {
|
||||
crearPieza(nueva,"peon","b");
|
||||
nueva.add(3,0,0);
|
||||
}
|
||||
|
||||
nueva = esquina.clone().add(1,1,19);
|
||||
for(int i=0;i<8;i++) {
|
||||
crearPieza(nueva,"peon","n");
|
||||
nueva.add(3,0,0);
|
||||
}
|
||||
|
||||
nueva = esquina.clone().add(1,1,22);
|
||||
for(int i=0;i<8;i++) {
|
||||
if(i==0 || i==7) {
|
||||
crearPieza(nueva,"torre","n");
|
||||
}else if(i==1 || i==6) {
|
||||
crearPieza(nueva,"caballo","n");
|
||||
}else if(i==2 || i==5) {
|
||||
crearPieza(nueva,"alfil","n");
|
||||
}else if(i==3) {
|
||||
crearPieza(nueva,"rey","n");
|
||||
}else {
|
||||
crearPieza(nueva,"reina","n");
|
||||
}
|
||||
nueva.add(3,0,0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void crearPieza(Location l,String tipo,String color) {
|
||||
Material m = null;
|
||||
int rot = 0;
|
||||
if(color.equals("b")) {
|
||||
m = Material.IRON_BLOCK;
|
||||
rot = 8;
|
||||
}else {
|
||||
m = Material.COAL_BLOCK;
|
||||
}
|
||||
|
||||
if(tipo.equals("torre")) {
|
||||
l.getBlock().setType(m);
|
||||
l.clone().add(0,1,0).getBlock().setType(m);
|
||||
Location l2 = l.clone().add(0,2,0);
|
||||
Utilidades.setSkullBlock(l2, "5e193aa2-292e-43c6-b92b-e823f6e0cc1e", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjQ1NTlkNzU0NjRiMmU0MGE1MThlNGRlOGU2Y2YzMDg1ZjBhM2NhMGIxYjcwMTI2MTRjNGNkOTZmZWQ2MDM3OCJ9fX0=", rot);
|
||||
}else if(tipo.equals("caballo")) {
|
||||
l.getBlock().setType(m);
|
||||
l.clone().add(0,1,0).getBlock().setType(m);
|
||||
Location l2 = l.clone().add(0,2,0);
|
||||
Utilidades.setSkullBlock(l2, "022202fd-9546-4492-b8b6-b768e95701c2", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2JiNGIyODg5OTFlZmI4Y2EwNzQzYmVjY2VmMzEyNThiMzFkMzlmMjQ5NTFlZmIxYzljMThhNDE3YmE0OGY5In19fQ==", rot);
|
||||
}else if(tipo.equals("alfil")) {
|
||||
l.getBlock().setType(m);
|
||||
l.clone().add(0,1,0).getBlock().setType(m);
|
||||
Location l2 = l.clone().add(0,2,0);
|
||||
if(color.equals("b")) {
|
||||
Utilidades.setSkullBlock(l2, "eb1fc1a8-763e-442f-bf10-302b3beebb32", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTI2Yjc3MjMyOWNmMzJmODY0M2M0OTI4NjI2YjZhMzI1MjMzZmY2MWFhOWM3NzI1ODczYTRiZDY2ZGIzZDY5MiJ9fX0=", rot);
|
||||
}else {
|
||||
Utilidades.setSkullBlock(l2, "c7b9f611-64c6-4e9c-ac97-8dedf8b97e17", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjZjNWVjYWM5NDJjNzdiOTVhYjQ2MjBkZjViODVlMzgwNjRjOTc0ZjljNWM1NzZiODQzNjIyODA2YTQ1NTcifX19", rot);
|
||||
}
|
||||
}else if(tipo.equals("rey")) {
|
||||
l.getBlock().setType(m);
|
||||
l.clone().add(0,1,0).getBlock().setType(m);
|
||||
l.clone().add(0,2,0).getBlock().setType(m);
|
||||
l.clone().add(0,3,0).getBlock().setType(Material.DIAMOND_BLOCK);
|
||||
}else if(tipo.equals("reina")) {
|
||||
l.getBlock().setType(m);
|
||||
l.clone().add(0,1,0).getBlock().setType(m);
|
||||
l.clone().add(0,2,0).getBlock().setType(m);
|
||||
Location l2 = l.clone().add(0,3,0);
|
||||
Utilidades.setSkullBlock(l2, "fdea850d-ae8b-4e10-8b03-6883494ae266", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTRiZjg5M2ZjNmRlZmFkMjE4Zjc4MzZlZmVmYmU2MzZmMWMyY2MxYmI2NTBjODJmY2NkOTlmMmMxZWU2In19fQ==", rot);
|
||||
}else if(tipo.equals("peon")) {
|
||||
l.getBlock().setType(m);
|
||||
Location l2 = l.clone().add(0,1,0);
|
||||
if(color.equals("b")) {
|
||||
Utilidades.setSkullBlock(l2, "eb1fc1a8-763e-442f-bf10-302b3beebb32", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTI2Yjc3MjMyOWNmMzJmODY0M2M0OTI4NjI2YjZhMzI1MjMzZmY2MWFhOWM3NzI1ODczYTRiZDY2ZGIzZDY5MiJ9fX0=", rot);
|
||||
}else {
|
||||
Utilidades.setSkullBlock(l2, "c7b9f611-64c6-4e9c-ac97-8dedf8b97e17", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjZjNWVjYWM5NDJjNzdiOTVhYjQ2MjBkZjViODVlMzgwNjRjOTc0ZjljNWM1NzZiODQzNjIyODA2YTQ1NTcifX19", rot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void eliminarPieza(Location l) {
|
||||
l.getBlock().setType(Material.AIR);
|
||||
l.clone().add(0,1,0).getBlock().setType(Material.AIR);
|
||||
l.clone().add(0,2,0).getBlock().setType(Material.AIR);
|
||||
l.clone().add(0,3,0).getBlock().setType(Material.AIR);
|
||||
}
|
||||
|
||||
public static void eliminarPiezas(Location esquina) {
|
||||
Location nueva = esquina.clone().add(1,1,1);
|
||||
for(int x=0;x<8;x++) {
|
||||
for(int y=0;y<8;y++) {
|
||||
nueva.getBlock().setType(Material.AIR);
|
||||
nueva.clone().add(0,1,0).getBlock().setType(Material.AIR);
|
||||
nueva.clone().add(0,2,0).getBlock().setType(Material.AIR);
|
||||
nueva.clone().add(0,3,0).getBlock().setType(Material.AIR);
|
||||
nueva.add(3,0,0);
|
||||
}
|
||||
nueva.add(-24,0,3);
|
||||
//Bukkit.getConsoleSender().sendMessage("eliminando en: "+nueva.getX()+" "+nueva.getY()+" "+nueva.getZ());
|
||||
}
|
||||
}
|
||||
|
||||
public static void crearHologramasPiezas(Location esquina,MineChess plugin) {
|
||||
Location nueva = esquina.clone().add(1.5,5.7,1.5);
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
for(int i=0;i<8;i++) {
|
||||
if(i==0 || i==7) {
|
||||
crearPiezaHolograma(plugin,nueva,"torre",config);
|
||||
}else if(i==1 || i==6) {
|
||||
crearPiezaHolograma(plugin,nueva,"caballo",config);
|
||||
}else if(i==2 || i==5) {
|
||||
crearPiezaHolograma(plugin,nueva,"alfil",config);
|
||||
}else if(i==3) {
|
||||
crearPiezaHolograma(plugin,nueva,"rey",config);
|
||||
}else {
|
||||
crearPiezaHolograma(plugin,nueva,"reina",config);
|
||||
}
|
||||
nueva.add(3,0,0);
|
||||
}
|
||||
|
||||
nueva = esquina.clone().add(1.5,4,4.5);
|
||||
for(int i=0;i<8;i++) {
|
||||
crearPiezaHolograma(plugin,nueva,"peon",config);
|
||||
nueva.add(3,0,0);
|
||||
}
|
||||
|
||||
nueva = esquina.clone().add(1.5,4,19.5);
|
||||
for(int i=0;i<8;i++) {
|
||||
crearPiezaHolograma(plugin,nueva,"peon",config);
|
||||
nueva.add(3,0,0);
|
||||
}
|
||||
|
||||
nueva = esquina.clone().add(1.5,5.7,22.5);
|
||||
for(int i=0;i<8;i++) {
|
||||
if(i==0 || i==7) {
|
||||
crearPiezaHolograma(plugin,nueva,"torre",config);
|
||||
}else if(i==1 || i==6) {
|
||||
crearPiezaHolograma(plugin,nueva,"caballo",config);
|
||||
}else if(i==2 || i==5) {
|
||||
crearPiezaHolograma(plugin,nueva,"alfil",config);
|
||||
}else if(i==3) {
|
||||
crearPiezaHolograma(plugin,nueva,"rey",config);
|
||||
}else {
|
||||
crearPiezaHolograma(plugin,nueva,"reina",config);
|
||||
}
|
||||
nueva.add(3,0,0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void crearPiezaHolograma(MineChess plugin,Location l,String tipo,FileConfiguration config) {
|
||||
if(Bukkit.getServer().getPluginManager().getPlugin("HolographicDisplays") != null && config.getString("Config.piece_holograms_enabled").equals("true")) {
|
||||
Hologram hologram = HologramsAPI.createHologram(plugin, l);
|
||||
VisibilityManager visibilityManager = hologram.getVisibilityManager();
|
||||
visibilityManager.setVisibleByDefault(false);
|
||||
if(tipo.equals("torre")) {
|
||||
hologram.insertTextLine(0, ChatColor.translateAlternateColorCodes('&',config.getString("Messages.pieceRook")));
|
||||
}else if(tipo.equals("caballo")) {
|
||||
hologram.insertTextLine(0, ChatColor.translateAlternateColorCodes('&',config.getString("Messages.pieceKnight")));
|
||||
}else if(tipo.equals("alfil")) {
|
||||
hologram.insertTextLine(0, ChatColor.translateAlternateColorCodes('&',config.getString("Messages.pieceBishop")));
|
||||
}else if(tipo.equals("rey")) {
|
||||
hologram.insertTextLine(0, ChatColor.translateAlternateColorCodes('&',config.getString("Messages.pieceKing")));
|
||||
}else if(tipo.equals("reina")) {
|
||||
hologram.insertTextLine(0, ChatColor.translateAlternateColorCodes('&',config.getString("Messages.pieceQueen")));
|
||||
}else if(tipo.equals("peon")) {
|
||||
hologram.insertTextLine(0, ChatColor.translateAlternateColorCodes('&',config.getString("Messages.piecePawn")));
|
||||
}
|
||||
visibilityManager.setVisibleByDefault(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void eliminarPiezaHolograma(MineChess plugin,Location l,FileConfiguration config) {
|
||||
if(Bukkit.getServer().getPluginManager().getPlugin("HolographicDisplays") != null && config.getString("Config.piece_holograms_enabled").equals("true")) {
|
||||
for(Hologram h : HologramsAPI.getHolograms(plugin)) {
|
||||
if(h.getX() == l.getX() && h.getZ() == l.getZ() && h.getWorld().getName().equals(l.getWorld().getName())) {
|
||||
h.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void eliminarPiezasHologramas(MineChess plugin,Location esquina,FileConfiguration config,boolean cerrandoServer) {
|
||||
if(Bukkit.getServer().getPluginManager().getPlugin("HolographicDisplays") != null && config.getString("Config.piece_holograms_enabled").equals("true")
|
||||
&& !cerrandoServer) {
|
||||
Location nueva = esquina.clone().add(1.5,1,1.5);
|
||||
for(int x=0;x<8;x++) {
|
||||
for(int y=0;y<8;y++) {
|
||||
for(Hologram h : HologramsAPI.getHolograms(plugin)) {
|
||||
if(h.getX() == nueva.getX() && h.getZ() == nueva.getZ() && h.getWorld().getName().equals(nueva.getWorld().getName())) {
|
||||
h.delete();
|
||||
}
|
||||
}
|
||||
nueva.add(3,0,0);
|
||||
}
|
||||
nueva.add(-24,0,3);
|
||||
//Bukkit.getConsoleSender().sendMessage("eliminando en: "+nueva.getX()+" "+nueva.getY()+" "+nueva.getZ());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
108
src/mc/ajneb97/lib/actionbarapi/ActionBarAPI.java
Normal file
108
src/mc/ajneb97/lib/actionbarapi/ActionBarAPI.java
Normal file
@ -0,0 +1,108 @@
|
||||
package mc.ajneb97.lib.actionbarapi;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
|
||||
public class ActionBarAPI
|
||||
{
|
||||
|
||||
public static void sendActionBar(Player player, String message)
|
||||
{
|
||||
if(Bukkit.getVersion().contains("1.16") || Bukkit.getVersion().contains("1.17")) {
|
||||
TextComponent text_component = new TextComponent(message);
|
||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, text_component);
|
||||
return;
|
||||
}
|
||||
boolean useOldMethods = false;
|
||||
String nmsver = Bukkit.getServer().getClass().getPackage().getName();
|
||||
nmsver = nmsver.substring(nmsver.lastIndexOf(".") + 1);
|
||||
if ((nmsver.equalsIgnoreCase("v1_8_R1")) || (nmsver.startsWith("v1_7_"))) {
|
||||
useOldMethods = true;
|
||||
}
|
||||
if (!player.isOnline()) {
|
||||
return; // Player may have logged out
|
||||
}
|
||||
|
||||
// Call the event, if cancelled don't send Action Bar
|
||||
ActionBarMessageEvent actionBarMessageEvent = new ActionBarMessageEvent(player, message);
|
||||
Bukkit.getPluginManager().callEvent(actionBarMessageEvent);
|
||||
if (actionBarMessageEvent.isCancelled())
|
||||
return;
|
||||
|
||||
try {
|
||||
Class<?> craftPlayerClass = Class.forName("org.bukkit.craftbukkit." + nmsver + ".entity.CraftPlayer");
|
||||
Object craftPlayer = craftPlayerClass.cast(player);
|
||||
Object packet;
|
||||
Class<?> packetPlayOutChatClass = Class.forName("net.minecraft.server." + nmsver + ".PacketPlayOutChat");
|
||||
Class<?> packetClass = Class.forName("net.minecraft.server." + nmsver + ".Packet");
|
||||
if (useOldMethods) {
|
||||
Class<?> chatSerializerClass = Class.forName("net.minecraft.server." + nmsver + ".ChatSerializer");
|
||||
Class<?> iChatBaseComponentClass = Class.forName("net.minecraft.server." + nmsver + ".IChatBaseComponent");
|
||||
Method m3 = chatSerializerClass.getDeclaredMethod("a", String.class);
|
||||
Object cbc = iChatBaseComponentClass.cast(m3.invoke(chatSerializerClass, "{\"text\": \"" + message + "\"}"));
|
||||
packet = packetPlayOutChatClass.getConstructor(new Class<?>[]{iChatBaseComponentClass, byte.class}).newInstance(cbc, (byte) 2);
|
||||
} else {
|
||||
Class<?> chatComponentTextClass = Class.forName("net.minecraft.server." + nmsver + ".ChatComponentText");
|
||||
Class<?> iChatBaseComponentClass = Class.forName("net.minecraft.server." + nmsver + ".IChatBaseComponent");
|
||||
try {
|
||||
|
||||
Class<?> chatMessageTypeClass = Class.forName("net.minecraft.server." + nmsver + ".ChatMessageType");
|
||||
Object[] chatMessageTypes = chatMessageTypeClass.getEnumConstants();
|
||||
Object chatMessageType = null;
|
||||
for (Object obj : chatMessageTypes) {
|
||||
if (obj.toString().equals("GAME_INFO")) {
|
||||
chatMessageType = obj;
|
||||
}
|
||||
}
|
||||
Object chatCompontentText = chatComponentTextClass.getConstructor(new Class<?>[]{String.class}).newInstance(message);
|
||||
packet = packetPlayOutChatClass.getConstructor(new Class<?>[]{iChatBaseComponentClass, chatMessageTypeClass}).newInstance(chatCompontentText, chatMessageType);
|
||||
} catch (ClassNotFoundException cnfe) {
|
||||
Object chatCompontentText = chatComponentTextClass.getConstructor(new Class<?>[]{String.class}).newInstance(message);
|
||||
packet = packetPlayOutChatClass.getConstructor(new Class<?>[]{iChatBaseComponentClass, byte.class}).newInstance(chatCompontentText, (byte) 2);
|
||||
}
|
||||
}
|
||||
Method craftPlayerHandleMethod = craftPlayerClass.getDeclaredMethod("getHandle");
|
||||
Object craftPlayerHandle = craftPlayerHandleMethod.invoke(craftPlayer);
|
||||
Field playerConnectionField = craftPlayerHandle.getClass().getDeclaredField("playerConnection");
|
||||
Object playerConnection = playerConnectionField.get(craftPlayerHandle);
|
||||
Method sendPacketMethod = playerConnection.getClass().getDeclaredMethod("sendPacket", packetClass);
|
||||
sendPacketMethod.invoke(playerConnection, packet);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void sendActionBar(final Player player, final String message, int duration,MineChess plugin) {
|
||||
sendActionBar(player, message);
|
||||
|
||||
if (duration >= 0) {
|
||||
// Sends empty message at the end of the duration. Allows messages shorter than 3 seconds, ensures precision.
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
sendActionBar(player, "");
|
||||
}
|
||||
}.runTaskLater(plugin, duration + 1);
|
||||
}
|
||||
|
||||
// Re-sends the messages every 3 seconds so it doesn't go away from the player's screen.
|
||||
while (duration > 40) {
|
||||
duration -= 40;
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
sendActionBar(player, message);
|
||||
}
|
||||
}.runTaskLater(plugin, (long) duration);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
55
src/mc/ajneb97/lib/actionbarapi/ActionBarMessageEvent.java
Normal file
55
src/mc/ajneb97/lib/actionbarapi/ActionBarMessageEvent.java
Normal file
@ -0,0 +1,55 @@
|
||||
package mc.ajneb97.lib.actionbarapi;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class ActionBarMessageEvent
|
||||
extends Event
|
||||
{
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private final Player player;
|
||||
private String message;
|
||||
private boolean cancelled = false;
|
||||
|
||||
public ActionBarMessageEvent(Player player, String message)
|
||||
{
|
||||
this.player = player;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public HandlerList getHandlers()
|
||||
{
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList()
|
||||
{
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public Player getPlayer()
|
||||
{
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public String getMessage()
|
||||
{
|
||||
return this.message;
|
||||
}
|
||||
|
||||
public void setMessage(String message)
|
||||
{
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public boolean isCancelled()
|
||||
{
|
||||
return this.cancelled;
|
||||
}
|
||||
|
||||
public void setCancelled(boolean cancelled)
|
||||
{
|
||||
this.cancelled = cancelled;
|
||||
}
|
||||
}
|
607
src/mc/ajneb97/lib/fastboard/FastBoard.java
Normal file
607
src/mc/ajneb97/lib/fastboard/FastBoard.java
Normal file
@ -0,0 +1,607 @@
|
||||
package mc.ajneb97.lib.fastboard;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.invoke.MethodHandle;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.lang.invoke.MethodType;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
/**
|
||||
* Lightweight packet-based scoreboard API for Bukkit plugins.
|
||||
* It can be safely used asynchronously as everything is at packet level.
|
||||
* <p>
|
||||
* The project is on <a href="https://github.com/MrMicky-FR/FastBoard">GitHub</a>.
|
||||
*
|
||||
* @author MrMicky
|
||||
* @version 1.2.0-SNAPSHOT
|
||||
*/
|
||||
public class FastBoard {
|
||||
|
||||
private static final Map<Class<?>, Field[]> PACKETS = new HashMap<>(8);
|
||||
private static final String[] COLOR_CODES = Arrays.stream(ChatColor.values())
|
||||
.map(Object::toString)
|
||||
.toArray(String[]::new);
|
||||
private static final VersionType VERSION_TYPE;
|
||||
// Packets and components
|
||||
private static final Class<?> CHAT_COMPONENT_CLASS;
|
||||
private static final Class<?> CHAT_FORMAT_ENUM;
|
||||
private static final Object EMPTY_MESSAGE;
|
||||
private static final Object RESET_FORMATTING;
|
||||
private static final MethodHandle MESSAGE_FROM_STRING;
|
||||
private static final MethodHandle PLAYER_CONNECTION;
|
||||
private static final MethodHandle SEND_PACKET;
|
||||
private static final MethodHandle PLAYER_GET_HANDLE;
|
||||
// Scoreboard packets
|
||||
private static final FastReflection.PacketConstructor PACKET_SB_OBJ;
|
||||
private static final FastReflection.PacketConstructor PACKET_SB_DISPLAY_OBJ;
|
||||
private static final FastReflection.PacketConstructor PACKET_SB_SCORE;
|
||||
private static final FastReflection.PacketConstructor PACKET_SB_TEAM;
|
||||
private static final FastReflection.PacketConstructor PACKET_SB_SERIALIZABLE_TEAM;
|
||||
// Scoreboard enums
|
||||
private static final Class<?> ENUM_SB_HEALTH_DISPLAY;
|
||||
private static final Class<?> ENUM_SB_ACTION;
|
||||
private static final Object ENUM_SB_HEALTH_DISPLAY_INTEGER;
|
||||
private static final Object ENUM_SB_ACTION_CHANGE;
|
||||
private static final Object ENUM_SB_ACTION_REMOVE;
|
||||
|
||||
static {
|
||||
try {
|
||||
MethodHandles.Lookup lookup = MethodHandles.lookup();
|
||||
|
||||
if (FastReflection.isRepackaged()) {
|
||||
VERSION_TYPE = VersionType.V1_17;
|
||||
} else if (FastReflection.nmsOptionalClass(null, "ScoreboardServer$Action").isPresent()) {
|
||||
VERSION_TYPE = VersionType.V1_13;
|
||||
} else if (FastReflection.nmsOptionalClass(null, "IScoreboardCriteria$EnumScoreboardHealthDisplay").isPresent()) {
|
||||
VERSION_TYPE = VersionType.V1_8;
|
||||
} else {
|
||||
VERSION_TYPE = VersionType.V1_7;
|
||||
}
|
||||
|
||||
String gameProtocolPackage = "network.protocol.game";
|
||||
Class<?> craftPlayerClass = FastReflection.obcClass("entity.CraftPlayer");
|
||||
Class<?> craftChatMessageClass = FastReflection.obcClass("util.CraftChatMessage");
|
||||
Class<?> entityPlayerClass = FastReflection.nmsClass("server.level", "EntityPlayer");
|
||||
Class<?> playerConnectionClass = FastReflection.nmsClass("server.network", "PlayerConnection");
|
||||
Class<?> packetClass = FastReflection.nmsClass("network.protocol", "Packet");
|
||||
Class<?> packetSbObjClass = FastReflection.nmsClass(gameProtocolPackage, "PacketPlayOutScoreboardObjective");
|
||||
Class<?> packetSbDisplayObjClass = FastReflection.nmsClass(gameProtocolPackage, "PacketPlayOutScoreboardDisplayObjective");
|
||||
Class<?> packetSbScoreClass = FastReflection.nmsClass(gameProtocolPackage, "PacketPlayOutScoreboardScore");
|
||||
Class<?> packetSbTeamClass = FastReflection.nmsClass(gameProtocolPackage, "PacketPlayOutScoreboardTeam");
|
||||
Class<?> sbTeamClass = VersionType.V1_17.isHigherOrEqual()
|
||||
? FastReflection.innerClass(packetSbTeamClass, innerClass -> !innerClass.isEnum()) : null;
|
||||
Field playerConnectionField = Arrays.stream(entityPlayerClass.getFields())
|
||||
.filter(field -> field.getType().isAssignableFrom(playerConnectionClass))
|
||||
.findFirst().orElseThrow(NoSuchFieldException::new);
|
||||
|
||||
MESSAGE_FROM_STRING = lookup.unreflect(craftChatMessageClass.getMethod("fromString", String.class));
|
||||
CHAT_COMPONENT_CLASS = FastReflection.nmsClass("network.chat", "IChatBaseComponent");
|
||||
CHAT_FORMAT_ENUM = FastReflection.nmsClass(null, "EnumChatFormat");
|
||||
EMPTY_MESSAGE = Array.get(MESSAGE_FROM_STRING.invoke(""), 0);
|
||||
RESET_FORMATTING = FastReflection.enumValueOf(CHAT_FORMAT_ENUM, "RESET", 21);
|
||||
PLAYER_GET_HANDLE = lookup.findVirtual(craftPlayerClass, "getHandle", MethodType.methodType(entityPlayerClass));
|
||||
PLAYER_CONNECTION = lookup.unreflectGetter(playerConnectionField);
|
||||
SEND_PACKET = lookup.findVirtual(playerConnectionClass, "sendPacket", MethodType.methodType(void.class, packetClass));
|
||||
PACKET_SB_OBJ = FastReflection.findPacketConstructor(packetSbObjClass, lookup);
|
||||
PACKET_SB_DISPLAY_OBJ = FastReflection.findPacketConstructor(packetSbDisplayObjClass, lookup);
|
||||
PACKET_SB_SCORE = FastReflection.findPacketConstructor(packetSbScoreClass, lookup);
|
||||
PACKET_SB_TEAM = FastReflection.findPacketConstructor(packetSbTeamClass, lookup);
|
||||
PACKET_SB_SERIALIZABLE_TEAM = sbTeamClass == null ? null : FastReflection.findPacketConstructor(sbTeamClass, lookup);
|
||||
|
||||
for (Class<?> clazz : Arrays.asList(packetSbObjClass, packetSbDisplayObjClass, packetSbScoreClass, packetSbTeamClass, sbTeamClass)) {
|
||||
if (clazz == null) {
|
||||
continue;
|
||||
}
|
||||
Field[] fields = Arrays.stream(clazz.getDeclaredFields())
|
||||
.filter(field -> !Modifier.isStatic(field.getModifiers()))
|
||||
.toArray(Field[]::new);
|
||||
for (Field field : fields) {
|
||||
field.setAccessible(true);
|
||||
}
|
||||
PACKETS.put(clazz, fields);
|
||||
}
|
||||
|
||||
if (VersionType.V1_8.isHigherOrEqual()) {
|
||||
String enumSbActionClass = VersionType.V1_13.isHigherOrEqual()
|
||||
? "ScoreboardServer$Action"
|
||||
: "PacketPlayOutScoreboardScore$EnumScoreboardAction";
|
||||
ENUM_SB_HEALTH_DISPLAY = FastReflection.nmsClass("world.scores.criteria", "IScoreboardCriteria$EnumScoreboardHealthDisplay");
|
||||
ENUM_SB_ACTION = FastReflection.nmsClass("server", enumSbActionClass);
|
||||
ENUM_SB_HEALTH_DISPLAY_INTEGER = FastReflection.enumValueOf(ENUM_SB_HEALTH_DISPLAY, "INTEGER", 0);
|
||||
ENUM_SB_ACTION_CHANGE = FastReflection.enumValueOf(ENUM_SB_ACTION, "CHANGE", 0);
|
||||
ENUM_SB_ACTION_REMOVE = FastReflection.enumValueOf(ENUM_SB_ACTION, "REMOVE", 1);
|
||||
} else {
|
||||
ENUM_SB_HEALTH_DISPLAY = null;
|
||||
ENUM_SB_ACTION = null;
|
||||
ENUM_SB_HEALTH_DISPLAY_INTEGER = null;
|
||||
ENUM_SB_ACTION_CHANGE = null;
|
||||
ENUM_SB_ACTION_REMOVE = null;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
throw new ExceptionInInitializerError(t);
|
||||
}
|
||||
}
|
||||
|
||||
private final Player player;
|
||||
private final String id;
|
||||
|
||||
private final List<String> lines = new ArrayList<>();
|
||||
private String title = ChatColor.RESET.toString();
|
||||
|
||||
private boolean deleted = false;
|
||||
|
||||
/**
|
||||
* Creates a new FastBoard.
|
||||
*
|
||||
* @param player the owner of the scoreboard
|
||||
*/
|
||||
public FastBoard(Player player) {
|
||||
this.player = Objects.requireNonNull(player, "player");
|
||||
this.id = "fb-" + Integer.toHexString(ThreadLocalRandom.current().nextInt());
|
||||
|
||||
try {
|
||||
sendObjectivePacket(ObjectiveMode.CREATE);
|
||||
sendDisplayObjectivePacket();
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Unable to create scoreboard", t);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the scoreboard title.
|
||||
*
|
||||
* @return the scoreboard title
|
||||
*/
|
||||
public String getTitle() {
|
||||
return this.title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the scoreboard title.
|
||||
*
|
||||
* @param title the new scoreboard title
|
||||
* @throws IllegalArgumentException if the title is longer than 32 chars on 1.12 or lower
|
||||
* @throws IllegalStateException if {@link #delete()} was call before
|
||||
*/
|
||||
public void updateTitle(String title) {
|
||||
if (this.title.equals(Objects.requireNonNull(title, "title"))) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!VersionType.V1_13.isHigherOrEqual() && title.length() > 32) {
|
||||
throw new IllegalArgumentException("Title is longer than 32 chars");
|
||||
}
|
||||
|
||||
this.title = title;
|
||||
|
||||
try {
|
||||
sendObjectivePacket(ObjectiveMode.UPDATE);
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Unable to update scoreboard title", t);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the scoreboard lines.
|
||||
*
|
||||
* @return the scoreboard lines
|
||||
*/
|
||||
public List<String> getLines() {
|
||||
return new ArrayList<>(this.lines);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the specified scoreboard line.
|
||||
*
|
||||
* @param line the line number
|
||||
* @return the line
|
||||
* @throws IndexOutOfBoundsException if the line is higher than {@code size}
|
||||
*/
|
||||
public String getLine(int line) {
|
||||
checkLineNumber(line, true, false);
|
||||
|
||||
return this.lines.get(line);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a single scoreboard line.
|
||||
*
|
||||
* @param line the line number
|
||||
* @param text the new line text
|
||||
* @throws IndexOutOfBoundsException if the line is higher than {@link #size() size() + 1}
|
||||
*/
|
||||
public synchronized void updateLine(int line, String text) {
|
||||
checkLineNumber(line, false, true);
|
||||
|
||||
try {
|
||||
if (line < size()) {
|
||||
this.lines.set(line, text);
|
||||
|
||||
sendTeamPacket(getScoreByLine(line), TeamMode.UPDATE);
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> newLines = new ArrayList<>(this.lines);
|
||||
|
||||
if (line > size()) {
|
||||
for (int i = size(); i < line; i++) {
|
||||
newLines.add("");
|
||||
}
|
||||
}
|
||||
|
||||
newLines.add(text);
|
||||
|
||||
updateLines(newLines);
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Unable to update scoreboard lines", t);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a scoreboard line.
|
||||
*
|
||||
* @param line the line number
|
||||
*/
|
||||
public synchronized void removeLine(int line) {
|
||||
checkLineNumber(line, false, false);
|
||||
|
||||
if (line >= size()) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> newLines = new ArrayList<>(this.lines);
|
||||
newLines.remove(line);
|
||||
updateLines(newLines);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update all the scoreboard lines.
|
||||
*
|
||||
* @param lines the new lines
|
||||
* @throws IllegalArgumentException if one line is longer than 30 chars on 1.12 or lower
|
||||
* @throws IllegalStateException if {@link #delete()} was call before
|
||||
*/
|
||||
public void updateLines(String... lines) {
|
||||
updateLines(Arrays.asList(lines));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the lines of the scoreboard
|
||||
*
|
||||
* @param lines the new scoreboard lines
|
||||
* @throws IllegalArgumentException if one line is longer than 30 chars on 1.12 or lower
|
||||
* @throws IllegalStateException if {@link #delete()} was call before
|
||||
*/
|
||||
public synchronized void updateLines(Collection<String> lines) {
|
||||
Objects.requireNonNull(lines, "lines");
|
||||
checkLineNumber(lines.size(), false, true);
|
||||
|
||||
if (!VersionType.V1_13.isHigherOrEqual()) {
|
||||
int lineCount = 0;
|
||||
for (String s : lines) {
|
||||
if (s != null && s.length() > 30) {
|
||||
throw new IllegalArgumentException("Line " + lineCount + " is longer than 30 chars");
|
||||
}
|
||||
lineCount++;
|
||||
}
|
||||
}
|
||||
|
||||
List<String> oldLines = new ArrayList<>(this.lines);
|
||||
this.lines.clear();
|
||||
this.lines.addAll(lines);
|
||||
|
||||
int linesSize = this.lines.size();
|
||||
|
||||
try {
|
||||
if (oldLines.size() != linesSize) {
|
||||
List<String> oldLinesCopy = new ArrayList<>(oldLines);
|
||||
|
||||
if (oldLines.size() > linesSize) {
|
||||
for (int i = oldLinesCopy.size(); i > linesSize; i--) {
|
||||
sendTeamPacket(i - 1, TeamMode.REMOVE);
|
||||
sendScorePacket(i - 1, ScoreboardAction.REMOVE);
|
||||
|
||||
oldLines.remove(0);
|
||||
}
|
||||
} else {
|
||||
for (int i = oldLinesCopy.size(); i < linesSize; i++) {
|
||||
sendScorePacket(i, ScoreboardAction.CHANGE);
|
||||
sendTeamPacket(i, TeamMode.CREATE);
|
||||
|
||||
oldLines.add(oldLines.size() - i, getLineByScore(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < linesSize; i++) {
|
||||
if (!Objects.equals(getLineByScore(oldLines, i), getLineByScore(i))) {
|
||||
sendTeamPacket(i, TeamMode.UPDATE);
|
||||
}
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Unable to update scoreboard lines", t);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the player who has the scoreboard.
|
||||
*
|
||||
* @return current player for this FastBoard
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the scoreboard id.
|
||||
*
|
||||
* @return the id
|
||||
*/
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get if the scoreboard is deleted.
|
||||
*
|
||||
* @return true if the scoreboard is deleted
|
||||
*/
|
||||
public boolean isDeleted() {
|
||||
return this.deleted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the scoreboard size (the number of lines).
|
||||
*
|
||||
* @return the size
|
||||
*/
|
||||
public int size() {
|
||||
return this.lines.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this FastBoard, and will remove the scoreboard for the associated player if he is online.
|
||||
* After this, all uses of {@link #updateLines} and {@link #updateTitle} will throws an {@link IllegalStateException}
|
||||
*
|
||||
* @throws IllegalStateException if this was already call before
|
||||
*/
|
||||
public void delete() {
|
||||
try {
|
||||
for (int i = 0; i < this.lines.size(); i++) {
|
||||
sendTeamPacket(i, TeamMode.REMOVE);
|
||||
}
|
||||
|
||||
sendObjectivePacket(ObjectiveMode.REMOVE);
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Unable to delete scoreboard", t);
|
||||
}
|
||||
|
||||
this.deleted = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return if the player has a prefix/suffix characters limit.
|
||||
* By default, it returns true only in 1.12 or lower.
|
||||
* This method can be overridden to fix compatibility with some versions support plugin.
|
||||
*
|
||||
* @return max length
|
||||
*/
|
||||
protected boolean hasLinesMaxLength() {
|
||||
return !VersionType.V1_13.isHigherOrEqual();
|
||||
}
|
||||
|
||||
private void checkLineNumber(int line, boolean checkInRange, boolean checkMax) {
|
||||
if (line < 0) {
|
||||
throw new IllegalArgumentException("Line number must be positive");
|
||||
}
|
||||
|
||||
if (checkInRange && line >= this.lines.size()) {
|
||||
throw new IllegalArgumentException("Line number must be under " + this.lines.size());
|
||||
}
|
||||
|
||||
if (checkMax && line >= COLOR_CODES.length - 1) {
|
||||
throw new IllegalArgumentException("Line number is too high: " + this.lines.size());
|
||||
}
|
||||
}
|
||||
|
||||
private int getScoreByLine(int line) {
|
||||
return this.lines.size() - line - 1;
|
||||
}
|
||||
|
||||
private String getLineByScore(int score) {
|
||||
return getLineByScore(this.lines, score);
|
||||
}
|
||||
|
||||
private String getLineByScore(List<String> lines, int score) {
|
||||
return lines.get(lines.size() - score - 1);
|
||||
}
|
||||
|
||||
private void sendObjectivePacket(ObjectiveMode mode) throws Throwable {
|
||||
Object packet = PACKET_SB_OBJ.invoke();
|
||||
|
||||
setField(packet, String.class, this.id);
|
||||
setField(packet, int.class, mode.ordinal());
|
||||
|
||||
if (mode != ObjectiveMode.REMOVE) {
|
||||
setComponentField(packet, this.title, 1);
|
||||
|
||||
if (VersionType.V1_8.isHigherOrEqual()) {
|
||||
setField(packet, ENUM_SB_HEALTH_DISPLAY, ENUM_SB_HEALTH_DISPLAY_INTEGER);
|
||||
}
|
||||
} else if (VERSION_TYPE == VersionType.V1_7) {
|
||||
setField(packet, String.class, "", 1);
|
||||
}
|
||||
|
||||
sendPacket(packet);
|
||||
}
|
||||
|
||||
private void sendDisplayObjectivePacket() throws Throwable {
|
||||
Object packet = PACKET_SB_DISPLAY_OBJ.invoke();
|
||||
|
||||
setField(packet, int.class, 1); // Position (1: sidebar)
|
||||
setField(packet, String.class, this.id); // Score Name
|
||||
|
||||
sendPacket(packet);
|
||||
}
|
||||
|
||||
private void sendScorePacket(int score, ScoreboardAction action) throws Throwable {
|
||||
Object packet = PACKET_SB_SCORE.invoke();
|
||||
|
||||
setField(packet, String.class, COLOR_CODES[score], 0); // Player Name
|
||||
|
||||
if (VersionType.V1_8.isHigherOrEqual()) {
|
||||
setField(packet, ENUM_SB_ACTION, action == ScoreboardAction.REMOVE ? ENUM_SB_ACTION_REMOVE : ENUM_SB_ACTION_CHANGE);
|
||||
} else {
|
||||
setField(packet, int.class, action.ordinal(), 1); // Action
|
||||
}
|
||||
|
||||
if (action == ScoreboardAction.CHANGE) {
|
||||
setField(packet, String.class, this.id, 1); // Objective Name
|
||||
setField(packet, int.class, score); // Score
|
||||
}
|
||||
|
||||
sendPacket(packet);
|
||||
}
|
||||
|
||||
private void sendTeamPacket(int score, TeamMode mode) throws Throwable {
|
||||
if (mode == TeamMode.ADD_PLAYERS || mode == TeamMode.REMOVE_PLAYERS) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
int maxLength = hasLinesMaxLength() ? 16 : 1024;
|
||||
Object packet = PACKET_SB_TEAM.invoke();
|
||||
|
||||
setField(packet, String.class, this.id + ':' + score); // Team name
|
||||
setField(packet, int.class, mode.ordinal(), VERSION_TYPE == VersionType.V1_8 ? 1 : 0); // Update mode
|
||||
|
||||
if (mode == TeamMode.CREATE || mode == TeamMode.UPDATE) {
|
||||
String line = getLineByScore(score);
|
||||
String prefix;
|
||||
String suffix = null;
|
||||
|
||||
if (line == null || line.isEmpty()) {
|
||||
prefix = COLOR_CODES[score] + ChatColor.RESET;
|
||||
} else if (line.length() <= maxLength) {
|
||||
prefix = line;
|
||||
} else {
|
||||
// Prevent splitting color codes
|
||||
int index = line.charAt(maxLength - 1) == ChatColor.COLOR_CHAR ? (maxLength - 1) : maxLength;
|
||||
prefix = line.substring(0, index);
|
||||
String suffixTmp = line.substring(index);
|
||||
ChatColor chatColor = null;
|
||||
|
||||
if (suffixTmp.length() >= 2 && suffixTmp.charAt(0) == ChatColor.COLOR_CHAR) {
|
||||
chatColor = ChatColor.getByChar(suffixTmp.charAt(1));
|
||||
}
|
||||
|
||||
String color = ChatColor.getLastColors(prefix);
|
||||
boolean addColor = chatColor == null || chatColor.isFormat();
|
||||
|
||||
suffix = (addColor ? (color.isEmpty() ? ChatColor.RESET.toString() : color) : "") + suffixTmp;
|
||||
}
|
||||
|
||||
if (prefix.length() > maxLength || (suffix != null && suffix.length() > maxLength)) {
|
||||
// Something went wrong, just cut to prevent client crash/kick
|
||||
prefix = prefix.substring(0, maxLength);
|
||||
suffix = (suffix != null) ? suffix.substring(0, maxLength) : null;
|
||||
}
|
||||
|
||||
if (VersionType.V1_17.isHigherOrEqual()) {
|
||||
Object team = PACKET_SB_SERIALIZABLE_TEAM.invoke();
|
||||
// Since the packet is initialized with null values, we need to change more things.
|
||||
setComponentField(team, "", 0); // Display name
|
||||
setField(team, CHAT_FORMAT_ENUM, RESET_FORMATTING); // Color
|
||||
setComponentField(team, prefix, 1); // Prefix
|
||||
setComponentField(team, suffix == null ? "" : suffix, 2); // Suffix
|
||||
setField(team, String.class, "always", 0); // Visibility
|
||||
setField(team, String.class, "always", 1); // Collisions
|
||||
setField(packet, Optional.class, Optional.of(team));
|
||||
} else {
|
||||
setComponentField(packet, prefix, 2); // Prefix
|
||||
setComponentField(packet, suffix == null ? "" : suffix, 3); // Suffix
|
||||
setField(packet, String.class, "always", 4); // Visibility for 1.8+
|
||||
setField(packet, String.class, "always", 5); // Collisions for 1.9+
|
||||
}
|
||||
|
||||
if (mode == TeamMode.CREATE) {
|
||||
setField(packet, Collection.class, Collections.singletonList(COLOR_CODES[score])); // Players in the team
|
||||
}
|
||||
}
|
||||
|
||||
sendPacket(packet);
|
||||
}
|
||||
|
||||
private void sendPacket(Object packet) throws Throwable {
|
||||
if (this.deleted) {
|
||||
throw new IllegalStateException("This FastBoard is deleted");
|
||||
}
|
||||
|
||||
if (this.player.isOnline()) {
|
||||
Object entityPlayer = PLAYER_GET_HANDLE.invoke(this.player);
|
||||
Object playerConnection = PLAYER_CONNECTION.invoke(entityPlayer);
|
||||
SEND_PACKET.invoke(playerConnection, packet);
|
||||
}
|
||||
}
|
||||
|
||||
private void setField(Object object, Class<?> fieldType, Object value) throws ReflectiveOperationException {
|
||||
setField(object, fieldType, value, 0);
|
||||
}
|
||||
|
||||
private void setField(Object packet, Class<?> fieldType, Object value, int count) throws ReflectiveOperationException {
|
||||
int i = 0;
|
||||
for (Field field : PACKETS.get(packet.getClass())) {
|
||||
if (field.getType() == fieldType && count == i++) {
|
||||
field.set(packet, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setComponentField(Object packet, String value, int count) throws Throwable {
|
||||
if (!VersionType.V1_13.isHigherOrEqual()) {
|
||||
setField(packet, String.class, value, count);
|
||||
return;
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
for (Field field : PACKETS.get(packet.getClass())) {
|
||||
if ((field.getType() == String.class || field.getType() == CHAT_COMPONENT_CLASS) && count == i++) {
|
||||
field.set(packet, value.isEmpty() ? EMPTY_MESSAGE : Array.get(MESSAGE_FROM_STRING.invoke(value), 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum ObjectiveMode {
|
||||
CREATE, REMOVE, UPDATE
|
||||
}
|
||||
|
||||
enum TeamMode {
|
||||
CREATE, REMOVE, UPDATE, ADD_PLAYERS, REMOVE_PLAYERS
|
||||
}
|
||||
|
||||
enum ScoreboardAction {
|
||||
CHANGE, REMOVE
|
||||
}
|
||||
|
||||
enum VersionType {
|
||||
V1_7, V1_8, V1_13, V1_17;
|
||||
|
||||
public boolean isHigherOrEqual() {
|
||||
return VERSION_TYPE.ordinal() >= ordinal();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
128
src/mc/ajneb97/lib/fastboard/FastReflection.java
Normal file
128
src/mc/ajneb97/lib/fastboard/FastReflection.java
Normal file
@ -0,0 +1,128 @@
|
||||
package mc.ajneb97.lib.fastboard;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.lang.invoke.MethodHandle;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.lang.invoke.MethodType;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* Small reflection utility class to use CraftBukkit and NMS.
|
||||
*
|
||||
* @author MrMicky
|
||||
*/
|
||||
public final class FastReflection {
|
||||
|
||||
private static final String NM_PACKAGE = "net.minecraft";
|
||||
public static final String OBC_PACKAGE = "org.bukkit.craftbukkit";
|
||||
public static final String NMS_PACKAGE = NM_PACKAGE + ".server";
|
||||
|
||||
public static final String VERSION = Bukkit.getServer().getClass().getPackage().getName().substring(OBC_PACKAGE.length() + 1);
|
||||
|
||||
private static final MethodType VOID_METHOD_TYPE = MethodType.methodType(void.class);
|
||||
private static final boolean NMS_REPACKAGED = optionalClass(NM_PACKAGE + ".network.protocol.Packet").isPresent();
|
||||
|
||||
private static volatile Object theUnsafe;
|
||||
|
||||
private FastReflection() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public static boolean isRepackaged() {
|
||||
return NMS_REPACKAGED;
|
||||
}
|
||||
|
||||
public static String nmsClassName(String post1_17package, String className) {
|
||||
if (NMS_REPACKAGED) {
|
||||
String classPackage = post1_17package == null ? NM_PACKAGE : NM_PACKAGE + '.' + post1_17package;
|
||||
return classPackage + '.' + className;
|
||||
}
|
||||
return NMS_PACKAGE + '.' + VERSION + '.' + className;
|
||||
}
|
||||
|
||||
public static Class<?> nmsClass(String post1_17package, String className) throws ClassNotFoundException {
|
||||
return Class.forName(nmsClassName(post1_17package, className));
|
||||
}
|
||||
|
||||
public static Optional<Class<?>> nmsOptionalClass(String post1_17package, String className) {
|
||||
return optionalClass(nmsClassName(post1_17package, className));
|
||||
}
|
||||
|
||||
public static String obcClassName(String className) {
|
||||
return OBC_PACKAGE + '.' + VERSION + '.' + className;
|
||||
}
|
||||
|
||||
public static Class<?> obcClass(String className) throws ClassNotFoundException {
|
||||
return Class.forName(obcClassName(className));
|
||||
}
|
||||
|
||||
public static Optional<Class<?>> obcOptionalClass(String className) {
|
||||
return optionalClass(obcClassName(className));
|
||||
}
|
||||
|
||||
public static Optional<Class<?>> optionalClass(String className) {
|
||||
try {
|
||||
return Optional.of(Class.forName(className));
|
||||
} catch (ClassNotFoundException e) {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
public static Object enumValueOf(Class<?> enumClass, String enumName) {
|
||||
return Enum.valueOf(enumClass.asSubclass(Enum.class), enumName);
|
||||
}
|
||||
|
||||
public static Object enumValueOf(Class<?> enumClass, String enumName, int fallbackOrdinal) {
|
||||
try {
|
||||
return enumValueOf(enumClass, enumName);
|
||||
} catch (IllegalArgumentException e) {
|
||||
Object[] constants = enumClass.getEnumConstants();
|
||||
if (constants.length > fallbackOrdinal) {
|
||||
return constants[fallbackOrdinal];
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
static Class<?> innerClass(Class<?> parentClass, Predicate<Class<?>> classPredicate) throws ClassNotFoundException {
|
||||
for (Class<?> innerClass : parentClass.getDeclaredClasses()) {
|
||||
if (classPredicate.test(innerClass)) {
|
||||
return innerClass;
|
||||
}
|
||||
}
|
||||
throw new ClassNotFoundException("No class in " + parentClass.getCanonicalName() + " matches the predicate.");
|
||||
}
|
||||
|
||||
public static PacketConstructor findPacketConstructor(Class<?> packetClass, MethodHandles.Lookup lookup) throws Exception {
|
||||
try {
|
||||
MethodHandle constructor = lookup.findConstructor(packetClass, VOID_METHOD_TYPE);
|
||||
return constructor::invoke;
|
||||
} catch (NoSuchMethodException | IllegalAccessException e) {
|
||||
// try below with Unsafe
|
||||
}
|
||||
|
||||
if (theUnsafe == null) {
|
||||
synchronized (FastReflection.class) {
|
||||
if (theUnsafe == null) {
|
||||
Class<?> unsafeClass = Class.forName("sun.misc.Unsafe");
|
||||
Field theUnsafeField = unsafeClass.getDeclaredField("theUnsafe");
|
||||
theUnsafeField.setAccessible(true);
|
||||
theUnsafe = theUnsafeField.get(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Method allocateMethod = theUnsafe.getClass().getMethod("allocateInstance", Class.class);
|
||||
return () -> allocateMethod.invoke(theUnsafe, packetClass);
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
interface PacketConstructor {
|
||||
Object invoke() throws Throwable;
|
||||
}
|
||||
}
|
||||
|
57
src/mc/ajneb97/lib/titleapi/TabTitleSendEvent.java
Normal file
57
src/mc/ajneb97/lib/titleapi/TabTitleSendEvent.java
Normal file
@ -0,0 +1,57 @@
|
||||
package mc.ajneb97.lib.titleapi;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class TabTitleSendEvent extends Event {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private final Player player;
|
||||
private String header;
|
||||
private String footer;
|
||||
private boolean cancelled = false;
|
||||
|
||||
public TabTitleSendEvent(Player player, String header, String footer) {
|
||||
this.player = player;
|
||||
this.header = header;
|
||||
this.footer = footer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public String getHeader() {
|
||||
return header;
|
||||
}
|
||||
|
||||
public void setHeader(String header) {
|
||||
this.header = header;
|
||||
}
|
||||
|
||||
public String getFooter() {
|
||||
return footer;
|
||||
}
|
||||
|
||||
public void setFooter(String footer) {
|
||||
this.footer = footer;
|
||||
}
|
||||
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
public void setCancelled(boolean cancelled) {
|
||||
this.cancelled = cancelled;
|
||||
}
|
||||
|
||||
}
|
158
src/mc/ajneb97/lib/titleapi/TitleAPI.java
Normal file
158
src/mc/ajneb97/lib/titleapi/TitleAPI.java
Normal file
@ -0,0 +1,158 @@
|
||||
package mc.ajneb97.lib.titleapi;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
|
||||
public class TitleAPI implements Listener {
|
||||
|
||||
@Deprecated
|
||||
public static void sendSubtitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String message) {
|
||||
sendTitle(player, fadeIn, stay, fadeOut, null, message);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static void sendFullTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) {
|
||||
sendTitle(player, fadeIn, stay, fadeOut, title, subtitle);
|
||||
}
|
||||
|
||||
public static void sendPacket(Player player, Object packet) {
|
||||
try {
|
||||
Object handle = player.getClass().getMethod("getHandle").invoke(player);
|
||||
Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
|
||||
playerConnection.getClass().getMethod("sendPacket", getNMSClass("Packet")).invoke(playerConnection, packet);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static Class<?> getNMSClass(String name) {
|
||||
String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
|
||||
try {
|
||||
return Class.forName("net.minecraft.server." + version + "." + name);
|
||||
} catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void sendTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) {
|
||||
TitleSendEvent titleSendEvent = new TitleSendEvent(player, title, subtitle);
|
||||
if(Bukkit.getVersion().contains("1.13") || Bukkit.getVersion().contains("1.14") || Bukkit.getVersion().contains("1.15")
|
||||
|| Bukkit.getVersion().contains("1.16") || Bukkit.getVersion().contains("1.17")) {
|
||||
if(title.isEmpty()) {
|
||||
title = " ";
|
||||
}
|
||||
if(subtitle.isEmpty()) {
|
||||
subtitle = " ";
|
||||
}
|
||||
title = ChatColor.translateAlternateColorCodes('&', title);
|
||||
subtitle = ChatColor.translateAlternateColorCodes('&', subtitle);
|
||||
player.sendTitle(title, subtitle, fadeIn, stay, fadeOut);
|
||||
return;
|
||||
}
|
||||
Bukkit.getPluginManager().callEvent(titleSendEvent);
|
||||
if (titleSendEvent.isCancelled())
|
||||
return;
|
||||
|
||||
try {
|
||||
Object e;
|
||||
Object chatTitle;
|
||||
Object chatSubtitle;
|
||||
Constructor subtitleConstructor;
|
||||
Object titlePacket;
|
||||
Object subtitlePacket;
|
||||
|
||||
if (title != null) {
|
||||
title = ChatColor.translateAlternateColorCodes('&', title);
|
||||
title = title.replaceAll("%player%", player.getDisplayName());
|
||||
// Times packets
|
||||
e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get((Object) null);
|
||||
chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"});
|
||||
subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE});
|
||||
titlePacket = subtitleConstructor.newInstance(new Object[]{e, chatTitle, fadeIn, stay, fadeOut});
|
||||
sendPacket(player, titlePacket);
|
||||
|
||||
e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get((Object) null);
|
||||
chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"});
|
||||
subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent")});
|
||||
titlePacket = subtitleConstructor.newInstance(new Object[]{e, chatTitle});
|
||||
sendPacket(player, titlePacket);
|
||||
}
|
||||
|
||||
if (subtitle != null) {
|
||||
subtitle = ChatColor.translateAlternateColorCodes('&', subtitle);
|
||||
subtitle = subtitle.replaceAll("%player%", player.getDisplayName());
|
||||
// Times packets
|
||||
e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get((Object) null);
|
||||
chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + title + "\"}"});
|
||||
subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE});
|
||||
subtitlePacket = subtitleConstructor.newInstance(new Object[]{e, chatSubtitle, fadeIn, stay, fadeOut});
|
||||
sendPacket(player, subtitlePacket);
|
||||
|
||||
e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get((Object) null);
|
||||
chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[]{String.class}).invoke((Object) null, new Object[]{"{\"text\":\"" + subtitle + "\"}"});
|
||||
subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[]{getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE});
|
||||
subtitlePacket = subtitleConstructor.newInstance(new Object[]{e, chatSubtitle, fadeIn, stay, fadeOut});
|
||||
sendPacket(player, subtitlePacket);
|
||||
}
|
||||
} catch (Exception var11) {
|
||||
var11.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void clearTitle(Player player) {
|
||||
sendTitle(player, 0, 0, 0, "", "");
|
||||
}
|
||||
|
||||
public static void sendTabTitle(Player player, String header, String footer) {
|
||||
if (header == null) header = "";
|
||||
header = ChatColor.translateAlternateColorCodes('&', header);
|
||||
|
||||
if (footer == null) footer = "";
|
||||
footer = ChatColor.translateAlternateColorCodes('&', footer);
|
||||
|
||||
TabTitleSendEvent tabTitleSendEvent = new TabTitleSendEvent(player, header, footer);
|
||||
Bukkit.getPluginManager().callEvent(tabTitleSendEvent);
|
||||
if (tabTitleSendEvent.isCancelled())
|
||||
return;
|
||||
|
||||
header = header.replaceAll("%player%", player.getDisplayName());
|
||||
footer = footer.replaceAll("%player%", player.getDisplayName());
|
||||
|
||||
try {
|
||||
Object tabHeader = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + header + "\"}");
|
||||
Object tabFooter = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + footer + "\"}");
|
||||
Constructor<?> titleConstructor = getNMSClass("PacketPlayOutPlayerListHeaderFooter").getConstructor();
|
||||
Object packet = titleConstructor.newInstance();
|
||||
try {
|
||||
Field aField = packet.getClass().getDeclaredField("a");
|
||||
aField.setAccessible(true);
|
||||
aField.set(packet, tabHeader);
|
||||
Field bField = packet.getClass().getDeclaredField("b");
|
||||
bField.setAccessible(true);
|
||||
bField.set(packet, tabFooter);
|
||||
} catch (Exception e) {
|
||||
Field aField = packet.getClass().getDeclaredField("header");
|
||||
aField.setAccessible(true);
|
||||
aField.set(packet, tabHeader);
|
||||
Field bField = packet.getClass().getDeclaredField("footer");
|
||||
bField.setAccessible(true);
|
||||
bField.set(packet, tabFooter);
|
||||
}
|
||||
sendPacket(player, packet);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
57
src/mc/ajneb97/lib/titleapi/TitleSendEvent.java
Normal file
57
src/mc/ajneb97/lib/titleapi/TitleSendEvent.java
Normal file
@ -0,0 +1,57 @@
|
||||
package mc.ajneb97.lib.titleapi;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class TitleSendEvent extends Event {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private final Player player;
|
||||
private String title;
|
||||
private String subtitle;
|
||||
private boolean cancelled = false;
|
||||
|
||||
public TitleSendEvent(Player player, String title, String subtitle) {
|
||||
this.player = player;
|
||||
this.title = title;
|
||||
this.subtitle = subtitle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getSubtitle() {
|
||||
return subtitle;
|
||||
}
|
||||
|
||||
public void setSubtitle(String subtitle) {
|
||||
this.subtitle = subtitle;
|
||||
}
|
||||
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
public void setCancelled(boolean cancelled) {
|
||||
this.cancelled = cancelled;
|
||||
}
|
||||
|
||||
}
|
153
src/mc/ajneb97/managers/CartelesListener.java
Normal file
153
src/mc/ajneb97/managers/CartelesListener.java
Normal file
@ -0,0 +1,153 @@
|
||||
package mc.ajneb97.managers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Sign;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.SignChangeEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.juego.Estado;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
import mc.ajneb97.otros.Utilidades;
|
||||
|
||||
public class CartelesListener implements Listener{
|
||||
|
||||
private MineChess plugin;
|
||||
public CartelesListener(MineChess plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
//Al poner Cartel
|
||||
@EventHandler
|
||||
public void crearCartel(SignChangeEvent event ) {
|
||||
Player jugador = event.getPlayer();
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
if(event.getLine(0).equals("[Chess]")) {
|
||||
String arena = event.getLine(1);
|
||||
if(arena != null && plugin.getPartida(arena) != null) {
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
Partida partida = plugin.getPartida(arena);
|
||||
String estado = "";
|
||||
if(partida.estaIniciada()) {
|
||||
estado = config.getString("Messages.signStatusIngame");
|
||||
}else if(partida.getEstado().equals(Estado.COMENZANDO)) {
|
||||
estado = config.getString("Messages.signStatusStarting");
|
||||
}else if(partida.getEstado().equals(Estado.ESPERANDO)) {
|
||||
estado = config.getString("Messages.signStatusWaiting");
|
||||
}else if(partida.getEstado().equals(Estado.DESACTIVADA)) {
|
||||
estado = config.getString("Messages.signStatusDisabled");
|
||||
}else if(partida.getEstado().equals(Estado.TERMINANDO)) {
|
||||
estado = config.getString("Messages.signStatusFinishing");
|
||||
}
|
||||
|
||||
List<String> lista = config.getStringList("Messages.signFormat");
|
||||
for(int i=0;i<lista.size();i++) {
|
||||
event.setLine(i, ChatColor.translateAlternateColorCodes('&', lista.get(i).replace("%arena%", arena)
|
||||
.replace("%status%", estado).replace("%current_players%", partida.getCantidadActualJugadores()+"")
|
||||
.replace("%max_players%", "2")));
|
||||
}
|
||||
|
||||
FileConfiguration signs = plugin.getSigns();
|
||||
signs.set("Signs."+arena+".x", event.getBlock().getX()+"");
|
||||
signs.set("Signs."+arena+".y", event.getBlock().getY()+"");
|
||||
signs.set("Signs."+arena+".z", event.getBlock().getZ()+"");
|
||||
signs.set("Signs."+arena+".world", event.getBlock().getWorld().getName()+"");
|
||||
plugin.saveSigns();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void eliminarCartel(BlockBreakEvent event ) {
|
||||
Player jugador = event.getPlayer();
|
||||
Block block = event.getBlock();
|
||||
if(jugador.isOp() || jugador.hasPermission("chess.admin")) {
|
||||
if(block.getType().name().contains("SIGN")) {
|
||||
FileConfiguration signs = plugin.getSigns();
|
||||
if(signs.contains("Signs")) {
|
||||
for(String arena : signs.getConfigurationSection("Signs").getKeys(false)) {
|
||||
Partida partida = plugin.getPartida(arena);
|
||||
if(partida != null) {
|
||||
int x = Integer.valueOf(signs.getString("Signs."+arena+".x"));
|
||||
int y = Integer.valueOf(signs.getString("Signs."+arena+".y"));
|
||||
int z = Integer.valueOf(signs.getString("Signs."+arena+".z"));
|
||||
World world = Bukkit.getWorld(signs.getString("Signs."+arena+".world"));
|
||||
if(world != null) {
|
||||
if(block.getX() == x && block.getY() == y && block.getZ() == z && world.getName().equals(block.getWorld().getName())) {
|
||||
signs.set("Signs."+arena, null);
|
||||
plugin.saveSigns();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void entrarPartida(PlayerInteractEvent event) {
|
||||
final Player jugador = event.getPlayer();
|
||||
Block block = event.getClickedBlock();
|
||||
if(block != null && event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
|
||||
if(block.getType().name().contains("SIGN")) {
|
||||
FileConfiguration signs = plugin.getSigns();
|
||||
if(signs.contains("Signs")) {
|
||||
for(String arena : signs.getConfigurationSection("Signs").getKeys(false)) {
|
||||
final Partida partida = plugin.getPartida(arena);
|
||||
if(partida != null) {
|
||||
int x = Integer.valueOf(signs.getString("Signs."+arena+".x"));
|
||||
int y = Integer.valueOf(signs.getString("Signs."+arena+".y"));
|
||||
int z = Integer.valueOf(signs.getString("Signs."+arena+".z"));
|
||||
World world = Bukkit.getWorld(signs.getString("Signs."+arena+".world"));
|
||||
if(world != null) {
|
||||
if(block.getX() == x && block.getY() == y && block.getZ() == z && world.getName().equals(block.getWorld().getName())) {
|
||||
final FileConfiguration config = plugin.getConfig();
|
||||
final String prefix = ChatColor.translateAlternateColorCodes('&', config.getString("Messages.prefix"));
|
||||
if(partida.estaActivada()) {
|
||||
if(plugin.getPartidaJugador(jugador.getName()) == null) {
|
||||
if(!partida.estaIniciada()) {
|
||||
if(!partida.estaLlena()) {
|
||||
if(!Utilidades.pasaConfigInventario(jugador, config)) {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.errorClearInventory")));
|
||||
return;
|
||||
}
|
||||
PartidaManager.jugadorEntra(partida, jugador,plugin);
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaIsFull")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaAlreadyStarted")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.alreadyInArena")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaDisabledError")));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
184
src/mc/ajneb97/managers/CooldownManager.java
Normal file
184
src/mc/ajneb97/managers/CooldownManager.java
Normal file
@ -0,0 +1,184 @@
|
||||
package mc.ajneb97.managers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.juego.Estado;
|
||||
import mc.ajneb97.juego.Jugador;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
import mc.ajneb97.lib.actionbarapi.ActionBarAPI;
|
||||
|
||||
public class CooldownManager {
|
||||
|
||||
int taskID;
|
||||
int tiempo;
|
||||
private Partida partida;
|
||||
private MineChess plugin;
|
||||
public CooldownManager(MineChess plugin){
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public void cooldownComenzarJuego(Partida partida,int cooldown){
|
||||
this.partida = partida;
|
||||
this.tiempo = cooldown;
|
||||
partida.setTiempo(tiempo);
|
||||
final FileConfiguration config = plugin.getConfig();
|
||||
final String prefix = ChatColor.translateAlternateColorCodes('&', config.getString("Messages.prefix"));
|
||||
ArrayList<Jugador> jugadores = partida.getJugadores();
|
||||
for(int i=0;i<jugadores.size();i++) {
|
||||
jugadores.get(i).getJugador().sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaStartingMessage").replace("%time%", tiempo+"")));
|
||||
}
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run(){
|
||||
if(!ejecutarComenzarJuego(config,prefix)){
|
||||
Bukkit.getScheduler().cancelTask(taskID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, 0L, 20L);
|
||||
}
|
||||
|
||||
protected boolean ejecutarComenzarJuego(FileConfiguration config,String prefix) {
|
||||
if(partida != null && partida.getEstado().equals(Estado.COMENZANDO)) {
|
||||
if(tiempo <= 5 && tiempo > 0) {
|
||||
ArrayList<Jugador> jugadores = partida.getJugadores();
|
||||
for(int i=0;i<jugadores.size();i++) {
|
||||
jugadores.get(i).getJugador().sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.arenaStartingMessage").replace("%time%", tiempo+"")));
|
||||
}
|
||||
partida.disminuirTiempo();
|
||||
tiempo--;
|
||||
return true;
|
||||
}else if(tiempo <= 0) {
|
||||
PartidaManager.iniciarPartida(partida,plugin);
|
||||
return false;
|
||||
}else {
|
||||
partida.disminuirTiempo();
|
||||
tiempo--;
|
||||
return true;
|
||||
}
|
||||
}else {
|
||||
ArrayList<Jugador> jugadores = partida.getJugadores();
|
||||
for(int i=0;i<jugadores.size();i++) {
|
||||
jugadores.get(i).getJugador().sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.gameStartingCancelled")));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void cooldownJuego(Partida partida,int tiempoMaximo){
|
||||
this.partida = partida;
|
||||
this.tiempo = tiempoMaximo;
|
||||
partida.setTiempoMaximo(tiempoMaximo);
|
||||
partida.setTiempo(tiempo);
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run(){
|
||||
if(!ejecutarJuego()){
|
||||
Bukkit.getScheduler().cancelTask(taskID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, 0L, 20L);
|
||||
}
|
||||
|
||||
protected boolean ejecutarJuego() {
|
||||
if(partida != null && partida.getEstado().equals(Estado.JUGANDO)) {
|
||||
partida.disminuirTiempo();
|
||||
if(tiempo == 0) {
|
||||
PartidaManager.iniciarFaseFinalizacion(partida, plugin,partida.getGanador());
|
||||
return false;
|
||||
}else {
|
||||
tiempo--;
|
||||
return true;
|
||||
}
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void cooldownFaseFinalizacion(Partida partida,int cooldown,final Jugador ganador){
|
||||
this.partida = partida;
|
||||
this.tiempo = cooldown;
|
||||
partida.setTiempo(tiempo);
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run(){
|
||||
if(!ejecutarComenzarFaseFinalizacion(ganador)){
|
||||
Bukkit.getScheduler().cancelTask(taskID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, 0L, 20L);
|
||||
}
|
||||
|
||||
protected boolean ejecutarComenzarFaseFinalizacion(Jugador ganador) {
|
||||
if(partida != null && partida.getEstado().equals(Estado.TERMINANDO)) {
|
||||
partida.disminuirTiempo();
|
||||
if(tiempo == 0) {
|
||||
PartidaManager.finalizarPartida(partida,ganador,plugin,false);
|
||||
return false;
|
||||
}else {
|
||||
tiempo--;
|
||||
if(partida.getJugador1() != null && partida.getJugador1().equals(ganador)) {
|
||||
PartidaManager.lanzarFuegos(ganador);
|
||||
}else if(partida.getJugador2() != null && partida.getJugador2().equals(ganador)) {
|
||||
PartidaManager.lanzarFuegos(ganador);
|
||||
}
|
||||
// if(ganador != null && partida.getCantidadActualJugadores() != 0) {
|
||||
// PartidaManager.lanzarFuegos(ganador);
|
||||
// }
|
||||
return true;
|
||||
}
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void cooldownActionbar(Partida partida,final FileConfiguration config){
|
||||
this.partida = partida;
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run(){
|
||||
if(!ejecutarActionbar(config)){
|
||||
Bukkit.getScheduler().cancelTask(taskID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, 0L, 20L);
|
||||
}
|
||||
|
||||
protected boolean ejecutarActionbar(FileConfiguration config) {
|
||||
if(partida != null && partida.getEstado().equals(Estado.JUGANDO)) {
|
||||
ArrayList<Jugador> jugadores = partida.getJugadores();
|
||||
Jugador turno = partida.getTurno();
|
||||
String contrincante = "";
|
||||
if(turno.equals(partida.getJugador1())) {
|
||||
contrincante = partida.getJugador1().getJugador().getName();
|
||||
}else {
|
||||
contrincante = partida.getJugador2().getJugador().getName();
|
||||
}
|
||||
for(int i=0;i<jugadores.size();i++) {
|
||||
if(turno != null) {
|
||||
String msg = "";
|
||||
if(jugadores.get(i).getJugador().getName().equals(turno.getJugador().getName())) {
|
||||
msg = ChatColor.translateAlternateColorCodes('&', config.getString("Messages.actionbarYourTurn").replace("%time%", turno.getTiempo()+""));
|
||||
}else {
|
||||
msg = ChatColor.translateAlternateColorCodes('&', config.getString("Messages.actionbarPlayerTurn").replace("%player%", contrincante)
|
||||
.replace("%time%", turno.getTiempo()+""));
|
||||
}
|
||||
ActionBarAPI.sendActionBar(jugadores.get(i).getJugador(), msg);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
240
src/mc/ajneb97/managers/CooldownParticulaPieza.java
Normal file
240
src/mc/ajneb97/managers/CooldownParticulaPieza.java
Normal file
@ -0,0 +1,240 @@
|
||||
package mc.ajneb97.managers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.juego.Estado;
|
||||
import mc.ajneb97.juego.Jugador;
|
||||
import mc.ajneb97.juego.MovimientoPosible;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
import mc.ajneb97.juego.Pieza;
|
||||
import mc.ajneb97.otros.Utilidades;
|
||||
|
||||
public class CooldownParticulaPieza {
|
||||
|
||||
int taskID;
|
||||
private MineChess plugin;
|
||||
private Jugador jugador;
|
||||
private Partida partida;
|
||||
private Pieza pieza;
|
||||
public CooldownParticulaPieza(MineChess plugin){
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public void cooldownParticula(Jugador j,Partida partida,Pieza pieza){
|
||||
this.jugador = j;
|
||||
this.partida = partida;
|
||||
this.pieza = pieza;
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run(){
|
||||
if(!ejecutarCooldownParticula()){
|
||||
Bukkit.getScheduler().cancelTask(taskID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, 0L, 5L);
|
||||
}
|
||||
|
||||
protected boolean ejecutarCooldownParticula() {
|
||||
if(jugador != null) {
|
||||
if(partida != null && partida.getEstado().equals(Estado.JUGANDO)) {
|
||||
Pieza p = jugador.getPiezaObservada();
|
||||
if(p == null) {
|
||||
return false;
|
||||
}
|
||||
if(pieza == null) {
|
||||
return false;
|
||||
}
|
||||
if((p.getId() != pieza.getId())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Location l = partida.getLocationDesdePieza(p);
|
||||
if(l == null) {
|
||||
return false;
|
||||
}
|
||||
double y = partida.getEsquina1().getY();
|
||||
Location nueva = l.clone().add(0.5,0,0.5);
|
||||
nueva.setY(y+1.35);
|
||||
|
||||
if(nueva != null) {
|
||||
//Generar particulas
|
||||
int particles = 20;
|
||||
float radius = (float) 1.5;
|
||||
Location location1 = nueva.clone();
|
||||
for (int i = 0; i < particles; i++) {
|
||||
double angle, x, z;
|
||||
angle = 2 * Math.PI * i / particles;
|
||||
x = Math.cos(angle) * radius;
|
||||
z = Math.sin(angle) * radius;
|
||||
location1.add(x, 0, z);
|
||||
Utilidades.generarParticula("FLAME", location1, 0.001F, 0.001F, 0.001F, 0.01F, 1, jugador.getJugador());
|
||||
location1.subtract(x, 0, z);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void cooldownParticulaSeleccionada(Jugador j,Partida partida,Pieza pieza){
|
||||
this.jugador = j;
|
||||
this.partida = partida;
|
||||
this.pieza = pieza;
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run(){
|
||||
if(!ejecutarCooldownParticulaSeleccionada()){
|
||||
Bukkit.getScheduler().cancelTask(taskID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, 0L, 5L);
|
||||
}
|
||||
|
||||
protected boolean ejecutarCooldownParticulaSeleccionada() {
|
||||
if(jugador != null) {
|
||||
if(partida != null && partida.getEstado().equals(Estado.JUGANDO)) {
|
||||
Pieza p = jugador.getPiezaSeleccionada();
|
||||
if(p == null) {
|
||||
return false;
|
||||
}
|
||||
if(pieza == null) {
|
||||
return false;
|
||||
}
|
||||
if((p.getId() != pieza.getId())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Location l = partida.getLocationDesdePieza(p);
|
||||
double y = partida.getEsquina1().getY();
|
||||
Location nueva = l.clone().add(0.5,0,0.5);
|
||||
nueva.setY(y+1.35);
|
||||
|
||||
if(nueva != null) {
|
||||
//Generar particulas
|
||||
int particles = 20;
|
||||
float radius = (float) 1.5;
|
||||
Location location1 = nueva.clone();
|
||||
for (int i = 0; i < particles; i++) {
|
||||
double angle, x, z;
|
||||
angle = 2 * Math.PI * i / particles;
|
||||
x = Math.cos(angle) * radius;
|
||||
z = Math.sin(angle) * radius;
|
||||
location1.add(x, 0, z);
|
||||
Utilidades.generarParticula("VILLAGER_HAPPY", location1, 0.001F, 0.001F, 0.001F, 0.001F, 1, jugador.getJugador());
|
||||
location1.subtract(x, 0, z);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void cooldownParticulaMovimientosPosibles(Jugador j,Partida partida,Pieza pieza,final ArrayList<MovimientoPosible> locs){
|
||||
this.jugador = j;
|
||||
this.partida = partida;
|
||||
this.pieza = pieza;
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run(){
|
||||
if(!ejecutarCooldownParticulaSeleccionada(locs)){
|
||||
Bukkit.getScheduler().cancelTask(taskID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, 0L, 5L);
|
||||
}
|
||||
|
||||
protected boolean ejecutarCooldownParticulaSeleccionada(ArrayList<MovimientoPosible> locs) {
|
||||
if(jugador != null) {
|
||||
if(partida != null && partida.getEstado().equals(Estado.JUGANDO)) {
|
||||
Pieza p = jugador.getPiezaSeleccionada();
|
||||
if(p == null) {
|
||||
return false;
|
||||
}
|
||||
if(pieza == null) {
|
||||
return false;
|
||||
}
|
||||
if((p.getId() != pieza.getId())) {
|
||||
return false;
|
||||
}
|
||||
if(locs != null) {
|
||||
for(MovimientoPosible loc : locs) {
|
||||
Location nueva = loc.getLocation().clone().add(0.5,0,0.5);
|
||||
double y = partida.getEsquina1().getY();
|
||||
nueva.setY(y+1.35);
|
||||
|
||||
Utilidades.generarParticula("VILLAGER_HAPPY", nueva.clone().add(0.5,0,0.5), 0.001F, 0.001F, 0.001F, 0.001F, 1, jugador.getJugador());
|
||||
Utilidades.generarParticula("VILLAGER_HAPPY", nueva.clone().add(0.5,0,-0.5), 0.001F, 0.001F, 0.001F, 0.001F, 1, jugador.getJugador());
|
||||
Utilidades.generarParticula("VILLAGER_HAPPY", nueva.clone().add(-0.5,0,0.5), 0.001F, 0.001F, 0.001F, 0.001F, 1, jugador.getJugador());
|
||||
Utilidades.generarParticula("VILLAGER_HAPPY", nueva.clone().add(-0.5,0,-0.5), 0.001F, 0.001F, 0.001F, 0.001F, 1, jugador.getJugador());
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void cooldownParticulaObservarMovimiento(Jugador j,Partida partida,final Location loc){
|
||||
this.jugador = j;
|
||||
this.partida = partida;
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run(){
|
||||
if(!ejecutarCooldownObservarMovimiento(loc)){
|
||||
Bukkit.getScheduler().cancelTask(taskID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, 0L, 5L);
|
||||
}
|
||||
|
||||
protected boolean ejecutarCooldownObservarMovimiento(Location loc) {
|
||||
if(jugador != null) {
|
||||
if(partida != null && partida.getEstado().equals(Estado.JUGANDO)) {
|
||||
int[] celdaS = jugador.getCeldaObservada();
|
||||
if(celdaS == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(loc != null) {
|
||||
Location nueva = loc.clone().add(0.5,0,0.5);
|
||||
double y = partida.getEsquina1().getY();
|
||||
nueva.setY(y+1.35);
|
||||
|
||||
Utilidades.generarParticula("FLAME", nueva.clone().add(0.5,0,0.5), 0.001F, 0.001F, 0.001F, 0.01F, 1, jugador.getJugador());
|
||||
Utilidades.generarParticula("FLAME", nueva.clone().add(0.5,0,-0.5), 0.001F, 0.001F, 0.001F, 0.01F, 1, jugador.getJugador());
|
||||
Utilidades.generarParticula("FLAME", nueva.clone().add(-0.5,0,0.5), 0.001F, 0.001F, 0.001F, 0.01F, 1, jugador.getJugador());
|
||||
Utilidades.generarParticula("FLAME", nueva.clone().add(-0.5,0,-0.5), 0.001F, 0.001F, 0.001F, 0.01F, 1, jugador.getJugador());
|
||||
}
|
||||
|
||||
return true;
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
56
src/mc/ajneb97/managers/CooldownTurno.java
Normal file
56
src/mc/ajneb97/managers/CooldownTurno.java
Normal file
@ -0,0 +1,56 @@
|
||||
package mc.ajneb97.managers;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.juego.Estado;
|
||||
import mc.ajneb97.juego.Jugador;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
|
||||
public class CooldownTurno {
|
||||
|
||||
private Partida partida;
|
||||
int taskID;
|
||||
int tiempo;
|
||||
private MineChess plugin;
|
||||
public CooldownTurno(MineChess plugin){
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public void cooldown(Partida partida,int tiempo,final String accion){
|
||||
this.partida = partida;
|
||||
Jugador turno = partida.getTurno();
|
||||
this.tiempo = tiempo;
|
||||
turno.setTiempo(tiempo);
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run(){
|
||||
if(!ejecutarCooldown(accion)){
|
||||
Bukkit.getScheduler().cancelTask(taskID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}, 0L, 20L);
|
||||
}
|
||||
|
||||
protected boolean ejecutarCooldown(String accion) {
|
||||
if(partida != null && partida.getEstado().equals(Estado.JUGANDO)) {
|
||||
Jugador turno = partida.getTurno();
|
||||
if(turno.getTiempo() > 0) {
|
||||
turno.disminuirTiempo();
|
||||
}else {
|
||||
if(accion.equalsIgnoreCase("pass")) {
|
||||
PartidaManager.cambiarTurno(partida, plugin.getConfig(), plugin);
|
||||
}else {
|
||||
//mover
|
||||
PartidaManager.moverPiezaAleatoria(partida, plugin);
|
||||
}
|
||||
|
||||
}
|
||||
return true;
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
26
src/mc/ajneb97/managers/Entrar.java
Normal file
26
src/mc/ajneb97/managers/Entrar.java
Normal file
@ -0,0 +1,26 @@
|
||||
package mc.ajneb97.managers;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
|
||||
public class Entrar implements Listener{
|
||||
private MineChess plugin;
|
||||
public Entrar(MineChess plugin){
|
||||
this.plugin = plugin;
|
||||
}
|
||||
@EventHandler
|
||||
public void Join(PlayerJoinEvent event){
|
||||
Player jugador = event.getPlayer();
|
||||
if(jugador.isOp() && !(plugin.version.equals(plugin.latestversion))){
|
||||
jugador.sendMessage(plugin.prefix + ChatColor.RED +" There is a new version available. "+ChatColor.YELLOW+
|
||||
"("+ChatColor.GRAY+plugin.latestversion+ChatColor.YELLOW+")");
|
||||
jugador.sendMessage(ChatColor.RED+"You can download it at: "+ChatColor.GREEN+"https://www.spigotmc.org/resources/74178/");
|
||||
}
|
||||
}
|
||||
}
|
222
src/mc/ajneb97/managers/InventarioCoronacion.java
Normal file
222
src/mc/ajneb97/managers/InventarioCoronacion.java
Normal file
@ -0,0 +1,222 @@
|
||||
package mc.ajneb97.managers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.juego.Jugador;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
import mc.ajneb97.juego.Pieza;
|
||||
import mc.ajneb97.juego.Tablero;
|
||||
import mc.ajneb97.otros.Utilidades;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
|
||||
public class InventarioCoronacion implements Listener {
|
||||
|
||||
private MineChess plugin;
|
||||
public InventarioCoronacion(MineChess plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public static void crearInventario(Jugador jugador,MineChess plugin) {
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
Inventory inv = Bukkit.createInventory(null, 9, ChatColor.translateAlternateColorCodes('&', config.getString("Messages.pawnPromotionInventoryTitle")));
|
||||
|
||||
ItemStack item = null;
|
||||
|
||||
//Torre
|
||||
if(Bukkit.getVersion().contains("1.13") || Bukkit.getVersion().contains("1.14") || Bukkit.getVersion().contains("1.15")
|
||||
|| Bukkit.getVersion().contains("1.16") || Bukkit.getVersion().contains("1.17")) {
|
||||
item = new ItemStack(Material.valueOf("PLAYER_HEAD"),1);
|
||||
}else {
|
||||
item = new ItemStack(Material.SKULL_ITEM,1,(short) 3);
|
||||
}
|
||||
item = Utilidades.getCabeza(item, "5e193aa2-292e-43c6-b92b-e823f6e0cc1e", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjQ1NTlkNzU0NjRiMmU0MGE1MThlNGRlOGU2Y2YzMDg1ZjBhM2NhMGIxYjcwMTI2MTRjNGNkOTZmZWQ2MDM3OCJ9fX0=");
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getString("Messages.promoteItemName").replace("%piece%", config.getString("Messages.pieceRook"))));
|
||||
item.setItemMeta(meta);
|
||||
inv.setItem(1, item);
|
||||
|
||||
//Caballo
|
||||
if(Bukkit.getVersion().contains("1.13") || Bukkit.getVersion().contains("1.14") || Bukkit.getVersion().contains("1.15")
|
||||
|| Bukkit.getVersion().contains("1.16") || Bukkit.getVersion().contains("1.17")) {
|
||||
item = new ItemStack(Material.valueOf("PLAYER_HEAD"),1);
|
||||
}else {
|
||||
item = new ItemStack(Material.SKULL_ITEM,1,(short) 3);
|
||||
}
|
||||
item = Utilidades.getCabeza(item, "022202fd-9546-4492-b8b6-b768e95701c2", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2JiNGIyODg5OTFlZmI4Y2EwNzQzYmVjY2VmMzEyNThiMzFkMzlmMjQ5NTFlZmIxYzljMThhNDE3YmE0OGY5In19fQ==");
|
||||
meta = item.getItemMeta();
|
||||
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getString("Messages.promoteItemName").replace("%piece%", config.getString("Messages.pieceKnight"))));
|
||||
item.setItemMeta(meta);
|
||||
inv.setItem(3, item);
|
||||
|
||||
//Alfil
|
||||
if(Bukkit.getVersion().contains("1.13") || Bukkit.getVersion().contains("1.14") || Bukkit.getVersion().contains("1.15")
|
||||
|| Bukkit.getVersion().contains("1.16") || Bukkit.getVersion().contains("1.17")) {
|
||||
item = new ItemStack(Material.valueOf("PLAYER_HEAD"),1);
|
||||
}else {
|
||||
item = new ItemStack(Material.SKULL_ITEM,1,(short) 3);
|
||||
}
|
||||
if(jugador.getColor().equals("b")) {
|
||||
item = Utilidades.getCabeza(item, "eb1fc1a8-763e-442f-bf10-302b3beebb32", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTI2Yjc3MjMyOWNmMzJmODY0M2M0OTI4NjI2YjZhMzI1MjMzZmY2MWFhOWM3NzI1ODczYTRiZDY2ZGIzZDY5MiJ9fX0=");
|
||||
}else {
|
||||
item = Utilidades.getCabeza(item, "c7b9f611-64c6-4e9c-ac97-8dedf8b97e17", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjZjNWVjYWM5NDJjNzdiOTVhYjQ2MjBkZjViODVlMzgwNjRjOTc0ZjljNWM1NzZiODQzNjIyODA2YTQ1NTcifX19");
|
||||
}
|
||||
|
||||
meta = item.getItemMeta();
|
||||
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getString("Messages.promoteItemName").replace("%piece%", config.getString("Messages.pieceBishop"))));
|
||||
item.setItemMeta(meta);
|
||||
inv.setItem(5, item);
|
||||
|
||||
//Reina
|
||||
if(Bukkit.getVersion().contains("1.13") || Bukkit.getVersion().contains("1.14") || Bukkit.getVersion().contains("1.15")
|
||||
|| Bukkit.getVersion().contains("1.16") || Bukkit.getVersion().contains("1.17")) {
|
||||
item = new ItemStack(Material.valueOf("PLAYER_HEAD"),1);
|
||||
}else {
|
||||
item = new ItemStack(Material.SKULL_ITEM,1,(short) 3);
|
||||
}
|
||||
item = Utilidades.getCabeza(item, "fdea850d-ae8b-4e10-8b03-6883494ae266", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTRiZjg5M2ZjNmRlZmFkMjE4Zjc4MzZlZmVmYmU2MzZmMWMyY2MxYmI2NTBjODJmY2NkOTlmMmMxZWU2In19fQ==");
|
||||
meta = item.getItemMeta();
|
||||
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getString("Messages.promoteItemName").replace("%piece%", config.getString("Messages.pieceQueen"))));
|
||||
item.setItemMeta(meta);
|
||||
inv.setItem(7, item);
|
||||
|
||||
jugador.getJugador().openInventory(inv);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void clickearInventarioCoronacion(InventoryClickEvent event) {
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
String pathInventory = ChatColor.translateAlternateColorCodes('&', config.getString("Messages.pawnPromotionInventoryTitle"));
|
||||
String pathInventoryM = ChatColor.stripColor(pathInventory);
|
||||
if(ChatColor.stripColor(event.getView().getTitle()).equals(pathInventoryM)){
|
||||
if(event.getCurrentItem() == null){
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if((event.getSlotType() == null)){
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}else{
|
||||
Player jugador = (Player) event.getWhoClicked();
|
||||
event.setCancelled(true);
|
||||
if(event.getClickedInventory().equals(jugador.getOpenInventory().getTopInventory())) {
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
Jugador j = partida.getJugador(jugador.getName());
|
||||
if(j.estaCoronandoPeon()) {
|
||||
int slot = event.getSlot();
|
||||
if(slot == 1 || slot == 3 || slot == 5 || slot == 7) {
|
||||
coronacion(partida,j,slot,config,plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void coronacion(Partida partida,Jugador j,int slot,FileConfiguration config,MineChess plugin) {
|
||||
Pieza seleccionada = j.getPiezaSeleccionada();
|
||||
Location l = partida.getLocationDesdePieza(seleccionada).clone();
|
||||
int[] posPieza = partida.getPosicionDesdeCoordenada(l);
|
||||
l.setY(partida.getEsquina1().getY());
|
||||
l.add(0,1,0);
|
||||
String prefix = ChatColor.translateAlternateColorCodes('&', config.getString("Messages.prefix"));
|
||||
ArrayList<Jugador> jugadores = partida.getJugadores();
|
||||
if(slot == 1) {
|
||||
//torre
|
||||
Tablero.eliminarPieza(l);
|
||||
Location l1h = l.clone().add(0.5,0,0.5);
|
||||
Tablero.eliminarPiezaHolograma(plugin, l1h,config);
|
||||
|
||||
Tablero.crearPieza(l, "torre", seleccionada.getColor());
|
||||
Location l2h = l.clone().add(0.5,4.7,0.5);
|
||||
Tablero.crearPiezaHolograma(plugin, l2h, "torre", config);
|
||||
|
||||
Pieza nuevaPieza = new Pieza(seleccionada.getId(),"torre",seleccionada.getColor(),true,false);
|
||||
partida.reemplazarPieza(posPieza, nuevaPieza);
|
||||
for(Jugador jug : jugadores) {
|
||||
jug.getJugador().sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.promotion")
|
||||
.replace("%player%", j.getJugador().getName()).replace("%piece%", config.getString("Messages.pieceRook"))));
|
||||
}
|
||||
}else if(slot == 3) {
|
||||
//caballo
|
||||
Tablero.eliminarPieza(l);
|
||||
Location l1h = l.clone().add(0.5,0,0.5);
|
||||
Tablero.eliminarPiezaHolograma(plugin, l1h,config);
|
||||
|
||||
Tablero.crearPieza(l, "caballo", seleccionada.getColor());
|
||||
Location l2h = l.clone().add(0.5,4.7,0.5);
|
||||
Tablero.crearPiezaHolograma(plugin, l2h, "caballo", config);
|
||||
|
||||
Pieza nuevaPieza = new Pieza(seleccionada.getId(),"caballo",seleccionada.getColor(),true,false);
|
||||
partida.reemplazarPieza(posPieza, nuevaPieza);
|
||||
for(Jugador jug : jugadores) {
|
||||
jug.getJugador().sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.promotion")
|
||||
.replace("%player%", j.getJugador().getName()).replace("%piece%", config.getString("Messages.pieceKnight"))));
|
||||
}
|
||||
}else if(slot == 5) {
|
||||
//alfil
|
||||
Tablero.eliminarPieza(l);
|
||||
Location l1h = l.clone().add(0.5,0,0.5);
|
||||
Tablero.eliminarPiezaHolograma(plugin, l1h,config);
|
||||
|
||||
Tablero.crearPieza(l, "alfil", seleccionada.getColor());
|
||||
Location l2h = l.clone().add(0.5,4.7,0.5);
|
||||
Tablero.crearPiezaHolograma(plugin, l2h, "alfil", config);
|
||||
|
||||
Pieza nuevaPieza = new Pieza(seleccionada.getId(),"alfil",seleccionada.getColor(),true,false);
|
||||
partida.reemplazarPieza(posPieza, nuevaPieza);
|
||||
for(Jugador jug : jugadores) {
|
||||
jug.getJugador().sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.promotion")
|
||||
.replace("%player%", j.getJugador().getName()).replace("%piece%", config.getString("Messages.pieceBishop"))));
|
||||
}
|
||||
}else if(slot == 7) {
|
||||
//reina
|
||||
Tablero.eliminarPieza(l);
|
||||
Location l1h = l.clone().add(0.5,0,0.5);
|
||||
Tablero.eliminarPiezaHolograma(plugin, l1h,config);
|
||||
|
||||
Tablero.crearPieza(l, "reina", seleccionada.getColor());
|
||||
Location l2h = l.clone().add(0.5,4.7,0.5);
|
||||
Tablero.crearPiezaHolograma(plugin, l2h, "reina", config);
|
||||
|
||||
Pieza nuevaPieza = new Pieza(seleccionada.getId(),"reina",seleccionada.getColor(),true,false);
|
||||
partida.reemplazarPieza(posPieza, nuevaPieza);
|
||||
for(Jugador jug : jugadores) {
|
||||
jug.getJugador().sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.promotion")
|
||||
.replace("%player%", j.getJugador().getName()).replace("%piece%", config.getString("Messages.pieceQueen"))));
|
||||
}
|
||||
}
|
||||
|
||||
String[] separados = config.getString("Config.soundPromotion").split(";");
|
||||
try {
|
||||
Sound sound = Sound.valueOf(separados[0]);
|
||||
for(Jugador jug : jugadores) {
|
||||
jug.getJugador().playSound(jug.getJugador().getLocation(), sound, Float.valueOf(separados[1]), Float.valueOf(separados[2]));
|
||||
}
|
||||
}catch(Exception e) {
|
||||
Bukkit.getConsoleSender().sendMessage(prefix+ChatColor.translateAlternateColorCodes('&',"&7Sound Name: &c"+separados[0]+" &7is not valid. Change it in the config!"));
|
||||
}
|
||||
|
||||
j.setCoronandoPeon(false);
|
||||
j.getJugador().closeInventory();
|
||||
|
||||
j.setPiezaSeleccionada(null);
|
||||
|
||||
PartidaManager.cambiarTurno(partida,config,plugin);
|
||||
}
|
||||
}
|
520
src/mc/ajneb97/managers/PartidaListener.java
Normal file
520
src/mc/ajneb97/managers/PartidaListener.java
Normal file
@ -0,0 +1,520 @@
|
||||
package mc.ajneb97.managers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mc.ajneb97.JugadorDatos;
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.juego.Ajedrez;
|
||||
import mc.ajneb97.juego.Estado;
|
||||
import mc.ajneb97.juego.Jugador;
|
||||
import mc.ajneb97.juego.MovimientoPosible;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
import mc.ajneb97.juego.Pieza;
|
||||
import mc.ajneb97.mysql.MySQL;
|
||||
import mc.ajneb97.mysql.MySQLJugadorCallback;
|
||||
import mc.ajneb97.otros.Utilidades;
|
||||
|
||||
public class PartidaListener implements Listener{
|
||||
|
||||
private MineChess plugin;
|
||||
public PartidaListener(MineChess plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
//Para seleccionar una pieza a mover se debe hacer click izquierdo mirando a una pieza. Aqui detectar
|
||||
//de alguna manera que pieza es
|
||||
|
||||
@EventHandler
|
||||
public void alSalir(PlayerQuitEvent event) {
|
||||
Player jugador = event.getPlayer();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
if(partida != null) {
|
||||
Jugador j = partida.getJugador(jugador.getName());
|
||||
if(j.esEspectador()) {
|
||||
PartidaManager.espectadorSale(partida, jugador,plugin);
|
||||
}else {
|
||||
if(partida.getEstado().equals(Estado.JUGANDO)) {
|
||||
JugadorDatos jDatos = plugin.getJugador(j.getJugador().getName());
|
||||
if(jDatos == null) {
|
||||
jDatos = new JugadorDatos(j.getJugador().getName(), j.getJugador().getUniqueId().toString(),0,0,0,0);
|
||||
plugin.agregarJugadorDatos(jDatos);
|
||||
}
|
||||
jDatos.aumentarLoses(config,plugin);
|
||||
}
|
||||
PartidaManager.jugadorSale(partida, jugador,false,plugin,false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void alEntrar(PlayerJoinEvent event) {
|
||||
final Player jugador = event.getPlayer();
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
if(MySQL.isEnabled(config)) {
|
||||
MySQL.getJugador(jugador.getName(), plugin, new MySQLJugadorCallback() {
|
||||
@Override
|
||||
public void alTerminar(JugadorDatos j) {
|
||||
plugin.removerJugadorDatos(jugador.getName());
|
||||
if(j != null) {
|
||||
plugin.agregarJugadorDatos(j);
|
||||
}else {
|
||||
//Lo crea si no existe
|
||||
plugin.crearJugadorDatosSQL(jugador.getName(), jugador.getUniqueId().toString());
|
||||
plugin.agregarJugadorDatos(new JugadorDatos(jugador.getName(),jugador.getUniqueId().toString(),0,0,0,0));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void clickearItemSalir(PlayerInteractEvent event) {
|
||||
Player jugador = event.getPlayer();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
Jugador j = partida.getJugador(jugador.getName());
|
||||
if(event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
|
||||
if(event.getItem() != null) {
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
ItemStack item = Utilidades.crearItem(config, "Config.leave_item");
|
||||
if(event.getItem().isSimilar(item)) {
|
||||
event.setCancelled(true);
|
||||
if(j.esEspectador()) {
|
||||
PartidaManager.espectadorSale(partida, jugador,plugin);
|
||||
}else {
|
||||
if(partida.getEstado().equals(Estado.JUGANDO)) {
|
||||
JugadorDatos jDatos = plugin.getJugador(j.getJugador().getName());
|
||||
if(jDatos == null) {
|
||||
jDatos = new JugadorDatos(j.getJugador().getName(), j.getJugador().getUniqueId().toString(),0,0,0,0);
|
||||
plugin.agregarJugadorDatos(jDatos);
|
||||
}
|
||||
jDatos.aumentarLoses(config,plugin);
|
||||
}
|
||||
PartidaManager.jugadorSale(partida, jugador,false,plugin,false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void clickearItemPieza(PlayerInteractEvent event) {
|
||||
Player jugador = event.getPlayer();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
if(event.getItem() != null) {
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
int clickDistance = config.getInt("Config.click_distance");
|
||||
ItemStack item = Utilidades.crearItem(config, "Config.select_item");
|
||||
if(event.getItem().isSimilar(item)) {
|
||||
event.setCancelled(true);
|
||||
if(event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
|
||||
//Mover
|
||||
|
||||
Block b = jugador.getTargetBlock(null, clickDistance);
|
||||
|
||||
if(b != null) {
|
||||
Pieza p = partida.getPiezaDesdeCoordenada(b.getLocation());
|
||||
Jugador j = partida.getJugador(jugador.getName());
|
||||
if(p == null || !p.getColor().equals(j.getColor())) {
|
||||
Pieza piezaS = j.getPiezaSeleccionada();
|
||||
if(piezaS != null) {
|
||||
int[] posPieza = partida.getPosicion(piezaS);
|
||||
ArrayList<MovimientoPosible> movimientosPosibles = j.getMovimientos();
|
||||
if(movimientosPosibles != null) {
|
||||
for(MovimientoPosible l : movimientosPosibles) {
|
||||
if(l.getLocation().getBlockX() == b.getLocation().getBlockX() && l.getLocation().getBlockZ() == b.getLocation().getBlockZ()) {
|
||||
//MOVER
|
||||
Location locTo = b.getLocation();
|
||||
int[] posPiezaNueva = partida.getPosicionDesdeCoordenada(locTo);
|
||||
j.setEnJaque(false);
|
||||
PartidaManager.moverPieza(plugin, partida, j, posPieza, posPiezaNueva, locTo, false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if(p != null && p.getColor().equals(j.getColor())) {
|
||||
Pieza piezaS = j.getPiezaSeleccionada();
|
||||
if(piezaS != null && piezaS.getTipo().equals("rey")) {
|
||||
int[] posPieza = partida.getPosicion(piezaS);
|
||||
ArrayList<MovimientoPosible> movimientosPosibles = j.getMovimientos();
|
||||
if(movimientosPosibles != null) {
|
||||
for(MovimientoPosible l : movimientosPosibles) {
|
||||
if(l.getLocation().getBlockX() == b.getLocation().getBlockX() && l.getLocation().getBlockZ() == b.getLocation().getBlockZ()) {
|
||||
//ENROQUE
|
||||
Location locTo = b.getLocation();
|
||||
int[] posPiezaNueva = partida.getPosicionDesdeCoordenada(locTo);
|
||||
PartidaManager.enroque(plugin, partida, j, posPieza, posPiezaNueva, locTo);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if(event.getAction().equals(Action.LEFT_CLICK_AIR) || event.getAction().equals(Action.LEFT_CLICK_BLOCK)) {
|
||||
//Seleccionar
|
||||
Block b = jugador.getTargetBlock(null, clickDistance);
|
||||
String prefix = ChatColor.translateAlternateColorCodes('&', config.getString("Messages.prefix"));
|
||||
if(b != null) {
|
||||
Pieza p = partida.getPiezaDesdeCoordenada(b.getLocation());
|
||||
if(p != null) {
|
||||
Jugador j = partida.getJugador(jugador.getName());
|
||||
if(p.getColor().equals(j.getColor())) {
|
||||
if(partida.getTurno() != null && partida.getTurno().getJugador().getName().equals(jugador.getName())) {
|
||||
if(j.getPiezaSeleccionada() == null || j.getPiezaSeleccionada().getId() != p.getId()) {
|
||||
j.setPiezaSeleccionada(p);
|
||||
j.setCeldaObservada(null);
|
||||
CooldownParticulaPieza cooldown = new CooldownParticulaPieza(plugin);
|
||||
cooldown.cooldownParticulaSeleccionada(j,partida,p);
|
||||
|
||||
double y = partida.getEsquina1().getY();
|
||||
Location nueva = b.getLocation().clone().add(0.5,0,0.5);
|
||||
nueva.setY(y+1.35);
|
||||
int[] posPieza = partida.getPosicion(p);
|
||||
ArrayList<MovimientoPosible> movimientosPosibles = null;
|
||||
if(partida.getTurno().enJaque()) {
|
||||
movimientosPosibles = Ajedrez.getMovimientosPosibles(partida, partida.getTablero(), posPieza[0], posPieza[1],true);
|
||||
}else {
|
||||
movimientosPosibles = Ajedrez.getMovimientosPosibles(partida, partida.getTablero(), posPieza[0], posPieza[1],false);
|
||||
}
|
||||
ArrayList<MovimientoPosible> movimientosAEliminar = new ArrayList<MovimientoPosible>();
|
||||
Location locationRey = partida.getLocationRey(partida.getTurno().getColor());
|
||||
if(movimientosPosibles != null) {
|
||||
// jugador.sendMessage("movimientos posibles: "+movimientosPosibles.size());
|
||||
for(MovimientoPosible l : movimientosPosibles) {
|
||||
if(p.getTipo().equals("rey")) {
|
||||
locationRey = l.getLocation();
|
||||
}
|
||||
//jugador.sendMessage("probando por posicion posible");
|
||||
//Verificar por cada location, si la pieza en esa posicion evita que se coman al rey
|
||||
//l es la nueva posicion de la pieza
|
||||
Pieza[][] tablero = partida.getTablero().clone();
|
||||
int[] cFinal = partida.getPosicionDesdeCoordenada(l.getLocation()).clone();
|
||||
|
||||
Pieza aux = partida.getPiezaDesdeCoordenada(b.getLocation());
|
||||
Pieza nuevaPieza = new Pieza(aux.getId(),aux.getTipo(),aux.getColor(),aux.seHaMovido(),aux.isEnPassant());
|
||||
Pieza auxComida = partida.getPiezaDesdeCoordenada(l.getLocation());
|
||||
Pieza piezaComida = null;
|
||||
if(auxComida != null) {
|
||||
piezaComida = new Pieza(auxComida.getId(),auxComida.getTipo(),auxComida.getColor(),auxComida.seHaMovido(),auxComida.isEnPassant());
|
||||
}
|
||||
tablero[cFinal[1]][cFinal[0]] = nuevaPieza;
|
||||
tablero[posPieza[1]][posPieza[0]] = null;
|
||||
// jugador.sendMessage("Pos Inicial: "+posPieza[1]+","+posPieza[0]);
|
||||
// jugador.sendMessage("Pos Nueva: "+cFinal[1]+","+cFinal[0]);
|
||||
for(int i=0;i<tablero.length;i++) {
|
||||
for(int c=0;c<tablero.length;c++) {
|
||||
if(tablero[c][i] != null && !tablero[c][i].getColor().equals(partida.getTurno().getColor())) {
|
||||
//jugador.sendMessage(tablero[c][i].getTipo()+" "+tablero[c][i].isEnPassant()+"");
|
||||
//jugador.sendMessage("probando por pieza contraria");
|
||||
ArrayList<MovimientoPosible> movimientosPosiblesPieza = Ajedrez.getMovimientosPosibles(partida, tablero, i, c, false);
|
||||
if(movimientosPosiblesPieza != null) {
|
||||
for(MovimientoPosible l2 : movimientosPosiblesPieza) {
|
||||
if(l2.getLocation().getWorld().getName().equals(locationRey.getWorld().getName()) &&
|
||||
l2.getLocation().getBlockX() == locationRey.getBlockX() && l2.getLocation().getBlockZ() == locationRey.getBlockZ()) {
|
||||
//Se pueden comer al rey asi que habria que eliminar la Location l de la lista
|
||||
//aun puede haber otra posicion que si sirva
|
||||
//jugador.sendMessage("se elimina posicion ya que "+tablero[c][i].getTipo()+" puede comerse al rey");
|
||||
movimientosAEliminar.add(l);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//Volver a poner la pieza en su lugar original
|
||||
Pieza aux2 = new Pieza(nuevaPieza.getId(),nuevaPieza.getTipo(),nuevaPieza.getColor(),nuevaPieza.seHaMovido(),nuevaPieza.isEnPassant());
|
||||
tablero[posPieza[1]][posPieza[0]] = aux2;
|
||||
tablero[cFinal[1]][cFinal[0]] = piezaComida;
|
||||
}
|
||||
}
|
||||
movimientosPosibles.removeAll(movimientosAEliminar);
|
||||
|
||||
j.setMovimientos(movimientosPosibles);
|
||||
|
||||
CooldownParticulaPieza cooldown2 = new CooldownParticulaPieza(plugin);
|
||||
cooldown2.cooldownParticulaMovimientosPosibles(j, partida, p, movimientosPosibles);
|
||||
|
||||
j.getJugador().sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.pieceSelected").replace("%piece%", PartidaManager.getNombrePieza(config, p.getTipo()))));
|
||||
String[] separados = config.getString("Config.soundSelectPiece").split(";");
|
||||
try {
|
||||
Sound sound = Sound.valueOf(separados[0]);
|
||||
j.getJugador().playSound(j.getJugador().getLocation(), sound, Float.valueOf(separados[1]), Float.valueOf(separados[2]));
|
||||
}catch(Exception e) {
|
||||
Bukkit.getConsoleSender().sendMessage(prefix+ChatColor.translateAlternateColorCodes('&',"&7Sound Name: &c"+separados[0]+" &7is not valid. Change it in the config!"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.notYourTurn")));
|
||||
}
|
||||
}else {
|
||||
jugador.sendMessage(prefix+ChatColor.translateAlternateColorCodes('&', config.getString("Messages.notYourPiece")));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
//Para evitar lag, que en la clase Jugador se guarden los posibles movimientos de la pieza seleccionada
|
||||
public void mirarPieza(PlayerMoveEvent event) {
|
||||
Player jugador = event.getPlayer();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
int clickDistance = config.getInt("Config.click_distance");
|
||||
Block b = jugador.getTargetBlock(null, clickDistance);
|
||||
if(b != null) {
|
||||
Jugador j = partida.getJugador(jugador.getName());
|
||||
if(partida.getTurno() != null && partida.getTurno().equals(j)) {
|
||||
Pieza p = partida.getPiezaDesdeCoordenada(b.getLocation());
|
||||
if(p != null) {
|
||||
Pieza piezaS = j.getPiezaSeleccionada();
|
||||
if(!p.getColor().equals(j.getColor()) && piezaS != null) {
|
||||
int[] posPieza = partida.getPosicion(piezaS);
|
||||
if(j.getCeldaObservada() == null || (posPieza[0] != j.getCeldaObservada()[0] && posPieza[1] != j.getCeldaObservada()[1])) {
|
||||
//ArrayList<Location> movimientosPosibles = Ajedrez.getMovimientosPosibles(partida, partida.getTablero(), posPieza[0], posPieza[1]);
|
||||
ArrayList<MovimientoPosible> movimientosPosibles = j.getMovimientos();
|
||||
if(movimientosPosibles != null) {
|
||||
for(MovimientoPosible l : movimientosPosibles) {
|
||||
if(l.getLocation().getBlockX() == b.getLocation().getBlockX() && l.getLocation().getBlockZ() == b.getLocation().getBlockZ()) {
|
||||
j.setCeldaObservada(posPieza);
|
||||
CooldownParticulaPieza c = new CooldownParticulaPieza(plugin);
|
||||
c.cooldownParticulaObservarMovimiento(j, partida, l.getLocation());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}else {
|
||||
j.setCeldaObservada(null);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(p.getColor().equals(j.getColor()) && piezaS != null) {
|
||||
if(p.getTipo().equals("torre") && piezaS.getTipo().equals("rey")) {
|
||||
int[] posPieza = partida.getPosicion(piezaS);
|
||||
if(j.getCeldaObservada() == null || (posPieza[0] != j.getCeldaObservada()[0] && posPieza[1] != j.getCeldaObservada()[1])) {
|
||||
//ArrayList<Location> movimientosPosibles = Ajedrez.getMovimientosPosibles(partida, partida.getTablero(), posPieza[0], posPieza[1]);
|
||||
ArrayList<MovimientoPosible> movimientosPosibles = j.getMovimientos();
|
||||
if(movimientosPosibles != null) {
|
||||
for(MovimientoPosible l : movimientosPosibles) {
|
||||
if(l.getLocation().getBlockX() == b.getLocation().getBlockX() && l.getLocation().getBlockZ() == b.getLocation().getBlockZ()) {
|
||||
j.setCeldaObservada(posPieza);
|
||||
CooldownParticulaPieza c = new CooldownParticulaPieza(plugin);
|
||||
c.cooldownParticulaObservarMovimiento(j, partida, l.getLocation());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if(!p.getColor().equals(j.getColor())){
|
||||
return;
|
||||
}
|
||||
if(j.getPiezaObservada() == null || j.getPiezaObservada().getId() != p.getId()) {
|
||||
j.setPiezaObservada(p);
|
||||
CooldownParticulaPieza c = new CooldownParticulaPieza(plugin);
|
||||
c.cooldownParticula(j,partida,p);
|
||||
}
|
||||
}else {
|
||||
j.setPiezaObservada(null);
|
||||
Pieza piezaS = j.getPiezaSeleccionada();
|
||||
if(piezaS != null) {
|
||||
int[] posPieza = partida.getPosicion(piezaS);
|
||||
if(j.getCeldaObservada() == null || (posPieza[0] != j.getCeldaObservada()[0] && posPieza[1] != j.getCeldaObservada()[1])) {
|
||||
//ArrayList<Location> movimientosPosibles = Ajedrez.getMovimientosPosibles(partida, partida.getTablero(), posPieza[0], posPieza[1]);
|
||||
ArrayList<MovimientoPosible> movimientosPosibles = j.getMovimientos();
|
||||
if(movimientosPosibles != null) {
|
||||
for(MovimientoPosible l : movimientosPosibles) {
|
||||
if(l.getLocation().getBlockX() == b.getLocation().getBlockX() && l.getLocation().getBlockZ() == b.getLocation().getBlockZ()) {
|
||||
j.setCeldaObservada(posPieza);
|
||||
CooldownParticulaPieza c = new CooldownParticulaPieza(plugin);
|
||||
c.cooldownParticulaObservarMovimiento(j, partida, l.getLocation());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}else {
|
||||
j.setCeldaObservada(null);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
j.setCeldaObservada(null);
|
||||
}
|
||||
}else {
|
||||
j.setCeldaObservada(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void alUsarComando(PlayerCommandPreprocessEvent event) {
|
||||
String comando = event.getMessage().toLowerCase();
|
||||
Player jugador = event.getPlayer();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null && !jugador.isOp() && !jugador.hasPermission("chess.admin")) {
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
List<String> comandos = config.getStringList("Config.commands_whitelist");
|
||||
for(int i=0;i<comandos.size();i++) {
|
||||
if(comando.toLowerCase().startsWith(comandos.get(i))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void cerrarInventario(InventoryCloseEvent event) {
|
||||
Player jugador = (Player)event.getPlayer();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
final Jugador j = partida.getJugador(jugador.getName());
|
||||
if(j.estaCoronandoPeon()) {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
||||
public void run() {
|
||||
InventarioCoronacion.crearInventario(j,plugin);
|
||||
}
|
||||
}, 2L);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void romperBloques(BlockBreakEvent event) {
|
||||
Player jugador = event.getPlayer();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void dropearItem(PlayerDropItemEvent event) {
|
||||
Player jugador = event.getPlayer();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void interactuarInventario(InventoryClickEvent event){
|
||||
Player jugador = (Player) event.getWhoClicked();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
if((event.getInventory().getType().equals(InventoryType.PLAYER) ||
|
||||
event.getInventory().getType().equals(InventoryType.CRAFTING))
|
||||
&& event.getSlotType() != null && event.getCurrentItem() != null){
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void ponerBloques(BlockPlaceEvent event) {
|
||||
Player jugador = event.getPlayer();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void alDañar(EntityDamageEvent event) {
|
||||
Entity entidad = event.getEntity();
|
||||
if(entidad instanceof Player) {
|
||||
Player jugador = (Player) entidad;
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void nivelDeComida(FoodLevelChangeEvent event) {
|
||||
Player jugador = (Player) event.getEntity();
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void alChatear(AsyncPlayerChatEvent event) {
|
||||
Player jugador = event.getPlayer();
|
||||
if(!event.isCancelled()) {
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
if(config.getString("Config.per_arena_chat").equals("true")) {
|
||||
Partida partida = plugin.getPartidaJugador(jugador.getName());
|
||||
if(partida != null) {
|
||||
for(Player p : Bukkit.getOnlinePlayers()) {
|
||||
Partida otra = plugin.getPartidaJugador(p.getName());
|
||||
if(otra == null || !otra.equals(partida)) {
|
||||
event.getRecipients().remove(p);
|
||||
}
|
||||
}
|
||||
}else {
|
||||
for(Player p : Bukkit.getOnlinePlayers()) {
|
||||
if(plugin.getPartidaJugador(p.getName()) != null) {
|
||||
event.getRecipients().remove(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
1127
src/mc/ajneb97/managers/PartidaManager.java
Normal file
1127
src/mc/ajneb97/managers/PartidaManager.java
Normal file
File diff suppressed because it is too large
Load Diff
108
src/mc/ajneb97/managers/ScoreboardAdmin.java
Normal file
108
src/mc/ajneb97/managers/ScoreboardAdmin.java
Normal file
@ -0,0 +1,108 @@
|
||||
package mc.ajneb97.managers;
|
||||
|
||||
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.juego.Estado;
|
||||
import mc.ajneb97.juego.Jugador;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
import mc.ajneb97.lib.fastboard.FastBoard;
|
||||
import mc.ajneb97.otros.Utilidades;
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
|
||||
public class ScoreboardAdmin {
|
||||
|
||||
int taskID;
|
||||
private MineChess plugin;
|
||||
private final Map<UUID, FastBoard> boards = new HashMap<>();
|
||||
public ScoreboardAdmin(MineChess plugin){
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public void crearScoreboards() {
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run() {
|
||||
for(Player player : Bukkit.getOnlinePlayers()) {
|
||||
actualizarScoreboard(player);
|
||||
}
|
||||
}
|
||||
},0, 20L);
|
||||
}
|
||||
|
||||
protected void actualizarScoreboard(final Player player) {
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
Partida partida = plugin.getPartidaJugador(player.getName());
|
||||
FastBoard board = boards.get(player.getUniqueId());
|
||||
if(partida != null) {
|
||||
if(board == null) {
|
||||
board = new FastBoard(player);
|
||||
board.updateTitle(ChatColor.translateAlternateColorCodes('&',config.getString("Messages.gameScoreboardTitle")));
|
||||
boards.put(player.getUniqueId(), board);
|
||||
}
|
||||
|
||||
List<String> lista = config.getStringList("Messages.gameScoreboardBody");
|
||||
Jugador j1 = partida.getJugador1();
|
||||
Jugador j2 = partida.getJugador2();
|
||||
String nombre1 = "";
|
||||
String nombre2 = "";
|
||||
int puntos1 = 0;
|
||||
int puntos2 = 0;
|
||||
if(j1 != null) {
|
||||
nombre1 = j1.getJugador().getName();
|
||||
puntos1 = j1.getPuntos();
|
||||
}else {
|
||||
nombre1 = config.getString("Messages.gameScoreboardWaitingPlayer");
|
||||
}
|
||||
if(j2 != null) {
|
||||
nombre2 = j2.getJugador().getName();
|
||||
puntos2 = j2.getPuntos();
|
||||
}else {
|
||||
nombre2 = config.getString("Messages.gameScoreboardWaitingPlayer");
|
||||
}
|
||||
for(int i=0;i<lista.size();i++) {
|
||||
|
||||
String message = ChatColor.translateAlternateColorCodes('&', lista.get(i).replace("%status%", getEstado(partida,config)).replace("%player_1%", nombre1)
|
||||
.replace("%player_2%", nombre2).replace("%player_1_points%", puntos1+"").replace("%player_2_points%", puntos2+""));
|
||||
if(Bukkit.getServer().getPluginManager().getPlugin("PlaceholderAPI")!= null){
|
||||
message = PlaceholderAPI.setPlaceholders(player, message);
|
||||
}
|
||||
|
||||
board.updateLine(i, message);
|
||||
}
|
||||
}else {
|
||||
if(board != null) {
|
||||
boards.remove(player.getUniqueId());
|
||||
board.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getEstado(Partida partida,FileConfiguration config) {
|
||||
//Remplazar variables del %time%
|
||||
if(partida.getEstado().equals(Estado.ESPERANDO)) {
|
||||
return config.getString("Messages.statusWaiting");
|
||||
}else if(partida.getEstado().equals(Estado.COMENZANDO)) {
|
||||
int tiempo = partida.getTiempo();
|
||||
return config.getString("Messages.statusStarting").replace("%time%", Utilidades.getTiempo(tiempo));
|
||||
}else if(partida.getEstado().equals(Estado.TERMINANDO)) {
|
||||
int tiempo = partida.getTiempo();
|
||||
return config.getString("Messages.statusFinishing").replace("%time%", Utilidades.getTiempo(tiempo));
|
||||
}else {
|
||||
int tiempo = partida.getTiempo();
|
||||
return config.getString("Messages.statusIngame").replace("%time%", Utilidades.getTiempo(tiempo));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
84
src/mc/ajneb97/managers/SignAdmin.java
Normal file
84
src/mc/ajneb97/managers/SignAdmin.java
Normal file
@ -0,0 +1,84 @@
|
||||
package mc.ajneb97.managers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Sign;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
import mc.ajneb97.juego.Estado;
|
||||
import mc.ajneb97.juego.Partida;
|
||||
|
||||
public class SignAdmin {
|
||||
|
||||
int taskID;
|
||||
private MineChess plugin;
|
||||
public SignAdmin(MineChess plugin){
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public void actualizarSigns() {
|
||||
BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
|
||||
final FileConfiguration config = plugin.getConfig();
|
||||
taskID = scheduler.scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||
public void run() {
|
||||
ejecutarActualizarSigns(config);
|
||||
}
|
||||
},0, 40L);
|
||||
}
|
||||
|
||||
protected void ejecutarActualizarSigns(FileConfiguration config) {
|
||||
FileConfiguration signs = plugin.getSigns();
|
||||
if(signs.contains("Signs")) {
|
||||
for(String arena : signs.getConfigurationSection("Signs").getKeys(false)) {
|
||||
Partida partida = plugin.getPartida(arena);
|
||||
if(partida != null) {
|
||||
int x = Integer.valueOf(signs.getString("Signs."+arena+".x"));
|
||||
int y = Integer.valueOf(signs.getString("Signs."+arena+".y"));
|
||||
int z = Integer.valueOf(signs.getString("Signs."+arena+".z"));
|
||||
World world = Bukkit.getWorld(signs.getString("Signs."+arena+".world"));
|
||||
if(world != null) {
|
||||
int chunkX = x >> 4;
|
||||
int chunkZ = z >> 4;
|
||||
if(world.isChunkLoaded(chunkX, chunkZ)) {
|
||||
Block block = world.getBlockAt(x,y,z);
|
||||
if(block.getType().name().contains("SIGN")) {
|
||||
|
||||
Sign sign = (Sign) block.getState();
|
||||
String estado = "";
|
||||
if(partida.estaIniciada() && !partida.getEstado().equals(Estado.TERMINANDO)) {
|
||||
estado = config.getString("Messages.signStatusIngame");
|
||||
}else if(partida.getEstado().equals(Estado.COMENZANDO)) {
|
||||
estado = config.getString("Messages.signStatusStarting");
|
||||
}else if(partida.getEstado().equals(Estado.ESPERANDO)) {
|
||||
estado = config.getString("Messages.signStatusWaiting");
|
||||
}else if(partida.getEstado().equals(Estado.DESACTIVADA)) {
|
||||
estado = config.getString("Messages.signStatusDisabled");
|
||||
}else if(partida.getEstado().equals(Estado.TERMINANDO)) {
|
||||
estado = config.getString("Messages.signStatusFinishing");
|
||||
}
|
||||
|
||||
List<String> lista = config.getStringList("Messages.signFormat");
|
||||
for(int i=0;i<lista.size();i++) {
|
||||
sign.setLine(i, ChatColor.translateAlternateColorCodes('&', lista.get(i).replace("%arena%", arena)
|
||||
.replace("%status%", estado).replace("%current_players%", partida.getCantidadActualJugadores()+"")
|
||||
.replace("%max_players%", "2")));
|
||||
}
|
||||
sign.update();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
65
src/mc/ajneb97/mysql/ConexionMySQL.java
Normal file
65
src/mc/ajneb97/mysql/ConexionMySQL.java
Normal file
@ -0,0 +1,65 @@
|
||||
package mc.ajneb97.mysql;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import mc.ajneb97.MineChess;
|
||||
|
||||
public class ConexionMySQL {
|
||||
|
||||
private Connection connection;
|
||||
private String host;
|
||||
private String database;
|
||||
private String username;
|
||||
private String password;
|
||||
private int port;
|
||||
|
||||
public void setupMySql(MineChess plugin,FileConfiguration config){
|
||||
host = config.getString("Config.mysql_database.host");
|
||||
port = Integer.valueOf(config.getString("Config.mysql_database.port"));
|
||||
database = config.getString("Config.mysql_database.database");
|
||||
username = config.getString("Config.mysql_database.username");
|
||||
password = config.getString("Config.mysql_database.password");
|
||||
mySqlAbrirConexion();
|
||||
MySQL.createTable(plugin);
|
||||
}
|
||||
|
||||
public String getDatabase() {
|
||||
return this.database;
|
||||
}
|
||||
|
||||
private void mySqlAbrirConexion(){
|
||||
try {
|
||||
synchronized(this){
|
||||
if(getConnection() != null && !getConnection().isClosed()){
|
||||
Bukkit.getConsoleSender().sendMessage(MineChess.prefix+ChatColor.RED + "Error while connecting to the Database.");
|
||||
return;
|
||||
}
|
||||
Class.forName("com.mysql.jdbc.Driver");
|
||||
setConnection(DriverManager.getConnection("jdbc:mysql://"+this.host+":"+this.port+"/"+this.database,this.username,this.password));
|
||||
|
||||
Bukkit.getConsoleSender().sendMessage(MineChess.prefix+ChatColor.GREEN + "Successfully connected to the Database.");
|
||||
return;
|
||||
}
|
||||
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}catch(ClassNotFoundException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Connection getConnection() {
|
||||
return connection;
|
||||
}
|
||||
|
||||
public void setConnection(Connection connection) {
|
||||
this.connection = connection;
|
||||
}
|
||||
}
|
155
src/mc/ajneb97/mysql/MySQL.java
Normal file
155
src/mc/ajneb97/mysql/MySQL.java
Normal file
@ -0,0 +1,155 @@
|
||||
package mc.ajneb97.mysql;
|
||||
|
||||
import java.sql.Date;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mc.ajneb97.JugadorDatos;
|
||||
import mc.ajneb97.MineChess;
|
||||
|
||||
public class MySQL {
|
||||
|
||||
public static boolean isEnabled(FileConfiguration config){
|
||||
if(config.getString("Config.mysql_database.enabled").equals("true")){
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void createTable(MineChess plugin) {
|
||||
try {
|
||||
PreparedStatement statement = plugin.getConnection().prepareStatement("CREATE TABLE IF NOT EXISTS minechess_data (`UUID` varchar(200), `PLAYER_NAME` varchar(50), `WINS` INT(5), `LOSES` INT(5), `TIES` INT(5), `PLAYED_TIME` LONG )");
|
||||
statement.executeUpdate();
|
||||
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static ArrayList<JugadorDatos> getJugadores(MineChess plugin){
|
||||
ArrayList<JugadorDatos> jugadores = new ArrayList<JugadorDatos>();
|
||||
try {
|
||||
PreparedStatement statement = plugin.getConnection().prepareStatement("SELECT * FROM minechess_data");
|
||||
ResultSet resultado = statement.executeQuery();
|
||||
while(resultado.next()){
|
||||
String uuid = resultado.getString("UUID");
|
||||
int wins = resultado.getInt("WINS");
|
||||
int loses = resultado.getInt("LOSES");
|
||||
int ties = resultado.getInt("TIES");
|
||||
long timePlayed = resultado.getLong("PLAYED_TIME");
|
||||
String name = resultado.getString("PLAYER_NAME");
|
||||
jugadores.add(new JugadorDatos(name,uuid,wins,loses,ties,timePlayed));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return jugadores;
|
||||
}
|
||||
|
||||
public static void getJugador(final String nombre,final MineChess plugin,final MySQLJugadorCallback callback){
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int wins = 0;
|
||||
int loses = 0;
|
||||
int ties = 0;
|
||||
long timePlayed = 0;
|
||||
String uuid = "";
|
||||
boolean encuentra = false;
|
||||
try {
|
||||
PreparedStatement statement = plugin.getConnection().prepareStatement("SELECT * FROM minechess_data WHERE player_name=?");
|
||||
statement.setString(1, nombre);
|
||||
ResultSet resultado = statement.executeQuery();
|
||||
if(resultado.next()){
|
||||
uuid = resultado.getString("UUID");
|
||||
wins = resultado.getInt("WINS");
|
||||
loses = resultado.getInt("LOSES");
|
||||
ties = resultado.getInt("TIES");
|
||||
timePlayed = resultado.getLong("PLAYED_TIME");
|
||||
encuentra = true;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
if(encuentra) {
|
||||
final JugadorDatos j = new JugadorDatos(nombre,uuid,wins,loses,ties,timePlayed);
|
||||
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
callback.alTerminar(j);
|
||||
}
|
||||
});
|
||||
}else {
|
||||
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
callback.alTerminar(null);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void crearJugador(final MineChess plugin, final String name, final String uuid){
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try{
|
||||
PreparedStatement insert = plugin.getConnection()
|
||||
.prepareStatement("INSERT INTO minechess_data (UUID,PLAYER_NAME,WINS,LOSES,TIES,PLAYED_TIME) VALUE (?,?,?,?,?,?)");
|
||||
insert.setString(1, uuid);
|
||||
insert.setString(2, name);
|
||||
insert.setInt(3, 0);
|
||||
insert.setInt(4, 0);
|
||||
insert.setInt(5, 0);
|
||||
insert.setLong(6, 0);
|
||||
insert.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void modificarJugador(final MineChess plugin,final JugadorDatos j){
|
||||
final String uuid = j.getUUID();
|
||||
final String name = j.getPlayer();
|
||||
final int wins = j.getWins();
|
||||
final int loses = j.getLoses();
|
||||
final int ties = j.getTies();
|
||||
final long timePlayed = j.getMillisJugados();
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
PreparedStatement statement = plugin.getConnection().prepareStatement("UPDATE minechess_data SET player_name=?, wins=?, loses=?, ties=?, played_time=? WHERE (uuid=?)");
|
||||
statement.setString(1, name);
|
||||
statement.setInt(2, wins);
|
||||
statement.setInt(3, loses);
|
||||
statement.setInt(4, ties);
|
||||
statement.setLong(5, timePlayed);
|
||||
statement.setString(6, uuid);
|
||||
statement.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
9
src/mc/ajneb97/mysql/MySQLJugadorCallback.java
Normal file
9
src/mc/ajneb97/mysql/MySQLJugadorCallback.java
Normal file
@ -0,0 +1,9 @@
|
||||
package mc.ajneb97.mysql;
|
||||
|
||||
|
||||
import mc.ajneb97.JugadorDatos;
|
||||
|
||||
public interface MySQLJugadorCallback {
|
||||
|
||||
public void alTerminar(JugadorDatos j);
|
||||
}
|
431
src/mc/ajneb97/otros/Utilidades.java
Normal file
431
src/mc/ajneb97/otros/Utilidades.java
Normal file
@ -0,0 +1,431 @@
|
||||
package mc.ajneb97.otros;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import mc.ajneb97.versiones.V1_10;
|
||||
import mc.ajneb97.versiones.V1_11;
|
||||
import mc.ajneb97.versiones.V1_12;
|
||||
import mc.ajneb97.versiones.V1_13;
|
||||
import mc.ajneb97.versiones.V1_13_R2;
|
||||
import mc.ajneb97.versiones.V1_14;
|
||||
import mc.ajneb97.versiones.V1_15;
|
||||
import mc.ajneb97.versiones.V1_16;
|
||||
import mc.ajneb97.versiones.V1_16_R2;
|
||||
import mc.ajneb97.versiones.V1_16_R3;
|
||||
import mc.ajneb97.versiones.V1_17;
|
||||
import mc.ajneb97.versiones.V1_8_R1;
|
||||
import mc.ajneb97.versiones.V1_8_R2;
|
||||
import mc.ajneb97.versiones.V1_8_R3;
|
||||
import mc.ajneb97.versiones.V1_9_R1;
|
||||
import mc.ajneb97.versiones.V1_9_R2;
|
||||
|
||||
public class Utilidades {
|
||||
|
||||
public static int getNumeroAleatorio(int min, int max) {
|
||||
Random r = new Random();
|
||||
int numero = r.nextInt((max - min) + 1) + min;
|
||||
return numero;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static ItemStack crearItem(FileConfiguration config,String path){
|
||||
String id = config.getString(path+".item");
|
||||
String[] idsplit = new String[2];
|
||||
int DataValue = 0;
|
||||
ItemStack stack = null;
|
||||
if(id.contains(":")){
|
||||
idsplit = id.split(":");
|
||||
String stringDataValue = idsplit[1];
|
||||
DataValue = Integer.valueOf(stringDataValue);
|
||||
Material mat = Material.getMaterial(idsplit[0].toUpperCase());
|
||||
stack = new ItemStack(mat,1,(short)DataValue);
|
||||
}else{
|
||||
Material mat = Material.getMaterial(id.toUpperCase());
|
||||
stack = new ItemStack(mat,1);
|
||||
}
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
if(config.contains(path+".name")) {
|
||||
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getString(path+".name")));
|
||||
}
|
||||
if(config.contains(path+".lore")) {
|
||||
List<String> lore = config.getStringList(path+".lore");
|
||||
for(int c=0;c<lore.size();c++) {
|
||||
lore.set(c, ChatColor.translateAlternateColorCodes('&', lore.get(c)));
|
||||
}
|
||||
meta.setLore(lore);
|
||||
|
||||
}
|
||||
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES,ItemFlag.HIDE_ENCHANTS,ItemFlag.HIDE_UNBREAKABLE,ItemFlag.HIDE_POTION_EFFECTS);
|
||||
if(Bukkit.getVersion().contains("1.15") || Bukkit.getVersion().contains("1.16") || Bukkit.getVersion().contains("1.17")) {
|
||||
meta.setUnbreakable(true);
|
||||
}else {
|
||||
meta.spigot().setUnbreakable(true); //SOLO FUNCIONA CON SPIGOT
|
||||
}
|
||||
stack.setItemMeta(meta);
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
public static void setSkullBlock(Location l, String id, String textura, int rot) {
|
||||
String packageName = Bukkit.getServer().getClass().getPackage().getName();
|
||||
if(packageName.contains("1_17")){
|
||||
V1_17 u = new V1_17();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
if(packageName.contains("1_16_R3")){
|
||||
V1_16_R3 u = new V1_16_R3();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
if(packageName.contains("1_16_R2")){
|
||||
V1_16_R2 u = new V1_16_R2();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
if(packageName.contains("1_16_R1")){
|
||||
V1_16 u = new V1_16();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
if(packageName.contains("1_15_R1")){
|
||||
V1_15 u = new V1_15();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
if(packageName.contains("1_14_R1")){
|
||||
V1_14 u = new V1_14();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
if(packageName.contains("1_13_R2")){
|
||||
V1_13_R2 u = new V1_13_R2();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
if(packageName.contains("1_13_R1")){
|
||||
V1_13 u = new V1_13();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
if(packageName.contains("1_12_R1")){
|
||||
V1_12 u = new V1_12();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
else if(packageName.contains("1_11_R1")){
|
||||
V1_11 u = new V1_11();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
else if(packageName.contains("1_10_R1")){
|
||||
V1_10 u = new V1_10();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
else if(packageName.contains("1_9_R2")){
|
||||
V1_9_R2 u = new V1_9_R2();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
else if(packageName.contains("1_9_R1")){
|
||||
V1_9_R1 u = new V1_9_R1();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
else if(packageName.contains("1_8_R3")){
|
||||
V1_8_R3 u = new V1_8_R3();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
else if(packageName.contains("1_8_R2")){
|
||||
V1_8_R2 u = new V1_8_R2();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
else if(packageName.contains("1_8_R1")){
|
||||
V1_8_R1 u = new V1_8_R1();
|
||||
u.setSkullBlock(l,id,textura,rot);
|
||||
}
|
||||
}
|
||||
|
||||
public static void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player) {
|
||||
String packageName = Bukkit.getServer().getClass().getPackage().getName();
|
||||
if(packageName.contains("1_17")){
|
||||
V1_17 u = new V1_17();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
if(packageName.contains("1_16_R3")){
|
||||
V1_16_R3 u = new V1_16_R3();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
if(packageName.contains("1_16_R2")){
|
||||
V1_16_R2 u = new V1_16_R2();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
if(packageName.contains("1_16_R1")){
|
||||
V1_16 u = new V1_16();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
if(packageName.contains("1_15_R1")){
|
||||
V1_15 u = new V1_15();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
if(packageName.contains("1_14_R1")){
|
||||
V1_14 u = new V1_14();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
if(packageName.contains("1_13_R2")){
|
||||
V1_13_R2 u = new V1_13_R2();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
if(packageName.contains("1_13_R1")){
|
||||
V1_13 u = new V1_13();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
if(packageName.contains("1_12_R1")){
|
||||
V1_12 u = new V1_12();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
else if(packageName.contains("1_11_R1")){
|
||||
V1_11 u = new V1_11();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
else if(packageName.contains("1_10_R1")){
|
||||
V1_10 u = new V1_10();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
else if(packageName.contains("1_9_R2")){
|
||||
V1_9_R2 u = new V1_9_R2();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
else if(packageName.contains("1_9_R1")){
|
||||
V1_9_R1 u = new V1_9_R1();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
else if(packageName.contains("1_8_R3")){
|
||||
V1_8_R3 u = new V1_8_R3();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
else if(packageName.contains("1_8_R2")){
|
||||
V1_8_R2 u = new V1_8_R2();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
else if(packageName.contains("1_8_R1")){
|
||||
V1_8_R1 u = new V1_8_R1();
|
||||
u.generarParticula(particle, loc, xOffset, yOffset, zOffset, speed, count, player);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getTiempo(int tiempo) {
|
||||
int minutos = tiempo/60;
|
||||
int segundos = tiempo - (minutos*60);
|
||||
String segundosMsg = "";
|
||||
String minutosMsg = "";
|
||||
if(segundos >= 0 && segundos <= 9) {
|
||||
segundosMsg = "0"+segundos;
|
||||
}else {
|
||||
segundosMsg = segundos+"";
|
||||
}
|
||||
|
||||
if(minutos >= 0 && minutos <= 9) {
|
||||
minutosMsg = "0"+minutos;
|
||||
}else {
|
||||
minutosMsg = minutos+"";
|
||||
}
|
||||
|
||||
return minutosMsg+":"+segundosMsg;
|
||||
}
|
||||
|
||||
public static String getTiempoJugado(long millis) {
|
||||
long second = (millis / 1000) % 60;
|
||||
long minute = (millis / (1000 * 60)) % 60;
|
||||
long hour = (millis / (1000 * 60 * 60)) % 24;
|
||||
|
||||
String time = String.format("%02d:%02d:%02d", hour, minute, second);
|
||||
return time;
|
||||
}
|
||||
|
||||
public static ItemStack getCabeza(ItemStack item, String id,String textura){
|
||||
String packageName = Bukkit.getServer().getClass().getPackage().getName();
|
||||
if(packageName.contains("1_17")){
|
||||
V1_17 u = new V1_17();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
if(packageName.contains("1_16_R3")){
|
||||
V1_16_R3 u = new V1_16_R3();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
if(packageName.contains("1_16_R2")){
|
||||
V1_16_R2 u = new V1_16_R2();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
if(packageName.contains("1_16_R1")){
|
||||
V1_16 u = new V1_16();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
if(packageName.contains("1_15_R1")){
|
||||
V1_15 u = new V1_15();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_14_R1")){
|
||||
V1_14 u = new V1_14();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_13_R2")){
|
||||
V1_13_R2 u = new V1_13_R2();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_13_R1")){
|
||||
V1_13 u = new V1_13();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_12_R1")){
|
||||
V1_12 u = new V1_12();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_11_R1")){
|
||||
V1_11 u = new V1_11();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_10_R1")){
|
||||
V1_10 u = new V1_10();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_9_R2")){
|
||||
V1_9_R2 u = new V1_9_R2();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_9_R1")){
|
||||
V1_9_R1 u = new V1_9_R1();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_8_R3")){
|
||||
V1_8_R3 u = new V1_8_R3();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_8_R2")){
|
||||
V1_8_R2 u = new V1_8_R2();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else if(packageName.contains("1_8_R1")){
|
||||
V1_8_R1 u = new V1_8_R1();
|
||||
ItemStack stack = u.getCabeza(item,id,textura);
|
||||
return stack;
|
||||
}
|
||||
else{
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean pasaConfigInventario(Player jugador,FileConfiguration config) {
|
||||
if(config.getString("Config.empty_inventory_to_join").equals("true")) {
|
||||
PlayerInventory inv = jugador.getInventory();
|
||||
for(ItemStack item : inv.getContents()) {
|
||||
if(item != null && !item.getType().equals(Material.AIR)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for(ItemStack item : inv.getArmorContents()) {
|
||||
if(item != null && !item.getType().equals(Material.AIR)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static double eval(final String str) {
|
||||
return new Object() {
|
||||
int pos = -1, ch;
|
||||
|
||||
void nextChar() {
|
||||
ch = (++pos < str.length()) ? str.charAt(pos) : -1;
|
||||
}
|
||||
|
||||
boolean eat(int charToEat) {
|
||||
while (ch == ' ') nextChar();
|
||||
if (ch == charToEat) {
|
||||
nextChar();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
double parse() {
|
||||
nextChar();
|
||||
double x = parseExpression();
|
||||
if (pos < str.length()) throw new RuntimeException("Unexpected: " + (char)ch);
|
||||
return x;
|
||||
}
|
||||
|
||||
// Grammar:
|
||||
// expression = term | expression `+` term | expression `-` term
|
||||
// term = factor | term `*` factor | term `/` factor
|
||||
// factor = `+` factor | `-` factor | `(` expression `)`
|
||||
// | number | functionName factor | factor `^` factor
|
||||
|
||||
double parseExpression() {
|
||||
double x = parseTerm();
|
||||
for (;;) {
|
||||
if (eat('+')) x += parseTerm(); // addition
|
||||
else if (eat('-')) x -= parseTerm(); // subtraction
|
||||
else return x;
|
||||
}
|
||||
}
|
||||
|
||||
double parseTerm() {
|
||||
double x = parseFactor();
|
||||
for (;;) {
|
||||
if (eat('*')) x *= parseFactor(); // multiplication
|
||||
else if (eat('/')) x /= parseFactor(); // division
|
||||
else return x;
|
||||
}
|
||||
}
|
||||
|
||||
double parseFactor() {
|
||||
if (eat('+')) return parseFactor(); // unary plus
|
||||
if (eat('-')) return -parseFactor(); // unary minus
|
||||
|
||||
double x;
|
||||
int startPos = this.pos;
|
||||
if (eat('(')) { // parentheses
|
||||
x = parseExpression();
|
||||
eat(')');
|
||||
} else if ((ch >= '0' && ch <= '9') || ch == '.') { // numbers
|
||||
while ((ch >= '0' && ch <= '9') || ch == '.') nextChar();
|
||||
x = Double.parseDouble(str.substring(startPos, this.pos));
|
||||
} else if (ch >= 'a' && ch <= 'z') { // functions
|
||||
while (ch >= 'a' && ch <= 'z') nextChar();
|
||||
String func = str.substring(startPos, this.pos);
|
||||
x = parseFactor();
|
||||
if (func.equals("sqrt")) x = Math.sqrt(x);
|
||||
else if (func.equals("sin")) x = Math.sin(Math.toRadians(x));
|
||||
else if (func.equals("cos")) x = Math.cos(Math.toRadians(x));
|
||||
else if (func.equals("tan")) x = Math.tan(Math.toRadians(x));
|
||||
else throw new RuntimeException("Unknown function: " + func);
|
||||
} else {
|
||||
throw new RuntimeException("Unexpected: " + (char)ch);
|
||||
}
|
||||
|
||||
if (eat('^')) x = Math.pow(x, parseFactor()); // exponentiation
|
||||
|
||||
return x;
|
||||
}
|
||||
}.parse();
|
||||
}
|
||||
}
|
86
src/mc/ajneb97/versiones/V1_10.java
Normal file
86
src/mc/ajneb97/versiones/V1_10.java
Normal file
@ -0,0 +1,86 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_10 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
net.minecraft.server.v1_10_R1.EnumParticle enumParticle = net.minecraft.server.v1_10_R1.EnumParticle.valueOf(particle);
|
||||
float x = (float)loc.getX();
|
||||
float y = (float)loc.getY();
|
||||
float z = (float)loc.getZ();
|
||||
|
||||
net.minecraft.server.v1_10_R1.PacketPlayOutWorldParticles packet = new net.minecraft.server.v1_10_R1.PacketPlayOutWorldParticles(enumParticle, false, x, y, z, xOffset,
|
||||
yOffset, zOffset, speed, count, null);
|
||||
|
||||
((org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_10_R1.BlockPosition locDestino = new net.minecraft.server.v1_10_R1.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setTypeIdAndData(144, (byte) 1, true);
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
skullBlock.setSkullType(SkullType.PLAYER);
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_10_R1.TileEntity te = ((org.bukkit.craftbukkit.v1_10_R1.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_10_R1.NBTTagCompound compound = new net.minecraft.server.v1_10_R1.NBTTagCompound();
|
||||
|
||||
te.save(compound);
|
||||
net.minecraft.server.v1_10_R1.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_10_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_10_R1.NBTTagCompound compoundOwner = new net.minecraft.server.v1_10_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_10_R1.NBTTagCompound compoundProperties = new net.minecraft.server.v1_10_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_10_R1.NBTTagList compoundTextures = new net.minecraft.server.v1_10_R1.NBTTagList();
|
||||
net.minecraft.server.v1_10_R1.NBTTagCompound compoundValue = new net.minecraft.server.v1_10_R1.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setByte("Rot", (byte)rot);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.a(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_10_R1.ItemStack cabeza = org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_10_R1.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_10_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_10_R1.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_10_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_10_R1.NBTTagCompound propiedades = new net.minecraft.server.v1_10_R1.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_10_R1.NBTTagList texturas = new net.minecraft.server.v1_10_R1.NBTTagList();
|
||||
net.minecraft.server.v1_10_R1.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_10_R1.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
86
src/mc/ajneb97/versiones/V1_11.java
Normal file
86
src/mc/ajneb97/versiones/V1_11.java
Normal file
@ -0,0 +1,86 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_11 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
net.minecraft.server.v1_11_R1.EnumParticle enumParticle = net.minecraft.server.v1_11_R1.EnumParticle.valueOf(particle);
|
||||
float x = (float)loc.getX();
|
||||
float y = (float)loc.getY();
|
||||
float z = (float)loc.getZ();
|
||||
|
||||
net.minecraft.server.v1_11_R1.PacketPlayOutWorldParticles packet = new net.minecraft.server.v1_11_R1.PacketPlayOutWorldParticles(enumParticle, false, x, y, z, xOffset,
|
||||
yOffset, zOffset, speed, count, null);
|
||||
|
||||
((org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_11_R1.BlockPosition locDestino = new net.minecraft.server.v1_11_R1.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setTypeIdAndData(144, (byte) 1, true);
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
skullBlock.setSkullType(SkullType.PLAYER);
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_11_R1.TileEntity te = ((org.bukkit.craftbukkit.v1_11_R1.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_11_R1.NBTTagCompound compound = new net.minecraft.server.v1_11_R1.NBTTagCompound();
|
||||
|
||||
te.save(compound);
|
||||
net.minecraft.server.v1_11_R1.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_11_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_11_R1.NBTTagCompound compoundOwner = new net.minecraft.server.v1_11_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_11_R1.NBTTagCompound compoundProperties = new net.minecraft.server.v1_11_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_11_R1.NBTTagList compoundTextures = new net.minecraft.server.v1_11_R1.NBTTagList();
|
||||
net.minecraft.server.v1_11_R1.NBTTagCompound compoundValue = new net.minecraft.server.v1_11_R1.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setByte("Rot", (byte)rot);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.a(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_11_R1.ItemStack cabeza = org.bukkit.craftbukkit.v1_11_R1.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_11_R1.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_11_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_11_R1.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_11_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_11_R1.NBTTagCompound propiedades = new net.minecraft.server.v1_11_R1.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_11_R1.NBTTagList texturas = new net.minecraft.server.v1_11_R1.NBTTagList();
|
||||
net.minecraft.server.v1_11_R1.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_11_R1.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_11_R1.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
86
src/mc/ajneb97/versiones/V1_12.java
Normal file
86
src/mc/ajneb97/versiones/V1_12.java
Normal file
@ -0,0 +1,86 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_12 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
net.minecraft.server.v1_12_R1.EnumParticle enumParticle = net.minecraft.server.v1_12_R1.EnumParticle.valueOf(particle);
|
||||
float x = (float)loc.getX();
|
||||
float y = (float)loc.getY();
|
||||
float z = (float)loc.getZ();
|
||||
|
||||
net.minecraft.server.v1_12_R1.PacketPlayOutWorldParticles packet = new net.minecraft.server.v1_12_R1.PacketPlayOutWorldParticles(enumParticle, false, x, y, z, xOffset,
|
||||
yOffset, zOffset, speed, count, null);
|
||||
|
||||
((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_12_R1.BlockPosition locDestino = new net.minecraft.server.v1_12_R1.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setTypeIdAndData(144, (byte) 1, true);
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
skullBlock.setSkullType(SkullType.PLAYER);
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_12_R1.TileEntity te = ((org.bukkit.craftbukkit.v1_12_R1.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_12_R1.NBTTagCompound compound = new net.minecraft.server.v1_12_R1.NBTTagCompound();
|
||||
|
||||
te.save(compound);
|
||||
net.minecraft.server.v1_12_R1.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_12_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_12_R1.NBTTagCompound compoundOwner = new net.minecraft.server.v1_12_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_12_R1.NBTTagCompound compoundProperties = new net.minecraft.server.v1_12_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_12_R1.NBTTagList compoundTextures = new net.minecraft.server.v1_12_R1.NBTTagList();
|
||||
net.minecraft.server.v1_12_R1.NBTTagCompound compoundValue = new net.minecraft.server.v1_12_R1.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setByte("Rot", (byte)rot);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.load(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_12_R1.ItemStack cabeza = org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_12_R1.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_12_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_12_R1.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_12_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_12_R1.NBTTagCompound propiedades = new net.minecraft.server.v1_12_R1.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_12_R1.NBTTagList texturas = new net.minecraft.server.v1_12_R1.NBTTagList();
|
||||
net.minecraft.server.v1_12_R1.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_12_R1.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
81
src/mc/ajneb97/versiones/V1_13.java
Normal file
81
src/mc/ajneb97/versiones/V1_13.java
Normal file
@ -0,0 +1,81 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_13 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
player.spawnParticle(Particle.valueOf(particle),loc,count,xOffset,yOffset,zOffset,speed);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_13_R1.BlockPosition locDestino = new net.minecraft.server.v1_13_R1.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setType(Material.valueOf("PLAYER_HEAD"));
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
if(rot == 8) {
|
||||
skullBlock.setRotation(BlockFace.NORTH);
|
||||
}
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_13_R1.TileEntity te = ((org.bukkit.craftbukkit.v1_13_R1.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_13_R1.NBTTagCompound compound = new net.minecraft.server.v1_13_R1.NBTTagCompound();
|
||||
|
||||
te.save(compound);
|
||||
net.minecraft.server.v1_13_R1.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_13_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_13_R1.NBTTagCompound compoundOwner = new net.minecraft.server.v1_13_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_13_R1.NBTTagCompound compoundProperties = new net.minecraft.server.v1_13_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_13_R1.NBTTagList compoundTextures = new net.minecraft.server.v1_13_R1.NBTTagList();
|
||||
net.minecraft.server.v1_13_R1.NBTTagCompound compoundValue = new net.minecraft.server.v1_13_R1.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.load(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_13_R1.ItemStack cabeza = org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_13_R1.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_13_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_13_R1.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_13_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_13_R1.NBTTagCompound propiedades = new net.minecraft.server.v1_13_R1.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_13_R1.NBTTagList texturas = new net.minecraft.server.v1_13_R1.NBTTagList();
|
||||
net.minecraft.server.v1_13_R1.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_13_R1.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
81
src/mc/ajneb97/versiones/V1_13_R2.java
Normal file
81
src/mc/ajneb97/versiones/V1_13_R2.java
Normal file
@ -0,0 +1,81 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_13_R2 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
player.spawnParticle(Particle.valueOf(particle),loc,count,xOffset,yOffset,zOffset,speed);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_13_R2.BlockPosition locDestino = new net.minecraft.server.v1_13_R2.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setType(Material.valueOf("PLAYER_HEAD"));
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
if(rot == 8) {
|
||||
skullBlock.setRotation(BlockFace.NORTH);
|
||||
}
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_13_R2.TileEntity te = ((org.bukkit.craftbukkit.v1_13_R2.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_13_R2.NBTTagCompound compound = new net.minecraft.server.v1_13_R2.NBTTagCompound();
|
||||
|
||||
te.save(compound);
|
||||
net.minecraft.server.v1_13_R2.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_13_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_13_R2.NBTTagCompound compoundOwner = new net.minecraft.server.v1_13_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_13_R2.NBTTagCompound compoundProperties = new net.minecraft.server.v1_13_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_13_R2.NBTTagList compoundTextures = new net.minecraft.server.v1_13_R2.NBTTagList();
|
||||
net.minecraft.server.v1_13_R2.NBTTagCompound compoundValue = new net.minecraft.server.v1_13_R2.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.load(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_13_R2.ItemStack cabeza = org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_13_R2.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_13_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_13_R2.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_13_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_13_R2.NBTTagCompound propiedades = new net.minecraft.server.v1_13_R2.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_13_R2.NBTTagList texturas = new net.minecraft.server.v1_13_R2.NBTTagList();
|
||||
net.minecraft.server.v1_13_R2.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_13_R2.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
83
src/mc/ajneb97/versiones/V1_14.java
Normal file
83
src/mc/ajneb97/versiones/V1_14.java
Normal file
@ -0,0 +1,83 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_14 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
player.spawnParticle(Particle.valueOf(particle),loc,count,xOffset,yOffset,zOffset,speed);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_14_R1.BlockPosition locDestino = new net.minecraft.server.v1_14_R1.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setType(Material.valueOf("PLAYER_HEAD"));
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
//skullBlock.setSkullType(SkullType.PLAYER);
|
||||
if(rot == 8) {
|
||||
skullBlock.setRotation(BlockFace.NORTH);
|
||||
}
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_14_R1.TileEntity te = ((org.bukkit.craftbukkit.v1_14_R1.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_14_R1.NBTTagCompound compound = new net.minecraft.server.v1_14_R1.NBTTagCompound();
|
||||
|
||||
te.save(compound);
|
||||
net.minecraft.server.v1_14_R1.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_14_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_14_R1.NBTTagCompound compoundOwner = new net.minecraft.server.v1_14_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_14_R1.NBTTagCompound compoundProperties = new net.minecraft.server.v1_14_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_14_R1.NBTTagList compoundTextures = new net.minecraft.server.v1_14_R1.NBTTagList();
|
||||
net.minecraft.server.v1_14_R1.NBTTagCompound compoundValue = new net.minecraft.server.v1_14_R1.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.load(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_14_R1.ItemStack cabeza = org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_14_R1.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_14_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_14_R1.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_14_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_14_R1.NBTTagCompound propiedades = new net.minecraft.server.v1_14_R1.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_14_R1.NBTTagList texturas = new net.minecraft.server.v1_14_R1.NBTTagList();
|
||||
net.minecraft.server.v1_14_R1.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_14_R1.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
86
src/mc/ajneb97/versiones/V1_15.java
Normal file
86
src/mc/ajneb97/versiones/V1_15.java
Normal file
@ -0,0 +1,86 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_15 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
player.spawnParticle(Particle.valueOf(particle),loc,count,xOffset,yOffset,zOffset,speed);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_15_R1.BlockPosition locDestino = new net.minecraft.server.v1_15_R1.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setType(Material.valueOf("PLAYER_HEAD"));
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
//skullBlock.setSkullType(SkullType.PLAYER);
|
||||
if(rot == 8) {
|
||||
skullBlock.setRotation(BlockFace.NORTH);
|
||||
}
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
|
||||
|
||||
net.minecraft.server.v1_15_R1.TileEntity te = ((org.bukkit.craftbukkit.v1_15_R1.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_15_R1.NBTTagCompound compound = new net.minecraft.server.v1_15_R1.NBTTagCompound();
|
||||
|
||||
te.save(compound);
|
||||
net.minecraft.server.v1_15_R1.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_15_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_15_R1.NBTTagCompound compoundOwner = new net.minecraft.server.v1_15_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_15_R1.NBTTagCompound compoundProperties = new net.minecraft.server.v1_15_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_15_R1.NBTTagList compoundTextures = new net.minecraft.server.v1_15_R1.NBTTagList();
|
||||
net.minecraft.server.v1_15_R1.NBTTagCompound compoundValue = new net.minecraft.server.v1_15_R1.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.load(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_15_R1.ItemStack cabeza = org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_15_R1.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_15_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_15_R1.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_15_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_15_R1.NBTTagCompound propiedades = new net.minecraft.server.v1_15_R1.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_15_R1.NBTTagList texturas = new net.minecraft.server.v1_15_R1.NBTTagList();
|
||||
net.minecraft.server.v1_15_R1.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_15_R1.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
71
src/mc/ajneb97/versiones/V1_16.java
Normal file
71
src/mc/ajneb97/versiones/V1_16.java
Normal file
@ -0,0 +1,71 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
|
||||
public class V1_16 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
player.spawnParticle(Particle.valueOf(particle),loc,count,xOffset,yOffset,zOffset,speed);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
locBloque.getBlock().setType(Material.valueOf("PLAYER_HEAD"));
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
//skullBlock.setSkullType(SkullType.PLAYER);
|
||||
if(rot == 8) {
|
||||
skullBlock.setRotation(BlockFace.NORTH);
|
||||
}
|
||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
||||
profile.getProperties().put("textures", new Property("textures", textura));
|
||||
|
||||
try {
|
||||
Field profileField = skullBlock.getClass().getDeclaredField("profile");
|
||||
profileField.setAccessible(true);
|
||||
profileField.set(skullBlock, profile);
|
||||
}catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); }
|
||||
|
||||
skullBlock.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
if (textura.isEmpty()) return item;
|
||||
|
||||
SkullMeta skullMeta = (SkullMeta) item.getItemMeta();
|
||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
||||
profile.getProperties().put("textures", new Property("textures", textura));
|
||||
|
||||
try {
|
||||
Method mtd = skullMeta.getClass().getDeclaredMethod("setProfile", GameProfile.class);
|
||||
mtd.setAccessible(true);
|
||||
mtd.invoke(skullMeta, profile);
|
||||
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
item.setItemMeta(skullMeta);
|
||||
return item;
|
||||
}
|
||||
}
|
71
src/mc/ajneb97/versiones/V1_16_R2.java
Normal file
71
src/mc/ajneb97/versiones/V1_16_R2.java
Normal file
@ -0,0 +1,71 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
|
||||
public class V1_16_R2 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
player.spawnParticle(Particle.valueOf(particle),loc,count,xOffset,yOffset,zOffset,speed);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
locBloque.getBlock().setType(Material.valueOf("PLAYER_HEAD"));
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
//skullBlock.setSkullType(SkullType.PLAYER);
|
||||
if(rot == 8) {
|
||||
skullBlock.setRotation(BlockFace.NORTH);
|
||||
}
|
||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
||||
profile.getProperties().put("textures", new Property("textures", textura));
|
||||
|
||||
try {
|
||||
Field profileField = skullBlock.getClass().getDeclaredField("profile");
|
||||
profileField.setAccessible(true);
|
||||
profileField.set(skullBlock, profile);
|
||||
}catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); }
|
||||
|
||||
skullBlock.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
if (textura.isEmpty()) return item;
|
||||
|
||||
SkullMeta skullMeta = (SkullMeta) item.getItemMeta();
|
||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
||||
profile.getProperties().put("textures", new Property("textures", textura));
|
||||
|
||||
try {
|
||||
Method mtd = skullMeta.getClass().getDeclaredMethod("setProfile", GameProfile.class);
|
||||
mtd.setAccessible(true);
|
||||
mtd.invoke(skullMeta, profile);
|
||||
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
item.setItemMeta(skullMeta);
|
||||
return item;
|
||||
}
|
||||
}
|
71
src/mc/ajneb97/versiones/V1_16_R3.java
Normal file
71
src/mc/ajneb97/versiones/V1_16_R3.java
Normal file
@ -0,0 +1,71 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
|
||||
public class V1_16_R3 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
player.spawnParticle(Particle.valueOf(particle),loc,count,xOffset,yOffset,zOffset,speed);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
locBloque.getBlock().setType(Material.valueOf("PLAYER_HEAD"));
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
//skullBlock.setSkullType(SkullType.PLAYER);
|
||||
if(rot == 8) {
|
||||
skullBlock.setRotation(BlockFace.NORTH);
|
||||
}
|
||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
||||
profile.getProperties().put("textures", new Property("textures", textura));
|
||||
|
||||
try {
|
||||
Field profileField = skullBlock.getClass().getDeclaredField("profile");
|
||||
profileField.setAccessible(true);
|
||||
profileField.set(skullBlock, profile);
|
||||
}catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); }
|
||||
|
||||
skullBlock.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
if (textura.isEmpty()) return item;
|
||||
|
||||
SkullMeta skullMeta = (SkullMeta) item.getItemMeta();
|
||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
||||
profile.getProperties().put("textures", new Property("textures", textura));
|
||||
|
||||
try {
|
||||
Method mtd = skullMeta.getClass().getDeclaredMethod("setProfile", GameProfile.class);
|
||||
mtd.setAccessible(true);
|
||||
mtd.invoke(skullMeta, profile);
|
||||
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
item.setItemMeta(skullMeta);
|
||||
return item;
|
||||
}
|
||||
}
|
71
src/mc/ajneb97/versiones/V1_17.java
Normal file
71
src/mc/ajneb97/versiones/V1_17.java
Normal file
@ -0,0 +1,71 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
|
||||
public class V1_17 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
player.spawnParticle(Particle.valueOf(particle),loc,count,xOffset,yOffset,zOffset,speed);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
locBloque.getBlock().setType(Material.valueOf("PLAYER_HEAD"));
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
//skullBlock.setSkullType(SkullType.PLAYER);
|
||||
if(rot == 8) {
|
||||
skullBlock.setRotation(BlockFace.NORTH);
|
||||
}
|
||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
||||
profile.getProperties().put("textures", new Property("textures", textura));
|
||||
|
||||
try {
|
||||
Field profileField = skullBlock.getClass().getDeclaredField("profile");
|
||||
profileField.setAccessible(true);
|
||||
profileField.set(skullBlock, profile);
|
||||
}catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); }
|
||||
|
||||
skullBlock.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
if (textura.isEmpty()) return item;
|
||||
|
||||
SkullMeta skullMeta = (SkullMeta) item.getItemMeta();
|
||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
||||
profile.getProperties().put("textures", new Property("textures", textura));
|
||||
|
||||
try {
|
||||
Method mtd = skullMeta.getClass().getDeclaredMethod("setProfile", GameProfile.class);
|
||||
mtd.setAccessible(true);
|
||||
mtd.invoke(skullMeta, profile);
|
||||
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
item.setItemMeta(skullMeta);
|
||||
return item;
|
||||
}
|
||||
}
|
86
src/mc/ajneb97/versiones/V1_8_R1.java
Normal file
86
src/mc/ajneb97/versiones/V1_8_R1.java
Normal file
@ -0,0 +1,86 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_8_R1 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
net.minecraft.server.v1_8_R1.EnumParticle enumParticle = net.minecraft.server.v1_8_R1.EnumParticle.valueOf(particle);
|
||||
float x = (float)loc.getX();
|
||||
float y = (float)loc.getY();
|
||||
float z = (float)loc.getZ();
|
||||
|
||||
net.minecraft.server.v1_8_R1.PacketPlayOutWorldParticles packet = new net.minecraft.server.v1_8_R1.PacketPlayOutWorldParticles(enumParticle, false, x, y, z, xOffset,
|
||||
yOffset, zOffset, speed, count, null);
|
||||
|
||||
((org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_8_R1.BlockPosition locDestino = new net.minecraft.server.v1_8_R1.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setTypeIdAndData(144, (byte) 1, true);
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
skullBlock.setSkullType(SkullType.PLAYER);
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_8_R1.TileEntity te = ((org.bukkit.craftbukkit.v1_8_R1.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_8_R1.NBTTagCompound compound = new net.minecraft.server.v1_8_R1.NBTTagCompound();
|
||||
|
||||
te.b(compound);
|
||||
net.minecraft.server.v1_8_R1.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_8_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R1.NBTTagCompound compoundOwner = new net.minecraft.server.v1_8_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R1.NBTTagCompound compoundProperties = new net.minecraft.server.v1_8_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R1.NBTTagList compoundTextures = new net.minecraft.server.v1_8_R1.NBTTagList();
|
||||
net.minecraft.server.v1_8_R1.NBTTagCompound compoundValue = new net.minecraft.server.v1_8_R1.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setByte("Rot", (byte)rot);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.a(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_8_R1.ItemStack cabeza = org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_8_R1.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_8_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R1.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_8_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R1.NBTTagCompound propiedades = new net.minecraft.server.v1_8_R1.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_8_R1.NBTTagList texturas = new net.minecraft.server.v1_8_R1.NBTTagList();
|
||||
net.minecraft.server.v1_8_R1.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_8_R1.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
86
src/mc/ajneb97/versiones/V1_8_R2.java
Normal file
86
src/mc/ajneb97/versiones/V1_8_R2.java
Normal file
@ -0,0 +1,86 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_8_R2 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
net.minecraft.server.v1_8_R2.EnumParticle enumParticle = net.minecraft.server.v1_8_R2.EnumParticle.valueOf(particle);
|
||||
float x = (float)loc.getX();
|
||||
float y = (float)loc.getY();
|
||||
float z = (float)loc.getZ();
|
||||
|
||||
net.minecraft.server.v1_8_R2.PacketPlayOutWorldParticles packet = new net.minecraft.server.v1_8_R2.PacketPlayOutWorldParticles(enumParticle, false, x, y, z, xOffset,
|
||||
yOffset, zOffset, speed, count, null);
|
||||
|
||||
((org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_8_R2.BlockPosition locDestino = new net.minecraft.server.v1_8_R2.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setTypeIdAndData(144, (byte) 1, true);
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
skullBlock.setSkullType(SkullType.PLAYER);
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_8_R2.TileEntity te = ((org.bukkit.craftbukkit.v1_8_R2.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_8_R2.NBTTagCompound compound = new net.minecraft.server.v1_8_R2.NBTTagCompound();
|
||||
|
||||
te.b(compound);
|
||||
net.minecraft.server.v1_8_R2.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_8_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R2.NBTTagCompound compoundOwner = new net.minecraft.server.v1_8_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R2.NBTTagCompound compoundProperties = new net.minecraft.server.v1_8_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R2.NBTTagList compoundTextures = new net.minecraft.server.v1_8_R2.NBTTagList();
|
||||
net.minecraft.server.v1_8_R2.NBTTagCompound compoundValue = new net.minecraft.server.v1_8_R2.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setByte("Rot", (byte)rot);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.a(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_8_R2.ItemStack cabeza = org.bukkit.craftbukkit.v1_8_R2.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_8_R2.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_8_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R2.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_8_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R2.NBTTagCompound propiedades = new net.minecraft.server.v1_8_R2.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_8_R2.NBTTagList texturas = new net.minecraft.server.v1_8_R2.NBTTagList();
|
||||
net.minecraft.server.v1_8_R2.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_8_R2.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_8_R2.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
133
src/mc/ajneb97/versiones/V1_8_R3.java
Normal file
133
src/mc/ajneb97/versiones/V1_8_R3.java
Normal file
@ -0,0 +1,133 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_8_R3 {
|
||||
|
||||
/*BARRIER
|
||||
BLOCK_CRACK
|
||||
BLOCK_DUST
|
||||
CLOUD
|
||||
CRIT
|
||||
CRIT_MAGIC
|
||||
DAMAGE_INDICATOR
|
||||
DRAGON_BREATH
|
||||
DRIP_LAVA
|
||||
DRIP_WATER
|
||||
ENCHANTMENT_TABLE
|
||||
END_ROD
|
||||
EXPLOSION_HUGE
|
||||
EXPLOSION_LARGE
|
||||
EXPLOSION_NORMAL
|
||||
FIREWORKS_SPARK
|
||||
FLAME
|
||||
FOOTSTEP
|
||||
HEART
|
||||
ITEM_CRACK
|
||||
ITEM_TAKE
|
||||
LAVA
|
||||
MOB_APPEARANCE
|
||||
NOTE
|
||||
PORTAL
|
||||
REDSTONE
|
||||
SLIME
|
||||
SMOKE_LARGE
|
||||
SMOKE_NORMAL
|
||||
SNOW_SHOVEL
|
||||
SNOWBALL
|
||||
SPELL
|
||||
SPELL_INSTANT
|
||||
SPELL_MOB
|
||||
SPELL_MOB_AMBIENT
|
||||
SPELL_WITCH
|
||||
SUSPENDED
|
||||
SUSPENDED_DEPTH
|
||||
SWEEP_ATTACK
|
||||
TOWN_AURA
|
||||
VILLAGER_ANGRY
|
||||
VILLAGER_HAPPY
|
||||
WATER_BUBBLE
|
||||
WATER_DROP
|
||||
WATER_SPLASH
|
||||
WATER_WAKE */
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
net.minecraft.server.v1_8_R3.EnumParticle enumParticle = net.minecraft.server.v1_8_R3.EnumParticle.valueOf(particle);
|
||||
float x = (float)loc.getX();
|
||||
float y = (float)loc.getY();
|
||||
float z = (float)loc.getZ();
|
||||
|
||||
net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles packet = new net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles(enumParticle, false, x, y, z, xOffset,
|
||||
yOffset, zOffset, speed, count, null);
|
||||
|
||||
((org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_8_R3.BlockPosition locDestino = new net.minecraft.server.v1_8_R3.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setTypeIdAndData(144, (byte) 1, true);
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
skullBlock.setSkullType(SkullType.PLAYER);
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_8_R3.TileEntity te = ((org.bukkit.craftbukkit.v1_8_R3.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_8_R3.NBTTagCompound compound = new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
||||
|
||||
te.b(compound);
|
||||
net.minecraft.server.v1_8_R3.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R3.NBTTagCompound compoundOwner = new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R3.NBTTagCompound compoundProperties = new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R3.NBTTagList compoundTextures = new net.minecraft.server.v1_8_R3.NBTTagList();
|
||||
net.minecraft.server.v1_8_R3.NBTTagCompound compoundValue = new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setByte("Rot", (byte)rot);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.a(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_8_R3.ItemStack cabeza = org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_8_R3.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R3.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
||||
net.minecraft.server.v1_8_R3.NBTTagCompound propiedades = new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_8_R3.NBTTagList texturas = new net.minecraft.server.v1_8_R3.NBTTagList();
|
||||
net.minecraft.server.v1_8_R3.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_8_R3.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
86
src/mc/ajneb97/versiones/V1_9_R1.java
Normal file
86
src/mc/ajneb97/versiones/V1_9_R1.java
Normal file
@ -0,0 +1,86 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_9_R1 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
net.minecraft.server.v1_9_R1.EnumParticle enumParticle = net.minecraft.server.v1_9_R1.EnumParticle.valueOf(particle);
|
||||
float x = (float)loc.getX();
|
||||
float y = (float)loc.getY();
|
||||
float z = (float)loc.getZ();
|
||||
|
||||
net.minecraft.server.v1_9_R1.PacketPlayOutWorldParticles packet = new net.minecraft.server.v1_9_R1.PacketPlayOutWorldParticles(enumParticle, false, x, y, z, xOffset,
|
||||
yOffset, zOffset, speed, count, null);
|
||||
|
||||
((org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_9_R1.BlockPosition locDestino = new net.minecraft.server.v1_9_R1.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setTypeIdAndData(144, (byte) 1, true);
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
skullBlock.setSkullType(SkullType.PLAYER);
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_9_R1.TileEntity te = ((org.bukkit.craftbukkit.v1_9_R1.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_9_R1.NBTTagCompound compound = new net.minecraft.server.v1_9_R1.NBTTagCompound();
|
||||
|
||||
te.save(compound);
|
||||
net.minecraft.server.v1_9_R1.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_9_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_9_R1.NBTTagCompound compoundOwner = new net.minecraft.server.v1_9_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_9_R1.NBTTagCompound compoundProperties = new net.minecraft.server.v1_9_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_9_R1.NBTTagList compoundTextures = new net.minecraft.server.v1_9_R1.NBTTagList();
|
||||
net.minecraft.server.v1_9_R1.NBTTagCompound compoundValue = new net.minecraft.server.v1_9_R1.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setByte("Rot", (byte)rot);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.a(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_9_R1.ItemStack cabeza = org.bukkit.craftbukkit.v1_9_R1.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_9_R1.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_9_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_9_R1.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_9_R1.NBTTagCompound();
|
||||
net.minecraft.server.v1_9_R1.NBTTagCompound propiedades = new net.minecraft.server.v1_9_R1.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_9_R1.NBTTagList texturas = new net.minecraft.server.v1_9_R1.NBTTagList();
|
||||
net.minecraft.server.v1_9_R1.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_9_R1.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_9_R1.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
86
src/mc/ajneb97/versiones/V1_9_R2.java
Normal file
86
src/mc/ajneb97/versiones/V1_9_R2.java
Normal file
@ -0,0 +1,86 @@
|
||||
package mc.ajneb97.versiones;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class V1_9_R2 {
|
||||
|
||||
public void generarParticula(String particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count, Player player){
|
||||
net.minecraft.server.v1_9_R2.EnumParticle enumParticle = net.minecraft.server.v1_9_R2.EnumParticle.valueOf(particle);
|
||||
float x = (float)loc.getX();
|
||||
float y = (float)loc.getY();
|
||||
float z = (float)loc.getZ();
|
||||
|
||||
net.minecraft.server.v1_9_R2.PacketPlayOutWorldParticles packet = new net.minecraft.server.v1_9_R2.PacketPlayOutWorldParticles(enumParticle, false, x, y, z, xOffset,
|
||||
yOffset, zOffset, speed, count, null);
|
||||
|
||||
((org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSkullBlock(Location locBloque,String id,String textura,int rot) {
|
||||
net.minecraft.server.v1_9_R2.BlockPosition locDestino = new net.minecraft.server.v1_9_R2.BlockPosition(locBloque.getX(),locBloque.getY(),locBloque.getZ());
|
||||
locBloque.getBlock().setTypeIdAndData(144, (byte) 1, true);
|
||||
|
||||
Skull skullBlock = (Skull) locBloque.getBlock().getState();
|
||||
skullBlock.setSkullType(SkullType.PLAYER);
|
||||
skullBlock.update();
|
||||
|
||||
|
||||
net.minecraft.server.v1_9_R2.TileEntity te = ((org.bukkit.craftbukkit.v1_9_R2.CraftWorld)locBloque.getWorld()).getHandle().getTileEntity(locDestino);
|
||||
net.minecraft.server.v1_9_R2.NBTTagCompound compound = new net.minecraft.server.v1_9_R2.NBTTagCompound();
|
||||
|
||||
te.save(compound);
|
||||
net.minecraft.server.v1_9_R2.NBTTagCompound compoundSeleccionada = new net.minecraft.server.v1_9_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_9_R2.NBTTagCompound compoundOwner = new net.minecraft.server.v1_9_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_9_R2.NBTTagCompound compoundProperties = new net.minecraft.server.v1_9_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_9_R2.NBTTagList compoundTextures = new net.minecraft.server.v1_9_R2.NBTTagList();
|
||||
net.minecraft.server.v1_9_R2.NBTTagCompound compoundValue = new net.minecraft.server.v1_9_R2.NBTTagCompound();
|
||||
compoundValue.setString("Value", textura);
|
||||
compoundTextures.add(compoundValue);
|
||||
compoundProperties.set("textures", compoundTextures);
|
||||
compoundOwner.set("Properties", compoundProperties);
|
||||
compoundOwner.setString("Id", id);
|
||||
compoundSeleccionada.setString("id", "Skull");
|
||||
compoundSeleccionada.set("Owner", compoundOwner);
|
||||
compoundSeleccionada.setByte("Rot", (byte)rot);
|
||||
compoundSeleccionada.setInt("x", locDestino.getX());
|
||||
compoundSeleccionada.setInt("y", locDestino.getY());
|
||||
compoundSeleccionada.setInt("z", locDestino.getZ());
|
||||
compoundSeleccionada.setByte("SkullType", (byte) 3);
|
||||
te.a(compoundSeleccionada);
|
||||
te.update();
|
||||
}
|
||||
|
||||
public ItemStack getCabeza(ItemStack item, String id,String textura) {
|
||||
net.minecraft.server.v1_9_R2.ItemStack cabeza = org.bukkit.craftbukkit.v1_9_R2.inventory.CraftItemStack.asNMSCopy(item);
|
||||
net.minecraft.server.v1_9_R2.NBTTagCompound tag = cabeza.hasTag() ? cabeza.getTag() : new net.minecraft.server.v1_9_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_9_R2.NBTTagCompound skullOwnerCompound = new net.minecraft.server.v1_9_R2.NBTTagCompound();
|
||||
net.minecraft.server.v1_9_R2.NBTTagCompound propiedades = new net.minecraft.server.v1_9_R2.NBTTagCompound();
|
||||
|
||||
|
||||
net.minecraft.server.v1_9_R2.NBTTagList texturas = new net.minecraft.server.v1_9_R2.NBTTagList();
|
||||
net.minecraft.server.v1_9_R2.NBTTagCompound texturasObjeto = new net.minecraft.server.v1_9_R2.NBTTagCompound();
|
||||
texturasObjeto.setString("Value", textura);
|
||||
texturas.add(texturasObjeto);
|
||||
propiedades.set("textures", texturas);
|
||||
skullOwnerCompound.set("Properties", propiedades);
|
||||
|
||||
skullOwnerCompound.setString("Id", id);
|
||||
|
||||
tag.set("SkullOwner", skullOwnerCompound);
|
||||
cabeza.setTag(tag);
|
||||
|
||||
|
||||
return org.bukkit.craftbukkit.v1_9_R2.inventory.CraftItemStack.asBukkitCopy(cabeza);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user