Мультиюзание "прибора"

svk

1,185
3
Как запретить второму игроку влезть в гуи, если первый игрок уже в нём?
 
Да вроде как элементарно, в коде ванильного сундука видел. В событие на открытие приписать проверку, если Х = 0, то открыть ему ГУИ и Х++, если Х <> 0, то не открывать.
 
При закрытии ведь нульцевать надо? А если игрока выкинет?
 
А где эта Х должна находится? В тайле?
И где это "событие"?
 
А ты полистай ванильные сурсы.
Тебя головой думать вообще не учили?
ЗЫ. Загляни под спойлер, если не осилишь сам.
kiss_24kb.1441111889.png
 
svk написал(а):
Код:
public class ContainerYour extends Container {

private InventoryYour inv;

public ContainerYour(EntityPlayer player, InventoryYour inventoryYour) {
inv = inventoryYour;
inv.openInventory();
}

@Override
public void onContainerClosed(EntityPlayer player) {
super.onContainerClosed(player);
inv.closeInventory();
}

}

Код:
public class InventoryYour implements IInventory {//Возможно тут у тебя будет "extends TileEntity"

/** The number of players currently using this */
public int numPlayersUsing;

public InventoryYour() {
numPlayersUsing = 0;
}

public boolean isPlayersUsing() {
return numPlayersUsing > 0;
}

@Override
public void openInventory() {
++numPlayersUsing;
}

@Override
public void closeInventory() {
--numPlayersUsing;
}

}
Это примерный код. Думаю сам додумаешься как сделать у себя.
 
timaxa007 написал(а):
svk написал(а):
Код:
public class ContainerYour extends Container {

private InventoryYour inv;

public ContainerYour(EntityPlayer player, InventoryYour inventoryYour) {
inv = inventoryYour;
inv.openInventory();
}

@Override
public void onContainerClosed(EntityPlayer player) {
super.onContainerClosed(player);
inv.closeInventory();
}

}

Код:
public class InventoryYour implements IInventory {//Возможно тут у тебя будет "extends TileEntity"

/** The number of players currently using this */
public int numPlayersUsing;

public InventoryYour() {
numPlayersUsing = 0;
}

public boolean isPlayersUsing() {
return numPlayersUsing > 0;
}

@Override
public void openInventory() {
++numPlayersUsing;
}

@Override
public void closeInventory() {
--numPlayersUsing;
}

}
Это примерный код. Думаю сам додумаешься как сделать у себя.
А как и где проверять?
isPlayersUsing()

Как можно проверить из onBlockActiveted или надо где-то в другом месте?
 
Как-то так:
Код:
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
    TileEntity te = world.getTileEntity(x, y, z);

    if (player.isSneaking()) return false;

    if (te != null && te instanceof TileEntityYour) {
        TileEntityYour te_your = (TileEntityYour)te;
        if (!te_your.isPlayersUsing()) {
            player.openGui(...);
            return true;
        } else {
            player.addChatMessage(new ChatComponentText("Этот блок занят."));
            return false;
        }
    }

    return super.onBlockActivated(world, x, y, z, player, side, hitX, hitY, hitZ);
}
 
Назад
Сверху