на нестатический метод luckperms getUserManager() нельзя ссылаться из статического контекста

#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());
}