Помогите Разные инвентари в мирах.

IcedwinterZ

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
IcedwinterZ
Как сделать разные инвентари в мирах, у меня допустим есть свой мир (совсем свой, это не ад, не мир, и не энд) я хочу что-бы инвентари из World и из моего мира не пересекались, и сохранялись, каждый в своем мире. Как такое сделать?
 
совсем свой, это не ад, не мир, и не энд
Ванильный мир обязан иметь базу либо overworld, либо nether, либо end.

А так, слушай PlayerChangedWorldEvent, забирай и очищай инвентарь, подгружай игроку свой инвентарь.
Если хочешь per-world inventory, тебе придётся либо отказаться от ванильного инвентаря и костылять свой, либо переписывать ваниль.
 
Ванильный мир обязан иметь базу либо overworld, либо nether, либо end.

А так, слушай PlayerChangedWorldEvent, забирай и очищай инвентарь, подгружай игроку свой инвентарь.
Если хочешь per-world inventory, тебе придётся либо отказаться от ванильного инвентаря и костылять свой, либо переписывать ваниль.
Т.Е я не смогу сделать разыне инвентари в World и в своем мире... Мой мир это кстати- копия World
 
попробуй вот это (хэш):
Java:
public class example {
   
    static HashMap<String, ItemStack[]> items = new HashMap<String, ItemStack[]>();
    static HashMap<String, ItemStack[]> armor = new HashMap<String, ItemStack[]>();
   
    public ItemStack[] saveInventory(final Player p) {
        return items.put(p.getName(), p.getInventory().getContents());
    }
    public void loadInventory(final Player p) {
        p.getInventory().setContents(items.get(p.getName()));
    }
    public ItemStack[] saveArmor(final Player p) {
        return armor.put(p.getName(), p.getInventory().getArmorContents());
    }
    public void loadArmor(final Player p) {
        p.getInventory().setArmorContents(armor.get(p.getName()));
    }
}
 
попробуй вот это (хэш):
Java:
public class example {
  
    static HashMap<String, ItemStack[]> items = new HashMap<String, ItemStack[]>();
    static HashMap<String, ItemStack[]> armor = new HashMap<String, ItemStack[]>();
  
    public ItemStack[] saveInventory(final Player p) {
        return items.put(p.getName(), p.getInventory().getContents());
    }
    public void loadInventory(final Player p) {
        p.getInventory().setContents(items.get(p.getName()));
    }
    public ItemStack[] saveArmor(final Player p) {
        return armor.put(p.getName(), p.getInventory().getArmorContents());
    }
    public void loadArmor(final Player p) {
        p.getInventory().setArmorContents(armor.get(p.getName()));
    }
}
А лучше по UUID ХэшМап или по нику??
 
Т.Е я не смогу сделать разыне инвентари в World и в своем мире...
слушай PlayerChangedWorldEvent, забирай и очищай инвентарь, подгружай игроку свой инвентарь.
слушай PlayerChangedWorldEvent, забирай и очищай инвентарь, подгружай игроку свой инвентарь.
 
Dereku, а в PlayerChangedWorldEvent есть только метод, для получения мира, куда он телепортнулся,
а как получить мир, откуда он телепортнулся?
Кто-нибудь знает, как получить кординаты игрока, до выполнение этого эвэнта...?
 
Dereku, а в PlayerChangedWorldEvent есть только метод, для получения мира, куда он телепортнулся,
а как получить мир, откуда он телепортнулся?
Java:
package org.bukkit.event.player;

import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;

/**
 * Called when a player switches to another world.
 */
public class PlayerChangedWorldEvent extends PlayerEvent {
    private static final HandlerList handlers = new HandlerList();
    private final World from;

    public PlayerChangedWorldEvent(final Player player, final World from) {
        super(player);
        this.from = from;
    }

    /**
     * Gets the world the player is switching from.
     *
     * @return  player's previous world
     */
    public World getFrom() {
        return from;
    }

    @Override
    public HandlerList getHandlers() {
        return handlers;
    }

    public static HandlerList getHandlerList() {
        return handlers;
    }
}

Так же можно слушать PlayerTeleportEvent.
 
попробуй вот это (хэш):
Java:
public class example {

    static HashMap<String, ItemStack[]> items = new HashMap<String, ItemStack[]>();
    static HashMap<String, ItemStack[]> armor = new HashMap<String, ItemStack[]>();

    public ItemStack[] saveInventory(final Player p) {
        return items.put(p.getName(), p.getInventory().getContents());
    }
    public void loadInventory(final Player p) {
        p.getInventory().setContents(items.get(p.getName()));
    }
    public ItemStack[] saveArmor(final Player p) {
        return armor.put(p.getName(), p.getInventory().getArmorContents());
    }
    public void loadArmor(final Player p) {
        p.getInventory().setArmorContents(armor.get(p.getName()));
    }
}
Только не забывайте, что итемстак не серилизует кастомные теги в файл. Придется юзать крафтитемстак нмс копи, потом сохранять нбт.
 
bukkit не знает ничего о модах. Совсем.
Тут проблема не в том что он не знает модов, а в том что не дает работать напрямую с nbt. В этом и есть главный касяк ведроапи. За все время даже не смогли добавить в апи атрибут модификаторы, они есть в ваниле. В спайготе добавили Unbreakable, но на этом все и закончилось.
 
Назад
Верх