好的,所以我有两种方法应该可以工作,据我所知,哪个获得了称为 an 的东西ItemStack,并将其序列化。
ByteOutputStream并转换为 a byte[]。也就是说byte[],然后变成了byte,用特制的分离器设置在之间的字节。ItemStack[])都被输入到 a 中byte[],并存储在 a 中byte[][][]。ItemStack[]从 中检索,该byte[]方法使用特殊的字节分隔符集将 分隔byte[]为 abyte并将其转换为 a Map<String, Object>,然后转换为ItemStack。这一切一定很令人困惑,因为它对我来说,所以我将在下面发布我目前拥有的内容(仅两种方法)。如果需要更多,请告诉我,我很可能会得到它。
我的问题是这不起作用。没有错误或任何东西,但由于某种原因,数据并没有完全通过。如果有人对此有任何解决方案,请提供帮助。也许是我拆分数据的方式......或者我正在切断或添加字节到字符串或对象中。
private static byte[] contentsToBytes(Block block, ItemStack[] contents) throws IOException {
byte[] bytes = new byte[] {block.getData()};
byte[] dataSplitter = ITEMSTACKDATASPLITTER.getBytes("UTF-8");
for (int i = 0; i < contents.length; i++) {
Map<String, Object> serialized …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作混合模式身份验证(我自己版本的身份验证插件),但是有一个问题 - 在带有星号的行中,我收到以下错误:
Syntax error on token "(", ; expected
Syntax error on token ")", ; expected
void is an invalid type for the variable onPlayerJoin
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
Syntax error on token "(", ; expected
Syntax error on token ")", ; expected
void is an invalid type for the variable onPlayerJoin
Run Code Online (Sandbox Code Playgroud) 好的,我试图在玩家登录时检查他们的库存,它说显示名称
public void onPlayerJoin(PlayerJoinEvent event) {
Player p = event.getPlayer();
for (int i = 0; i < p.getInventory().getSize(); i++) {
if (p.getInventory().getItem(i).getType() != null) {
if (!p.getInventory().getItem(i).getItemMeta().getDisplayName().equals("KITS")){
Bukkit.broadcastMessage(i.getItemMeta().getDisplayName());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它只是导致错误。
错误日志:
public void onPlayerJoin(PlayerJoinEvent event) {
Player p = event.getPlayer();
for (int i = 0; i < p.getInventory().getSize(); i++) {
if (p.getInventory().getItem(i).getType() != null) {
if (!p.getInventory().getItem(i).getItemMeta().getDisplayName().equals("KITS")){
Bukkit.broadcastMessage(i.getItemMeta().getDisplayName());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个 NullPointerException 但我不知道它怎么能这么说。我希望你明白我写的...
很抱歉,如果这不是问这个问题的正确地方,我是新来的。
一切都很完美。我和一个朋友做了一个Hamachi服务器。我的朋友把他的IPv4 放在服务器属性的“server-ip=”中。我们只需要打开服务器文件和 Hamachi 软件(我们共享网络)。有一天,我的互联网信号很差(与问题无关),从那一刻起(就像两天前一样),它发生了:
我对服务器属性做了一些尝试,并意识到在某种程度上 server-ip= 不正确。因为如果我删除该行中写入的内容,它不会立即关闭(但我们不能那样玩)。
我真的不知道该怎么办,但我们想继续比赛。
感谢您阅读并提供帮助!
我对 Java 比较陌生,所以请原谅任何白痴。
我正在使用 Bukkit 为 Minecraft 制作一个小插件。我想让它用正确的形式替换常见的语法错误。这是我的代码:
@EventHandler
public void onChat(AsyncPlayerChatEvent event){
String message = event.getMessage().replaceAll("(?i)dont", "don't")
.replaceAll("(?i)youre","you're");
event.setMessage(message);
}
Run Code Online (Sandbox Code Playgroud)
这部作品在更换FINEdont用don't,并youre用you're。
这种方法的问题在于它会替换DONT为don't, 而不是DON'T。
DoNt-> don't, 而不是DoN't
有没有办法在保持正确大小写的同时替换单词?
我现在正在开发一个 Spigot 插件。但我遇到了一些问题。我对听众有问题。我看过教程,但没有用。当我在游戏中吃东西时,它不会说“好吃!” 它什么也不做。我试图修复它,但我不能。我不认为是因为我把它放在同一个包里。
监听器.java:
package adawda.awdwa;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.plugin.java.JavaPlugin;
public class Listeners extends JavaPlugin implements Listener
{
public Listeners(Awdwa plugin)
{
}
public void onEnable()
{
Bukkit.getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onPlayerItemConsume(PlayerItemConsumeEvent event)
{
event.getPlayer().sendMessage("Yum!");
}
}
Run Code Online (Sandbox Code Playgroud)
Awdwa.java(主):
package adawda.awdwa;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerBedEnterEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import …Run Code Online (Sandbox Code Playgroud) 需要有关 Minecraft spigot 插件的帮助。
这是主文件(main.java)的代码
package com.angosa;
import org.bukkit.plugin.java.JavaPlugin;
import com.angosa.listener.Listeners;
public class Main extends JavaPlugin {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(new Listeners(), this);
}
}
Run Code Online (Sandbox Code Playgroud)
这是listeners.java的代码(位于listener包中)
package com.angosa.listener;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;
public class Listeners implements Listener {
@EventHandler
public void creatureSpawn(CreatureSpawnEvent event) {
if(event.getEntityType() == EntityType.CREEPER) {
Creeper creeper = (Creeper) event.getEntity();
creeper.setPowered(true);
creeper.setHealth(100);
creeper.setExplosionRadius(200);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后这是 yml 文件
main: com.angosa.Main
name: OPCreeper
version: 1.0
author: Claim
Run Code Online (Sandbox Code Playgroud)
另外,如果版本错误,以下是我将其上传到服务器时的样子。 …
我正在开发一个 Minecraft 插件,它使用我创建的一个名为 customPlayer 的类。当我从正在运行的实例中保存插件数据时,我将所有这些对象放入一个 HashMap<String,customPlayer> 并使用 ObjectOutputStream 保存它们。将这些类加载回插件的相同版本效果很好,但是当我修改类并尝试使用修改后的类(通常与我的插件的新版本相关联)读取对象时,我的问题出现了。
我想了想,想出了一个聪明的办法。我的想法是将旧的类文件作为外部库包含在新版本的插件中,交叉手指并希望它起作用。它没有。
有一个更好的方法吗?我是序列化和这类东西的新手,所以任何建议将不胜感激。下面我会附上一些customPlayer类的截图和服务器的崩溃日志。理想情况下,提出的任何解决方案都应该能够在将来对类进行修改时轻松使用(更新到通过 Github 存储库下载的 Jar)。
当前的 Minecraft 版本(也是我的任何 mod 的目标版本)是 1.17.1。Forge 最近发布了一个与此匹配的版本(MC 1.17.1 需要 Forge 1.17.1 等)。
Oracle 说最新的 JDK 是 17(就像,我离开 Java 才三年左右……他们到底是怎么咀嚼这样的版本号的,呃)。
我设法挖掘了一些论坛帖子,这些帖子表明 JDK 16 不适用于早期的 Forge 版本,并且我认为这对于更高版本的 Forge 版本(反射不可用)来说是正确的,并且几乎可以肯定对于更高版本的 JDK 版本也是如此。但我是否可以使用 JDK 15 还是需要更低的版本,我很难弄清楚。我希望有人能让我在接下来的两周里不用在论坛上发帖和半途而废的实验。
总而言之,给我带来的麻烦最少的 JDK 最高版本是多少?(我已经从 IDE/扩展本身获得了最低版本,而且它们看起来并不是特别慷慨)。
我试图设置一个随机数,但在随机数中排除一定数量.
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
Player player = (Player) sender;
if(commandLabel.equalsIgnoreCase("random")){
Random random = new Random();
int randomId = random.nextInt(300);
if(randomId >= 100 && randomId <= 200){
player.sendMessage("" + randomId);
}
while(randomId != 124){
randomId = random.nextInt(300);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想在随机中排除124的数字.