package de.robotricker.transportpipes.inventory; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; import de.robotricker.transportpipes.TransportPipes; import de.robotricker.transportpipes.config.LangConf; import de.robotricker.transportpipes.duct.pipe.ExtractionPipe; import de.robotricker.transportpipes.duct.pipe.filter.FilterMode; import de.robotricker.transportpipes.duct.pipe.filter.ItemData; import de.robotricker.transportpipes.duct.pipe.filter.ItemFilter; import de.robotricker.transportpipes.location.TPDirection; public class ExtractionPipeSettingsInventory extends DuctSettingsInventory { private int scrollValue; public ExtractionPipeSettingsInventory() { scrollValue = 0; } @Override public void create() { inv = Bukkit.createInventory(null, 3 * 9, LangConf.Key.DUCT_INVENTORY_TITLE.get(duct.getDuctType().getFormattedTypeName())); } @Override public void closeForAllPlayers(TransportPipes transportPipes) { save(null); super.closeForAllPlayers(transportPipes); } @Override public void populate() { ExtractionPipe pipe = (ExtractionPipe) duct; TPDirection extractDir = pipe.getExtractDirection(); ItemStack extractDirection = itemService.changeDisplayNameAndLoreConfig(new ItemStack(Material.TRIPWIRE_HOOK), LangConf.Key.DUCT_INVENTORY_EXTRACTIONPIPE_EXTRACTDIRECTION.getLines(extractDir != null ? extractDir.getDisplayName() : LangConf.Key.DIRECTIONS_NONE.get())); ItemStack extractCondition = itemService.changeDisplayNameAndLoreConfig(pipe.getExtractCondition().getDisplayItem(), LangConf.Key.DUCT_INVENTORY_EXTRACTIONPIPE_EXTRACTCONDITION.getLines(pipe.getExtractCondition().getDisplayName())); ItemStack extractAmount = itemService.changeDisplayNameAndLoreConfig(pipe.getExtractAmount().getDisplayItem(), LangConf.Key.DUCT_INVENTORY_EXTRACTIONPIPE_EXTRACTAMOUNT.getLines(pipe.getExtractAmount().getDisplayName())); ItemStack wool = itemService.changeDisplayNameAndLoreConfig(new ItemStack(Material.WHITE_WOOL), LangConf.Key.DUCT_INVENTORY_EXTRACTIONPIPE_FILTERTITLE.get(), LangConf.Key.DUCT_INVENTORY_FILTER_MODE_AND_STRICTNESS.getLines(pipe.getItemFilter().getFilterMode().getDisplayName(), pipe.getItemFilter().getFilterStrictness().getDisplayName())); ItemStack scrollLeft = itemService.changeDisplayName(itemService.createHeadItem("69b9a08d-4e89-4878-8be8-551caeacbf2a", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2ViZjkwNzQ5NGE5MzVlOTU1YmZjYWRhYjgxYmVhZmI5MGZiOWJlNDljNzAyNmJhOTdkNzk4ZDVmMWEyMyJ9fX0=", null), LangConf.Key.DUCT_INVENTORY_LEFTARROW.get()); ItemStack scrollRight = itemService.changeDisplayName(itemService.createHeadItem("15f49744-9b61-46af-b1c3-71c6261a0d0e", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ==", null), LangConf.Key.DUCT_INVENTORY_RIGHTARROW.get()); // basic settings for (int i = 0; i < 18; i++) { if (i == 2) { inv.setItem(i, extractDirection); } else if (i == 4) { inv.setItem(i, extractAmount); } else if (i == 6) { inv.setItem(i, extractCondition); } else { inv.setItem(i, itemService.createWildcardItem(Material.GRAY_STAINED_GLASS_PANE)); } } inv.setItem(18, wool); // filtering stuff if (pipe.getItemFilter().getFilterMode() == FilterMode.BLOCK_ALL) { for (int i = 1; i < 9; i++) { inv.setItem(18 + i, itemService.createBarrierItem()); } } else { inv.setItem(18 + 1, scrollLeft); inv.setItem(18 + 8, scrollRight); ItemData[] items = pipe.getItemFilter().getFilterItems(); int indexWithScrollValue = scrollValue; for (int i = 2; i < 8; i++) { if (items[indexWithScrollValue] != null) { inv.setItem(18 + i, items[indexWithScrollValue].toItemStack()); } else { inv.setItem(18 + i, null); } indexWithScrollValue++; } } } @Override protected boolean click(Player p, int rawSlot, ClickType ct) { ExtractionPipe pipe = (ExtractionPipe) duct; // clicked change extract direction if (rawSlot == 2) { save(p); pipe.updateExtractDirection(true); return true; } // clicked change extract amount if (rawSlot == 4) { save(p); pipe.setExtractAmount(pipe.getExtractAmount().next()); populate(); return true; } // clicked change extract condition if (rawSlot == 6) { save(p); pipe.setExtractCondition(pipe.getExtractCondition().next()); populate(); return true; } // clicked filtering mode wool if (rawSlot == 18) { if (ct == ClickType.LEFT || ct == ClickType.SHIFT_LEFT) { pipe.getItemFilter().setFilterMode(pipe.getItemFilter().getFilterMode().next()); } else if (ct == ClickType.RIGHT || ct == ClickType.SHIFT_RIGHT) { pipe.getItemFilter().setFilterStrictness(pipe.getItemFilter().getFilterStrictness().next()); } save(p); populate(); return true; } // clicked scroll left if (rawSlot == 19) { save(p); if (scrollValue > 0) { scrollValue--; } populate(); return true; } // clicked scroll right if (rawSlot == 26) { save(p); if (scrollValue < ItemFilter.MAX_ITEMS_PER_ROW - 6) { scrollValue++; } populate(); return true; } return false; } @Override public void save(Player p) { ExtractionPipe pipe = (ExtractionPipe) duct; ItemData[] items = pipe.getItemFilter().getFilterItems(); for (int i = 2; i < 8; i++) { ItemStack itemStack = inv.getItem(18 + i); if (itemService.isItemWildcardOrBarrier(itemStack)) { return; } if (itemStack != null && itemStack.getAmount() > 1) { ItemStack drop = itemStack.clone(); drop.setAmount(itemStack.getAmount() - 1); p.getWorld().dropItem(p.getLocation(), drop); itemStack.setAmount(1); } items[scrollValue + i - 2] = itemStack != null ? new ItemData(itemStack) : null; } } }