本帖最后由 byxiaobai 于 2021-8-26 11:03 编辑
按钮继承了Forge的net.minecraft.client.gui.widget.button.Button
问题原因:覆写了renderButton()却没有覆写isMouseOver()和clicked()方法
复制代码
来自群组: 幻境空间站
按钮继承了Forge的net.minecraft.client.gui.widget.button.Button
问题原因:覆写了renderButton()却没有覆写isMouseOver()和clicked()方法
- @Override
- public boolean isMouseOver(double mouseX, double mouseY) {
- return this.active && this.visible &&
- mouseX >= (double)this.getRenderX() &&
- mouseY >= (double)this.getRenderY() &&
- mouseX < (double)(this.getRenderX() + this.getWidth()) &&
- mouseY < (double)(this.getRenderY()+ this.getHeight());
- }
- @Override
- protected boolean clicked(double mouseX, double mouseY) {
- return this.active && this.visible &&
- mouseX >= (double)this.getRenderX() &&
- mouseY >= (double)this.getRenderY() &&
- mouseX < (double)(this.getRenderX() + this.getWidth()) &&
- mouseY < (double)(this.getRenderY()+ this.getHeight());
- }
来自群组: 幻境空间站
Forge的net.minecraft.……
醒醒,包名都写着 minecraft,不是 minecraftforge。
当然是在 Button 点击的 callback 里向服务器发送含指令的包。
好,既然没有提游戏版本,那么我们开始推理,首先根据这个类名确定是 1.16 或者 1.15 的 MCP 名,所以确实是 Forge 环境没错,然后我们知道 Button 的构造器可以传入一个 Button.IPressable 对象。因为这是一个 Functional Interface 所以我们可以直接写一个 lambda 进去。
然后,查阅 CChatMessagePacket 的处理流程可知,所有来自客户端且以 / 开头的聊天信息都会被截留并作为命令处理,那么我们只需要:
- new Button(x, y, w, h, text, btn -> {
- Minecraft.getInstance().getConnection().send(new CChatMessagePacket("/say hello"));
- });
done。
3TUSK 发表于 2021-8-25 16:52
醒醒,包名都写着 minecraft,不是 minecraftforge。
当然是在 Button 点击的 callback 里向服务器发 ...
可是这样写没有执行