Separated inventories
No Drop/Pickup
This commit is contained in:
commit
9cc0fb267d
10 changed files with 361 additions and 0 deletions
|
@ -0,0 +1,45 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
//import org.bukkit.plugin.PluginManager;
|
||||
|
||||
public class Commands {
|
||||
private static LimitedCreativeCore plugin;
|
||||
//private static PluginManager pm;
|
||||
|
||||
public static class MainCommandExecutor implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
Player player = null;
|
||||
if (sender instanceof Player) {
|
||||
player = (Player) sender;
|
||||
} else {
|
||||
sender.sendMessage("Console-Commands not supported");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length >= 1 && args[0].equalsIgnoreCase("load")) {
|
||||
if (args.length == 1 || args[1].equalsIgnoreCase("survival") || args[1] == "0") {
|
||||
new Inventory(player).load(GameMode.SURVIVAL);
|
||||
return true;
|
||||
}/* else if (args.length == 2 && (args[1].equalsIgnoreCase("creative") || args[1] == "1")) {
|
||||
new Inventory(player).load(GameMode.CREATIVE);
|
||||
return true;
|
||||
}*/
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void register(LimitedCreativeCore pplugin) {
|
||||
plugin = pplugin;
|
||||
//pm = plugin.getServer().getPluginManager();
|
||||
|
||||
plugin.getCommand("limitedcreative").setExecutor(new MainCommandExecutor());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
public class Configuration {
|
||||
public Configuration(FileConfiguration cfg) {
|
||||
|
||||
}
|
||||
public boolean getStoreCreative() {
|
||||
return true;
|
||||
}
|
||||
public boolean getDropInCreative() {
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
import de.jaschastarke.minecraft.limitedcreative.serialize.Armor;
|
||||
import de.jaschastarke.minecraft.limitedcreative.serialize.Items;
|
||||
|
||||
public class Inventory {
|
||||
protected Player player;
|
||||
protected PlayerInventory inv;
|
||||
|
||||
public Inventory(Player p) {
|
||||
player = p;
|
||||
inv = p.getInventory();
|
||||
}
|
||||
|
||||
public void save() {
|
||||
File f = new File(LimitedCreativeCore.plugin.getDataFolder(), getFileName(player, player.getGameMode()));
|
||||
storeInventory(inv, f);
|
||||
}
|
||||
|
||||
public void load(GameMode gm) {
|
||||
File f = new File(LimitedCreativeCore.plugin.getDataFolder(), getFileName(player, gm));
|
||||
restoreInventory(inv, f);
|
||||
}
|
||||
public void load() {
|
||||
load(player.getGameMode());
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
inv.setArmorContents(new ItemStack[]{
|
||||
new ItemStack(0),
|
||||
new ItemStack(0),
|
||||
new ItemStack(0),
|
||||
new ItemStack(0),
|
||||
});
|
||||
inv.clear();
|
||||
}
|
||||
|
||||
private String getFileName(Player player, GameMode gm) {
|
||||
if (gm != GameMode.SURVIVAL) {
|
||||
return player.getName()+"_"+gm.toString()+".yml";
|
||||
} else {
|
||||
return player.getName()+".yml";
|
||||
}
|
||||
}
|
||||
|
||||
protected static void storeInventory(PlayerInventory pinv, File file) {
|
||||
YamlConfiguration yml = new YamlConfiguration();
|
||||
|
||||
new Armor(pinv).store(yml.createSection("armor"));
|
||||
new Items(pinv).store(yml.createSection("inv"));
|
||||
|
||||
try {
|
||||
yml.save(file);
|
||||
} catch (IOException e) {
|
||||
LimitedCreativeCore.plugin.logger.severe(e.getMessage());
|
||||
}
|
||||
}
|
||||
protected static void restoreInventory(PlayerInventory pinv, File file) {
|
||||
YamlConfiguration yml = YamlConfiguration.loadConfiguration(file);
|
||||
|
||||
new Armor(pinv).restore(yml.getConfigurationSection("armor"));
|
||||
new Items(pinv).restore(yml.getConfigurationSection("inv"));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
||||
public class LimitedCreativeCore extends JavaPlugin {
|
||||
public final Logger logger = Logger.getLogger("Minecraft");
|
||||
public Configuration config;
|
||||
public WorldGuardIntegration worldguard;
|
||||
public static LimitedCreativeCore plugin;
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
logger.info("["+this.getDescription().getName()+"] cleanly unloaded.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
plugin = this;
|
||||
|
||||
config = new Configuration(this.getConfig());
|
||||
Listener.register(this);
|
||||
Commands.register(this);
|
||||
try {
|
||||
Class.forName("com.sk89q.worldguard.bukkit.WorldGuardPlugin", false, null);
|
||||
worldguard = new WorldGuardIntegration(this);
|
||||
worldguard.init();
|
||||
} catch (ClassNotFoundException e) {}
|
||||
|
||||
PluginDescriptionFile df = this.getDescription();
|
||||
logger.info("["+df.getName() + " v" + df.getVersion() + "] done loading.");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.Event.Priority;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.event.player.PlayerGameModeChangeEvent;
|
||||
import org.bukkit.event.player.PlayerListener;
|
||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
|
||||
public final class Listener {
|
||||
private static LimitedCreativeCore plugin;
|
||||
private static PluginManager pm;
|
||||
|
||||
public static class PlayerListen extends PlayerListener {
|
||||
@Override
|
||||
public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) {
|
||||
if (event.getNewGameMode() == GameMode.CREATIVE) {
|
||||
new PlayerCore(plugin, event.getPlayer()).onSetCreative();
|
||||
} else if (event.getNewGameMode() == GameMode.SURVIVAL) {
|
||||
new PlayerCore(plugin, event.getPlayer()).onSetSurvival();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onPlayerDropItem(PlayerDropItemEvent event) {
|
||||
if (event.getPlayer().getGameMode() == GameMode.CREATIVE && !plugin.config.getDropInCreative()) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
||||
if (event.getPlayer().getGameMode() == GameMode.CREATIVE && !plugin.config.getDropInCreative()) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void register() {
|
||||
pm.registerEvent(Event.Type.PLAYER_GAME_MODE_CHANGE, this, Priority.Low, plugin);
|
||||
pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, this, Priority.High, plugin);
|
||||
pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, this, Priority.High, plugin);
|
||||
}
|
||||
}
|
||||
|
||||
public static void register(LimitedCreativeCore pplugin) {
|
||||
plugin = pplugin;
|
||||
pm = plugin.getServer().getPluginManager();
|
||||
|
||||
new PlayerListen().register();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PlayerCore {
|
||||
private static LimitedCreativeCore plugin;
|
||||
private Player player;
|
||||
|
||||
public PlayerCore(LimitedCreativeCore pplugin, Player pplayer) {
|
||||
plugin = pplugin;
|
||||
player = pplayer;
|
||||
}
|
||||
|
||||
public void onSetCreative() {
|
||||
Inventory inv = new Inventory(player);
|
||||
inv.save();
|
||||
if (plugin.config.getStoreCreative()) {
|
||||
inv.load(GameMode.CREATIVE);
|
||||
} else {
|
||||
inv.clear();
|
||||
}
|
||||
}
|
||||
public void onSetSurvival() {
|
||||
Inventory inv = new Inventory(player);
|
||||
if (plugin.config.getStoreCreative()) {
|
||||
inv.save();
|
||||
}
|
||||
inv.load(GameMode.SURVIVAL);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative;
|
||||
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||
|
||||
public class WorldGuardIntegration {
|
||||
public static LimitedCreativeCore plugin;
|
||||
public static WorldGuardPlugin wg;
|
||||
|
||||
public WorldGuardIntegration(LimitedCreativeCore pplugin) {
|
||||
plugin = pplugin;
|
||||
wg = (WorldGuardPlugin) plugin.getServer().getPluginManager().getPlugin("WorldGuard");
|
||||
}
|
||||
|
||||
|
||||
public static final StateFlag CREATIVE_MEMBER = new StateFlag("creative-member", false);
|
||||
|
||||
public void init() {
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative.serialize;
|
||||
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
public class Armor implements Storeable {
|
||||
private PlayerInventory inv;
|
||||
public Armor(PlayerInventory pi) {
|
||||
inv = pi;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void store(ConfigurationSection section) {
|
||||
if (inv.getHelmet() != null && inv.getHelmet().getTypeId() != 0)
|
||||
section.set("helmet", inv.getHelmet());
|
||||
if (inv.getChestplate() != null && inv.getChestplate().getTypeId() != 0)
|
||||
section.set("chestplate", inv.getChestplate());
|
||||
if (inv.getLeggings() != null && inv.getLeggings().getTypeId() != 0)
|
||||
section.set("leggins", inv.getLeggings());
|
||||
if (inv.getBoots() != null && inv.getBoots().getTypeId() != 0)
|
||||
section.set("boots", inv.getBoots());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restore(ConfigurationSection section) {
|
||||
if (section.contains("helmet"))
|
||||
inv.setHelmet(section.getItemStack("helmet"));
|
||||
else
|
||||
inv.setHelmet(null);
|
||||
|
||||
if (section.contains("chestplate"))
|
||||
inv.setChestplate(section.getItemStack("chestplate"));
|
||||
else
|
||||
inv.setChestplate(null);
|
||||
|
||||
if (section.contains("leggins"))
|
||||
inv.setLeggings(section.getItemStack("leggins"));
|
||||
else
|
||||
inv.setLeggings(null);
|
||||
|
||||
if (section.contains("boots"))
|
||||
inv.setBoots(section.getItemStack("boots"));
|
||||
else
|
||||
inv.setBoots(null);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative.serialize;
|
||||
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
import de.jaschastarke.minecraft.limitedcreative.LimitedCreativeCore;
|
||||
|
||||
public class Items implements Storeable {
|
||||
private PlayerInventory inv;
|
||||
public Items(PlayerInventory pi) {
|
||||
inv = pi;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void store(ConfigurationSection section) {
|
||||
for (int i = 0; i < inv.getSize(); i++) {
|
||||
if (inv.getItem(i) != null && inv.getItem(i).getTypeId() != 0)
|
||||
section.set(String.valueOf(i), inv.getItem(i));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restore(ConfigurationSection section) {
|
||||
inv.clear();
|
||||
for (int i = 0; i < inv.getSize(); i++) {
|
||||
if (section.contains(String.valueOf(i))) {
|
||||
inv.setItem(i, section.getItemStack(String.valueOf(i)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative.serialize;
|
||||
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
public interface Storeable {
|
||||
public void store(ConfigurationSection section);
|
||||
public void restore(ConfigurationSection section);
|
||||
}
|
Loading…
Reference in a new issue