use of dev.rosewood.guiframework.gui.screen.GuiScreen in project RoseStacker by Rosewood-Development.
the class StackedSpawnerGui method buildGui.
/**
* Builds the GUI from scratch
*/
private void buildGui() {
this.guiContainer = GuiFactory.createContainer().setTickRate(Setting.SPAWNER_GUI_TICK_UPDATE_RATE.getInt());
SpawnerStackSettings stackSettings = this.stackedSpawner.getStackSettings();
GuiScreen mainScreen = GuiFactory.createScreen(this.guiContainer, GuiSize.ROWS_THREE).setTitle(this.localeManager.getLocaleMessage("gui-stacked-spawner-title", StringPlaceholders.single("name", stackSettings.getDisplayName()))).addButtonAt(11, GuiFactory.createButton()).addButtonAt(13, GuiFactory.createButton()).addButtonAt(15, GuiFactory.createButton());
List<Integer> fillerSlots = IntStream.range(0, GuiSize.ROWS_THREE.getNumSlots()).boxed().collect(Collectors.toList());
fillerSlots.removeAll(Arrays.asList(4, 7, 8, 9, 11, 13, 15, 17, 18, 19));
Material filler = GuiHelper.parseMaterial(Setting.SPAWNER_GUI_BORDER_MATERIAL.getString());
Material corner = GuiHelper.parseMaterial(Setting.SPAWNER_GUI_BORDER_CORNER_MATERIAL.getString());
Material accent = GuiHelper.parseMaterial(Setting.SPAWNER_GUI_BORDER_ACCENT_MATERIAL.getString());
Material info = GuiHelper.parseMaterial(Setting.SPAWNER_GUI_SPAWNER_STATS_MATERIAL.getString());
Material spawner = GuiHelper.parseMaterial(Setting.SPAWNER_GUI_CENTRAL_MATERIAL.getString());
Material conditionsValid = GuiHelper.parseMaterial(Setting.SPAWNER_GUI_VALID_SPAWN_CONDITIONS_MATERIAL.getString());
Material conditionsInvalid = GuiHelper.parseMaterial(Setting.SPAWNER_GUI_INVALID_SPAWN_CONDITIONS_MATERIAL.getString());
ItemStack fillerItem = new ItemStack(filler);
ItemMeta fillerItemMeta = fillerItem.getItemMeta();
if (fillerItemMeta != null) {
fillerItemMeta.setDisplayName(" ");
fillerItemMeta.addItemFlags(ItemFlag.values());
fillerItem.setItemMeta(fillerItemMeta);
}
for (int slot : fillerSlots) mainScreen.addItemStackAt(slot, fillerItem);
ItemStack cornerItem = fillerItem.clone();
cornerItem.setType(corner);
for (int slot : Arrays.asList(8, 18)) mainScreen.addItemStackAt(slot, cornerItem);
ItemStack accentItem = fillerItem.clone();
accentItem.setType(accent);
for (int slot : Arrays.asList(7, 9, 17, 19)) mainScreen.addItemStackAt(slot, accentItem);
ItemStack skull = RoseStacker.getInstance().getManager(StackSettingManager.class).getEntityStackSettings(stackSettings.getEntityType()).getEntityTypeData().getSkullItem();
ItemMeta skullMeta = skull.getItemMeta();
if (skullMeta != null) {
String displayString;
if (this.stackedSpawner.getStackSize() == 1 && !Setting.SPAWNER_DISPLAY_TAGS_SINGLE_AMOUNT.getBoolean()) {
displayString = RoseStacker.getInstance().getManager(LocaleManager.class).getLocaleMessage("spawner-stack-display-single", StringPlaceholders.builder("amount", this.stackedSpawner.getStackSize()).addPlaceholder("name", this.stackedSpawner.getStackSettings().getDisplayName()).build());
} else {
displayString = RoseStacker.getInstance().getManager(LocaleManager.class).getLocaleMessage("spawner-stack-display", StringPlaceholders.builder("amount", this.stackedSpawner.getStackSize()).addPlaceholder("name", this.stackedSpawner.getStackSettings().getDisplayName()).build());
}
skullMeta.setDisplayName(displayString);
skull.setItemMeta(skullMeta);
}
mainScreen.addButtonAt(4, GuiFactory.createButton(skull));
mainScreen.addButtonAt(11, GuiFactory.createButton().setIcon(info).setName(this.getString("stats")).setLoreSupplier(() -> {
List<GuiString> lore = new ArrayList<>();
StackedSpawnerTile spawnerTile = this.stackedSpawner.getSpawnerTile();
lore.add(this.getString("min-spawn-delay", StringPlaceholders.single("delay", spawnerTile.getMinSpawnDelay())));
lore.add(this.getString("max-spawn-delay", StringPlaceholders.single("delay", spawnerTile.getMaxSpawnDelay())));
lore.add(this.getString("disabled-mob-ai", StringPlaceholders.single("disabled", String.valueOf(stackSettings.isMobAIDisabled()))));
int range = stackSettings.getEntitySearchRange() == -1 ? spawnerTile.getSpawnRange() : stackSettings.getEntitySearchRange();
lore.add(this.getString("entity-search-range", StringPlaceholders.single("range", range)));
lore.add(this.getString("player-activation-range", StringPlaceholders.single("range", spawnerTile.getRequiredPlayerRange())));
lore.add(this.getString("spawn-range", StringPlaceholders.single("range", spawnerTile.getSpawnRange())));
if (stackSettings.getSpawnCountStackSizeMultiplier() != -1) {
if (Setting.SPAWNER_SPAWN_COUNT_STACK_SIZE_RANDOMIZED.getBoolean()) {
lore.add(this.getString("min-spawn-amount", StringPlaceholders.single("amount", this.stackedSpawner.getStackSize())));
lore.add(this.getString("max-spawn-amount", StringPlaceholders.single("amount", spawnerTile.getSpawnCount())));
} else {
lore.add(this.getString("spawn-amount", StringPlaceholders.single("amount", spawnerTile.getSpawnCount())));
}
} else {
lore.add(this.getString("min-spawn-amount", StringPlaceholders.single("amount", 1)));
lore.add(this.getString("max-spawn-amount", StringPlaceholders.single("amount", spawnerTile.getSpawnCount())));
}
lore.add(GuiFactory.createString());
lore.add(this.getString("spawn-conditions"));
List<ConditionTag> spawnConditions = stackSettings.getSpawnRequirements();
for (ConditionTag conditionTag : spawnConditions) for (String line : conditionTag.getInfoMessage(this.localeManager)) lore.add(GuiFactory.createString(line));
return lore;
}));
mainScreen.addButtonAt(13, GuiFactory.createButton().setIcon(spawner).setNameSupplier(() -> this.getString("time-until-next-spawn", StringPlaceholders.single("time", this.stackedSpawner.getSpawnerTile().getDelay() + 1))).setLoreSupplier(() -> Collections.singletonList(this.getString("total-spawns", StringPlaceholders.single("amount", StackerUtils.formatNumber(PersistentDataUtils.getTotalSpawnCount(this.stackedSpawner.getSpawnerTile())))))));
mainScreen.addButtonAt(15, GuiFactory.createButton().setIconSupplier(() -> GuiFactory.createIcon(this.stackedSpawner.getLastInvalidConditions().isEmpty() ? conditionsValid : conditionsInvalid)).setNameSupplier(() -> {
if (this.stackedSpawner.getLastInvalidConditions().isEmpty()) {
return this.getString("valid-spawn-conditions");
} else {
return this.getString("invalid-spawn-conditions");
}
}).setLoreSupplier(() -> {
List<Class<? extends ConditionTag>> invalidConditions = this.stackedSpawner.getLastInvalidConditions();
if (invalidConditions.isEmpty())
return Collections.singletonList(this.getString("entities-can-spawn"));
List<GuiString> lore = new ArrayList<>();
lore.add(this.getString("conditions-preventing-spawns"));
for (Class<? extends ConditionTag> conditionTagClass : invalidConditions) lore.add(GuiFactory.createString(ConditionTags.getErrorMessage(conditionTagClass, this.localeManager)));
return lore;
}));
this.guiContainer.addScreen(mainScreen);
this.guiFramework.getGuiManager().registerGui(this.guiContainer);
}
use of dev.rosewood.guiframework.gui.screen.GuiScreen in project RoseStacker by Rosewood-Development.
the class StackedBlockGui method buildGui.
/**
* Builds the GUI from scratch
*/
private void buildGui() {
this.guiContainer = GuiFactory.createContainer();
List<Integer> paginatedSlots = new ArrayList<>();
for (int i = 10; i <= 16; i++) paginatedSlots.add(i);
for (int i = 19; i <= 25; i++) paginatedSlots.add(i);
for (int i = 28; i <= 34; i++) paginatedSlots.add(i);
for (int i = 37; i <= 43; i++) paginatedSlots.add(i);
List<Integer> borderSlots = new ArrayList<>();
for (int i = 0; i <= 8; i++) borderSlots.add(i);
for (int i = 9; i <= 36; i += 9) borderSlots.add(i);
for (int i = 17; i <= 44; i += 9) borderSlots.add(i);
for (int i = 46; i <= 52; i += 2) borderSlots.add(i);
borderSlots.addAll(Arrays.asList(45, 53));
ItemStack borderItem = new ItemStack(GuiHelper.parseMaterial(Setting.BLOCK_GUI_BORDER_MATERIAL.getString()));
ItemMeta itemMeta = borderItem.getItemMeta();
if (itemMeta != null) {
itemMeta.setDisplayName(" ");
itemMeta.addItemFlags(ItemFlag.values());
borderItem.setItemMeta(itemMeta);
}
List<Integer> destroyBorderSlots = new ArrayList<>();
for (int i = 0; i <= 26; i++) destroyBorderSlots.add(i);
destroyBorderSlots.removeAll(Arrays.asList(12, 14));
GuiScreenSection editableSection = GuiFactory.createScreenSection(paginatedSlots);
LocaleManager localeManager = this.rosePlugin.getManager(LocaleManager.class);
BlockStackSettings stackSettings = this.stackedBlock.getStackSettings();
GuiStringHelper pageBackString = new GuiStringHelper(localeManager.getGuiLocaleMessage("gui-stacked-block-page-back", StringPlaceholders.empty()));
GuiStringHelper destroyString = new GuiStringHelper(localeManager.getGuiLocaleMessage("gui-stacked-block-destroy", StringPlaceholders.empty()));
GuiStringHelper pageForwardString = new GuiStringHelper(localeManager.getGuiLocaleMessage("gui-stacked-block-page-forward", StringPlaceholders.empty()));
GuiStringHelper confirmDestroyString = new GuiStringHelper(localeManager.getGuiLocaleMessage("gui-stacked-block-destroy-confirm", StringPlaceholders.empty()));
GuiStringHelper confirmCancelString = new GuiStringHelper(localeManager.getGuiLocaleMessage("gui-stacked-block-destroy-cancel", StringPlaceholders.empty()));
List<ItemStack> stackItems = GuiUtil.getMaterialAmountAsItemStacks(this.stackedBlock.getBlock().getType(), this.stackedBlock.getStackSize());
int pages = (int) Math.ceil((double) stackItems.size() / paginatedSlots.size()) + 1;
while (stackItems.size() < pages * paginatedSlots.size()) stackItems.add(new ItemStack(Material.AIR));
GuiScreen mainScreen = GuiFactory.createScreen(this.guiContainer, GuiSize.ROWS_SIX).setTitle(localeManager.getLocaleMessage("gui-stacked-block-title", StringPlaceholders.single("name", stackSettings.getDisplayName()))).setEditableSection(editableSection, stackItems, this::updateStackedBlock).setEditFilters(GuiFactory.createScreenEditFilters().setWhitelist(this.stackedBlock.getBlock().getType()).setAllowModified(false)).addButtonAt(47, GuiFactory.createButton().setIcon(Material.PAPER).setName(pageBackString.getName()).setLore(pageBackString.getLore()).setClickAction(event -> ClickAction.PAGE_BACKWARDS).setFlags(GuiButtonFlag.HIDE_IF_FIRST_PAGE).setHiddenReplacement(borderItem)).addButtonAt(49, GuiFactory.createButton().setIcon(Material.BARRIER).setName(destroyString.getName()).setLore(destroyString.getLore()).setClickAction(event -> ClickAction.TRANSITION_FORWARDS)).addButtonAt(51, GuiFactory.createButton().setIcon(Material.PAPER).setName(pageForwardString.getName()).setLore(pageForwardString.getLore()).setClickAction(event -> ClickAction.PAGE_FORWARDS).setFlags(GuiButtonFlag.HIDE_IF_LAST_PAGE).setHiddenReplacement(borderItem));
for (int slot : borderSlots) mainScreen.addItemStackAt(slot, borderItem);
GuiScreen confirmScreen = GuiFactory.createScreen(this.guiContainer, GuiSize.ROWS_THREE).setTitle(localeManager.getLocaleMessage("gui-stacked-block-destroy-title", StringPlaceholders.single("name", stackSettings.getDisplayName()))).addButtonAt(12, GuiFactory.createButton().setIcon(Material.EMERALD_BLOCK).setName(confirmDestroyString.getName()).setLore(confirmDestroyString.getLore()).setClickAction(event -> {
this.destroyStackedBlock((Player) event.getWhoClicked());
return ClickAction.NOTHING;
})).addButtonAt(14, GuiFactory.createButton().setIcon(Material.REDSTONE_BLOCK).setName(confirmCancelString.getName()).setLore(confirmCancelString.getLore()).setClickAction(event -> ClickAction.TRANSITION_BACKWARDS));
for (int slot : destroyBorderSlots) confirmScreen.addItemStackAt(slot, borderItem);
this.guiContainer.addScreen(mainScreen);
this.guiContainer.addScreen(confirmScreen);
this.guiFramework.getGuiManager().registerGui(this.guiContainer);
}
Aggregations