Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄Π°Π½Π½Π°Ρ Π°ΠΏΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈ ΠΈΠ³Ρ Π² ΡΡΠ΅ΡΠ΅ Minecraft.
ΠΠ½Π° Π½Π΅ΡΠ΅Ρ Π² ΡΠ΅Π±Π΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ°ΠΊΠΈΡ
, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
, Game API, ProtocolLib API, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΄ΠΎΠ±Π½ΡΡ
ΡΡΠΈΠ»ΠΈΡ, Π°Π΄Π°ΠΏΡΠ΅ΡΠΎΠ², ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΡΠ»ΡΡΠΈΡΠ·ΡΡΠ½ΠΎΡΡΡ (Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ).
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ°Π»ΠΎ ΠΊΡΠ΄Π° ΠΏΡΠΎΡΠ΅! Π Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΌΠ΅Π»ΠΊΠΈΡ , ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π°Π½Π½ΡΡ , Π°Π»ΠΈΠ°ΡΠΎΠ² ΠΈ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠ±ΡΡΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ BaseCommand
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π’ΠΠΠ¬ΠΠ ΠΈΠ³ΡΠΎΠΊ:
public class ExamplePlayerCommand
extends BaseCommand<Player> {
public ExamplePlayerCommand() {
super("test", "testing");
}
@Override
protected void onExecute(Player player, String[] args) {
player.sendMessage(ChatColor.GREEN + "ΠΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ /player");
}
}
Π Π°Π½Π΅Π΅ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ» ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΠ»ΡΡΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΠΈ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΠΎΠ΄Π°. Π Π΅ΡΡ ΡΠ»Π° ΠΎ BaseMegaCommand
:
public class ExamplePlayerCommand
extends BaseMegaCommand<Player> {
public ExamplePlayerCommand() {
super("megatest", "megatesting");
}
@Override
protected void onUsage(Player player) {
player.sendMessage("Π‘ΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄:");
player.sendMessage(" - /megatest online");
player.sendMessage(" - /megatest broadcast <ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅>");
}
@CommandArgument(aliases = "players")
protected void online(Player player, String[] args) {
int playersCount = Bukkit.getOnlinePlayers().size();
String onlinePlayers = Joiner.on(", ").join(Bukkit.getOnlinePlayers().stream().map(Player::getDisplayName).collect(Collectors.toSet()));
player.sendMessage(String.format("Π‘Π΅ΠΉΡΠ°Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ (%s): %s", playersCount, onlinePlayers));
}
@CommandArgument
protected void broadcast(Player player, String[] args) {
String broadcastMessage = ChatColor.translateAlternateColorCodes('&', Joiner.on(" ").join(args));
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
onlinePlayer.sendMessage("MegaTest Broadcast > " + broadcastMessage);
}
}
}
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ - ΡΡΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π° Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @CommandArgument
ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½ΡΠΆΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈ ΠΈΠ·Π±Π°Π²ΠΈΡ ΠΠ°Ρ ΠΎΡ ΠΊΠΎΡΡΡΠ»Π΅ΠΉ, duplicated-ΠΊΠΎΠ΄Π°, ΡΠΎΠ·Π΄Π°Π² Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π°Π»ΠΈΠ°ΡΡ.
ΠΠ΅ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ Π½Π°Π΄ Bukkit API ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡ - ru.stonlex.bukkit.StonlexBukkitApi
ΠΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΡΡΠΎΠ³ΠΎ, ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠΆΠ΅ ΡΠ΅ΡΠ΅Π· ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ:
StonlexBukkitApi.registerCommand(new ExamplePlayerCommand());
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈ Π½Π΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ru.stonlex.bukkit.configuration.BaseConfiguration
:
public class TestConfiguration
extends BaseConfiguration {
public TestConfiguration(@NonNull Plugin plugin) {
super(plugin, "messages.yml");
}
@Override
protected void onInstall(@NonNull FileConfiguration fileConfiguration) {
// ...
}
}
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π΅ Π΄ΠΎΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ ΡΠ°Π½ΠΈΡ Π² ΡΠ΅Π±Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΠ°ΡΠ΅Π³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°:
public class TestConfiguration
extends BaseConfiguration {
protected final Map<String, String> messagesCacheMap = new HashMap<>();
public TestConfiguration(@NonNull Plugin plugin) {
super(plugin, "messages.yml");
}
@Override
protected void onInstall(@NonNull FileConfiguration fileConfiguration) {
for (String messageKey : fileConfiguration.getConfigurationSection("Messages").getKeys(false)) {
String messageText = ChatColor.translateAlternateColorCodes('&', fileConfiguration.getString("Messages.".concat(messageKey)));
messagesCacheMap.put(messageKey, messageText);
}
}
}
Π₯ΡΠ°Π½ΠΈΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΎΡΡ ΠΊΠ°ΠΊ ΠΈ Ρ ΠΎΡΡ Π³Π΄Π΅, Π½ΠΎ ΠΌΡ ΡΠ°ΠΊ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ ΠΈ Π½Π΅ ΡΡΠΎΡΠ½ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ Π΅Π΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΠΈ Π² ΠΏΡΠΈΡΠ½ΠΈΠΏΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π΅ΠΉ.
@Override
public void onEnable() {
TestConfiguration configuration = new TestConfiguration(this);
configuration.createIfNotExists();
}
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΊΡΡΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ (ΠΈΠ»ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΈΠ· ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΠ»Π°Π³ΠΈΠ½Π°) ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈ Π² Π½Π΅ΠΉ Π΄Π°Π½Π½ΡΠ΅, ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ!
ΠΠ΅ΡΠΆΠ΅Π»ΠΈ HolographicDisplays ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ°ΡΠ΅Π»?
ΠΠΎ ΡΡΡΠΈ, ΡΠ°ΠΊ ΠΎΠ½ΠΎ ΠΈ Π΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ StonlexAPI ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ Π΄Π°ΠΆΠ΅ API Π΄Π»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³ΠΎΠ»ΠΎΠ³ΡΠ°ΠΌΠΌ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π°Π½ΠΈΠΌΠ°ΡΠΈΡΠΌΠΈ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΡΡΡΠΎΠΊ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π³ΠΎΠ»ΠΎΠ³ΡΠ°ΠΌΠΌΡ:
ProtocolHolographic protocolHolographic
= StonlexBukkitApi.createSimpleHolographic(location);
Π’Π΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ:
protocolHolographic.addTextLine(ChatColor.AQUA + "ΠΡΠΎΡ ΠΊΠ»ΡΠ±Π½ΠΈΡΠ½ΡΠΉ ΠΏΡΠ΄ΠΈΠ½Π³ Π±ΡΠ» ΠΏΡΠΎΡΡΠΎ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ΅Π½!");
ΠΡΡΡΡΠ΅ ΡΡΡΠΎΡΠΊΠΈ:
protocolHolographic.addEmptyLine();
ΠΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ:
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡΠ½ΡΡ
Π³ΠΎΠ»ΠΎΠ³ΡΠ°ΠΌΠΌ
Consumer<Player> playerConsumer = player -> { //player = ΠΈΠ³ΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠ»ΠΈΠΊΠ½ΡΠ»
player.sendMessage(ChatColor.GOLD + "ΠΠ»ΠΈΠΊ ΠΏΠΎ Π³ΠΎΠ»ΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΡΠΎΡΠ΅Π» ΡΡΠΏΠ΅ΡΠ½ΠΎ!");
player.sendMessage(ChatColor.GOLD + "ΠΠΎΠΊΠ°ΡΠΈΡ: " + LocationUtil.locationToString(protocolHolographic.getLocation()));
};
// ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ Π² Π³ΠΎΠ»ΠΎΠ³ΡΠ°ΠΌΠΌΡ
protocolHolographic.addClickLine(ChatColor.YELLOW + "Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄Π°Π½Π½ΠΎΠΉ API", playerConsumer);
protocolHolographic.addClickLine(ChatColor.GREEN + "https://vk.com/itzstonlex", playerConsumer);
Π‘ΡΡΠΎΡΠΊΠΈ Ρ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ°ΠΌΠΈ:
protocolHolographic.addDropLine(new ItemStack(Material.APPLE));
Π Π΄Π°ΠΆΠ΅ ΡΡΡΠΎΡΠΊΠΈ Ρ Π³ΠΎΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΏΠΎ Π½ΠΈΠΊΡ ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΡΡΠ΅:
protocolHolographic.addSkullLine("ItzStonlex", false);
protocolHolographic.addSkullLine("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDUyOGVkNDU4MDI0MDBmNDY1YjVjNGUzYTZiN2E5ZjJiNmE1YjNkNDc4YjZmZDg0OTI1Y2M1ZDk4ODM5MWM3ZCJ9fX0=", false);
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π³ΠΎΠ»ΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠΉ, ΡΠΎ Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ³ΠΎΠ΄Π½ΠΎ, ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΡΠΏΠ°Π²Π½Π° ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΡΠΈΡ Π³ΠΎΠ»ΠΎΠ³ΡΠ°ΠΌ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡ Ρ ΠΈΠ³ΡΠΎΠΊΠ°ΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°:
protocolHolographic.addReceivers(receiver); //Π·Π°ΡΠΏΠ°Π²Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ°
protocolHolographic.removeReceivers(receiver); // ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ°
protocolHolographic.addViewers(receiver); // ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ°
protocolHolographic.removeViewers(receiver); // ΡΠΊΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ°
protocolHolographic.spawn(); // Π·Π°ΡΠΏΠ°Π²Π½ΠΈΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΈΠ³ΡΠΎΠΊΠΎΠ², ΠΈ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΡΠ΅Ρ
, ΠΊΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π·Π°ΡΠ΅Π»
protocolHolographic.remove(); // ΡΠ΄Π°Π»ΠΈΡΡ Π³ΠΎΠ»ΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊ Π΄Π»Ρ Π²ΡΠ΅Ρ
, ΡΠ°ΠΊ ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΡΠΏΠ°Π²Π½ Π΄Π»Ρ Π½ΠΎΠ²ΡΡ
ΠΈΠ³ΡΠΎΠΊΠΎΠ²
Π’Π°ΠΊΠ°Ρ Π·Π°Π΅Π·ΠΆΠ°Ρ, Π½ΠΎ ΡΠ°ΠΊΠ°Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ΅ΠΌΠ°... ΠΠ½ΠΎΠ³ΠΈΠΌ Π΄Π°ΠΆΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΊΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡΠ½ΡΠ΅, ΠΌΡΠ»ΡΡΠΈΡΡΡΠ°Π½ΠΈΡΠ½ΡΠ΅, Π°Π²ΡΠΎΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΠΈΠ΅ΡΡ, ΠΈΠ»ΠΈ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ-ΡΠΎ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΈΡΠΊΠ°ΠΌΠΈ, Π½ΠΎ GUI-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ru.stonlex.bukkit.inventory.impl.BaseSimpleInventory
:
public class ExampleSimpleGUI
extends BaseSimpleInventory {
public ExampleSimpleGUI() {
super(5, "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
}
@Override
public void drawInventory(Player player) {
// ...
}
}
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ°ΡΠΎΡΠΊΡ ΠΊΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡΠ½ΡΡ
ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠ² Π² ΡΠ»ΠΎΡΡ 5 ΠΈ 6.
ΠΠ°ΠΆΠ½ΠΎ Π·Π½Π°ΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΡΠ»ΠΎΡΠΎΠ² Π² Π΄Π°Π½Π½ΠΎΠΉ API Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π½Π΅ Ρ 0, Π° Ρ 1
public class ExampleSimpleGUI
extends BaseSimpleInventory {
public ExampleSimpleGUI() {
super(5, "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
}
@Override
public void drawInventory(Player player) {
addItem(5, ItemUtil.newBuilder(Material.STONE)
.setName("Β§eΠΠ°ΠΊΠ»Π°ΠΆΠ°Π½")
.build(),
(player1, event) -> {
player.sendMessage("Β§eΠΠ»ΠΈΠΊ ΠΏΡΠΎΡΠ΅Π», Π·Π°ΠΊΡΡΠ²Π°Ρ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
player.closeInventory();
});
addItem(6, ItemUtil.newBuilder(Material.CHEST)
.setName("Β§aΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ")
.build(),
(player1, event) -> updateInventory(player));
}
}
Π’Π°ΠΊΠΆΠ΅ Π½Π΅Π»ΡΠ·Ρ Π½Π΅ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠΎ, ΡΡΠΎ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ:
public ExampleSimpleGUI() {
super(5, "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
// ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΊΡΡΡΠΈΡ/Π·Π°ΠΊΡΡΡΠΈΡ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ
addHandler(BaseInventoryDisplayableHandler.class, new BaseInventoryDisplayableHandler() {
@Override
public void onOpen(@NonNull Player player) {
player.sendMessage("Β§aΠ’Ρ ΠΎΡΠΊΡΡΠ» Example-ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
}
@Override
public void onClose(@NonNull Player player) {
player.sendMessage("Β§cΠ’Ρ Π·Π°ΠΊΡΡΠ» Example-ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
}
});
}
ΠΠ° Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΈ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ΅ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΈΠΌ ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ.
ΠΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±ΡΡΠ½ΡΡ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ΅ΠΉ Π±ΡΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΠΈ ΠΌΡΠ»ΡΡΠΈΡΡΡΠ°Π½ΠΈΡΠ½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΄ΠΎΠ±Π½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅!
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΡΡΠ°Π½ΠΈΡΠ½ΡΠΉ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ, Π½Π°ΡΠ»Π΅Π΄ΡΡ ru.stonlex.bukkit.inventory.impl.BasePaginatedInventory
:
public class ExamplePaginatedGUI
extends BasePaginatedInventory {
public ExamplePaginatedGUI() {
super(5, "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
}
@Override
public void drawInventory(Player player) {
// ...
}
}
ΠΠ°ΡΠ΅ΠΌ Π²ΡΡΡΠ°Π²ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ ΡΡΡΠ°Π½ΠΈΡΠ½ΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠ² Π² Π²ΠΈΠ΄Π΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ° (ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΊ):
public class ExamplePaginatedGUI
extends BasePaginatedInventory {
public ExamplePaginatedGUI() {
super(5, "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
}
@Override
public void drawInventory(Player player) {
setItemMarkup(new BaseInventoryBlockMarkup(inventoryRows));
// ...
}
}
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ Π² ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ ΡΡΡΠ°Π½ΠΈΡΡ:
P.S: API Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΡΡΠΎΡΡΠΈΡΡΠ΅Ρ ΠΈΡ ΠΏΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌ ΡΠ»ΠΎΡΠ°ΠΌ ΠΈ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ
public class ExamplePaginatedGUI
extends BasePaginatedInventory {
public ExamplePaginatedGUI() {
super(5, "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
}
@Override
public void drawInventory(Player player) {
setItemMarkup(new BaseInventoryBlockMarkup(inventoryRows));
addItemToMarkup(new ItemStack(Material.STONE), (player1, event) -> player.closeInventory());
addItemToMarkup(new ItemStack(Material.DIAMOND), (player1, event) -> player.closeInventory());
addItemToMarkup(new ItemStack(Material.BANNER), (player1, event) -> player.closeInventory());
addItemToMarkup(new ItemStack(Material.BARRIER), (player1, event) -> player.closeInventory());
addItemToMarkup(new ItemStack(Material.CACTUS), (player1, event) -> player.closeInventory());
//...
}
}
ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ²ΠΎΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π½Π° Π²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΠ°Ρ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ.
Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΡΡΠ°Π²Π»Π΅Π½ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ Π±Π΅Π· ΠΊΠ»ΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΈΠ³ΡΠΎΠΊ:
public class ExamplePaginatedGUI
extends BasePaginatedInventory {
public ExamplePaginatedGUI() {
super(5, "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
}
@Override
public void drawInventory(Player player) {
setItemMarkup(new BaseInventoryBlockMarkup(inventoryRows));
addItemToMarkup(new ItemStack(Material.STONE), (player1, event) -> player.closeInventory());
addItemToMarkup(new ItemStack(Material.DIAMOND), (player1, event) -> player.closeInventory());
addItemToMarkup(new ItemStack(Material.BANNER), (player1, event) -> player.closeInventory());
addItemToMarkup(new ItemStack(Material.BARRIER), (player1, event) -> player.closeInventory());
addItemToMarkup(new ItemStack(Material.CACTUS), (player1, event) -> player.closeInventory());
addItem(5, ItemUtil.newBuilder(Material.SIGN)
.setName("Β§aΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ")
.setLore("Β§7Π‘ΡΡΠ°Π½ΠΈΡΠ°: Β§e" + (currentPage + 1)).build());
}
}
Π’Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ ru.stonlex.bukkit.inventory.impl.BaseSimpleInventory
, ΡΡΡΠ°Π½ΠΈΡΠ½ΡΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΈΡ
ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ:
public ExamplePaginatedGUI() {
super(5, "ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
// ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΊΡΡΡΠΈΡ/Π·Π°ΠΊΡΡΡΠΈΡ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ
addHandler(BaseInventoryDisplayableHandler.class, new BaseInventoryDisplayableHandler() {
@Override
public void onOpen(@NonNull Player player) {
player.sendMessage("Β§aΠ’Ρ ΠΎΡΠΊΡΡΠ» ΡΡΡΠ°Π½ΠΈΡΠ½ΡΠΉ Example-ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
}
@Override
public void onClose(@NonNull Player player) {
player.sendMessage("Β§cΠ’Ρ Π·Π°ΠΊΡΡΠ» ΡΡΡΠ°Π½ΠΈΡΠ½ΡΠΉ Example-ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ");
}
});
}
Π‘ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ProtocolLib ΠΈ Π±Π΅Π· Π»ΠΈΡΠ½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π±Π΅ ΡΠ·Π°Π±Π΅Π»ΡΠ½ΠΎΠΉ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ, Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΠΊΡΠ½ΡΡ Π·Π°Π΄Π°Ρ.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡ Π·Π°Π΄Π°Ρ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π» :)
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Ρ Π΄Π°Π½Π½ΠΎΠΉ API Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ, Π½ΠΎ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ, ΠΏΡΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ:
FakeEntity-API
:
StonlexAPI ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ²ΠΎΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΡ Entity Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ.
ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π² ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ru.stonlex.bukkit.protocollib.entity.impl.FakePlayer
, ΡΠ΅ΠΉΡΠ°Ρ Π½Π° ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ NPC, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ½Π° ΠΏΡΠΈ ΡΠ΄Π°ΡΠ΅:
FakePlayer fakePlayer = new FakePlayer(playerSkin, location);
// ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΆΠ΅Π»ΡΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΡ Π΄Π»Ρ NPC
fakePlayer.setGlowingColor(ChatColor.YELLOW);
// Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° NPC
fakePlayer.setClickAction(player -> { // player = ΠΈΠ³ΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠ»ΠΈΠΊΠ½ΡΠ»
player.sendMessage(ChatColor.GOLD + "ΠΠ»ΠΈΠΊ ΠΏΠΎ NPC ΠΏΡΠΎΡΠ΅Π» ΡΡΠΏΠ΅ΡΠ½ΠΎ");
player.sendMessage(ChatColor.GOLD + "ΠΠΎΠΊΠ°ΡΠΈΡ: " + LocationUtil.locationToString(fakePlayer.getLocation()));
});
// Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΈ Π°ΡΠ°ΠΊΠ΅ NPC
fakePlayer.setAttackAction(player -> {
fakePlayer.playAnimation(FakeEntityAnimation.TAKE_DAMAGE, player);
});
fakePlayer.look(receiver); //ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΈΠ³ΡΠΎΠΊΠ°
fakePlayer.setBurning(true); // ΠΏΠΎΠ΄ΠΆΠ΅ΡΡ
fakePlayer.setInvisible(false); // ΡΠ΄Π΅Π»Π°ΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠΌ
Π‘ΠΏΠ°Π²Π½ ΡΡΠΈΡ Entity ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ²Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Π³ΠΎΠ»ΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ :
fakePlayer.addReceivers(receiver); //Π·Π°ΡΠΏΠ°Π²Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ°
fakePlayer.removeReceivers(receiver); // ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ°
fakePlayer.addViewers(receiver); // ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ°
fakePlayer.removeViewers(receiver); // ΡΠΊΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ°
fakePlayer.spawn(); // Π·Π°ΡΠΏΠ°Π²Π½ΠΈΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΈΠ³ΡΠΎΠΊΠΎΠ², ΠΈ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ ΡΠ΅Ρ
, ΠΊΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π·Π°ΡΠ΅Π»
fakePlayer.remove(); // ΡΠ΄Π°Π»ΠΈΡΡ Entity ΠΊΠ°ΠΊ Π΄Π»Ρ Π²ΡΠ΅Ρ
, ΡΠ°ΠΊ ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΡΠΏΠ°Π²Π½ Π΄Π»Ρ Π½ΠΎΠ²ΡΡ
ΠΈΠ³ΡΠΎΠΊΠΎΠ²
FakeTeams-API
:
StonlexAPI ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠ΅ Team'Ρ Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΄Π΅ ΠΏΡΠΈ Π·Π°Ρ ΠΎΠ΄Π΅ ΠΈΠ³ΡΠΎΠΊΠ° Π² TabList ΠΈ Π½Π°Π΄ Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ ΠΈ ΡΡΡΡΠΈΠΊΡ:
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
ProtocolTeam protocolTeam = ProtocolTeam.get("Team_" + player.getName());
protocolTeam.setPrefix("§e§lPREFIX §f");
protocolTeam.setSuffix(" Β§6Β§lSUFFIX");
// ...
}
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Team'Ρ, Π² Π½Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ³ΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ. ΠΠ΅Π»Π°Π΅ΡΡΡ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄:
protocolTeam.addPlayerEntry(player);
ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ProtocolTeam ΠΈΠ³ΡΠΎΠΊΠ° ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ:
ProtocolTeam protocolTeam = ProtocolTeam.findEntry(player);
Π’Π°ΠΊ ΠΊΠ°ΠΊ ProtocolTeam ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ ΠΎΠ½ Π½ΠΈΠΊΠΎΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π΅Π½ (ΠΡΠΎΠΌΠ΅ ΡΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Team). ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
Π‘ΠΏΠΎΡΠΎΠ± 1: ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ProtocolTeam Π² ΡΠΏΠΈΡΠΎΠΊ Π°Π²ΡΠΎ-ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π²ΡΠ΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ°ΠΌ ΠΎΠ½Π»Π°ΠΉΠ½, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅Π΄ΡΠΈΠΌ:
protocolTeam.addAutoReceived();
Π‘ΠΏΠΎΡΠΎΠ± 2: ΠΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΈΠ΄Π΅ΡΡ ProtocolTeam:
protocolTeam.addReceiver(player);
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π‘ΠΏΠΎΡΠΎΠ±Ρ 2: ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ProtocolTeam ΠΈΠ³ΡΠΎΠΊΠ° ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ:
ProtocolTeam protocolTeam = ProtocolTeam.findReceiver(player);
Protocol Packets-API
:
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠ°Π±ΡΠΈΠΊΡ ru.stonlex.bukkit.protocollib.packet.ProtocolPacketFactory
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ "ΠΌΠ°Ρ Π°" ΡΡΠΊΠΎΠΉ ΠΈΠ³ΡΠΎΠΊΠ°
WrapperPlayServerAnimation animationPacket
= ProtocolPacketFactory.createAnimationPacket(player.getEntityId(), FakeEntityAnimation.SWING_MAIN_HAND.ordinal());
ΠΠ°ΠΊΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ³ΡΠΎΠΊΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ:
animationPacket.sendPacket(player);
Π’Π°ΠΊ ΠΈ Π²ΡΠ΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ°ΠΌ, ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅:
animationPacket.broadcastPacket();
Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΡ ΠΈΠ³ΡΠΎΠΊΠΎΠ², ΡΠ΅ΡΠ²Π΅ΡΠ°, Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊΡΡ-ΡΠΎ Π΄ΡΡΠ³ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π²ΡΠ΅ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π² Scoreboard, Π° StonlexAPI ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΈΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π² ΠΏΠ°ΡΡ ΡΡΡΠΎΡΠ΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠ΅ ΡΠΊΠΎΡΠ±ΠΎΡΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ²Π°ΡΡ Ρ ΡΠ΅Π³Π°ΠΌΠΈ, ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π±Π°ΡΠ°ΠΌΠΈ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π· Scoreboard.
Π‘Π΅ΠΉΡΠ°Ρ Π½Π° ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Scoreboard:
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Builder, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄ΡΡ Π²ΡΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Scoreboard:
BaseScoreboardBuilder scoreboardBuilder = StonlexBukkitApi.newScoreboardBuilder();
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ½ΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ Π½Π°ΡΠ΅ΠΌΡ Scoreboard`Ρ:
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ Scoreboard? - ΠΡΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ, ΠΊΠΎΠΌΡ ΠΈ ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
- PROTOTYPE - ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ° Scoreboard Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ Π΄Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π±ΡΠ» Π²ΡΡΡΠ°Π²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ Scoreboard, ΡΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΎΡΠΈΡΡΠΈΡΡΡΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ² ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ.
- PUBLIC - Scoreboard Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠΎΠ² ΠΎΠ½Π»Π°ΠΉΠ½ ΠΈ Π΄Π»Ρ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅Π΄ΡΠΈΡ . ΠΡΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ Π΄Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΡΡΠ°Π²Π»Π΅Π½ Scoreboard ΡΠΈΠΏΠ° PROTOTYPE, ΡΠΎ PUBLIC Π½Π° Π²ΡΠ΅ΠΌΡ ΡΠΊΡΠΎΠ΅ΡΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠΊΠ° PROTOTYPE Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ Π΄Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ°. ΠΠΎ Π΅ΡΠ»ΠΈ Π΅ΡΠ΅ ΠΏΠΎΠ·ΠΆΠ΅ Π΄Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΡΡΠ°Π²Π»Π΅Π½ Scoreboard ΡΠΈΠΏΠ° PUBLIC, ΡΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Scoreboard Ρ ΡΠΈΠΏΠΎΠΌ PUBLIC Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΄Π°Π»Π΅Π½ ΠΈ ΠΎΡΠΈΡΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°.
scoreboardBuilder.scoreboardScope(BaseScoreboardScope.PROTOTYPE);
ΠΠ°ΡΠ΅ΠΌ, ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΉ Π΄Π»Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Scoreboard - Flick Animation:
ScoreboardDisplayFlickAnimation displayFlickAnimation = new ScoreboardDisplayFlickAnimation();
// ΠΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ²Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π»ΠΈΠ²Π°ΡΡΡΡ
displayFlickAnimation.addColor(ChatColor.RED);
displayFlickAnimation.addColor(ChatColor.GOLD);
displayFlickAnimation.addColor(ChatColor.YELLOW);
displayFlickAnimation.addColor(ChatColor.WHITE);
// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡ Π΄Π»Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ
displayFlickAnimation.addTextToAnimation("Β§lSTONLEX API");
ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Scoreboard:
scoreboardBuilder.scoreboardDisplay(displayFlickAnimation);
ΠΠ°Π»Π΅Π΅, Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π»ΠΈΠ½ΠΈΠΉ ΠΈ ΡΠ΅ΠΊΡΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ :
scoreboardBuilder.scoreboardLine(6, ChatColor.GRAY + DateUtil.formatPattern(DateUtil.DEFAULT_DATE_PATTERN));
scoreboardBuilder.scoreboardLine(5, "");
scoreboardBuilder.scoreboardLine(4, "ΠΠΈΠΊ: Β§c...");
scoreboardBuilder.scoreboardLine(3, "ΠΡΡΠΆΠΊΠΎΠ²: Β§c...");
scoreboardBuilder.scoreboardLine(2, "");
scoreboardBuilder.scoreboardLine(1, "Β§ehttps://vk.com/itzstonlex");
ΠΠΎΡ ΠΈ Π²ΡΠ΅, ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ Scoreboard Π²ΡΡΡΠ°Π²Π»Π΅Π½Ρ!
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΊΠΎΡΠ±ΠΎΡΠ΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΡΠ°Π²ΠΈΡΡ Π°Π²ΡΠΎΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΠΈΠΉΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 5 ΡΠΈΠΊΠΎΠ², ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΠ΅ΠΊΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΡΠΎΡΠ΅ΠΊ:
scoreboardBuilder.scoreboardUpdater((baseScoreboard, player1) -> {
baseScoreboard.updateScoreboardLine(4, player1, "ΠΠΈΠΊ: Β§7" + player1.getName());
baseScoreboard.updateScoreboardLine(3, player1, "ΠΡΡΠΆΠΊΠΎΠ²: Β§a" + NumberUtil.spaced(player1.getStatistic(Statistic.JUMP)));
}, 20);
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ Scoreboard ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΈΠΏΠ° PROTOTYPE, ΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ΄Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ³ΡΠΎΠΊΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
ΠΠ΅Π»Π°Π΅ΡΡΡ ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
scoreboardBuilder.build().setScoreboardToPlayer(player);
Scoreboard ΡΠΎΠ·Π΄Π°Π½, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΈΠ³ΡΠΎΠΊΡ, ΡΡΠΎ Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΡΡΠ΅?
ΠΠ°Π½Π½ΠΎΠΉ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ VaultServiceManager
Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΡΡΠΌΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Vault ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°ΠΌ, ΡΠ°ΠΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π°Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ API-ΠΌΠ΅ΡΠΎΠ΄Ρ.
double balance = StonlexBukkitApi.VAULT_API.getBalance("ItzStonlex");
String prefix = StonlexBukkitApi.VAULT_API.getPrefix("ItzStonlex");
VaultService<Economy> service = StonlexBukkitApi.VAULT_REGISTRY.getRegisteredService(Economy.class);
Economy economy = service.getCurrentService(Bukkit.getServer());
if (economy != null) {
// ...
}
ΠΠ»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠ²ΠΎΠΈΡ Vault ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ² Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ API-ΠΌΠ΅ΡΠΎΠ΄Ρ:
VaultService<Economy> economyService = StonlexBukkitApi.VAULT_REGISTRY.getRegisteredService(Economy.class);
economyService.register(this, new MyEconomyImpl());
ΠΈΠ»ΠΈ...
economyService.register(this, ServicePriority.Highest, new MyEconomyImpl());