- 1,015
- 9
- 102
У меня в GUI в блоке, при установке значения слайдером, проверяются все блоки 100x100x100 вокруг на присутствие интерфейса и всяких премудростей. Вот код, который вызывается:
Раньше это у меня вызывалось каждый тик, и так сильно лагало, что пришлось переписать код. И я сделал так, что бы конкретные блоки искались только при обновлении значений. Просто так лагать перестало, но не при подмене значений. И тут я понял, что те конкретные блоки можно искать не перебором всех блоков, а перебором только конкретных. То есть я хочу, что бы когда игрок ставил блок, то позиция куба бы записывалась на сервер (именно куда, я не знаю, просто на сервер) в лист. А потом при подмене значения просто бы перебирались именно те блоки, которые есть в том листе
Проблема в том, что я, во-первых, не знаю куда пихать этот лист, что бы он был всегда, и был на сервере, во-вторых, если мы это будем хранить не в блоках, не в предметах и не в энтити, то как это записать в NBT?
@Override
public void applyLinkedBlocks(){
brokeLinksAll();
if (energy != 0) {
for (int z = -radius; z < radius; z++)
for (int y = -radius; y < radius; y++)
for (int x = -radius; x < radius; x++) {
BlockPos newPos = new BlockPos(x + getPos().getX(), y + getPos().getY(), z + getPos().getZ());
TileEntity te = world.getTileEntity(newPos);
if (te instanceof IFieldReceiverEnergy && ((IFieldReceiverEnergy) te).getFrequency() == frequency) {
IFieldReceiverEnergy block = (IFieldReceiverEnergy) te;
if (block.getLink() == null) {
createLink(te.getPos());
block.applyStats(ConvertVoltage(voltage));
} else if (((IFieldCreatorEnergy) world.getTileEntity(block.getLink())).getVoltage() < voltage) {
((IFieldCreatorEnergy) world.getTileEntity(block.getLink())).brokeLink(te.getPos());
createLink(te.getPos());
block.applyStats(ConvertVoltage(voltage));
}
}
}
}
}
public void applyLinkedBlocks(){
brokeLinksAll();
if (energy != 0) {
for (int z = -radius; z < radius; z++)
for (int y = -radius; y < radius; y++)
for (int x = -radius; x < radius; x++) {
BlockPos newPos = new BlockPos(x + getPos().getX(), y + getPos().getY(), z + getPos().getZ());
TileEntity te = world.getTileEntity(newPos);
if (te instanceof IFieldReceiverEnergy && ((IFieldReceiverEnergy) te).getFrequency() == frequency) {
IFieldReceiverEnergy block = (IFieldReceiverEnergy) te;
if (block.getLink() == null) {
createLink(te.getPos());
block.applyStats(ConvertVoltage(voltage));
} else if (((IFieldCreatorEnergy) world.getTileEntity(block.getLink())).getVoltage() < voltage) {
((IFieldCreatorEnergy) world.getTileEntity(block.getLink())).brokeLink(te.getPos());
createLink(te.getPos());
block.applyStats(ConvertVoltage(voltage));
}
}
}
}
}
Проблема в том, что я, во-первых, не знаю куда пихать этот лист, что бы он был всегда, и был на сервере, во-вторых, если мы это будем хранить не в блоках, не в предметах и не в энтити, то как это записать в NBT?