Implemented new permission system
Dieser Commit ist enthalten in:
Ursprung
cc9ccc8976
Commit
5d2a195835
7
pom.xml
7
pom.xml
@ -78,6 +78,13 @@
|
||||
<type>jar</type>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.yaml</groupId>
|
||||
<artifactId>snakeyaml</artifactId>
|
||||
<version>1.7</version>
|
||||
<type>jar</type>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava-collections</artifactId>
|
||||
|
@ -431,11 +431,25 @@ public class ServerConfigurationManager {
|
||||
public void e(String s) {
|
||||
this.h.add(s.toLowerCase());
|
||||
this.l();
|
||||
|
||||
// Craftbukkit start
|
||||
Player player = server.server.getPlayer(s);
|
||||
if (player != null) {
|
||||
player.recalculatePermissions();
|
||||
}
|
||||
// Craftbukkit end
|
||||
}
|
||||
|
||||
public void f(String s) {
|
||||
this.h.remove(s.toLowerCase());
|
||||
this.l();
|
||||
|
||||
// Craftbukkit start
|
||||
Player player = server.server.getPlayer(s);
|
||||
if (player != null) {
|
||||
player.recalculatePermissions();
|
||||
}
|
||||
// Craftbukkit end
|
||||
}
|
||||
|
||||
private void k() {
|
||||
|
@ -1,5 +1,6 @@
|
||||
package org.bukkit.craftbukkit;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import com.avaje.ebean.config.DataSourceConfig;
|
||||
import com.avaje.ebean.config.ServerConfig;
|
||||
@ -18,12 +19,14 @@ import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.bukkit.inventory.ShapelessRecipe;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.UUID;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import jline.ConsoleReader;
|
||||
@ -58,9 +61,13 @@ import org.bukkit.craftbukkit.command.ServerCommandListener;
|
||||
import org.bukkit.scheduler.BukkitWorker;
|
||||
import org.bukkit.craftbukkit.scheduler.CraftScheduler;
|
||||
import org.bukkit.event.world.WorldInitEvent;
|
||||
import org.bukkit.permissions.Permission;
|
||||
import org.bukkit.plugin.PluginLoadOrder;
|
||||
import org.bukkit.util.config.Configuration;
|
||||
import org.bukkit.util.config.ConfigurationNode;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
import org.yaml.snakeyaml.constructor.SafeConstructor;
|
||||
import org.yaml.snakeyaml.error.MarkedYAMLException;
|
||||
|
||||
public final class CraftServer implements Server {
|
||||
private final String serverName = "Craftbukkit";
|
||||
@ -74,6 +81,7 @@ public final class CraftServer implements Server {
|
||||
protected final ServerConfigurationManager server;
|
||||
private final Map<String, World> worlds = new LinkedHashMap<String, World>();
|
||||
private final Configuration configuration;
|
||||
private final Yaml yaml = new Yaml(new SafeConstructor());
|
||||
|
||||
public CraftServer(MinecraftServer console, ServerConfigurationManager server) {
|
||||
this.console = console;
|
||||
@ -101,6 +109,8 @@ public final class CraftServer implements Server {
|
||||
configuration.getString("settings.update-folder", "update");
|
||||
configuration.getInt("settings.spawn-radius", 16);
|
||||
|
||||
configuration.getString("settings.permissions-file", "permissions.yml");
|
||||
|
||||
if (configuration.getNode("aliases") == null) {
|
||||
List<String> icanhasbukkit = new ArrayList<String>();
|
||||
icanhasbukkit.add("version");
|
||||
@ -139,6 +149,7 @@ public final class CraftServer implements Server {
|
||||
|
||||
if (type == PluginLoadOrder.POSTWORLD) {
|
||||
commandMap.registerServerAliases();
|
||||
loadCustomPermissions();
|
||||
}
|
||||
}
|
||||
|
||||
@ -149,6 +160,16 @@ public final class CraftServer implements Server {
|
||||
private void loadPlugin(Plugin plugin) {
|
||||
try {
|
||||
pluginManager.enablePlugin(plugin);
|
||||
|
||||
List<Permission> perms = plugin.getDescription().getPermissions();
|
||||
|
||||
for (Permission perm : perms) {
|
||||
try {
|
||||
pluginManager.addPermission(perm);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
getLogger().log(Level.WARNING, "Plugin " + plugin.getDescription().getFullName() + " tried to register permission '" + perm.getName() + "' but it's already registered", ex);
|
||||
}
|
||||
}
|
||||
} catch (Throwable ex) {
|
||||
Logger.getLogger(CraftServer.class.getName()).log(Level.SEVERE, ex.getMessage() + " loading " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex);
|
||||
}
|
||||
@ -359,6 +380,48 @@ public final class CraftServer implements Server {
|
||||
enablePlugins(PluginLoadOrder.POSTWORLD);
|
||||
}
|
||||
|
||||
private void loadCustomPermissions() {
|
||||
File file = new File(configuration.getString("settings.permissions-file"));
|
||||
FileInputStream stream;
|
||||
|
||||
try {
|
||||
stream = new FileInputStream(file);
|
||||
} catch (FileNotFoundException ex) {
|
||||
try {
|
||||
file.createNewFile();
|
||||
} finally {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, Map<String, Object>> perms;
|
||||
|
||||
try {
|
||||
perms = (Map<String, Map<String, Object>>)yaml.load(stream);
|
||||
} catch (MarkedYAMLException ex) {
|
||||
getLogger().log(Level.WARNING, "Server permissions file " + file + " is not valid YAML: " + ex.toString());
|
||||
return;
|
||||
} catch (Throwable ex) {
|
||||
getLogger().log(Level.WARNING, "Server permissions file " + file + " is not valid YAML.", ex);
|
||||
return;
|
||||
}
|
||||
|
||||
if (perms == null) {
|
||||
getLogger().log(Level.INFO, "Server permissions file " + file + " is empty, ignoring it");
|
||||
return;
|
||||
}
|
||||
|
||||
Set<String> keys = perms.keySet();
|
||||
|
||||
for (String name : keys) {
|
||||
try {
|
||||
pluginManager.addPermission(Permission.loadPermission(name, perms.get(name)));
|
||||
} catch (Throwable ex) {
|
||||
Bukkit.getServer().getLogger().log(Level.SEVERE, "Permission node '" + name + "' in server config is invalid", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CraftServer{" + "serverName=" + serverName + ",serverVersion=" + serverVersion + ",protocolVersion=" + protocolVersion + '}';
|
||||
|
@ -1,15 +1,23 @@
|
||||
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import java.util.Set;
|
||||
import net.minecraft.server.EntityHuman;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.permissions.PermissibleBase;
|
||||
import org.bukkit.permissions.Permission;
|
||||
import org.bukkit.permissions.PermissionAttachment;
|
||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||
private CraftInventoryPlayer inventory;
|
||||
private final PermissibleBase perm = new PermissibleBase(this);
|
||||
private boolean op;
|
||||
|
||||
public CraftHumanEntity(final CraftServer server, final EntityHuman entity) {
|
||||
super(server, entity);
|
||||
@ -55,4 +63,57 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||
public int getSleepTicks() {
|
||||
return getHandle().sleepTicks;
|
||||
}
|
||||
|
||||
public boolean isOp() {
|
||||
return op;
|
||||
}
|
||||
|
||||
public boolean isPermissionSet(String name) {
|
||||
return perm.isPermissionSet(name);
|
||||
}
|
||||
|
||||
public boolean isPermissionSet(Permission perm) {
|
||||
return this.perm.isPermissionSet(perm);
|
||||
}
|
||||
|
||||
public boolean hasPermission(String name) {
|
||||
return perm.hasPermission(name);
|
||||
}
|
||||
|
||||
public boolean hasPermission(Permission perm) {
|
||||
return this.perm.hasPermission(perm);
|
||||
}
|
||||
|
||||
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value) {
|
||||
return perm.addAttachment(plugin, name, value);
|
||||
}
|
||||
|
||||
public PermissionAttachment addAttachment(Plugin plugin) {
|
||||
return perm.addAttachment(plugin);
|
||||
}
|
||||
|
||||
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value, int ticks) {
|
||||
return perm.addAttachment(plugin, name, value, ticks);
|
||||
}
|
||||
|
||||
public PermissionAttachment addAttachment(Plugin plugin, int ticks) {
|
||||
return perm.addAttachment(plugin, ticks);
|
||||
}
|
||||
|
||||
public void removeAttachment(PermissionAttachment attachment) {
|
||||
perm.removeAttachment(attachment);
|
||||
}
|
||||
|
||||
public void recalculatePermissions() {
|
||||
perm.recalculatePermissions();
|
||||
}
|
||||
|
||||
public void setOp(boolean value) {
|
||||
this.op = value;
|
||||
recalculatePermissions();
|
||||
}
|
||||
|
||||
public Set<PermissionAttachmentInfo> getEffectivePermissions() {
|
||||
return perm.getEffectivePermissions();
|
||||
}
|
||||
}
|
||||
|
@ -25,15 +25,20 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
|
||||
public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
|
||||
public CraftPlayer(CraftServer server, EntityPlayer entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOp() {
|
||||
return server.getHandle().isOp(getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOp(boolean value) {
|
||||
server.getHandle().e(getName());
|
||||
}
|
||||
|
||||
public boolean isPlayer() {
|
||||
return true;
|
||||
}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren