• Гость, публикуйте свои сливы кода через Ресурсы!
    После публикации слива в Ресурсах в этом форуме будет автоматически создана тема для обсуждения.
Своё открытие Gui с Container'ом.

Своё открытие Gui с Container'ом.

timaxa007

Команда форума
Сообщения
4,927
Лучшие ответы
273
Симпатии
350
#1
timaxa007 добавил(а) новый ресурс:

Своё открытие Gui с Container'ом. - Своё открытие Gui с Container'ом.

Своё открытие Gui с Container'ом. Зачем? То что представляется через NetworkRegistry.INSTANCE.registerGuiHandler(#instanceMod, #IGuiHandler); оно больше подходит для блоков и TileEntity. А для Entity и Item, они не достаточно функциональны или даже жирны.
(github.com)...
Узнать больше об этом ресурсе...
 

timaxa007

Команда форума
Сообщения
4,927
Лучшие ответы
273
Симпатии
350
#2
timaxa007 обновил(а) ресурс Своё открытие Gui с Container'ом. новой записью:

getGui and getContainer

Можно ещё по другому написать в ProxyCommon и ProxyClient:
ProxyCommon:
public class ProxyCommon {

    //IGuiHandler

    private static Container getContainer(final int id, final EntityPlayer player) {
        return null;
    }

    private static Container getContainer(final int id, final EntityPlayer player, final Entity entity) {
        return null;
    }

    private static Container getContainer(final int id, final EntityPlayer player, final World world...
Узнать больше об этом обновлении...
 

Ivasik

Команда форума
Сообщения
2,275
Лучшие ответы
57
Симпатии
163
#3
Я может чего не вижу, но где в interact проверка на то, что сущность не мертва? Проверка на то, что player.getDistanceSqToEntity(this) <= 64? Да и чёт костыльное какое-то открытие гуи для энтити(или может я опять чё не доглядел). Ты же можешь сделать так в GuiHandler:
Java:
final SimpleEntity ent = (SimpleEntity) world.getEntityById(id);

// Интеракт может быть лишний, но это не точно xd
// И интеракт твой, с проверками, что я выше приложил.
// Хотя в том же контейнере canInteractWith будет достаточно их указать.
if (ent.interact(player) && ent instanceof EntityBullshit) {
    return new GuiBullshit(player, ent);
}
А и ещё не хватало бы добавить все классы которые используются да и код под спойлеры, а то неудобно читать код.
 

timaxa007

Команда форума
Сообщения
4,927
Лучшие ответы
273
Симпатии
350
#4
но где в interact проверка на то, что сущность не мертва?
Нету.
Сущность может умереть, пока ты в его инвентаре. И что у нас получается: сущность умерла, а дроп уронила, да из инвентаря можно взять - т.е. у нас получился дюп.
Так что, проверка стоит в контейнере:
Java:
    @Override
    public boolean canInteractWith(EntityPlayer player) {
        if (entity == null) return false;
        if (entity.isDead) return false;
        return entity.inventory.isUseableByPlayer(player);
    }
Да, Gui и Container не выкладывал.
Проверка на то, что player.getDistanceSqToEntity(this) <= 64?
Если надо, то пусть кому это надо, пусть ставят. Я просто не думал о расстоянии игрока до Entity, я думал чтобы можно было открыть инвентарь у своего Entity.
костыльное какое-то открытие гуи для энтити
Может быть, я точно не знаю. То что в голову когда-то влетело и было очень плохо (пока-что яркий пример старое открытие инвентаря предмета, через пакеты и кстати их тоже нужно будет исправить, либо удалить). Сейчас я знаю больше, но всё-же не всё, но всё-же - я наконец-то сделал, то что я когда-то хотел сделать.
И для меня это не кажется костыльно.
Ты же можешь сделать так в GuiHandler:
Ага, но мне показалось, что будет лучше сделать отдельными классами, разделив на клиентскую и серверную часть (пример в обновлении).
А и ещё не хватало бы добавить все классы которые используются
Это я сделал для Money версия 2b и она ещё разрабатывается. Но как будет свободное время, постараюсь выложить как отдельный мод, чтобы было легче копи-пастить.
Ок, потом исправлю. Мне казалось, что удобно смотреть на активный код, а пассивный под спойлер.
 

Ivasik

Команда форума
Сообщения
2,275
Лучшие ответы
57
Симпатии
163
#5
Java:
@Override
public boolean canInteractWith(EntityPlayer player) {
    return !entity.isDead && player.getDistanceSqToEntity(this) <= 64;
}
Так будет лучше, и нет необходимости использовать isUseableByPlayer, так как в большинстве случаев его делают тупо true и получается херово.

Прямое доказательство в InventoryBase который ты используешь в TradeContainer своего мода:
Java:
public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
    return true;
}
 
Последнее редактирование:

timaxa007

Команда форума
Сообщения
4,927
Лучшие ответы
273
Симпатии
350
#6
@Ivasik, кому надо, пусть ставят. Я пока-что полноценные задачи не ставил на подобное открытие. Цель у меня была, чтобы можно было открыть инвентарь у Entity, при этом не испытывать не соответствие работы контейнеров сервер<->клиент (по крайней мере я испытвал и не проверял так тщательно).
Но спасибо за замечания. (Но всё-же я буду делать проверку в контейнере.)
 

Ivasik

Команда форума
Сообщения
2,275
Лучшие ответы
57
Симпатии
163
#7

timaxa007

Команда форума
Сообщения
4,927
Лучшие ответы
273
Симпатии
350
#8
Оу, извиняюсь, я подумал ты про Entity. Всё правильно было, это я не правильно понял.
 

timaxa007

Команда форума
Сообщения
4,927
Лучшие ответы
273
Симпатии
350
#9

Ivasik

Команда форума
Сообщения
2,275
Лучшие ответы
57
Симпатии
163
#10
Хм, ты видео обновил? Если да, то там у моба ящика можно отключить передвижение и при ударе он будет стоять, а не отлетать.
 

timaxa007

Команда форума
Сообщения
4,927
Лучшие ответы
273
Симпатии
350
#11
Не обновил, а добавил 4 штуки. Три по каждой из категорий и ещё один общий на эти три категории. Ну пятый старое видео, я даже подписал под видео.
там у моба ящика можно отключить передвижение
Я специально это хотел показать, что это Entity, а не блок. Я даже предмет именно назвал как "Оживлятор".
при ударе он будет стоять, а не отлетать.
Пусть будет.
 

Ivasik

Команда форума
Сообщения
2,275
Лучшие ответы
57
Симпатии
163
#12
А ок)
 
Сверху