我刚刚进入Minecraft的moding,我正在写一个简单的mod,你可以控制和右键点击黑曜石上的鹅卵石获得一个“岩石”项目。预期的功能是当玩家执行此动作时,他们将消耗一块鹅卵石并获得一块岩石,而不需要放下鹅卵石。这是相当有效的,虽然我得到一个奇怪的效果,当我激活它。在服务器移除块之前,客户机似乎会让它看起来像是放置了一个刻度左右的块。(至少,反正看起来就是这样。)
这是我的代码:
@SubscribeEvent
public static void onStoneSmash(final PlayerInteractEvent.RightClickBlock event) {
System.out.println("Is Server: " + event.getSide().isServer());
final World world = event.getWorld();
if (world.isRemote()) {
return;
}
if (world != null && event.getUseBlock() != Result.DENY) {
final PlayerEntity player = event.getPlayer();
if (player != null && !player.isSpectator() && !world.isAirBlock(event.getPos())) {
final BlockPos pos = event.getPos();
if (InputMappings.isKeyDown(Minecraft.getInstance().getMainWindow().getHandle(), GLFW.GLFW_KEY_LEFT_CONTROL) && world.getBlockState(pos).getBlock().equals(Blocks.OBSIDIAN) && player.inventory.getCurrentItem().getItem().equals(Blocks.COBBLESTONE.asItem())) {
player.inventory.addItemStackToInventory(new ItemStack(ItemInit.ROCK.get(), 1));
if (!player.isCreative()) {
player.inventory.decrStackSize(player.inventory.currentItem, 1);
}
System.out.println("Rock smashed.");
event.setCanceled(true);
}
}
}
System.out.println("Use Block: " + event.getUseBlock());
System.out.println("Use Item: " + event.getUseItem());
}
正如我所说的,我是一个很新的造型场景,所以我肯定有很多在这里看起来不那么漂亮。
其他信息:
MC版本:1.16.4
伪造版本:1.16.4-35.1.4
如果需要的话,我会提供更多的信息。
谢谢!
编辑:这是一个我所提到的问题的gif。
https://imgur.com/ix5v7cb
您可以执行event.setCancelled(true)
如果我拼错了Cancel,请原谅,因为对我来说已经很晚了。
Edit:event.setCanceled(true)应该起作用,如果你想要停止一个放置,比如橡木板,那么你想要检查它是不是,然后将事件设置为Canceled
编辑2:哦,等待你使用交互事件,为什么?等待另一个编辑我可以回答这个
编辑3:
好的,这里有一个块放置事件,这是你应该用来放置块的,所以这应该帮助你,也推荐学习更多关于Spigot API的知识,然后再学习Forge
@EventHandler // this is spigot you could replace this and find the block place event using forge api
public void onBlockPlace(BlockPlaceEvent e) {
}
我试图放大我的mandelbrot集,我读到了这个问题:如何简单地放大mandelbrot集,但我很难理解它,它不起作用。当我这样计算新的实数和复数时: 新的mandelbrot在两个轴上都有点变形?怎么了?以下是一个例子:http://www.phpdevpad.de/index.php?id=190.
问题内容: 从Python标准库的组件中获取异常消息的最佳方法是什么? 我注意到在某些情况下,您可以通过如下字段获取它: 但在某些情况下(例如在套接字错误的情况下),您必须执行以下操作: 我想知道是否有标准方法可以涵盖大多数情况? 问题答案: 如果查看内置错误的文档,则会看到大多数类将其第一个参数分配为属性。并非所有人都这样做。 值得注意的是,(与子类和)具有的第一自变量,第二的。没有…大致类似于
我是一个初学者程序员,我试图做一个简单的计算器,但由于某种原因,按钮似乎不能正常工作,它们要么消失,填满整个面板,要么设置在错误的位置。奇怪的是,当我悬停并在按钮上点击鼠标时,按钮就会出现。我可能会错过一些非常明显的东西,但请帮助(此外,代码不是很干净)。谢谢你! 主要的 计算器按钮 窗
问题内容: 在我们的项目中,我们正在编写测试以检查控制器是否返回正确的模型视图 这将返回异常null。 现在,我们正在配置@contextconfiguration,但是我们不知道如何加载位于src \ main \ webapp \ root \ WEB- INF \ root-context.xml的正确xml。 该文档不够清晰,难以理解 关于如何确保contextannotation加载正确
我正在使用ScheduledExecutorService并提交一个这样的任务: 然而,某个事件可能会在不确定的时间后发生,这表明不再需要这个任务。所以我需要取消这个任务,我正在使用 行。 取消之后,我必须根据提交的runnable是否实际运行来采取不同的操作。这里,让我们首先进入Oracle文档,了解< code>cancelled标志的含义: https://docs.oracle.com/j
不管怎样,我在我的项目中使用了registfit/OkHttp,并认为这应该是Okio的一个很好的用法。这就是我目前所拥有的,它似乎起作用了。但是我是Okio的新手,不知道我是否遗漏了一些明显的东西,或者这是否可以用更好的方式来完成。 您可以看到,我正在绑定upload一个块,等待成功响应(来自Java8),然后使用更新的和再次调用方法。就像我说的,它很有效,但我是Okio的新手,我想知道我是否错