Рендер дубль 2

Версия Minecraft
1.12.2

will0376

Токсичная личность
2,072
55
584
Разобрался с рендером блока в блоке. но как мне закрепить всё это дело за своим блоком?(т.е. постоянный рендер, даже если взгляд на другой блок падает...)
пытался сделать как тут: hohserg1/AdvancedAuromancy
так мир к worldServer не кастуется(пробовал на сервере - брекпоинт не отработал совсем.)
а как своими пакетами сделать - не допру никак..
при каждом заходе в мир/на сервер приходится прокликивать блоки,чтоб данные подгрузились с сервера =\
 
Последнее редактирование:

will0376

Токсичная личность
2,072
55
584
два этих метода:
Так. ладно. а как мне отсылать в таком случае sendUpdates() в момент подгрузки чанков?
ps. переопределение не дало ровным счетом нифига :\
После захода в мир:
1562242679526.png
А вот после захода в гуи блока - он появляется и в рендере =p
 
Последнее редактирование:
7,099
324
1,510
Я же скидывал ссыль на код для синхронизации тайла
~~~
Scala:
def sendUpdates(): Unit = {
    val packet = getUpdatePacket
    if (packet != null && world.isInstanceOf[WorldServer]) {
        val chunk = world.asInstanceOf[WorldServer].getPlayerChunkMap.getEntry(pos.getX >> 4, pos.getZ >> 4)
        if (chunk != null) chunk.sendPacket(packet)
    }
}
sendUpdates надо вызывать каждый раз, когда изменяется инвентарь.
Например, если юзаешь инвентарь капабилити, то можно в ItemStackHandler переопределить onContentsChanged и и вызывать там
 

will0376

Токсичная личность
2,072
55
584
когда изменяется инвентарь
так мне надо в момент входа в мир(или рендера... или клонирования игрока...)... вообщем чтоб он БЕЗ ЗАХОДА в гуи блока рендерил...
1562242981967.png1562243001535.png1562243013294.png
 
7,099
324
1,510
Обновил ответ.

Покажи, какой инвентарь ты юзаешь в тайле
~~~
так мне надо в момент входа в мир(или рендера... или клонирования игрока...)... вообщем чтоб он БЕЗ ЗАХОДА в гуи блока рендерил...
При заходе в мир ведь инвентарь изменяется(потому что читается из нбт стаки и сетаются в него)
 

will0376

Токсичная личность
2,072
55
584
инвентарь ты юзаешь в тайле
Java:
package ru.will0376.money.client.block;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.server.management.PlayerChunkMapEntry;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.WorldServer;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.ItemStackHandler;

import java.util.ArrayList;

public class TestContainerTileEntity extends TileEntity {
    public static final int SIZE = 56;
    public ArrayList<String> players = new ArrayList<>();
    public boolean infinity,FirstOpen;
    public String Count,Price,Owner,Color;
    public int Sales;
    public ItemStackHandler itemStackHandler = new ItemStackHandler(SIZE)
    {
        @Override
        protected void onContentsChanged(int slot) {
            TestContainerTileEntity.this.markDirty();
            if(slot == 0) {
                sendUpdates();
            }
        }
    };

    @Override
    public void readFromNBT(NBTTagCompound compound) {
        super.readFromNBT(compound);
        if (compound.hasKey("items"))
            itemStackHandler.deserializeNBT((NBTTagCompound) compound.getTag("items"));
        if(compound.hasKey("players"))
            players = deserializePlayersNBT(compound);
        if(compound.hasKey("Infinity"))
            infinity = compound.getBoolean("Infinity");
        if(compound.hasKey("FirstOpen"))
            FirstOpen = compound.getBoolean("FirstOpen");
        if(compound.hasKey("Owner"))
            Owner = compound.getString("Owner");
        if(compound.hasKey("Count"))
            Count = compound.getString("Count");
        if(compound.hasKey("Price"))
            Price = compound.getString("Price");
        if(compound.hasKey("Sales"))
            Sales = compound.getInteger("Sales");
        if(compound.hasKey("Color"))
            Color = compound.getString("Color");

    }

    public ArrayList deserializePlayersNBT(NBTTagCompound nbt)
    {
        ArrayList<String> tmp = new ArrayList<>();
        NBTTagList tagList = nbt.getTagList("Players", 8);
        for(int i = 0;i < tagList.tagCount();i++){
            NBTTagCompound itemTags = tagList.getCompoundTagAt(i);
            String player = itemTags.getString("Player");
            tmp.add(player);
        }
        return tmp;
    }
    private NBTTagCompound playersToNbt(){
        NBTTagList nbtTagList = new NBTTagList();
        for (int i = 0; i < players.size(); i++)
        {
                NBTTagCompound player = new NBTTagCompound();
                player.setString("Player", players.get(i));
                nbtTagList.appendTag(player);
        }
        NBTTagCompound nbt = new NBTTagCompound();
        nbt.setTag("Players", nbtTagList);
        nbt.setInteger("Size", players.size());
        return nbt;

    }
    @Override
    public NBTTagCompound writeToNBT(NBTTagCompound compound) {

        super.writeToNBT(compound);
        compound.setTag("items", itemStackHandler.serializeNBT());
        compound.setTag("players", playersToNbt());
        compound.setBoolean("Infinity",infinity);
        compound.setBoolean("FirstOpen",FirstOpen);
        if(Owner != null)
            compound.setString("Owner",Owner);
        if(Count != null)
        compound.setString("Count",Count);
        if(Price != null)
        compound.setString("Price",Price);
        if(Color != null)
        compound.setString("Color",Color);
        compound.setInteger("Sales",Sales);
        return compound;
    }

    public boolean canInteractWith(EntityPlayer playerIn) {
        return !isInvalid() && playerIn.getDistanceSq(pos.add(0.5D, 0.5D, 0.5D)) <= 64D;

    }

    @Override
    public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
        if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
            return true;
        }
        return super.hasCapability(capability, facing);
    }

    @Override
    public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
        if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
            return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(itemStackHandler);
        }
        return super.getCapability(capability, facing);
    }
    @Override
    public void onDataPacket(net.minecraft.network.NetworkManager net, net.minecraft.network.play.server.SPacketUpdateTileEntity pkt) {
        readFromNBT(pkt.getNbtCompound());
    }
    @Override
    public SPacketUpdateTileEntity getUpdatePacket() {
        NBTTagCompound tagCompound = new NBTTagCompound();
        writeToNBT(tagCompound);
        return     new SPacketUpdateTileEntity(pos, 3, tagCompound);
    }
    public void sendUpdates(){
        SPacketUpdateTileEntity packet = getUpdatePacket();
        if (packet != null && world instanceof WorldServer) {
            PlayerChunkMapEntry chunk = ((WorldServer)getWorld()).getPlayerChunkMap().getEntry(pos.getX() >> 4, pos.getZ() >> 4);
            if (chunk != null) chunk.sendPacket(packet);
        }
    }
}
зы.
1562243121826.png нулевой слот)
 

tox1cozZ

aka Agravaine
8,455
598
2,892
7,099
324
1,510
Сверху