-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add /easy-sign-used <player> <count> to reset announce and max.
- Loading branch information
Showing
4 changed files
with
147 additions
and
71 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,120 +1,116 @@ | ||
package nu.nerd.easysigns.actions; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
import java.util.UUID; | ||
|
||
import net.sothatsit.blockstore.BlockStoreApi; | ||
import nu.nerd.easysigns.EasySigns; | ||
import nu.nerd.easysigns.SignData; | ||
import org.bukkit.ChatColor; | ||
import org.bukkit.configuration.ConfigurationSection; | ||
import org.bukkit.configuration.InvalidConfigurationException; | ||
import org.bukkit.configuration.file.FileConfiguration; | ||
import org.bukkit.configuration.file.YamlConfiguration; | ||
import org.bukkit.entity.Player; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
import net.sothatsit.blockstore.BlockStoreApi; | ||
import nu.nerd.easysigns.EasySigns; | ||
import nu.nerd.easysigns.SignData; | ||
|
||
public class MaxAction extends SignAction { | ||
|
||
|
||
private SignData sign; | ||
private final SignData sign; | ||
private int uses; | ||
boolean valid = true; | ||
|
||
|
||
public MaxAction(SignData sign, String[] args) { | ||
this.sign = sign; | ||
try { | ||
uses = Integer.parseInt(args[0]); | ||
} catch (IndexOutOfBoundsException|IllegalArgumentException ex) { | ||
} catch (IndexOutOfBoundsException | IllegalArgumentException ex) { | ||
valid = false; | ||
} | ||
} | ||
|
||
|
||
public MaxAction(SignData sign, ConfigurationSection attributes) { | ||
this.sign = sign; | ||
this.uses = attributes.getInt("uses"); | ||
} | ||
|
||
|
||
@Override | ||
public String getName() { | ||
return "max"; | ||
} | ||
|
||
|
||
@Override | ||
public String getUsage() { | ||
return "<uses>"; | ||
} | ||
|
||
|
||
@Override | ||
public String getHelpText() { | ||
return "Allows the sign to be used <uses> times and no more. No other commands will be run once limit is reached."; | ||
} | ||
|
||
|
||
@Override | ||
public String toString() { | ||
return String.format("%s %d", getName(), uses); | ||
} | ||
|
||
|
||
@Override | ||
public boolean isValid() { | ||
return valid; | ||
} | ||
|
||
|
||
@Override | ||
public Map<String, Object> serialize() { | ||
Map<String, Object> map = new HashMap<>(); | ||
map.put("uses", uses); | ||
return map; | ||
} | ||
|
||
|
||
private int timesUsed(Player player) { | ||
FileConfiguration yaml = new YamlConfiguration(); | ||
try { | ||
String str = (String) BlockStoreApi.getBlockMeta(sign.getBlock(), EasySigns.instance, "max"); | ||
if (str == null) return 0; | ||
yaml.loadFromString(str); | ||
} catch (InvalidConfigurationException ex) { | ||
ex.printStackTrace(); | ||
} | ||
return yaml.getInt(player.getUniqueId().toString(), 0); | ||
public int getTimesUsed(UUID playerUUID) { | ||
FileConfiguration uses = loadUseMap(); | ||
return uses.getInt(playerUUID.toString(), 0); | ||
} | ||
|
||
|
||
private void incrementUsed(Player player) { | ||
FileConfiguration yaml = new YamlConfiguration(); | ||
try { | ||
String str = (String) BlockStoreApi.getBlockMeta(sign.getBlock(), EasySigns.instance, "max"); | ||
if (str != null) { | ||
yaml.loadFromString(str); | ||
} | ||
int times = yaml.getInt(player.getUniqueId().toString(), 0); | ||
yaml.set(player.getUniqueId().toString(), times + 1); | ||
BlockStoreApi.setBlockMeta(sign.getBlock(), EasySigns.instance, "max", yaml.saveToString()); | ||
} catch (InvalidConfigurationException ex) { | ||
ex.printStackTrace(); | ||
} | ||
public void setTimesUsed(UUID playerUUID, int count) { | ||
FileConfiguration uses = loadUseMap(); | ||
uses.set(playerUUID.toString(), count); | ||
BlockStoreApi.setBlockMeta(sign.getBlock(), EasySigns.instance, "max", uses.saveToString()); | ||
} | ||
|
||
|
||
@Override | ||
public boolean shouldExit(Player player) { | ||
//don't process further actions if the player has used this sign already | ||
return timesUsed(player) > uses; | ||
return getTimesUsed(player.getUniqueId()) > uses; | ||
} | ||
|
||
|
||
@Override | ||
public void action(Player player) { | ||
int pTimes = timesUsed(player); | ||
if (pTimes <= uses) { | ||
incrementUsed(player); | ||
pTimes++; | ||
UUID playerUUID = player.getUniqueId(); | ||
int times = getTimesUsed(playerUUID); | ||
if (times <= uses) { | ||
setTimesUsed(playerUUID, ++times); | ||
} | ||
if (pTimes > uses) { | ||
if (times > uses) { | ||
player.sendMessage(String.format("%sMaximum uses reached! (%d)", ChatColor.GREEN, uses)); | ||
} | ||
} | ||
|
||
|
||
/** | ||
* Load the YAML-encoded map from player UUID (String) to use count, which | ||
* is stored in the block meta. | ||
* | ||
* @return the YAML map of use counts by player UUID string. | ||
*/ | ||
private FileConfiguration loadUseMap() { | ||
FileConfiguration config = new YamlConfiguration(); | ||
try { | ||
String str = (String) BlockStoreApi.getBlockMeta(sign.getBlock(), EasySigns.instance, "max"); | ||
if (str != null) { | ||
config.loadFromString(str); | ||
} | ||
} catch (InvalidConfigurationException ex) { | ||
ex.printStackTrace(); | ||
} | ||
return config; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters