这可能只是个人品味和工作流程的问题,但如果不止于此,我觉得无论如何我应该问.
在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使用静态工厂方法(我希望我正确使用该术语)使用类而不是对象调用.
我对这个问题很生气.好吧,让我们开始吧.我想根据存储在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 ......有点介意......提前谢谢,希望你能理解我!
我在获取缺少/未使用特定依赖项的对象的声明字段时遇到问题。
Field[] fields = OBJECT.getClass().getDeclaredFields();
Run Code Online (Sandbox Code Playgroud)
NoClassDefFoundError当该对象导入缺少的类时抛出 a 。
我想这样做的原因是为了 Bukkit 插件。我想获取缺少依赖项的插件实例的字段(它们未使用,但插件可以启动)。
在运行时,该插件将检查所需的依赖项是否存在,并根据情况加载这些特定字段。
我想到的可能的解决方案:
1)虚拟创建缺少的类+包,然后使用 ASM 重试。但我真的不知道该怎么做。
问候,
马克西姆
我刚刚开始编写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) 我正在为 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) 我有一个玩家,当然能够以矢量形式抓住玩家面对的方向。
使用这个向量,我需要计算玩家是否正在查看x块内的实体以及“咒语”是否会击中它。我还需要考虑实体前面是否有任何东西。
到目前为止,我的思考过程首先是获取x玩家区块中所有实体的列表。但从那里,我没有任何线索。
任何引导我走向正确方向的帮助都会很棒。
Map我正在尝试从config.yml文件中检索 a ,但找不到保留先前设置的按键顺序的方法。
classes:
beginner: 1000
proplayer: 2000
admin: 5000
Run Code Online (Sandbox Code Playgroud)
我知道classes按键组给我一个Map,但顺序与显示屏显示的不同。
我需要它按顺序排列,因为这是玩家将升级到的类别的顺序。因此,如果他是初学者,他将需要升级到职业玩家,依此类推。
我需要某种方法来解决它,这样我就可以知道初学者位于索引 0,以便猜测玩家将进入的下一个班级,在本例中为职业玩家(索引 1),但我还需要检索int班级的值,以便向玩家收取他要转到的班级的费用。
我有以下对象列表:
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) 我正在尝试在项目中使用 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) 我正在尝试为 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)