Neary full functional Inventory module.

This commit is contained in:
Jascha Starke 2013-01-20 13:15:34 +01:00
parent 672befc658
commit 771d2a01f9
9 changed files with 198 additions and 31 deletions

View file

@ -1,5 +1,6 @@
basic.loaded.worldguard: Successfully loaded with WorldGuard-Integration
basic.loaded.no_worldguard: Successfully loaded (without WorldGuard)
basic.loaded.module: Module loaded.
basic.feature.store: separated inventories
basic.feature.limit: creative restrictions
basic.feature.region: creative regions

View file

@ -0,0 +1,55 @@
basic.loaded.worldguard: Erfolgreich mit WorldGuard-Integration geladen
basic.loaded.no_worldguard: Erfolgreich geladen (ohne WorldGuard)
basic.loaded.module: Modul geladen.
basic.feature.store: Getrennte Inventare
basic.feature.limit: Kreativ-Einschränkungen
basic.feature.region: Kreativ-Regionen
basic.conflict: Wegen eines Konfliktes mit {0} ist die Funktion {1} deaktiviert
basic.warning.worldguard_not_found: WorldGuard wurd enicht gefunde, dahier ist die Funktion {0} deaktiviert
command.player: Spieler
command.switch.survival: Ändert den Spiel-Modus des Charakters zu überleben
command.switch.creative: Ändert den Spiel-Modus des Charakters zu Kreativ
command.switch.adventure: Ändert den Spiel-Modus des Charakters zu Abenteuer
command.switch.config.overview: "[Einstellung] - liste durch weglassen"
command.switch.config.settings: "Verfügbare Einstellungen: "
command.switch.config.reload: Lädt das Plugin neu (funktioniert nur teilweise)
command.gamemode.changed: "{0}'s Spiel-Modus wurde geändert"
command.gamemode.no_change: Bereits in diesem Spiel-Modus
command.option.done: Option geändert.
command.worldguard.alias: Alias für den //region-Befehl
command.worldguard.unknown_flag: Unbekanntes Attribut
command.worldguard.available_flags: Verfügbare Attribute
command.worldguard.region_not_found: Keine Region mit dieser ID gefunden
command.worldguard.world_not_found: Es konnte keine Welt mit diesem Namen gefunden werden
command.worldguard.no_flag_given: Es muss ein Attribut angegeben werden, dass gesetzt werden soll
command.worldguard.no_integration: Der worldguard-Befehl ist nicht verfügbar, da WorldGuard nicht gefunden wurde
command.worldguard.flag_set: "Das Attribut {0} wurde gesetzt"
command.worldguard.additional_flags: Zusätzliche Attribute
cmdblock.blocked: Dieser Befehl ist im Kreativ-Modus blockiert.
exception.command.lackingpermission: Kein Zugriff auf diesen Befehl
exception.command.toomuchparameter: Zuviele Argumente angegeben
exception.command.missingparameter: Nicht genügen Argumente angegeben
exception.command.playernotfound: Spieler nicht gefunden
exception.command.invalidoption: Unbkeannte Option
exception.config.savefail: Die Konfiguration konnte nicht gespeichert werden
exception.config.material_not_found: (Konfiguration) Material mit Name/ID "{0}" wurde nicht gefunden.
exception.storage.load: Fehler beim Laden des Inventars. Bitte einen Admin die Option "UnsafeStorege" in LimitedCreative zu aktivieren um ungültig verzauberte Gegenstände zu erlauben
exception.region.not_optional: "In dieser Region kannst du nicht im folgenden Modus sein: {0}"
blocked.chest: Zugriff auf Truhen ist im Kreativ-Modus nicht erlaubt
blocked.sign: Im Kreativ-Modus kann nicht mit Schildern interagiert werden
blocked.button: Im Kreativ-Modus kann nicht mit Buttons interagiert werden
blocked.lever: Im Kreativ-Modus kann nicht mit Schaltern interagiert werden
blocked.survival_flying: Du solltest auf dem Boden stehen wenn du Kreativ-Regionen verlässt
blocked.outside_place: Du kannst keine Blöcke auÿerhalb von Spiel-Modus-Regionen setzen
blocked.outside_break: Du kannst keine Blöcke auÿerhalb von Spiel-Modus-Regionen zerstören
blocked.inside_place: Du kannst keine Blöcke innerhalb von Spiel-Modus-Regionen setzen
blocked.inside_break: Du kannst keine Blöcke innerhalb von Spiel-Modus-Regionen zerstören
blocked.use: Du darfst diese Art von Gegenständen im Kreativ-Modus verwenden
blocked.place: Du darfst diese Art von Blöcken im Kreativ-Modus nicht setzen
blocked.break: Du darfst diese Art von Blöcken im Kreativ-Modus nicht zerstören
blocked.piston: Verschieben von Block {0} aus einer Spiel-Modus-Region bei {1} wurde blockiert
blocked.piston_in: Verschieben von Block {0} in eine Spiel-Modus-Region bei {1} wurde blockiert

View file

@ -4,6 +4,7 @@ import java.io.IOException;
import de.jaschastarke.bukkit.lib.Core;
import de.jaschastarke.bukkit.lib.configuration.PluginConfiguration;
import de.jaschastarke.configuration.annotations.IsConfigurationNode;
import de.jaschastarke.maven.ArchiveDocComments;
import de.jaschastarke.utils.ClassDescriptorStorage;
@ -17,7 +18,6 @@ public class Config extends PluginConfiguration {
public Config(Core plugin) {
super(plugin);
}
@Override
public void save() {
try {
@ -27,5 +27,12 @@ public class Config extends PluginConfiguration {
}
super.save();
}
/**
* Debug
*/
@IsConfigurationNode(order = 9999)
public boolean getDebug() {
return config.getBoolean("debug", false);
}
}

View file

@ -3,6 +3,7 @@ package de.jaschastarke.minecraft.limitedcreative;
import org.bukkit.Bukkit;
import de.jaschastarke.hooking.BooleanHooker;
import de.jaschastarke.hooking.GetHooker;
import de.jaschastarke.minecraft.limitedcreative.hooks.AuthMeHooks;
import de.jaschastarke.minecraft.limitedcreative.hooks.MultiVerseHooks;
import de.jaschastarke.minecraft.limitedcreative.hooks.PlayerCheckHooker;
@ -13,6 +14,7 @@ public final class Hooks {
public static PlayerCheckHooker IsLoggedIn = new PlayerCheckHooker(true);
public static WorldTypeHooker DefaultWorldGameMode = new WorldTypeHooker();
public static BooleanHooker IsMultiVerse = new BooleanHooker(false);
public static GetHooker<String> InventoryIncompatible = new GetHooker<String>();
public static boolean isPluginEnabled(String pluginName) {
return Bukkit.getServer().getPluginManager().isPluginEnabled(pluginName);
@ -22,6 +24,7 @@ public final class Hooks {
IsLoggedIn.clearHooks();
DefaultWorldGameMode.clearHooks();
IsMultiVerse.clearHooks();
InventoryIncompatible.clearHooks();
if (isPluginEnabled("AuthMe")) {
new AuthMeHooks(plugin);
@ -32,5 +35,16 @@ public final class Hooks {
if (isPluginEnabled("Multiverse-Core")) {
new MultiVerseHooks(plugin);
}
InventoryIncompatible.register(new GetHooker.Check<String>() {
@Override
public String test() {
if (isPluginEnabled("MultiInv"))
return "MultiInv";
if (isPluginEnabled("Multiverse-Inventories"))
return "Multiverse-Inventories";
return null;
}
});
}
}

View file

@ -2,6 +2,7 @@ package de.jaschastarke.minecraft.limitedcreative;
import de.jaschastarke.i18n;
import de.jaschastarke.bukkit.lib.Core;
import de.jaschastarke.bukkit.lib.PluginLang;
public class LimitedCreative extends Core {
private i18n lang;
@ -9,13 +10,18 @@ public class LimitedCreative extends Core {
@Override
public void OnInitialize() {
super.OnInitialize();
config = new Config(this);
lang = new i18n("lang/messages");
this.debug = config.getDebug();
lang = new PluginLang("lang/messages", this);
Hooks.inizializeHooks(this);
addModule(new ModInventories(this));
addModule(new ModCreativeLimits(this));
addModule(new ModRegions(this));
addModule(new ModCmdBlocker(this));
Hooks.inizializeHooks(this);
config.save();
}

View file

@ -30,6 +30,10 @@ public class ModInventories extends CoreModule<LimitedCreative> {
public ModInventories(LimitedCreative plugin) {
super(plugin);
}
@Override
public String getName() {
return "Inventory";
}
@Override
public void Initialize(ModuleEntry<IModule> entry) {
@ -37,12 +41,18 @@ public class ModInventories extends CoreModule<LimitedCreative> {
listeners.addListener(new PlayerListener(this));
config = plugin.getPluginConfig().registerSection(new InventoryConfig(this));
armor_config = config.registerSection(new ArmoryConfig(this));
String incomp = Hooks.InventoryIncompatible.test();
if (incomp != null) {
getLog().warn(plugin.getLocale().trans("basic.conflict", incomp, this.getName()));
}
}
@Override
public void OnEnable() {
super.OnEnable();
storage = new InvYamlStorage(this, new File(plugin.getDataFolder(), config.getFolder()));
inventories = new WeakHashMap<Player, Inventory>();
getLog().info(plugin.getLocale().trans("basic.loaded.module"));
}
public InventoryConfig getConfig() {
return config;

View file

@ -0,0 +1,15 @@
/**
* This package contains Hookers and Hooks to integrate with other Plugins.
*
* Hookers are base classes to describe functions to test again. They are simple event manager, which hooks can register
* thru. So they should be only instantiated once in a global class.
* de.jaschastarke.minecraft.limitedcreative.Hooks in this case.
*
* Hooks are the implemented event listeners which will be registered to the static hooker-instances. The first hook
* sorted by priority which gives an answer will be returned. The exact behavior of multiple hooks are described by
* the hooker.
*
* As the plugins itself doesn't register the hooks it is done by the static
* de.jaschastarke.minecraft.limitedcreative.Hooks-initializer.
*/
package de.jaschastarke.minecraft.limitedcreative.hooks;

View file

@ -4,6 +4,7 @@ import java.util.HashMap;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.material.MaterialData;
import de.jaschastarke.bukkit.lib.ModuleLogger;
@ -11,14 +12,14 @@ import de.jaschastarke.bukkit.lib.configuration.Configuration;
import de.jaschastarke.bukkit.lib.items.MaterialDataNotRecognizedException;
import de.jaschastarke.bukkit.lib.items.MaterilNotRecognizedException;
import de.jaschastarke.bukkit.lib.items.Utils;
import de.jaschastarke.configuration.annotations.IConfigurationSubGroup;
import de.jaschastarke.configuration.IConfigurationSubGroup;
import de.jaschastarke.configuration.annotations.IsConfigurationNode;
import de.jaschastarke.maven.ArchiveDocComments;
import de.jaschastarke.minecraft.limitedcreative.LimitedCreative;
import de.jaschastarke.minecraft.limitedcreative.ModInventories;
/**
* CreativeArmor
* InventoryCreativeArmor
*
* When set, all creative Player automatically wears the given items as Armor. So they are better seen by other Players.
*/
@ -29,14 +30,28 @@ public class ArmoryConfig extends Configuration implements IConfigurationSubGrou
mod = modInventories;
}
@Override
public String getNodeName() {
return "armor";
public void setValues(ConfigurationSection sect) {
if (sect == null || sect.getValues(false).size() == 0) {
ConfigurationSection parent_sect = mod.getConfig().getValues();
if (parent_sect.contains("armor")) {
sect = parent_sect.createSection(this.getName(), parent_sect.getConfigurationSection("armor").getValues(true));
}
}
super.setValues(sect);
}
@Override
public String getName() {
return "creativeArmor";
}
@Override
public int getOrder() {
return 1000;
}
/**
* CreativeArmorEnabled
* InventoryCreativeArmorEnabled
*
* When disabled, the players Armor isn't swapped
* When disabled, the players Armor isn't changed.
*
* default: true
*/
@ -44,14 +59,6 @@ public class ArmoryConfig extends Configuration implements IConfigurationSubGrou
public boolean getEnabled() {
return config.getBoolean("enabled", true);
}
/**
* CreativeArmor-Items
*
* Allows changing of the "Creative-Armor" to be wear when in creative mode
*
* *see Blacklist for details on Item-Types
*/
public Map<String, MaterialData> getCreativeArmor() {
if (getEnabled()) {
Map<String, MaterialData> armor = new HashMap<String, MaterialData>();
@ -74,6 +81,30 @@ public class ArmoryConfig extends Configuration implements IConfigurationSubGrou
}
return null;
}
/**
* InventoryCreativeArmorItems
*
* Allows changing of the "Creative-Armor" to be wear when in creative mode
*
* *see Blacklist for details on Item-Types
*/
@IsConfigurationNode(order = 500)
public String getHead() {
return config.getString("head", "CHAINMAIL_HELMET");
}
@IsConfigurationNode(order = 501)
public String getChest() {
return config.getString("chest", "CHAINMAIL_CHESTPLATE");
}
@IsConfigurationNode(order = 502)
public String getLegs() {
return config.getString("legs", "CHAINMAIL_LEGGINGS");
}
@IsConfigurationNode(order = 503)
public String getFeet() {
return config.getString("feet", "CHAINMAIL_BOOTS");
}
@Deprecated
public String L(String msg, Object... objects) {

View file

@ -1,11 +1,18 @@
package de.jaschastarke.minecraft.limitedcreative.inventories;
import org.bukkit.configuration.ConfigurationSection;
import de.jaschastarke.bukkit.lib.configuration.Configuration;
import de.jaschastarke.configuration.annotations.IConfigurationSubGroup;
import de.jaschastarke.configuration.IConfigurationSubGroup;
import de.jaschastarke.configuration.annotations.IsConfigurationNode;
import de.jaschastarke.maven.ArchiveDocComments;
import de.jaschastarke.minecraft.limitedcreative.ModInventories;
/**
* Inventory-Feature
*
* http://dev.bukkit.org/server-mods/limited-creative/pages/features/inventory/
*/
@ArchiveDocComments
public class InventoryConfig extends Configuration implements IConfigurationSubGroup {
protected ModInventories mod;
@ -13,46 +20,67 @@ public class InventoryConfig extends Configuration implements IConfigurationSubG
mod = modInventories;
}
@Override
public String getNodeName() {
return "store";
public void setValues(ConfigurationSection sect) {
if (sect == null || sect.getValues(false).size() == 0) {
ConfigurationSection parent_sect = mod.getPlugin().getPluginConfig().getValues();
if (parent_sect.contains("store")) {
sect = parent_sect.createSection(this.getName(), parent_sect.getConfigurationSection("store").getValues(true));
}
}
super.setValues(sect);
// Config Upgrade
if (!sect.contains("storeCreative") && sect.contains("creative"))
sect.set("storeCreative", sect.getBoolean("creative"));
if (!sect.contains("separateAdventure") && sect.contains("adventure"))
sect.set("separateAdventure", sect.getBoolean("adventure"));
}
@Override
public String getName() {
return "inventory";
}
@Override
public int getOrder() {
return 100;
}
/**
* SeparatedInventoryEnabled
* InventoryEnabled
*
* Use this option to disable the separated inventories feature, for the case you only need the other features.
* Use this option to disable the separated inventories feature, for example if you use another Plugin handling
* the inventories, like Multiverse-Inventories.
*
* default: true
*/
@IsConfigurationNode
@IsConfigurationNode(order = 100)
public boolean getEnabled() {
return config.getBoolean("enabled", true);
}
/**
* StoreCreative
* InventoryStoreCreative
*
* Should the creative-inventory also be stored on disk, when switching to survival?
* If disabled, the inventory gets cleared every time on switching to creative.
*
* default: true
*/
@IsConfigurationNode
@IsConfigurationNode(order = 200)
public boolean getStoreCreative() {
return config.getBoolean("storeCreative", config.getBoolean("creative", true));
return config.getBoolean("storeCreative", true);
}
/**
* SeparateAdventureInventory
* InventorySeparateAdventure
*
* When true, your players get a separate inventory when switching to adventure gamemode (2). Otherwise
* they have the default survival inventory while in adventure gamemode.
*
* default: false
*/
@IsConfigurationNode
@IsConfigurationNode(order = 300)
public boolean getSeparateAdventure() {
return config.getBoolean("separateAdventure", config.getBoolean("adventure", true));
return config.getBoolean("separateAdventure", true);
}
/**
@ -63,7 +91,7 @@ public class InventoryConfig extends Configuration implements IConfigurationSubG
*
* default: "inventories"
*/
@IsConfigurationNode
@IsConfigurationNode(order = 400)
public String getFolder() {
return config.getString("folder", "inventories");
}