java 中的变量未更新(Minecraft forge)
Variables not updating in java (Minecraft forge)
我正在尝试在 Minecraft forge 环境中更新 class 中的一些变量。首先,我想说的是 class 的长度超过了 600 行,所以我截取了代码片段(这就是为什么某些变量没有在下面的代码片段中初始化的原因在 class 的其他地方初始化。)
我尝试了不同的方法来尝试调用和更改变量,但 none 已成功运行。
编辑:
(isAccelerating 设置为 2):
if(slot.isItemEqual(new ItemStack(ModItems.Particles, 1, 19))){
if(this.isAccelerating == 0){
if(this.module == 1){
if(this.energyStored >= 600000){
this.j = 1200;
this.stoneBuffer = 8;
this.isAccelerating = 2;
return true;
}
}
else{
this.j = 1200;
this.stoneBuffer = 8;
编辑:
似乎isAccelerating变量被设置为2并且是运行,但是,能量并没有减少。
这里是能量消耗的地方:
if(i<1200){
System.out.println("1");
i++;
if(i%20 == 0){
worldObj.playSound(xCoord+5, yCoord, zCoord, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord-5, yCoord, zCoord, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord, yCoord, zCoord+5, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord, yCoord, zCoord-5, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord-5, yCoord, zCoord-5, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord+5, yCoord, zCoord-5, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord-5, yCoord, zCoord+5, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord+5, yCoord, zCoord+5, "random.explode", 1F, 1F, true);
}
if(this.energyStored < 500){
System.out.println("2");
this.energyStored = 0;
this.isAccelerating = 0;
}
else{
System.out.println("3");
this.energyStored -= 500;
}
}
else{
j = 0;
i = 0;
this.isAccelerating = 0;
this.stoneBuffer = 0;
Entity entity = new EntityItem(worldObj);
ItemStack itemstack = new ItemStack(ModItems.Particles, 1, 8);
this.output(itemstack);
}
在这段代码中,系统会打印出1和3,提示这是运行消耗能量但实际上并没有消耗能量的代码。
编辑:
我找到了解决这个问题的办法。为了将来参考,我不得不添加这些代码行来同步服务器和客户端:
this.markDirty();
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
感谢给予帮助的人
可能,您 运行 在 concurrency problem. For example, if int j
is not declared as volatile
then the changes that have been made in another thread may never become visible。
当你说变量没有更新时,你怎么知道它们没有更新?您的代码中是否有列出它们的输出行?还是断点?
您没有正确减少宝箱的堆叠数量。您将传入插槽中的堆栈大小减少 1,然后将插槽 i (0) 中的堆栈大小减小传入插槽的新堆栈大小。
您应该传入插槽索引而不是插槽,然后调用 chest.decrStackSize(slotIndex, 1);
另一个技巧是使用 this.energyStored >= 600000
而不是单独检查大于等于。
根据您的示例,isAccelerating 字段永远不会设置为 2,因此更新代码永远不会 运行.
我找到了解决这个问题的方法。为了将来参考,我不得不添加这些代码行来同步服务器和客户端:
this.markDirty();
worldObj.markBlockForUpdate(x坐标, y坐标, z坐标);
感谢给予帮助的人
我正在尝试在 Minecraft forge 环境中更新 class 中的一些变量。首先,我想说的是 class 的长度超过了 600 行,所以我截取了代码片段(这就是为什么某些变量没有在下面的代码片段中初始化的原因在 class 的其他地方初始化。) 我尝试了不同的方法来尝试调用和更改变量,但 none 已成功运行。
编辑: (isAccelerating 设置为 2):
if(slot.isItemEqual(new ItemStack(ModItems.Particles, 1, 19))){
if(this.isAccelerating == 0){
if(this.module == 1){
if(this.energyStored >= 600000){
this.j = 1200;
this.stoneBuffer = 8;
this.isAccelerating = 2;
return true;
}
}
else{
this.j = 1200;
this.stoneBuffer = 8;
编辑:
似乎isAccelerating变量被设置为2并且是运行,但是,能量并没有减少。 这里是能量消耗的地方:
if(i<1200){
System.out.println("1");
i++;
if(i%20 == 0){
worldObj.playSound(xCoord+5, yCoord, zCoord, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord-5, yCoord, zCoord, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord, yCoord, zCoord+5, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord, yCoord, zCoord-5, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord-5, yCoord, zCoord-5, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord+5, yCoord, zCoord-5, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord-5, yCoord, zCoord+5, "random.explode", 1F, 1F, true);
worldObj.playSound(xCoord+5, yCoord, zCoord+5, "random.explode", 1F, 1F, true);
}
if(this.energyStored < 500){
System.out.println("2");
this.energyStored = 0;
this.isAccelerating = 0;
}
else{
System.out.println("3");
this.energyStored -= 500;
}
}
else{
j = 0;
i = 0;
this.isAccelerating = 0;
this.stoneBuffer = 0;
Entity entity = new EntityItem(worldObj);
ItemStack itemstack = new ItemStack(ModItems.Particles, 1, 8);
this.output(itemstack);
}
在这段代码中,系统会打印出1和3,提示这是运行消耗能量但实际上并没有消耗能量的代码。
编辑:
我找到了解决这个问题的办法。为了将来参考,我不得不添加这些代码行来同步服务器和客户端:
this.markDirty();
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
感谢给予帮助的人
可能,您 运行 在 concurrency problem. For example, if int j
is not declared as volatile
then the changes that have been made in another thread may never become visible。
当你说变量没有更新时,你怎么知道它们没有更新?您的代码中是否有列出它们的输出行?还是断点?
您没有正确减少宝箱的堆叠数量。您将传入插槽中的堆栈大小减少 1,然后将插槽 i (0) 中的堆栈大小减小传入插槽的新堆栈大小。
您应该传入插槽索引而不是插槽,然后调用 chest.decrStackSize(slotIndex, 1);
另一个技巧是使用 this.energyStored >= 600000
而不是单独检查大于等于。
根据您的示例,isAccelerating 字段永远不会设置为 2,因此更新代码永远不会 运行.
我找到了解决这个问题的方法。为了将来参考,我不得不添加这些代码行来同步服务器和客户端:
this.markDirty(); worldObj.markBlockForUpdate(x坐标, y坐标, z坐标);
感谢给予帮助的人