#java #maven #plugins #minecraft
Вопрос:
Я пытаюсь получить пользователя с uuid, но появляется ошибка, в которой говорится следующее:
non-static method getUserManager() cannot be referenced from a static context
Я попытался поместить его в другой метод и вызвать этот метод, но это не сработало, что бы я ни делал, эта ошибка все равно всплывает. Возможно, это из-за того, что я написал LuckPerms вместо luckPerms, но я так не думаю.
А вот код (я удалил кое-что бесполезное) Я попытался поискать, но ничего не смог найти, кроме того, я читал API около 5 раз, и это было бесполезно
// BUNGEECORD
import net.md_5.bungee.api.plugin.Plugin;
// BUNGEECORD
//JAVA
import java.util.EnumSet;
//JAVA
//LuckPerms
import net.luckperms.api.LuckPermsProvider;
import net.luckperms.api.LuckPerms;
//LuckPerms
public void onPrivateMessageReceived(final PrivateMessageReceivedEvent event) {
UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" messages.get(0).getContentDisplay()).getBytes());
net.luckperms.api.model.user.User user = LuckPerms.getUserManager().getUser(uuid); // AND HERE IS THE ERROR
DataMutateResult result = user.data().add(Node.builder("group.admin").build());
};
И вот мой pom.xml
<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>
<groupId>area</groupId>
<artifactId>amogus</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<repositories>
<repository>
<id>dv8tion</id>
<name>m2-dv8tion</name>
<url>https://m2.dv8tion.net/releases</url>
</repository>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>bintray-dv8fromtheworld-maven</id>
<name>bintray</name>
<url>http://dl.bintray.com/dv8fromtheworld/maven</url>
</repository>
<repository>
<id>bungeecord-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>4.3.0_277</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.0-alpha4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.0-alpha4</version>
</dependency>
<dependency>
<groupId>net.luckperms</groupId>
<artifactId>api</artifactId>
<version>5.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>1.12.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId>
<version>1.16-R0.5-SNAPSHOT</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId>
<version>1.16-R0.5-SNAPSHOT</version>
<type>javadoc</type>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<mainClass>area.amogus</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude></exclude>
</excludes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>resources</directory>
</resource>
</resources>
</build>
</project>
Ответ №1:
Представьте, что у нас есть класс:
public class MyClass {
public static void main(String[] args) {
MyClass.doThis();
}
public void doThis(){
System.out.println("do this");
}
}
В этом случае вы получите точно такую же ошибку, какую получаете в своем коде. Это означает, что мы не можем получить доступ к методу doThis() до создания экземпляра MyClass, например
MyClass myClass = new MyClass();
myClass.doThis(); //this is valid since we have an instance to call this method on.
Я бы предположил, что вы должны каким-то образом получить экземпляр объекта LuckPerms, прежде чем вызывать на нем метод .getUserManager ().
Подобный этому:
LuckPerms luckPerms = new LuckPerms(); //assuming there's a respective constructor
luckPerms.getUserManager();
Комментарии:
1. вау, спасибо за быстрый ответ, но когда я это сделал, но я получил новую ошибку :/
net.luckperms.api.LuckPerms is abstract; cannot be instantiated
2. это означает, что нет никакого способа создать LuckPerms с помощью его конструктора, поскольку он является абстрактным классом. Вам нужно будет создать его либо с помощью LuckPerms luckPerms = LuckPermsProvider.get(); либо обратиться к официальной документации API LuckPerms, чтобы найти наиболее подходящий способ создания экземпляра — luckperms.net/wiki/Developer-API
3. братан, большое тебе спасибо, это работает, ты не знаешь, сколько часов ты сэкономил 😀
4. np, рад, что смог помочь:) если вы сочтете мой пост полезным и успешно решите свою проблему — было бы здорово, если бы вы отметили его как принятый ответ
Ответ №2:
вы не можете использовать LuckPerms.getUserManager()
, потому что вы не создали экземпляр нового объекта из LuckPerms
. Aslo LuckPerms
не может быть создан, потому что это интерфейс. сначала вы должны реализовать интерфейс, а затем создать экземпляр и использовать его.
ваш код может быть таким:
public void onPrivateMessageReceived(final PrivateMessageReceivedEvent event) {
UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" messages.get(0).getContentDisplay()).getBytes());
LuckPerms luckPerms = new LuckPerms() {
@Override
public @org.checkerframework.checker.nullness.qual.NonNull String getServerName() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull UserManager getUserManager() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull GroupManager getGroupManager() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull TrackManager getTrackManager() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull <T> PlayerAdapter<T> getPlayerAdapter(@org.checkerframework.checker.nullness.qual.NonNull Class<T> aClass) {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull Platform getPlatform() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull PluginMetadata getPluginMetadata() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull EventBus getEventBus() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull Optional<MessagingService> getMessagingService() {
return Optional.empty();
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull ActionLogger getActionLogger() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull ContextManager getContextManager() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull MetaStackFactory getMetaStackFactory() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull CompletableFuture<Void> runUpdateTask() {
return null;
}
@Override
public void registerMessengerProvider(@org.checkerframework.checker.nullness.qual.NonNull MessengerProvider messengerProvider) {
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull NodeBuilderRegistry getNodeBuilderRegistry() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull QueryOptionsRegistry getQueryOptionsRegistry() {
return null;
}
@Override
public @org.checkerframework.checker.nullness.qual.NonNull NodeMatcherFactory getNodeMatcherFactory() {
return null;
}
};
net.luckperms.api.model.user.User user = luckPerms.getUserManager().getUser(uuid); // AND HERE IS THE ERROR
DataMutateResult result = user.data().add(Node.builder("group.admin").build());
}