Rename package name from org.zhdev to net.zhira

This commit is contained in:
Roman Zhuravlev 2025-04-23 23:31:42 +05:00
parent cc7f16f941
commit 6ab7e89561
61 changed files with 314 additions and 192 deletions

View file

@ -1,8 +1,11 @@
<project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.zhdev.varioutil</groupId>
<groupId>net.zhira.varioutil</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
@ -44,7 +47,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.20-R0.1-SNAPSHOT</version>
<version>1.21.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>

View file

@ -1,4 +1,4 @@
package org.zhdev.varioutil;
package net.zhira.varioutil;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;

View file

@ -1,5 +1,8 @@
package org.zhdev.varioutil;
package net.zhira.varioutil;
import net.zhira.varioutil.language.Language;
import net.zhira.varioutil.util.CollectionUtils;
import net.zhira.varioutil.util.ColorUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.PluginIdentifiableCommand;
@ -9,17 +12,14 @@ import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPluginLoader;
import org.jetbrains.annotations.NotNull;
import org.zhdev.varioutil.bukkit.command.PreparedPluginCommand;
import org.zhdev.varioutil.config.BukkitYamlConfig;
import org.zhdev.varioutil.config.Config;
import org.zhdev.varioutil.config.ConfigSection;
import org.zhdev.varioutil.config.YamlConfig;
import org.zhdev.varioutil.language.Language;
import org.zhdev.varioutil.sql.SqlAdapter;
import org.zhdev.varioutil.util.BukkitUtils;
import org.zhdev.varioutil.util.CollectionUtils;
import org.zhdev.varioutil.util.ColorUtils;
import org.zhdev.varioutil.util.ConfigUtils;
import net.zhira.varioutil.bukkit.command.PreparedPluginCommand;
import net.zhira.varioutil.config.BukkitYamlConfig;
import net.zhira.varioutil.config.Config;
import net.zhira.varioutil.config.ConfigSection;
import net.zhira.varioutil.config.YamlConfig;
import net.zhira.varioutil.sql.SqlAdapter;
import net.zhira.varioutil.util.BukkitUtils;
import net.zhira.varioutil.util.ConfigUtils;
import java.io.File;
import java.nio.file.Path;

View file

@ -1,4 +1,4 @@
package org.zhdev.varioutil.bukkit;
package net.zhira.varioutil.bukkit;
import org.bukkit.Material;

View file

@ -1,4 +1,4 @@
package org.zhdev.varioutil.bukkit.command;
package net.zhira.varioutil.bukkit.command;
import org.bukkit.command.*;
import org.bukkit.plugin.Plugin;

View file

@ -1,4 +1,4 @@
package org.zhdev.varioutil.bukkit.command;
package net.zhira.varioutil.bukkit.command;
import org.bukkit.command.*;
import org.bukkit.plugin.Plugin;

View file

@ -1,4 +1,4 @@
package org.zhdev.varioutil.bukkit.gui;
package net.zhira.varioutil.bukkit.gui;
import org.bukkit.event.inventory.InventoryClickEvent;

View file

@ -1,4 +1,4 @@
package org.zhdev.varioutil.bukkit.gui;
package net.zhira.varioutil.bukkit.gui;
import org.bukkit.Material;
import org.bukkit.entity.Player;

View file

@ -1,6 +1,6 @@
package org.zhdev.varioutil.bukkit.gui;
package net.zhira.varioutil.bukkit.gui;
import org.zhdev.varioutil.config.ConfigSection;
import net.zhira.varioutil.config.ConfigSection;
import java.util.Collections;
import java.util.HashMap;

View file

@ -1,4 +1,4 @@
package org.zhdev.varioutil.bukkit.gui;
package net.zhira.varioutil.bukkit.gui;
import org.bukkit.Bukkit;
import org.bukkit.inventory.Inventory;

View file

@ -1,11 +1,11 @@
package org.zhdev.varioutil.bukkit.gui;
package net.zhira.varioutil.bukkit.gui;
import org.bukkit.Material;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.zhdev.varioutil.util.BukkitUtils;
import net.zhira.varioutil.util.BukkitUtils;
import java.util.Arrays;
import java.util.Collections;

View file

@ -1,9 +1,9 @@
package org.zhdev.varioutil.bukkit.gui;
package net.zhira.varioutil.bukkit.gui;
import net.zhira.varioutil.config.ConfigSection;
import net.zhira.varioutil.util.StringUtils;
import org.bukkit.Material;
import org.zhdev.varioutil.bukkit.LegacyMaterial;
import org.zhdev.varioutil.config.ConfigSection;
import org.zhdev.varioutil.util.StringUtils;
import net.zhira.varioutil.bukkit.LegacyMaterial;
public class GuiIconConfig {
protected final Material type;

View file

@ -1,4 +1,4 @@
package org.zhdev.varioutil.bukkit.gui;
package net.zhira.varioutil.bukkit.gui;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;

View file

@ -1,4 +1,4 @@
package org.zhdev.varioutil.bukkit.gui;
package net.zhira.varioutil.bukkit.gui;
import org.bukkit.Bukkit;
import org.bukkit.event.inventory.InventoryType;

View file

@ -1,4 +1,4 @@
package org.zhdev.varioutil.config;
package net.zhira.varioutil.config;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.ConfigurationSerialization;

View file

@ -0,0 +1,132 @@
package net.zhira.varioutil.util;
import com.mojang.authlib.GameProfile;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandMap;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.inventory.meta.SkullMeta;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
class BukkitReflectionUtils {
private static final String OBC_PACKAGE = Bukkit.getServer().getClass().getPackage().getName();
private static final Class<?> __CraftServer__CLASS = ReflectionUtils.searchType(OBC_PACKAGE + ".CraftServer");
private static final Class<?> __CraftMetaSkull__CLASS = ReflectionUtils.searchType(OBC_PACKAGE + ".inventory.CraftMetaSkull");
private static final Field __commandMap__CraftServer__FIELD = ReflectionUtils.fieldSearcher()
.type(__CraftServer__CLASS)
.fieldOf("commandMap")
.fieldType(CommandMap.class)
.search();
private static final Field __knownCommands__SimpleCommandMap__FIELD = ReflectionUtils.fieldSearcher()
.type(SimpleCommandMap.class)
.fieldOf("knownCommands")
.fieldType(Map.class)
.search();
private static final GameProfileConsumer GAME_PROFILE_CONSUMER;
static CommandMap getCommandMap() {
return (CommandMap) ReflectionUtils.getFieldValue(Bukkit.getServer(), __commandMap__CraftServer__FIELD);
}
@SuppressWarnings("unchecked")
static Map<String, Command> getKnownCommands() {
return (Map<String, Command>) ReflectionUtils.getFieldValue(getCommandMap(), __knownCommands__SimpleCommandMap__FIELD);
}
static void setProfile(SkullMeta meta, GameProfile profile) {
GAME_PROFILE_CONSUMER.accept(meta, profile);
}
private interface GameProfileConsumer {
void accept(SkullMeta meta, GameProfile profile);
}
private static class ModernGameProfileConsumer implements GameProfileConsumer {
private final Class<?> __ResolvableProfile_CLASS = ReflectionUtils.getType("net.minecraft.world.item.component.ResolvableProfile");
private final Constructor<?> __ResolvableProfile_CONSTRUCTOR;
protected final Method __setProfile__CraftMetaSkull__METHOD = ReflectionUtils.methodSearcher()
.type(__CraftMetaSkull__CLASS)
.methodOf("setProfile")
.parameters(__ResolvableProfile_CLASS)
.returns(void.class)
.search();
ModernGameProfileConsumer() {
Constructor<?> resolvableConstructor;
try {
resolvableConstructor = __ResolvableProfile_CLASS.getConstructor(GameProfile.class);
} catch (NoSuchMethodException e) {
throw new NoSuchMethodError("Cannot get constructor of " + __ResolvableProfile_CLASS);
}
__ResolvableProfile_CONSTRUCTOR = resolvableConstructor;
}
@Override
public void accept(SkullMeta meta, GameProfile profile) {
try {
Object resolvableProfile = __ResolvableProfile_CONSTRUCTOR.newInstance(profile);
ReflectionUtils.invokeMethod(meta, __setProfile__CraftMetaSkull__METHOD, resolvableProfile);
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
}
}
private static class LegacyGameProfileConsumer implements GameProfileConsumer {
protected final Method __setProfile__CraftMetaSkull__METHOD = ReflectionUtils.methodSearcher()
.type(__CraftMetaSkull__CLASS)
.methodOf("setProfile")
.parameters(GameProfile.class)
.returns(void.class)
.search();
@Override
public void accept(SkullMeta meta, GameProfile profile) {
ReflectionUtils.invokeMethod(meta, __setProfile__CraftMetaSkull__METHOD, profile);
}
}
private static class AncientGameProfileConsumer implements GameProfileConsumer {
private final Field __profile__CraftMetaSkull__FIELD = ReflectionUtils.fieldSearcher()
.type(__CraftMetaSkull__CLASS)
.fieldOf("profile")
.fieldType(GameProfile.class)
.search();
@Override
public void accept(SkullMeta meta, GameProfile profile) {
ReflectionUtils.setFieldValue(meta, __profile__CraftMetaSkull__FIELD, profile);
}
}
@SafeVarargs
private static GameProfileConsumer tryCreateGameProfileConsumer(Supplier<GameProfileConsumer>... suppliers) {
List<String> errorMessages = new ArrayList<>();
for (Supplier<GameProfileConsumer> supplier : suppliers) {
try {
return supplier.get();
} catch (Exception | Error e) {
errorMessages.add(e.getClass() + ": " + e.getMessage());
}
}
throw new IllegalStateException("Cannot create GameProfileConsumer: " + String.join("; ", errorMessages));
}
static {
GAME_PROFILE_CONSUMER = tryCreateGameProfileConsumer(
ModernGameProfileConsumer::new,
LegacyGameProfileConsumer::new,
AncientGameProfileConsumer::new
);
}
}

View file

@ -1,7 +1,8 @@
package org.zhdev.varioutil.util;
package net.zhira.varioutil.util;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import net.zhira.varioutil.Version;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandMap;
@ -9,15 +10,11 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.util.io.BukkitObjectInputStream;
import org.bukkit.util.io.BukkitObjectOutputStream;
import org.zhdev.varioutil.Version;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.*;
import java.util.function.Predicate;
public class BukkitUtils {
@ -28,6 +25,8 @@ public class BukkitUtils {
private static final Map<String, GameProfile> PROFILE_CACHE = new HashMap<>();
private static final String PROFILE_NAME_CHARACTERS = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890_";
public static Command getCommand(String label) {
return KNOWN_COMMANDS.get(label);
}
@ -55,7 +54,12 @@ public class BukkitUtils {
public static void setSkullTexture(SkullMeta meta, String base64) {
GameProfile profile = PROFILE_CACHE.get(base64);
if (profile == null) {
profile = new GameProfile(UUID.randomUUID(), base64);
Random random = new Random();
char[] buffer = new char[16];
for (int i = 0; i < 16; i++) {
buffer[i] = PROFILE_NAME_CHARACTERS.charAt(random.nextInt(PROFILE_NAME_CHARACTERS.length()));
}
profile = new GameProfile(UUID.randomUUID(), String.valueOf(buffer));
profile.getProperties().put("textures", new Property("textures", base64));
PROFILE_CACHE.put(base64, profile);
}

View file

@ -1,51 +0,0 @@
package org.zhdev.varioutil.util;
import com.mojang.authlib.GameProfile;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandMap;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.inventory.meta.SkullMeta;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;
import static org.zhdev.varioutil.util.ReflectionUtils.*;
class BukkitReflectionUtils {
private static final String VERSION = Bukkit.getServer().getClass().getName().split("\\.")[3];
private static final Class<?> __CraftServer__CLASS = searchType("org.bukkit.craftbukkit." + VERSION + ".CraftServer");
private static final Method __setProfile__CraftMetaSkull__METHOD = ReflectionUtils.methodSearcher()
.typeOf("org.bukkit.craftbukkit." + VERSION + ".inventory.CraftMetaSkull")
.methodOf("setProfile")
.parameters(GameProfile.class)
.returns(void.class)
.search();
private static final Field __commandMap__CraftServer__FIELD = fieldSearcher()
.fieldOf("commandMap")
.type(__CraftServer__CLASS)
.fieldType(CommandMap.class)
.search();
private static final Field __knownCommands__SimpleCommandMap__FIELD = fieldSearcher()
.fieldOf("knownCommands")
.type(SimpleCommandMap.class)
.fieldType(Map.class)
.search();
static CommandMap getCommandMap() {
return (CommandMap) getFieldValue(__commandMap__CraftServer__FIELD, Bukkit.getServer());
}
@SuppressWarnings("unchecked")
static Map<String, Command> getKnownCommands() {
return (Map<String, Command>) getFieldValue(__knownCommands__SimpleCommandMap__FIELD, getCommandMap());
}
static void setProfile(SkullMeta meta, GameProfile profile) {
ReflectionUtils.invokeMethod(meta, __setProfile__CraftMetaSkull__METHOD, profile);
}
}