- Баллы
- 96
- Имя в Minecraft
- sqdFendy
Итак, возвращайся к теме по страницам инвентаря, я так и не понял как сделать, чтобы переходя на следующую страницу инвентаря там появлялись варпы другие, а предыдущие были на предыдущей странице.
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
package ru.leymooo.plName;
import java.util.HashMap;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.*********ventory.ItemStack;
import org.*********ventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import com.google.common.collect.Sets;
public class Main extends JavaPlugin implements Listener {
HashMap<Integer, PageInv> warps = new HashMap<Integer, PageInv>();
@Override
public void onEnable() {
//Создаем лист с варпами, или используем существующий.
Set<String> localWarpList = Sets.newConcurrentHashSet();
//Заполянем его.(Этот цикл тупо для теста.)
//Если ессентиалс даёт уже готовый список, то это можно пропустить.
for (int i = 0; i<240;i++) {
localWarpList.add(i+"");
}
int page = 1;
//Запускаем цикл до того пока наш список не очистится.
while (!localWarpList.isEmpty()) {
int maxItems = 54;
int limit = 0;
PageInv pageI = new PageInv(page);
//Добавляем предметы для перемешения по страницам. Слоты в сундуке начинаются с 0 до 53.
if (page == 1 && localWarpList.size() > 54) {
pageI.getInventory().setItem(53, getItemStackWithName("nextPage", Material.BARRIER));
} else if (page != 1 && localWarpList.size() > 53) {
pageI.getInventory().setItem(53, getItemStackWithName("nextPage", Material.BARRIER));
pageI.getInventory().setItem(45, getItemStackWithName("prevPage", Material.GRASS));
} else if (page != 1 && localWarpList.size() <= 53) {
pageI.getInventory().setItem(45, getItemStackWithName("prevPage", Material.GRASS));
}
//Заполняем гуи предметами.
for (String warp : localWarpList) {
if (limit == maxItems) {
continue;
}
if (pageI.getInventory().getItem(limit) == null) {
pageI.getInventory().setItem(limit, getItemStackWithName(warp, Material.GLASS));
localWarpList.remove(warp);
}
++limit;
}
//Кешируем гуи
warps.put(page, pageI);
++page;
}
Bukkit.getPluginManager().registerEvents(this, this);
}
private ItemStack getItemStackWithName(String name, Material mat) {
ItemStack it = new ItemStack(mat);
ItemMeta meta = it.getItemMeta();
meta.setDisplayName(name);
it.setItemMeta(meta);
return it;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
//Открываем игроку первую страницу
((Player)sender).openInventory(warps.get(1).getInventory());
return true;
}
@EventHandler
public void onClick(InventoryClickEvent e) {
//чекаем что это наш инвентарь
if (e.getInventory().getHolder() instanceof PageInv) {
PageInv inv = (PageInv) e.getInventory().getHolder();
e.setCancelled(true);
//перемешяем по страницам
if (e.getCurrentItem() != null && e.getCurrentItem().getType() == Material.BARRIER) {
e.getWhoClicked().openInventory(warps.get((inv.getPage()+1)).getInventory());
return;
}
if (e.getCurrentItem() != null && e.getCurrentItem().getType() == Material.GRASS) {
e.getWhoClicked().openInventory(warps.get((inv.getPage()-1)).getInventory());
return;
}
//TODO: Teleport to warp
}
}
}
package ru.leymooo.plName;
import org.bukkit.Bukkit;
import org.*********ventory.Inventory;
import org.*********ventory.InventoryHolder;
public class PageInv implements InventoryHolder {
private int page;
private Inventory inv;
public PageInv(int page) {
this.inv = Bukkit.createInventory(this, 54);
this.page = page;
}
@Override
public Inventory getInventory() {
return this.inv;
}
public int getPage() {
return this.page;
}
}
Благодарю.Както так:
Main
PageInv:Java:package ru.leymooo.plName; import java.util.HashMap; import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.*********ventory.ItemStack; import org.*********ventory.meta.ItemMeta; import org.bukkit.plugin.java.JavaPlugin; import com.google.common.collect.Sets; public class Main extends JavaPlugin implements Listener { HashMap<Integer, PageInv> warps = new HashMap<Integer, PageInv>(); @Override public void onEnable() { //Создаем лист с варпами, или используем существующий. Set<String> localWarpList = Sets.newConcurrentHashSet(); //Заполянем его.(Этот цикл тупо для теста.) //Если ессентиалс даёт уже готовый список, то это можно пропустить. for (int i = 0; i<240;i++) { localWarpList.add(i+""); } int page = 1; //Запускаем цикл до того пока наш список не очистится. while (!localWarpList.isEmpty()) { int maxItems = 54; int limit = 0; PageInv pageI = new PageInv(page); //Добавляем предметы для перемешения по страницам. Слоты в сундуке начинаются с 0 до 53. if (page == 1 && localWarpList.size() > 54) { pageI.getInventory().setItem(53, getItemStackWithName("nextPage", Material.BARRIER)); } else if (page != 1 && localWarpList.size() > 53) { pageI.getInventory().setItem(53, getItemStackWithName("nextPage", Material.BARRIER)); pageI.getInventory().setItem(45, getItemStackWithName("prevPage", Material.GRASS)); } else if (page != 1 && localWarpList.size() <= 53) { pageI.getInventory().setItem(45, getItemStackWithName("prevPage", Material.GRASS)); } //Заполняем гуи предметами. for (String warp : localWarpList) { if (limit == maxItems) { continue; } if (pageI.getInventory().getItem(limit) == null) { pageI.getInventory().setItem(limit, getItemStackWithName(warp, Material.GLASS)); localWarpList.remove(warp); } ++limit; } //Кешируем гуи warps.put(page, pageI); ++page; } Bukkit.getPluginManager().registerEvents(this, this); } private ItemStack getItemStackWithName(String name, Material mat) { ItemStack it = new ItemStack(mat); ItemMeta meta = it.getItemMeta(); meta.setDisplayName(name); it.setItemMeta(meta); return it; } @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { //Открываем игроку первую страницу ((Player)sender).openInventory(warps.get(1).getInventory()); return true; } @EventHandler public void onClick(InventoryClickEvent e) { //чекаем что это наш инвентарь if (e.getInventory().getHolder() instanceof PageInv) { PageInv inv = (PageInv) e.getInventory().getHolder(); e.setCancelled(true); //перемешяем по страницам if (e.getCurrentItem() != null && e.getCurrentItem().getType() == Material.BARRIER) { e.getWhoClicked().openInventory(warps.get((inv.getPage()+1)).getInventory()); return; } if (e.getCurrentItem() != null && e.getCurrentItem().getType() == Material.GRASS) { e.getWhoClicked().openInventory(warps.get((inv.getPage()-1)).getInventory()); return; } //TODO: Teleport to warp } } }
Java:package ru.leymooo.plName; import org.bukkit.Bukkit; import org.*********ventory.Inventory; import org.*********ventory.InventoryHolder; public class PageInv implements InventoryHolder { private int page; private Inventory inv; public PageInv(int page) { this.inv = Bukkit.createInventory(this, 54); this.page = page; } @Override public Inventory getInventory() { return this.inv; } public int getPage() { return this.page; } }