Skip to content

Commit

Permalink
Added limits command.
Browse files Browse the repository at this point in the history
  • Loading branch information
tastybento committed Feb 9, 2019
1 parent 4783084 commit aa63b41
Show file tree
Hide file tree
Showing 7 changed files with 281 additions and 22 deletions.
12 changes: 11 additions & 1 deletion src/main/java/bentobox/addon/limits/Limits.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

import org.bukkit.World;

import bentobox.addon.limits.commands.AdminCommand;
import bentobox.addon.limits.commands.PlayerCommand;
import bentobox.addon.limits.listeners.BlockLimitsListener;
import bentobox.addon.limits.listeners.JoinListener;
import world.bentobox.bentobox.api.addons.Addon;
Expand Down Expand Up @@ -39,7 +41,14 @@ public void onEnable() {
gameModes = getPlugin().getAddonsManager().getGameModeAddons().stream()
.filter(gm -> settings.getGameModes().contains(gm.getDescription().getName()))
.collect(Collectors.toList());
gameModes.forEach(w -> log("Limits will apply to " + w.getDescription().getName()));
gameModes.forEach(gm ->
{
// Register commands
gm.getAdminCommand().ifPresent(a -> new AdminCommand(this, a));
gm.getPlayerCommand().ifPresent(a -> new PlayerCommand(this, a));
log("Limits will apply to " + gm.getDescription().getName());
}
);
// Register listener
blockLimitListener = new BlockLimitsListener(this);
registerListener(blockLimitListener);
Expand Down Expand Up @@ -94,4 +103,5 @@ public String getGameMode(World world) {
public boolean isCoveredGameMode(String gameMode) {
return gameModes.stream().anyMatch(gm -> gm.getDescription().getName().equals(gameMode));
}

}
78 changes: 78 additions & 0 deletions src/main/java/bentobox/addon/limits/commands/AdminCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/**
*
*/
package bentobox.addon.limits.commands;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

import bentobox.addon.limits.Limits;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.util.Util;

/**
* Admin command for limits
* @author tastybento
*
*/
public class AdminCommand extends CompositeCommand {

private Limits addon;

/**
* Top level command
* @param addon
*/
public AdminCommand(Limits addon, CompositeCommand parent) {
super(parent, "limits");
this.addon = addon;
}

/* (non-Javadoc)
* @see world.bentobox.bentobox.api.commands.BentoBoxCommand#setup()
*/
@Override
public void setup() {
this.setPermission("limits.admin.limits");
this.setOnlyPlayer(true);
this.setParametersHelp("admin.limits.parameters");
this.setDescription("admin.limits.description");
}

/* (non-Javadoc)
* @see world.bentobox.bentobox.api.commands.BentoBoxCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)
*/
@Override
public boolean execute(User user, String label, List<String> args) {
if (args.size() == 1) {
// Asking for another player's limits
// Convert name to a UUID
final UUID playerUUID = getPlugin().getPlayers().getUUID(args.get(0));
if (playerUUID == null) {
user.sendMessage("general.errors.unknown-player", args.get(0));
return true;
} else {
new LimitPanel(addon).showLimits(getWorld(), user, playerUUID);
}
return true;
} else {
showHelp(this, user);
return false;
}
}

@Override
public Optional<List<String>> tabComplete(User user, String alias, List<String> args) {
String lastArg = !args.isEmpty() ? args.get(args.size()-1) : "";
if (args.isEmpty()) {
// Don't show every player on the server. Require at least the first letter
return Optional.empty();
}
List<String> options = new ArrayList<>(Util.getOnlinePlayerList(user));
return Optional.of(Util.tabLimit(options, lastArg));
}

}
67 changes: 67 additions & 0 deletions src/main/java/bentobox/addon/limits/commands/LimitPanel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/**
*
*/
package bentobox.addon.limits.commands;

import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;

import org.bukkit.Material;
import org.bukkit.World;

import bentobox.addon.limits.Limits;
import bentobox.addon.limits.objects.IslandBlockCount;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
import world.bentobox.bentobox.util.Util;

/**
* Shows a panel of the blocks that are limited and their status
* @author tastybento
*
*/
public class LimitPanel {

private Limits addon;

/**
* @param addon - limit addon
*/
public LimitPanel(Limits addon) {
this.addon = addon;
}

public void showLimits(World world, User user, UUID target) {
PanelBuilder pb = new PanelBuilder().name(user.getTranslation(world, "limits.panel-title")).user(user);
// Get the island for the target
Island island = addon.getIslands().getIsland(world, target);
if (island == null) {
user.sendMessage("general.errors.player-has-no-island");
return;
}
IslandBlockCount ibc = addon.getBlockLimitListener().getIsland(island.getUniqueId());
Map<Material, Integer> matLimits = addon.getBlockLimitListener().getMaterialLimits(world, island.getUniqueId());
if (matLimits.isEmpty()) {
user.sendMessage("island.limits.no-limits");
return;
}
for (Entry<Material, Integer> en : matLimits.entrySet()) {
PanelItemBuilder pib = new PanelItemBuilder();
pib.name(Util.prettifyText(en.getKey().toString()));
pib.icon(en.getKey());
int count = ibc == null ? 0 : ibc.getBlockCount().getOrDefault(en.getKey(), 0);
String color = count >= en.getValue() ? user.getTranslation("island.limits.max-color") : user.getTranslation("island.limits.regular-color");
pib.description(color
+ user.getTranslation("island.limits.block-limit-syntax",
TextVariables.NUMBER, String.valueOf(count),
"[limit]", String.valueOf(en.getValue())));
pb.item(pib.build());
}
pb.build();
}

}
55 changes: 55 additions & 0 deletions src/main/java/bentobox/addon/limits/commands/PlayerCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/**
*
*/
package bentobox.addon.limits.commands;

import java.util.List;

import bentobox.addon.limits.Limits;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.user.User;

/**
* User command for limits
* @author tastybento
*
*/
public class PlayerCommand extends CompositeCommand {

private Limits addon;

/**
* Top level command
* @param addon
*/
public PlayerCommand(Limits addon, CompositeCommand parent) {
super(parent, "limits");
this.addon = addon;
}

/* (non-Javadoc)
* @see world.bentobox.bentobox.api.commands.BentoBoxCommand#setup()
*/
@Override
public void setup() {
this.setPermission("limits.player.limits");
this.setOnlyPlayer(true);
this.setParametersHelp("island.limits.parameters");
this.setDescription("island.limits.description");
}

/* (non-Javadoc)
* @see world.bentobox.bentobox.api.commands.BentoBoxCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)
*/
@Override
public boolean execute(User user, String label, List<String> args) {
if (!args.isEmpty()) {
showHelp(this, user);
return false;
} else {
new LimitPanel(addon).showLimits(getWorld(), user, user.getUniqueId());
return true;
}
}

}

0 comments on commit aa63b41

Please sign in to comment.