mirror of
https://github.com/BentoBoxWorld/Challenges.git
synced 2024-12-30 12:57:52 +01:00
Implement ability to select multiple Entities and Blocks in SelectBlockGUI and SelectEntityGUI. (#121)
Fix issue with unsplitted text in ManageBlocksGUI and ManageEntitiesGUI. (#121)
This commit is contained in:
parent
413429a091
commit
c3f93fd797
@ -111,6 +111,7 @@ public class ManageBlocksGUI extends CommonGUI
|
|||||||
*/
|
*/
|
||||||
private PanelItem createButton(Button button)
|
private PanelItem createButton(Button button)
|
||||||
{
|
{
|
||||||
|
int lineLength = this.addon.getChallengesSettings().getLoreLineLength();
|
||||||
PanelItemBuilder builder = new PanelItemBuilder();
|
PanelItemBuilder builder = new PanelItemBuilder();
|
||||||
|
|
||||||
switch (button)
|
switch (button)
|
||||||
@ -120,11 +121,13 @@ public class ManageBlocksGUI extends CommonGUI
|
|||||||
builder.icon(Material.BUCKET);
|
builder.icon(Material.BUCKET);
|
||||||
builder.clickHandler((panel, user1, clickType, slot) -> {
|
builder.clickHandler((panel, user1, clickType, slot) -> {
|
||||||
|
|
||||||
new SelectBlocksGUI(this.user, new HashSet<>(this.materialList), (status, material) -> {
|
new SelectBlocksGUI(this.user, new HashSet<>(this.materialList), (status, materials) -> {
|
||||||
if (status)
|
if (status)
|
||||||
{
|
{
|
||||||
this.materialMap.put(material, 1);
|
materials.forEach(material -> {
|
||||||
this.materialList.add(material);
|
this.materialMap.put(material, 1);
|
||||||
|
this.materialList.add(material);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.build();
|
this.build();
|
||||||
@ -134,7 +137,7 @@ public class ManageBlocksGUI extends CommonGUI
|
|||||||
break;
|
break;
|
||||||
case REMOVE:
|
case REMOVE:
|
||||||
builder.name(this.user.getTranslation("challenges.gui.buttons.admin.remove-selected"));
|
builder.name(this.user.getTranslation("challenges.gui.buttons.admin.remove-selected"));
|
||||||
builder.description(this.user.getTranslation("challenges.gui.descriptions.admin.remove-selected"));
|
builder.description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.descriptions.admin.remove-selected"), lineLength));
|
||||||
builder.icon(Material.LAVA_BUCKET);
|
builder.icon(Material.LAVA_BUCKET);
|
||||||
builder.clickHandler((panel, user1, clickType, slot) -> {
|
builder.clickHandler((panel, user1, clickType, slot) -> {
|
||||||
this.materialMap.keySet().removeAll(this.selectedMaterials);
|
this.materialMap.keySet().removeAll(this.selectedMaterials);
|
||||||
|
@ -111,6 +111,7 @@ public class ManageEntitiesGUI extends CommonGUI
|
|||||||
*/
|
*/
|
||||||
private PanelItem createButton(Button button)
|
private PanelItem createButton(Button button)
|
||||||
{
|
{
|
||||||
|
int lineLength = this.addon.getChallengesSettings().getLoreLineLength();
|
||||||
PanelItemBuilder builder = new PanelItemBuilder();
|
PanelItemBuilder builder = new PanelItemBuilder();
|
||||||
|
|
||||||
switch (button)
|
switch (button)
|
||||||
@ -119,14 +120,13 @@ public class ManageEntitiesGUI extends CommonGUI
|
|||||||
builder.name(this.user.getTranslation("challenges.gui.buttons.admin.add"));
|
builder.name(this.user.getTranslation("challenges.gui.buttons.admin.add"));
|
||||||
builder.icon(Material.BUCKET);
|
builder.icon(Material.BUCKET);
|
||||||
builder.clickHandler((panel, user1, clickType, slot) -> {
|
builder.clickHandler((panel, user1, clickType, slot) -> {
|
||||||
new SelectEntityGUI(this.user, Collections.emptySet(), this.asEggs, (status, entity) -> {
|
new SelectEntityGUI(this.user, this.requiredEntities.keySet(), this.asEggs, (status, entities) -> {
|
||||||
if (status)
|
if (status)
|
||||||
{
|
{
|
||||||
if (!this.requiredEntities.containsKey(entity))
|
entities.forEach(entity -> {
|
||||||
{
|
|
||||||
this.requiredEntities.put(entity, 1);
|
this.requiredEntities.put(entity, 1);
|
||||||
this.entityList.add(entity);
|
this.entityList.add(entity);
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.build();
|
this.build();
|
||||||
@ -136,7 +136,7 @@ public class ManageEntitiesGUI extends CommonGUI
|
|||||||
break;
|
break;
|
||||||
case REMOVE:
|
case REMOVE:
|
||||||
builder.name(this.user.getTranslation("challenges.gui.buttons.admin.remove-selected"));
|
builder.name(this.user.getTranslation("challenges.gui.buttons.admin.remove-selected"));
|
||||||
builder.description(this.user.getTranslation("challenges.gui.descriptions.admin.remove-selected"));
|
builder.description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.descriptions.admin.remove-selected"), lineLength));
|
||||||
builder.icon(Material.LAVA_BUCKET);
|
builder.icon(Material.LAVA_BUCKET);
|
||||||
builder.clickHandler((panel, user1, clickType, slot) -> {
|
builder.clickHandler((panel, user1, clickType, slot) -> {
|
||||||
this.requiredEntities.keySet().removeAll(this.selectedEntities);
|
this.requiredEntities.keySet().removeAll(this.selectedEntities);
|
||||||
@ -147,7 +147,7 @@ public class ManageEntitiesGUI extends CommonGUI
|
|||||||
break;
|
break;
|
||||||
case SWITCH:
|
case SWITCH:
|
||||||
builder.name(this.user.getTranslation("challenges.gui.buttons.admin.show-eggs"));
|
builder.name(this.user.getTranslation("challenges.gui.buttons.admin.show-eggs"));
|
||||||
builder.description(this.user.getTranslation("challenges.gui.descriptions.admin.show-eggs"));
|
builder.description(GuiUtils.stringSplit(this.user.getTranslation("challenges.gui.descriptions.admin.show-eggs"), lineLength));
|
||||||
builder.icon(this.asEggs ? Material.EGG : Material.PLAYER_HEAD);
|
builder.icon(this.asEggs ? Material.EGG : Material.PLAYER_HEAD);
|
||||||
builder.clickHandler((panel, user1, clickType, slot) -> {
|
builder.clickHandler((panel, user1, clickType, slot) -> {
|
||||||
this.asEggs = !this.asEggs;
|
this.asEggs = !this.asEggs;
|
||||||
|
@ -4,10 +4,7 @@ package world.bentobox.challenges.panel.util;
|
|||||||
import org.apache.commons.lang.WordUtils;
|
import org.apache.commons.lang.WordUtils;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
import world.bentobox.bentobox.api.panels.PanelItem;
|
import world.bentobox.bentobox.api.panels.PanelItem;
|
||||||
@ -23,13 +20,13 @@ import world.bentobox.challenges.utils.GuiUtils;
|
|||||||
*/
|
*/
|
||||||
public class SelectBlocksGUI
|
public class SelectBlocksGUI
|
||||||
{
|
{
|
||||||
public SelectBlocksGUI(User user, BiConsumer<Boolean, Material> consumer)
|
public SelectBlocksGUI(User user, BiConsumer<Boolean, Set<Material>> consumer)
|
||||||
{
|
{
|
||||||
this(user, Collections.emptySet(), consumer);
|
this(user, Collections.emptySet(), consumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public SelectBlocksGUI(User user, Set<Material> excludedMaterial, BiConsumer<Boolean, Material> consumer)
|
public SelectBlocksGUI(User user, Set<Material> excludedMaterial, BiConsumer<Boolean, Set<Material>> consumer)
|
||||||
{
|
{
|
||||||
this.consumer = consumer;
|
this.consumer = consumer;
|
||||||
this.user = user;
|
this.user = user;
|
||||||
@ -47,6 +44,7 @@ public class SelectBlocksGUI
|
|||||||
excludedMaterial.add(Material.BARRIER);
|
excludedMaterial.add(Material.BARRIER);
|
||||||
|
|
||||||
this.elements = new ArrayList<>();
|
this.elements = new ArrayList<>();
|
||||||
|
this.selectedMaterials = new HashSet<>();
|
||||||
|
|
||||||
for (Material material : Material.values())
|
for (Material material : Material.values())
|
||||||
{
|
{
|
||||||
@ -107,7 +105,7 @@ public class SelectBlocksGUI
|
|||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
panelBuilder.item(4,
|
panelBuilder.item(3,
|
||||||
new PanelItemBuilder().
|
new PanelItemBuilder().
|
||||||
icon(Material.RED_STAINED_GLASS_PANE).
|
icon(Material.RED_STAINED_GLASS_PANE).
|
||||||
name(this.user.getTranslation("challenges.gui.buttons.admin.cancel")).
|
name(this.user.getTranslation("challenges.gui.buttons.admin.cancel")).
|
||||||
@ -116,6 +114,24 @@ public class SelectBlocksGUI
|
|||||||
return true;
|
return true;
|
||||||
}).build());
|
}).build());
|
||||||
|
|
||||||
|
|
||||||
|
List<String> description = new ArrayList<>();
|
||||||
|
if (!this.selectedMaterials.isEmpty())
|
||||||
|
{
|
||||||
|
description.add(this.user.getTranslation("challenges.gui.descriptions.admin.selected") + ":");
|
||||||
|
this.selectedMaterials.forEach(material -> description.add(" - " + material.name()));
|
||||||
|
}
|
||||||
|
|
||||||
|
panelBuilder.item(5,
|
||||||
|
new PanelItemBuilder().
|
||||||
|
icon(Material.GREEN_STAINED_GLASS_PANE).
|
||||||
|
name(this.user.getTranslation("challenges.gui.buttons.admin.accept")).
|
||||||
|
description(description).
|
||||||
|
clickHandler( (panel, user1, clickType, slot) -> {
|
||||||
|
this.consumer.accept(true, this.selectedMaterials);
|
||||||
|
return true;
|
||||||
|
}).build());
|
||||||
|
|
||||||
if (this.elements.size() > MAX_ELEMENTS)
|
if (this.elements.size() > MAX_ELEMENTS)
|
||||||
{
|
{
|
||||||
// Navigation buttons if necessary
|
// Navigation buttons if necessary
|
||||||
@ -164,9 +180,22 @@ public class SelectBlocksGUI
|
|||||||
|
|
||||||
return new PanelItemBuilder().
|
return new PanelItemBuilder().
|
||||||
name(WordUtils.capitalize(material.name().toLowerCase().replace("_", " "))).
|
name(WordUtils.capitalize(material.name().toLowerCase().replace("_", " "))).
|
||||||
|
description(this.selectedMaterials.contains(material) ?
|
||||||
|
this.user.getTranslation("challenges.gui.descriptions.admin.selected") : "").
|
||||||
icon(itemStack).
|
icon(itemStack).
|
||||||
clickHandler((panel, user1, clickType, slot) -> {
|
clickHandler((panel, user1, clickType, slot) -> {
|
||||||
this.consumer.accept(true, material);
|
if (clickType.isRightClick())
|
||||||
|
{
|
||||||
|
if (!this.selectedMaterials.add(material))
|
||||||
|
{
|
||||||
|
this.selectedMaterials.remove(material);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.consumer.accept(true, this.selectedMaterials);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}).
|
}).
|
||||||
glow(!itemStack.getType().equals(material)).
|
glow(!itemStack.getType().equals(material)).
|
||||||
@ -183,10 +212,15 @@ public class SelectBlocksGUI
|
|||||||
*/
|
*/
|
||||||
private List<Material> elements;
|
private List<Material> elements;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set that contains selected materials.
|
||||||
|
*/
|
||||||
|
private Set<Material> selectedMaterials;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This variable stores consumer.
|
* This variable stores consumer.
|
||||||
*/
|
*/
|
||||||
private BiConsumer<Boolean, Material> consumer;
|
private BiConsumer<Boolean, Set<Material>> consumer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User who runs GUI.
|
* User who runs GUI.
|
||||||
|
@ -20,19 +20,20 @@ import world.bentobox.challenges.utils.GuiUtils;
|
|||||||
*/
|
*/
|
||||||
public class SelectEntityGUI
|
public class SelectEntityGUI
|
||||||
{
|
{
|
||||||
public SelectEntityGUI(User user, BiConsumer<Boolean, EntityType> consumer)
|
public SelectEntityGUI(User user, BiConsumer<Boolean, Set<EntityType>> consumer)
|
||||||
{
|
{
|
||||||
this(user, Collections.emptySet(), true, consumer);
|
this(user, Collections.emptySet(), true, consumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public SelectEntityGUI(User user, Set<EntityType> excludedEntities, boolean asEggs, BiConsumer<Boolean, EntityType> consumer)
|
public SelectEntityGUI(User user, Set<EntityType> excludedEntities, boolean asEggs, BiConsumer<Boolean, Set<EntityType>> consumer)
|
||||||
{
|
{
|
||||||
this.consumer = consumer;
|
this.consumer = consumer;
|
||||||
this.user = user;
|
this.user = user;
|
||||||
this.asEggs = asEggs;
|
this.asEggs = asEggs;
|
||||||
|
|
||||||
this.entities = new ArrayList<>(EntityType.values().length);
|
this.entities = new ArrayList<>(EntityType.values().length);
|
||||||
|
this.selectedEntities = new HashSet<>(EntityType.values().length);
|
||||||
|
|
||||||
for (EntityType entityType : EntityType.values())
|
for (EntityType entityType : EntityType.values())
|
||||||
{
|
{
|
||||||
@ -81,7 +82,7 @@ public class SelectEntityGUI
|
|||||||
correctPage = pageIndex;
|
correctPage = pageIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
panelBuilder.item(4,
|
panelBuilder.item(3,
|
||||||
new PanelItemBuilder().
|
new PanelItemBuilder().
|
||||||
icon(Material.RED_STAINED_GLASS_PANE).
|
icon(Material.RED_STAINED_GLASS_PANE).
|
||||||
name(this.user.getTranslation("challenges.gui.buttons.admin.cancel")).
|
name(this.user.getTranslation("challenges.gui.buttons.admin.cancel")).
|
||||||
@ -90,6 +91,23 @@ public class SelectEntityGUI
|
|||||||
return true;
|
return true;
|
||||||
}).build());
|
}).build());
|
||||||
|
|
||||||
|
List<String> description = new ArrayList<>();
|
||||||
|
if (!this.selectedEntities.isEmpty())
|
||||||
|
{
|
||||||
|
description.add(this.user.getTranslation("challenges.gui.descriptions.admin.selected") + ":");
|
||||||
|
this.selectedEntities.forEach(entity -> description.add(" - " + entity.name()));
|
||||||
|
}
|
||||||
|
|
||||||
|
panelBuilder.item(5,
|
||||||
|
new PanelItemBuilder().
|
||||||
|
icon(Material.GREEN_STAINED_GLASS_PANE).
|
||||||
|
name(this.user.getTranslation("challenges.gui.buttons.admin.accept")).
|
||||||
|
description(description).
|
||||||
|
clickHandler( (panel, user1, clickType, slot) -> {
|
||||||
|
this.consumer.accept(true, this.selectedEntities);
|
||||||
|
return true;
|
||||||
|
}).build());
|
||||||
|
|
||||||
if (this.entities.size() > MAX_ELEMENTS)
|
if (this.entities.size() > MAX_ELEMENTS)
|
||||||
{
|
{
|
||||||
// Navigation buttons if necessary
|
// Navigation buttons if necessary
|
||||||
@ -156,10 +174,25 @@ public class SelectEntityGUI
|
|||||||
return new PanelItemBuilder().
|
return new PanelItemBuilder().
|
||||||
name(WordUtils.capitalize(entity.name().toLowerCase().replace("_", " "))).
|
name(WordUtils.capitalize(entity.name().toLowerCase().replace("_", " "))).
|
||||||
icon(itemStack).
|
icon(itemStack).
|
||||||
|
description(this.selectedEntities.contains(entity) ?
|
||||||
|
this.user.getTranslation("challenges.gui.descriptions.admin.selected") : "").
|
||||||
clickHandler((panel, user1, clickType, slot) -> {
|
clickHandler((panel, user1, clickType, slot) -> {
|
||||||
this.consumer.accept(true, entity);
|
if (clickType.isRightClick())
|
||||||
|
{
|
||||||
|
if (!this.selectedEntities.add(entity))
|
||||||
|
{
|
||||||
|
this.selectedEntities.remove(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.consumer.accept(true, this.selectedEntities);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}).build();
|
}).
|
||||||
|
glow(this.selectedEntities.contains(entity)).
|
||||||
|
build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -171,7 +204,12 @@ public class SelectEntityGUI
|
|||||||
/**
|
/**
|
||||||
* This variable stores consumer.
|
* This variable stores consumer.
|
||||||
*/
|
*/
|
||||||
private BiConsumer<Boolean, EntityType> consumer;
|
private BiConsumer<Boolean, Set<EntityType>> consumer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set that contains selected entities.
|
||||||
|
*/
|
||||||
|
private Set<EntityType> selectedEntities;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User who runs GUI.
|
* User who runs GUI.
|
||||||
|
Loading…
Reference in New Issue
Block a user