Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 35 additions & 10 deletions config.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
messages:
player_cleared: "Player {player} cleared!"
players_cleared: "Players cleared!"
reload_start: "Starting reloading..."
reload_complete: "Configuration reloaded!"
reload_pastebin_start: "Starting loading from pastebin..."
reload_pastebin_complete: "Rules was loaded!"
insufficient_permissions: "§cInsufficient permissions!"
player_not_found: "§cPlayer {player} not found"
invalid_sound_name: "Sound {sound} is invalid..."
wrong_usage: "Open rules - /rules <player>"
wrong_usage_accept: "§cWrong usage: /rules -accept <player>"
wrong_usage_status: "§cWrong usage: /rules -status <player>"
prevent_while_sleeping: "§cYou cannot use this while sleeping."
player_accept_added: "§aPlayer {player} has been added to people having accepted the rules!"
player_accept_already: "§cPlayer {player} has already accepted the rules!"
player_status_accepted: "§6Player {player} has §a§laccepted§6 the rules."
player_status_not_yet: "§6Player {player} has §lnot yet§6 accepted the rules."

items:
'1':
id: BOOK
Expand Down Expand Up @@ -49,8 +68,6 @@ items:
- 'pastebin: pLgFRfeG'
# Item will be enchanted
ench: true



inventory:
name: '&0Rules'
Expand All @@ -64,18 +81,27 @@ accept:
slot: 21
id: EMERALD_BLOCK
name: '&aAgree'
lore:
- '&eClick to accept'

# Deny button
deny:
slot: 23
id: REDSTONE_BLOCK
name: '&cDisagree'

lore:
- '&eClick to refuse'

# When player joins the server, he must click 'Agree' in rules inventory
# He will not be able to close menu and play on server until he accept the rules
useConfirmation: true

# When player refuses the server rules...
kickPlayerWhenRefuse: true
closeInventoryWhenRefuse: false
# (Could be useful, for example, for plugins implementing the Rules' events
# to put the player in a jail, and give him the exempt permission)

# If true, menu will be opened not on join but on login or register
authmeHook: true

Expand All @@ -87,14 +113,13 @@ kickMessage: '&cYou must agree with terms!'

# For 1.8: LEVEL_UP
acceptSound: ENTITY_PLAYER_LEVELUP
acceptSoundVolume: 1.0
acceptSoundPitch: 1.0

denySound: ENTITY_BAT_DEATH
denySoundVolume: 1.0
denySoundPitch: 0.2

# Which commands player can use when he has not agree with rules
# It makes no sense because he unable to close inventory, but still
allowedCommands: []







43 changes: 40 additions & 3 deletions plugin.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,43 @@
name: Rules
main: clusterstorm.rules.Rules
version: 1.0
description: Agree with rules before playing on server.
version: 1.1

author: ClusterStorm
contributors: [ arboriginal ]
website: https://www.spigotmc.org/resources/rules.56584/
dev-url: https://github.com/KlasterStormInc/Rules

main: clusterstorm.rules.Rules
depend: [ ]
softdepend: [ authme ]

commands:
rules:
rules:
description: Main command of Rules plugin
permission: rules.rules

permissions:
rules.*:
description: Gives all plugin permissions
default: op
children:
rules.rules: true
rules.rules.others: true
rules.rules.options: true
rules.rules.exempt: true

rules.rules:
description: Open rules menu
default: true

rules.rules.others:
description: Open rules menu for other player
default: op

rules.rules.options:
description: Allows to use reload and clear options
default: op

rules.rules.exempt:
description: Be exempted to accept the rules to play
default: op
84 changes: 50 additions & 34 deletions src/clusterstorm/rules/MenuManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
Expand All @@ -19,25 +18,25 @@ public class MenuManager {

Inventory i, c;
int accept, deny;

String kickMessage;


public MenuManager() {
reload();
}

public void reload() {
if(i != null) i.clear();
if(c != null) c.clear();

FileConfiguration c = Rules.getInstance().getConfig();
String name = c.getString("inventory.name", "Rules").replace("&", "�");
kickMessage = c.getString("kickMessage", "Disconnected").replace("&", "�");

this.i = Bukkit.createInventory(null, c.getInt("inventory.simpleMenuRows") * 9, name);
this.c = Bukkit.createInventory(null, c.getInt("inventory.comfirmMenuRows") * 9, name);
FileConfiguration config = Rules.getInstance().getConfig();
String name = config.getString("inventory.name", "Rules").replace("&", "§");
// Only recreate the inventory if not already set, prevent existing opened inventory to be empty after reload
if (i == null)
i = Bukkit.createInventory(null, config.getInt("inventory.simpleMenuRows") * 9, name);
else i.clear();
// Only recreate the inventory if not already set, prevent existing opened inventory to be empty after reload
if (c == null)
c = Bukkit.createInventory(null, config.getInt("inventory.comfirmMenuRows") * 9, name);
else c.clear();

ConfigurationSection sec = c.getConfigurationSection("items");
ConfigurationSection sec = config.getConfigurationSection("items");
if(sec != null)
{
Set<String> keys = sec.getKeys(false);
Expand All @@ -46,23 +45,23 @@ public void reload() {
int lastSlot = 0;
for (String key : keys)
{
ItemStack item = deserialize(c, "items." + key);
ItemStack item = deserialize(config, "items." + key);
if(item == null) continue;
int slot = c.getInt("items." + key + ".slot", lastSlot++);
int slot = config.getInt("items." + key + ".slot", lastSlot++);
this.i.setItem(slot, item);
this.c.setItem(slot, item);

}
}
}

ItemStack a = deserialize(c, "accept");
accept = c.getInt("accept.slot", 21);
this.c.setItem(accept, a);
ItemStack a = deserialize(config, "accept");
accept = config.getInt("accept.slot", config.getInt("accept.slot"));
c.setItem(accept, a);

a = deserialize(c, "deny");
deny = c.getInt("accept.deny", 23);
this.c.setItem(deny, a);
a = deserialize(config, "deny");
deny = config.getInt("accept.deny", config.getInt("deny.slot"));
c.setItem(deny, a);
}


Expand All @@ -78,24 +77,41 @@ public void accept(Player p) {
String player = p.getName();
if(Rules.players().hasPlayer(player)) return;

Rules.players().writePlayer(player);
if(Rules.sound != null) p.playSound(p.getLocation(), Rules.sound, 1, 1);
p.closeInventory();
RulesConfirmedEvent event = new RulesConfirmedEvent(p);
Bukkit.getPluginManager().callEvent(event);

Bukkit.getPluginManager().callEvent(new RulesConfirmedEvent(p));
if (event.isCancelled()) return;

Rules.players().writePlayer(player);
Rules.getInstance().playSound(p, "accept");
p.closeInventory();
}

public void deny(Player p) {
String player = p.getName();
if(Rules.players().hasPlayer(player)) return;

RulesRefusedEvent event = new RulesRefusedEvent(p);
Bukkit.getPluginManager().callEvent(event);

if (event.isCancelled()) return;

Bukkit.getScheduler().scheduleSyncDelayedTask(Rules.getInstance(), new Runnable() {

@Override
public void run() {
p.kickPlayer(kickMessage);
}
});
if (Rules.getInstance().getConfig().getBoolean("kickPlayerWhenRefuse")) {
Bukkit.getScheduler().scheduleSyncDelayedTask(Rules.getInstance(), new Runnable() {
@Override
public void run() {
p.kickPlayer(Rules.getInstance().getConfig().getString("kickMessage", "Disconnected").replace("&", "§"));
}
});

return;
}

Rules.getInstance().playSound(p, "deny");

if (Rules.getInstance().getConfig().getBoolean("closeInventoryWhenRefuse")) {
p.closeInventory(); // Because a plugin using the API can have given the permission exempt (and place the user in a jail)
}
}


Expand Down Expand Up @@ -133,7 +149,7 @@ private ItemStack deserialize(FileConfiguration c, String section) {
try {
List<String> payload = Rules.pastebin().getList(pastebin);
for (String p : payload) {
lorez.add("7" + p.replace("&", "\u00a7"));
lorez.add("§7" + p.replace("&", "\u00a7"));
}
continue;
} catch (Exception e) {
Expand All @@ -142,7 +158,7 @@ private ItemStack deserialize(FileConfiguration c, String section) {
}
}

lorez.add("7" + l.replace("&", "\u00a7"));
lorez.add("§7" + l.replace("&", "\u00a7"));
}
meta.setLore(lorez);
}
Expand Down
21 changes: 15 additions & 6 deletions src/clusterstorm/rules/Players.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,21 @@ public void writePlayer(String player) {
c.set("players", players);
save();
}

public void clear() {
players.clear();
c.set("players", null);
save();
}

public void clear() {
players.clear();
c.set("players", null);
save();
}

public boolean clear(String player) {
player = player.toLowerCase();
if(!players.contains(player)) return false;
players.remove(player);
c.set("players", players);
save();
return true;
}

private void save() {
try {
Expand Down
Loading