- 5,018
- 47
- 783
Всем привет. В общем, кто в теме, тот шарит, что в 1.12(или 1.11) была добавлена такая фича как struckture_block. Данными блоками можно выделить регион и сохранить кусок мира в нбт для последующего использования в генерациях. Разработчики поступили неверно, ограничив максимальный обьем куба 32 блоками.
Короче говоря, мне этого маленького кубика 32на32на32 не хватает для того чтобы уместить мои советские гигантские постройки. Сначала думал сделать аналогичный свой блок, но потом решил, что гораздо быстрее будет исправить это недоразумение в ванилле. Собственно, вся проблема заключается в том, что метод для хука то статичный, а в статичном нельзя вызвать суперметод readFromNBT. Ну и общем говоря, вставляя вот такой хук, я сталкиваюсь с проблемой, что тайл попросту не сохраняется.
Что я делаю не так? Как мне вызвать суперметод, без которого не хочет работать readFromNBT?
hohserg предложил мне просто взять и тело суперметода скопипастить себе в хук. Возникла проблема - джве переменных, которые там используются, приватные. Казалось бы, фигня, АТ наше все? А вот нет. После запуска АТ, когда я указал изменить ФСЕ модификаторы в классе TileEntity на публик, и билд сасесшфули, но почему то именно эти две переменных остались приватными.
P.S В ванилле эти глу.. developers the mainkraft зачем то генерят большую структуру по кускам. (лесной дом того перца например, или как там). Догадываюсь зачем, но мне плевать, я хочу целиком
Короче говоря, мне этого маленького кубика 32на32на32 не хватает для того чтобы уместить мои советские гигантские постройки. Сначала думал сделать аналогичный свой блок, но потом решил, что гораздо быстрее будет исправить это недоразумение в ванилле. Собственно, вся проблема заключается в том, что метод для хука то статичный, а в статичном нельзя вызвать суперметод readFromNBT. Ну и общем говоря, вставляя вот такой хук, я сталкиваюсь с проблемой, что тайл попросту не сохраняется.
Что я делаю не так? Как мне вызвать суперметод, без которого не хочет работать readFromNBT?
hohserg предложил мне просто взять и тело суперметода скопипастить себе в хук. Возникла проблема - джве переменных, которые там используются, приватные. Казалось бы, фигня, АТ наше все? А вот нет. После запуска АТ, когда я указал изменить ФСЕ модификаторы в классе TileEntity на публик, и билд сасесшфули, но почему то именно эти две переменных остались приватными.
P.S В ванилле эти глу.. developers the mainkraft зачем то генерят большую структуру по кускам. (лесной дом того перца например, или как там). Догадываюсь зачем, но мне плевать, я хочу целиком
Java:
@Hook(returnCondition = ReturnCondition.ALWAYS)
public static void readFromNBT(TileEntityStructure tyu,NBTTagCompound compound)
{
// tyu.readFromNBT(compound);
tyu.setName(compound.getString("name"));
// tyu.author = compound.getString("author");
tyu.setMetadata(compound.getString("metadata"));
int i = MathHelper.clamp(compound.getInteger("posX"), -64, 64);
int j = MathHelper.clamp(compound.getInteger("posY"), -64, 64);
int k = MathHelper.clamp(compound.getInteger("posZ"), -64, 64);
tyu.setPosition(new BlockPos(i, j, k));
int l = MathHelper.clamp(compound.getInteger("sizeX"), 0, 64);
int i1 = MathHelper.clamp(compound.getInteger("sizeY"), 0, 64);
int j1 = MathHelper.clamp(compound.getInteger("sizeZ"), 0, 64);
tyu.setSize(new BlockPos(l, i1, j1));
try
{
tyu.setRotation(Rotation.valueOf(compound.getString("rotation")));
}
catch (IllegalArgumentException var11)
{
tyu.setRotation(Rotation.NONE);
}
try
{
tyu.setMirror(Mirror.valueOf(compound.getString("mirror")));
}
catch (IllegalArgumentException var10)
{
tyu.setMirror(Mirror.NONE);
}
try
{
tyu.setMode(TileEntityStructure.Mode.valueOf(compound.getString("mode")));
}
catch (IllegalArgumentException var9)
{
tyu.setMode(TileEntityStructure.Mode.DATA);
}
// tyu.ignoreEntities = compound.getBoolean("ignoreEntities");
tyu.setPowered(compound.getBoolean("powered"));
tyu.setShowAir(compound.getBoolean("showair"));
tyu.setShowBoundingBox(compound.getBoolean("showboundingbox"));
if (compound.hasKey("integrity"))
{
tyu.setIntegrity(compound.getFloat("integrity"));
}
else
{
tyu.setIntegrity(1.0F);
}
tyu.setSeed(compound.getLong("seed"));
if (tyu.getWorld() != null)
{
BlockPos blockpos = tyu.getPos();
IBlockState iblockstate = tyu.getWorld().getBlockState(blockpos);
if (iblockstate.getBlock() == Blocks.STRUCTURE_BLOCK)
{
tyu.getWorld().setBlockState(blockpos, iblockstate.withProperty(BlockStructure.MODE, tyu.getMode()), 2);
}
}
}
Последнее редактирование: