标签: bukkit

Java:构造函数初始化和静态方法之间的区别?

这可能只是个人品味和工作流程的问题,但如果不止于此,我觉得无论如何我应该问.

在Java中,通过构造函数创建实例和通过静态方法(返回实例)之间有什么区别?例如,从我正在处理的项目中获取这些代码(在发布时手工编写,因此需要一些快捷方式和自由):

Plugin main;
Map<int, int> map;

public Handler(Plugin main) {
    this.main = main;
}

public static Handler init(Plugin main) {
    Handler handler = new Handler(main);
    handler.createMap();
}

public void createMap() {
    this.map = Maps.newHashMap();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使用之间的区别是什么

Handler handler = new Handler(this);
Run Code Online (Sandbox Code Playgroud)

Handler handler = Handler.init(this);
Run Code Online (Sandbox Code Playgroud)

在Plugin类中,除了createMap()仅在后者中运行的事实,因为它没有在构造函数中调用?

在这种情况下,澄清Plugin被认为是主要类别.

我知道足够的Java语法能够编写中级插件,但对Java本身还不够了解这两种方法之间的区别.

编辑:例如,Maps我用来创建的类Map使用静态工厂方法(我希望我正确使用该术语)使用类而不是对象调用.

java methods workflow constructor bukkit

5
推荐指数
2
解决办法
1945
查看次数

基于级别的变量修饰符

我对这个问题很生气.好吧,让我们开始吧.我想根据存储在MySQL数据库中的级别为不同的Minecraft事件添加一些修饰符(例如在EntityDamageByEntityEvent中处理多少损坏).

这个级别系统将有99个级别(1到100),默认级别为50; 例如,在EntityDamageByEntityEvent的情况下,我想更改损坏,所以:

a)如果玩家的等级为50,则不会修改损坏(只会乘以1).

b)如果玩家有1级,则所处的伤害将乘以1/3.

c)如果玩家的等级为100,那么伤害将被提高3.

到目前为止,这么好,但是对于17或89等级的玩家,我怎么能这样做呢?我想知道的是如何转换,比方说,1/100比例在1比3比3,比如50 = 1 ......有点介意......提前谢谢,希望你能理解我!

java math bukkit

5
推荐指数
1
解决办法
194
查看次数

缺少依赖项的类的 Java getDeclaredFields

我在获取缺少/未使用特定依赖项的对象的声明字段时遇到问题。

Field[] fields = OBJECT.getClass().getDeclaredFields();
Run Code Online (Sandbox Code Playgroud)

NoClassDefFoundError当该对象导入缺少的类时抛出 a 。

我想这样做的原因是为了 Bukkit 插件。我想获取缺少依赖项的插件实例的字段(它们未使用,但插件可以启动)。

在运行时,该插件将检查所需的依赖项是否存在,并根据情况加载这些特定字段。

我想到的可能的解决方案:
1)虚拟创建缺少的类+包,然后使用 ASM 重试。但我真的不知道该怎么做。

问候,
马克西姆

java reflection field bukkit

5
推荐指数
1
解决办法
1751
查看次数

Bukkit:我怎么称呼一个活动?

我刚刚开始编写Bukkit编码,我一直在尝试编写一个插件,为某个播放器启用pvp,并且可以禁用它,但仅限于自己.它工作正常,直到我发现我需要一个事件来完成这项工作,但我还没有得知我需要的事件.在网上看了几个视频/东西后,找不到任何可以帮助我的东西.如果你能告诉我如何做到这一点,那就太好了.此外,如果你能解释更多关于事件,也将不胜感激:)

package me.impatheimpaler.test;

import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class togglepvp extends JavaPlugin implements Listener{

    public void onEnable() {

    }

    public void onDisable() {

    }

    List<String> toggled = new ArrayList<String>();

    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
        if (cmd.getName().equalsIgnoreCase("togglepvp")) {
            if (!(sender instanceof Player)) {
                 sender.sendMessage("Only a Player can run this command.");
                 return false;
            }
            Player player = (Player) sender;
            if (toggled.contains(player.getName())) {
                 player.sendMessage(ChatColor.RED + …
Run Code Online (Sandbox Code Playgroud)

java minecraft bukkit

5
推荐指数
1
解决办法
4899
查看次数

如何在 Bukkit 中停止重复的任务计划

我正在为 Minecraft 编写一个小游戏,但日程安排有问题。我不知道如何停止时间表。请告诉我如何停止运行此循环/计时器/计划:

public void WarteTimer() {
    count = Bukkit.getScheduler().scheduleSyncRepeatingTask(
        (Plugin) this,
        new Runnable() {

            @Override
            public void run() {
                if (countdown > 0) {
                    Bukkit.broadcastMessage("§6Countdown : " +countdown); 
                    countdown--;
                } else {
                    Game();
                    //Bukkit.getScheduler().cancelTask(count);
                    //countdown = 5;
                }
           }

       },
       0L,
       20L);
}
Run Code Online (Sandbox Code Playgroud)

java plugins schedule minecraft bukkit

5
推荐指数
1
解决办法
7218
查看次数

我如何检测玩家是否正在看另一个实体?

我有一个玩家,当然能够以矢量形式抓住玩家面对的方向。

使用这个向量,我需要计算玩家是否正在查看x块内的实体以及“咒语”是否会击中它。我还需要考虑实体前面是否有任何东西。

到目前为止,我的思考过程首先是获取x玩家区块中所有实体的列表。但从那里,我没有任何线索。

任何引导我走向正确方向的帮助都会很棒。

bukkit

5
推荐指数
2
解决办法
7067
查看次数

如何从YAML中获取有序的HashMap?

Map我正在尝试从config.yml文件中检索 a ,但找不到保留先前设置的按键顺序的方法。

classes:
 beginner: 1000
 proplayer: 2000
 admin: 5000
Run Code Online (Sandbox Code Playgroud)

我知道classes按键组给我一个Map,但顺序与显示屏显示的不同。

我需要它按顺序排列,因为这是玩家将升级到的类别的顺序。因此,如果他是初学者,他将需要升级到职业玩家,依此类推。

我需要某种方法来解决它,这样我就可以知道初学者位于索引 0,以便猜测玩家将进入的下一个班级,在本例中为职业玩家(索引 1),但我还需要检索int班级的值,以便向玩家收取他要转到的班级的费用。

java yaml bukkit

5
推荐指数
1
解决办法
2485
查看次数

检查Java中的ArrayList中是否存在Object

我有以下对象列表:

private List<Object> teamlist = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)

我正在向列表中添加对象,如下所示:

teamlist.add(new MCWarTeam(args[0], joinkey));
Run Code Online (Sandbox Code Playgroud)

现在列表中的对象没有名称,但可以使用列表引用,对吧?在向列表中添加新元素之前,如何检查具有特定属性的对象是否已存在?这是Objects的构造函数:

public MCWarTeam(String teamname, String joinkey){
    this.teamname = teamname;
    this.joinkey = joinkey;
}
Run Code Online (Sandbox Code Playgroud)

我想检查是否已经有一个名为teamname的团队.或者,是否有更好的方法来存储对象?之前,我只是使用HashMap添加了teamname和joinkey,它运行得很好,但是使用Objects计算它将是一种更好的方法.

以下是事件处理程序的重要代码:

        else if (cmd.getName().equalsIgnoreCase("createTeam")) {
        if (args.length > 0 && args.length < 3) {
            String joinkey = "";
            if (args.length > 1)
                joinkey = args[1];

            String teamname = args[0];

            MCWarTeam newTeam = new MCWarTeam(teamname, joinkey);
            if (!teamlist.containsKey(teamname)) {
                teamlist.put(teamname, newTeam);
                sender.sendMessage("Created new team \"" + teamname + "\" with join key \"" + …
Run Code Online (Sandbox Code Playgroud)

java arraylist object bukkit

5
推荐指数
2
解决办法
1万
查看次数

GraalVM - 在类路径上找不到语言和多语言实现

我正在尝试在项目中使用 GraalVM 来添加简单的脚本功能。我使用 Maven 进行依赖项管理来加载 Graal 的基本依赖项。这是我的 pom.xml:

<?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>

  <groupId>cx.matthew</groupId>
  <artifactId>graaltest</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <graalvm.version>19.0.2</graalvm.version>
    <compiler.dir>${project.build.directory}/compiler</compiler.dir>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
  </properties>

  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
    <repository>
      <id>papermc</id>
      <url>https://papermc.io/repo/repository/maven-public/</url>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>org.graalvm.sdk</groupId>
      <artifactId>graal-sdk</artifactId>
      <version>${graalvm.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.graalvm.js</groupId>
      <artifactId>js</artifactId>
      <version>${graalvm.version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.graalvm.js</groupId>
      <artifactId>js-scriptengine</artifactId>
      <version>${graalvm.version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.graalvm.tools</groupId>
      <artifactId>profiler</artifactId>
      <version>${graalvm.version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.graalvm.tools</groupId>
      <artifactId>chromeinspector</artifactId>
      <version>${graalvm.version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.graalvm.truffle</groupId>
      <artifactId>truffle-api</artifactId>
      <version>19.0.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency> …
Run Code Online (Sandbox Code Playgroud)

java maven bukkit graalvm

5
推荐指数
1
解决办法
4454
查看次数

Gradle 构建失败于:compileJava:“没有匹配的变体”

我正在尝试为 Minecraft Bukkit(纸)插件制作一个库。我正在尝试构建一个 jar 文件,但 Gradle 给了我这个错误:

Execution failed for task ':compileJava'.
> Could not resolve all files for configuration ':compileClasspath'.
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这个错误。

Execution failed for task ':compileJava'.
> Could not resolve all files for configuration ':compileClasspath'.
   > Could not resolve io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT.
     Required by:
         project :
      > No matching variant of io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT:20220703.182221-166 was found. The consumer was configured to find an API of a library compatible with Java 16, preferably in the form of class files, preferably optimized for standard JVMs, …
Run Code Online (Sandbox Code Playgroud)

java gradle bukkit build.gradle gradle-kotlin-dsl

5
推荐指数
1
解决办法
4367
查看次数