我目前正在为Minecraft Fabric编程一个插件/服务器端模块,它可以改变玩家的死亡。更准确地说:当玩家死亡时,他们应该在某些情况下保留他们的库存。
为了实现这一点,我有一个扩展net的类。我的世界。实体游戏者PlayerEntity和“混入”课堂。我的世界。服务器网络服务器播放属性。现在,如果我调用此方法,我将onDeath(DamageSource source)中的方法调用重定向到我的方法中。在if语句后放置()。
@Redirect(method = "onDeath", at = @At(value = "INVOKE",
target = "Lnet/minecraft/server/network/ServerPlayerEntity;drop(Lnet/minecraft/entity/damage/DamageSource;)V"))
public void redirectDrop(ServerPlayerEntity instance, DamageSource damageSource) {
LOGGER.log(Level.INFO, "Drop called");
if (!countDeath) {
LOGGER.log(Level.INFO, "Kept Items");
return;
}
this.drop(damageSource);
LOGGER.log(Level.INFO, "Dropped Items");
}
如您所见,dro()
方法在计算死亡时调用,而当不计算死亡时,则提前返回该方法。
但问题来了:
当死亡未计算时,玩家的库存仍然会清空,但不会掉落物品。但是我希望球员能够保留他们的库存,而不仅仅是让他们什么都不掉。关于这个的奇怪部分是在服务器游戏性中。onDeath有以下代码:
if (!this.isSpectator()) {
this.drop(source);
}
这使得玩家在观众模式下被杀时保留他的物品。这是可行的,但不是我的代码。。。
有谁知道我做错了什么,或者能帮我吗?
谢谢你!
在对Minecraft的代码进行了一些探索之后,我终于找到了解决问题的方法:
首先,我的代码运行得很好:当死亡未计算在内时,玩家不会丢弃物品。事实上,玩家的库存在重生后是空的,这与代码无关。drop()方法。
第二,当一个玩家重生了一个全新的网。我的世界。服务器网络已创建服务器播放实体(ServerPlayerEntity)。因此,新创建的ServerPlayer对象的库存为空。当在观众模式下死亡或KeepInventory设置为true时,旧ServerPlayer对象的清单将复制到新的。
最后,为了解决我的问题,我将代码注入到服务器PlayerEntity的onDeath(损坏源代码)方法中,该方法将其资源清册保存在地图中(UUID作为键)。为了使玩家恢复原状,我将其注入了网的respawnPlayer方法。我的世界。服务器PlayerManager,以便将旧ServerPlay对象的清单复制到新对象。为了获得新的ServerPlayer实例,我重定向了setMainArm()方法,然后再次调用它,这样行为就相同了。
我的代码如下所示:
@Redirect(method = "respawnPlayer", at = @At(value = "INVOKE",
target = "Lnet/minecraft/server/network/ServerPlayerEntity;setMainArm(Lnet/minecraft/util/Arm;)V"))
public void respawn(ServerPlayerEntity instance, Arm arm) {
instance.setMainArm(arm);
instance.getInventory().clone(INV_CACHE.get(instance.getUuid()));
}
我正在寻找一些可以让我像Mongoid那样做的事情: 基本上,包含一个模块并使用其中声明的方法。但是我得到以下错误: 这是模块代码: 下面是课程代码: 我的ruby版本是2.1.2 编辑: 我在模块中使用了这个,它工作得很好:
问题内容: 检查这样的情况后,我有一条重定向的路线 条件为真但未安装组件时,URL会更改。其余的组件代码如下。 我的应用程序组件包含在BrowserRouter中,例如thi 当我在浏览器中直接命中url时,例如’localhost:3000 / intro’组件已成功安装,但是当它通过重定向时,它不会显示该组件。我如何解决它? 因此缺少一个细节,我尝试创建另一个项目来重现该问题。我的App组件是
问题内容: include(‘header.php’); 上面的代码不断给我重定向的问题。错误如下: 警告:无法修改标头信息-已在/ Applications / MAMP / htdocs / testygubbins / OO / test / form中发送的标头(输出始于/Applications/MAMP/htdocs/testygubbins/OO/test/header.php:15
问题内容: 不知道为什么这不起作用。这是代码: 而不是重定向页面,此输出到网页。它跳过了重定向。为什么?我怎样才能解决这个问题?page1.php是一个实际页面,与当前页面位于同一文件夹中。上面的代码是php文件的第一行。没什么 没有。甚至没有空格。 问题答案: Pekka在评论中回答了我的问题。他没有发布答案,所以我现在是。标头重定向后使用此方法。由于某种原因,页眉的其余代码在header()方
尝试调用一个java服务从PHP客户端使用curl函数。我的api期待一个json请求体,如下所示, 我的php客户端代码如下所示, 执行后,它显示一个空白的响应,我也可以访问服务器代码,试图把调试点在我的java代码,似乎超文本传输协议调用没有到达我的服务器。. 刚才执行var_dump(curl_getinfo($ch));得到下面的输出,数组(22){["url"]= 这意味着这是重定向到登
我对symfony框架知之甚少。我复制了一个网站www.example。net访问www.example。com站点使用url 它不会重定向。 谢谢