- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果您在键盘 GUI 中输入的代码正确,我将尝试使用 setBlock 命令来放置我的键盘的 Activity (发出红石电源)版本。我将向您展示的代码在客户端(单人游戏)端可以完美运行,但在服务器(多人游戏)端则不能。代码如下:
BlockKeypad“onBlockActivated”代码:
public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9){
this.playerObj = par5EntityPlayer;
this.lastKeypadX = par2;
this.lastKeypadY = par3;
this.lastKeypadZ = par4;
if(par1World instanceof WorldServer){
this.worldServerObj = par1World;
TileEntityKeypad TEK = (TileEntityKeypad) par1World.getBlockTileEntity(par2, par3, par4);
System.out.println(TEK.getKeypadCode() + " | Code from TileEntity");
this.openCode = TEK.getKeypadCode();
if(TEK.getKeypadCode() == 0){
par5EntityPlayer.openGui(mod_SecurityCraft.instance, 1, par1World, par2, par3, par4);
}else{
par5EntityPlayer.openGui(mod_SecurityCraft.instance, 0, par1World, par2, par3, par4);
}
return true;
}else{
this.worldObj = par1World;
//Rest of client code here
return true;
}
}
Gui键盘代码:
private void checkCode(String par1String) {
int code = 0;
try{
code = Integer.parseInt(par1String);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(BlockKeypad.openCode + " | GUI");
if(code == BlockKeypad.openCode){
new ScheduleUpdate(3, BlockKeypad.worldServerObj, BlockKeypad.lastKeypadX,BlockKeypad.lastKeypadY, BlockKeypad.lastKeypadZ, BlockKeypad.openCode, this.keypadInventory);
BlockKeypad.playerObj.closeScreen();
}
}
ScheduleUpdate 类:
public class ScheduleUpdate{
Timer timer;
private int xCoord;
private int yCoord;
private int zCoord;
private int metadata;
private int passcode;
private TileEntityKeypad TEK;
public ScheduleUpdate(int seconds, World par2World, int par3, int par4, int par5, int par6, TileEntityKeypad keypadInventory){
timer = new Timer();
timer.schedule(new RemindTask(), seconds*1000); //TODO 60
xCoord = par3;
yCoord = par4;
zCoord = par5;
passcode = par6;
TEK = keypadInventory;
//BlockKeypad.shouldCheckMeta = false;
metadata = par2World.getBlockMetadata(par3, par4 , par5);
System.out.println(metadata + " | metadata");
par2World.setBlock(par3, par4, par5, mod_SecurityCraft.KeypadActive.blockID, metadata, 3);
par2World.notifyBlocksOfNeighborChange(par3, par4 , par5, mod_SecurityCraft.KeypadActive.blockID);
}
class RemindTask extends TimerTask{
public void run(){
BlockKeypad.worldObj.setBlock(xCoord, yCoord, zCoord, mod_SecurityCraft.Keypad.blockID, metadata, 3);
BlockKeypad.worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, mod_SecurityCraft.Keypad.blockID);
((TileEntityKeypad) BlockKeypad.worldObj.getBlockTileEntity(xCoord, yCoord, zCoord)).setKeypadCode(passcode);
timer.cancel();
}
}
}
如果我使用我现在拥有的这段代码,出于某种原因,当我创建一个新的 ScheduleUpdate 对象(在 GuiKeypad 代码中)时,它会在 BlockKeypad.worldServerObj 上给我一个 NullPointerException 。如果我用 BlockKeypad.worldObj (我的客户端 World 对象)切换它,它看起来像是放置了该 block ,但如果我更新新 block (右键单击它,在它旁边放置一个 block 等),它就会消失。所以我猜我必须使用 worldServerObj,但同样,每当我尝试使用它时,它都会抛出 NullPointerException,即使我在 GUI 打开之前设置为服务器的 World 对象。
我为 System.out.println() 创建了一个项目,这是我在 BlockKeypad 类中创建的两个世界对象。
当我右键单击它时,它会在控制台(客户端)中打印:
net.minecraft.multiplayer.WorldClient()
null
在服务器控制台中:
null
net.minecraft.multiplayer.WorldServer()
有人知道这是怎么回事吗?我将非常感谢任何帮助,因为这是唯一阻止我发布多人游戏兼容版本的 mod 的原因。谢谢!
最佳答案
简单的回答是,您已将 mod 编码为仅单人游戏,这意味着只有客户端代码和服务器代码在同一运行时环境中执行并且可以轻松传递对象引用和值来回。您的客户端报告 WorldServer 对象为 null 的原因是,当连接到专用服务器时,它实际上无法访问任何 WorldServer 对象(在 SSP 中,客户端正在运行集成服务器,因此它可以访问它) 。这同样适用于服务器无法访问 WorldClient 对象的原因。
基本上,您需要为客户端实现客户端/服务器数据包处理程序,以发送服务器所需的自定义数据,以确定玩家是否输入了正确的键盘条目并采取适当的操作。这是通过当玩家完成输入键码并提交时从客户端分派(dispatch) Packet250CustomPayload 实例来完成的。 Packet250CustomPayload 由一个 Object[] 组成,其中可以包含处理请求所需的任何对象类型。为了您的利益,我希望您使用 Minecraft Forge 作为 mod 加载机制,因为这是让您的 mod 同时适用于 SSP 和 SMP 的最简单方法。
以下是 Minecraft 中数据包处理教程的链接:http://www.minecraftforge.net/wiki/Packet_Handling
这是 Treecapitator 源代码的另一个链接(这是我的代码,因此请随意使用它来学习如何应用数据包处理概念):https://github.com/bspkrs/Treecapitator
此外,Treecapitator 数据包处理代码使用我所需的依赖项 mod bspkrsCore 中的一个类,该类有助于构建数据包(我无法发布第三个 URL,因为我没有信誉点):[mygithubURL]/bspkrsCore/blob/master/src/bspkrs/fml/util/ForgePacketHelper.java
其他提示:
~ 使用 world.isRemote() 代替检查 World 对象是否属于特定对象类型。当 isRemote() 为 true 时,您应该运行特定于客户端的代码,当 isRemote() 为 false 时,您应该运行特定于服务器的代码。
~ 不要使用单独的线程来修改世界...您应该注册一个新的刻度处理程序以避免并发修改异常。
关于java - Minecraft 模组 - 如何在服务器端使用 setBlock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18666908/
我在使用 Jade 和 express 时遇到了一些问题。这是 serder 端: router.get('/login', function (req, res) { res.status(2
是否可以使用 JavaScript 服务器端,从而在某些核心计算中不会显示在页面源代码中? 我正在开发一款游戏,代码的一个关键部分只需要在服务器端计算然后传回客户端。 我的整个游戏都是用 Javasc
我正在寻找有关如何使用 ExtJS 4 实现安全页面的信息。我所说的安全页面是指用户将使用 Siteminder (SSO) 登录我们的网站,因此我们将拥有用户的身份。然后我们将通过进行数据库/LDA
我的 Centos 7 服务器正在运行 apache 2.4.6,并且正在使用 mod_wsgi 提供 django webapp。我的问题是我无法从另一台计算机的浏览器访问服务器 url。我没有从
我们收到了客户的请求,要求我们基于 ExtJS 框架构建 Web 应用程序。我查看了互联网,发现 ExtJs 只是一个客户端 javascript 控件,但我认为 Web 应用程序也必须具有服务器端
我有三个组件。 组件一包含组件二和三。 组件二是一个列表。 组件三用于向数据库添加项目。 当我将一个项目保存到数据库时,我想更新组件二中的列表。 我怎么做? 最佳答案 设想 让我们假设:
欢迎, 我正在寻找能使我以尽可能高的格式下载youtube视频的youtube api。 几年前,这项工作更为简单,因为url拥有关于质量的信息,例如“fmt = 22”或“fmt = 6”,我们现在
我想将电子邮件 x@x.com 的用户密码设置为“an”。但代码不起作用。这是我的云代码: Parse.Cloud.define('testSetPasswordForUser', functio
正在阅读http://cocoawithlove.com/2010/03/streaming-mp3aac-audio-again.html这篇文章,想知道如何在服务器端实现它,是否像将文件放在htd
我有一个使用一些 css/javascript 选项卡的 php 脚本,它们在我的本地服务器上运行,但当我上传到我的在线服务器时则不起作用。 只是想知道是否有人知道为什么会出现这种情况?所有路径都
是否可以从 JavaScript 脚本获取服务器端页面的源代码?我希望能够获取服务器上同一文件夹中的页面的源代码。除了javascript之外,是否可以不使用任何其他东西? 最佳答案 如果您想从 ja
.NET 4.0 我正在寻找在我们的服务器上生成Word文档的最简单方法。 局限性: 服务器端 我不想在服务器上安装word 数据源是XML 我试图用XSLT生成快速简单的DOCX,但是我可以找到的用
我正在使用 native jQuery 验证库来验证在联系表单中输入的电子邮件地址。由于这是一个表达式引擎站点,因此我使用其电子邮件验证器作为服务器端备份。 当我输入 test@b.c 时,jQuer
我使用带有服务器端处理的数据表来显示数万行。我需要通过复选框过滤这些数据。我能够制作一个工作正常的复选框,但我不知道如何添加多个复选框以协同工作。我找到了 similar solution在这里,但我
我正在尝试编写一个消息传递应用程序,并且我能够发送消息(显示为服务器客户端正确显示消息)但随后将我的客户端踢出服务器。服务器打印以下错误: java.io.EOFException at java.i
如果设备是移动设备,如何防止侧边栏加载服务器端资源?我了解如何通过 CSS 隐藏,但我更感兴趣的是防止对服务器的调用。 最佳答案 WordPress有一个名为wp_is_mobile()的函数它将检查
我有一个返回 text/event-stream 数据的网址,因此我尝试连接并打印我找到的所有内容: var url = "..." var source = new EventSource(url)
我得到这样的错误列表:{ error: [ "Email is required", "First Name is required"] } 我需要如何修改它,以获取包含字段名称的列表? public
我正在尝试使用 ASIFormDataRequest 将数据发送到 ASP.net 服务器端。我创建了一个aspx页面。目前我可以得到这两个纯文本。但是我不知道如何通过 Request.Form 在
我在 ${host}/api/graphql 有一个可通过 POST 访问的快速 graphql 端点。 在那条路线上,我有身份验证中间件,如果用户未登录,我想重定向到登录页面。 看起来有点像这样。
我是一名优秀的程序员,十分优秀!