/[projects]/miscJava/bukkit-minecraft-plugins/CreativeWorld/src/main/java/dk/thoerup/bukkit/creativeworld/WorldChanged.java
ViewVC logotype

Contents of /miscJava/bukkit-minecraft-plugins/CreativeWorld/src/main/java/dk/thoerup/bukkit/creativeworld/WorldChanged.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1966 - (show annotations) (download)
Thu Apr 4 12:05:06 2013 UTC (11 years, 1 month ago) by torben
File size: 5142 byte(s)
avoid using deprecated constructor
1 package dk.thoerup.bukkit.creativeworld;
2
3 import org.bukkit.*;
4 import org.bukkit.entity.*;
5 import org.bukkit.event.*;
6 import org.bukkit.event.player.*;
7 import org.bukkit.configuration.*;
8 import org.bukkit.inventory.*;
9 import org.bukkit.enchantments.*;
10 import org.bukkit.material.*;
11
12 import java.util.*;
13
14 public class WorldChanged implements Listener {
15 final static String STACK_TYPE = ".type";
16 final static String STACK_AMOUNT = ".amount";
17 final static String STACK_DAMAGE = ".damage";
18 final static String STACK_DATA = ".data";
19 final static String STACK_ENCHANTMENT = ".enchantment";
20
21 final static String INVENTORY_CREATIVE = ".inventory.creative.";
22 final static String INVENTORY_CREATIVE_ARMOR = ".inventory.creative.armor.";
23
24 CreativeMain plugin;
25 public WorldChanged(CreativeMain plugin) {
26 this.plugin = plugin;
27 }
28
29
30 @EventHandler
31 public void onPlayerExpChange(PlayerExpChangeEvent event) {
32 if (event.getPlayer().getWorld().getName().equalsIgnoreCase("creative")) {
33 event.setAmount(0); //users don't acummulate xp points in creative mode
34 }
35 }
36
37 @EventHandler
38 public void onPlayerChangedWorld(PlayerChangedWorldEvent event) {
39
40
41 Player player = event.getPlayer();
42
43 System.out.println( player.getName() + " : " + event.getFrom().getName() + " -> " + player.getWorld().getName() );
44
45 Configuration config = plugin.getConfig();
46
47 if (player.getWorld().getName().equalsIgnoreCase("creative") ) {
48 player.sendMessage(ChatColor.YELLOW + "You are now in creative world - have fun");
49 config.set( player.getName() + ".iscreative", true);
50
51 PlayerInventory inv = player.getInventory();
52
53 for (int i=0; i<inv.getSize(); i++) {
54 String node = player.getName() + INVENTORY_CREATIVE + i;;
55 //config.set( node, inv.getItem(i) );
56 saveItemStack(config, node, inv.getItem(i) );
57 }
58
59 ItemStack armor[] = inv.getArmorContents();
60 for (int i=0; i<armor.length; i++) {
61 String node = player.getName() + INVENTORY_CREATIVE_ARMOR + i;;
62 //config.set( node, armor[i] );
63 saveItemStack(config, node, armor[i] );
64 }
65
66 plugin.saveConfig();
67
68 inv.clear();
69
70 player.setGameMode( GameMode.CREATIVE );
71
72 } else if (event.getFrom().getName().equalsIgnoreCase("creative") ) {
73 player.sendMessage(ChatColor.YELLOW + "You are now in survival world - watch out !!!");
74 config.set( player.getName() + ".iscreative", false);
75 player.setGameMode( GameMode.SURVIVAL );
76
77 PlayerInventory inv = player.getInventory();
78 inv.clear();
79
80 ItemStack items[] = new ItemStack[ inv.getSize() ];
81
82 for (int i=0; i<inv.getSize(); i++) {
83 String node = player.getName() + INVENTORY_CREATIVE + i;;
84 //items[i] = config.getItemStack(node);
85 items[i] = getItemStack(config, node);
86 }
87
88
89
90 ItemStack armor[] = new ItemStack[ inv.getArmorContents().length];
91 for (int i=0; i<armor.length; i++) {
92 String node = player.getName() + INVENTORY_CREATIVE_ARMOR + i;
93 //armor[i] = config.getItemStack(node);
94 armor[i] = getItemStack(config, node);
95 }
96
97 inv.setContents( items );
98 inv.setArmorContents( armor );
99 }
100 }
101
102
103 public void saveItemStack(Configuration config, String node, ItemStack stack) {
104 int type = 0;
105 int amount = 0;
106 int damage = 0;
107 int data = 0;
108 String enchantment = "";
109
110 if (stack != null) {
111 type = stack.getTypeId();
112 amount = stack.getAmount();
113 damage = stack.getDurability();
114 data = stack.getData().getData();
115 enchantment = getEnchantmentString(stack);
116 }
117
118 config.set(node + STACK_TYPE, type );
119 config.set(node + STACK_AMOUNT, amount );
120 config.set(node + STACK_DAMAGE, damage );
121 config.set(node + STACK_DATA, data );
122 config.set(node + STACK_ENCHANTMENT, enchantment );
123 }
124
125 public ItemStack getItemStack(Configuration config, String node) {
126 int type = config.getInt( node + STACK_TYPE);
127 int amount = config.getInt( node + STACK_AMOUNT);
128 short damage = (short) config.getInt(node + STACK_DAMAGE);
129 byte data = (byte) config.getInt(node + STACK_DATA);
130 String enc = config.getString(node + STACK_ENCHANTMENT );
131
132 ItemStack stack = new ItemStack(type,amount,damage);
133 MaterialData matData = new MaterialData(type,data);
134 stack.setData(matData);
135 stack.setDurability( damage ); //ItemStack constructor with Data value overrides durability
136 stack.addEnchantments( parseEnchantmentString(enc) );
137 return stack;
138 }
139
140 public String getEnchantmentString(ItemStack stack) {
141 StringBuilder sb = new StringBuilder();
142
143 Map<Enchantment,Integer> map = stack.getEnchantments();
144 for(Enchantment enc : map.keySet() ) {
145 if (sb.length() > 0)
146 sb.append(";");
147
148 Integer level = map.get(enc);
149 sb.append( enc.getName() ).append("=").append(level);
150 }
151
152 return sb.toString();
153 }
154
155 public Map<Enchantment,Integer> parseEnchantmentString(String input) {
156 Map<Enchantment,Integer> map = new HashMap<Enchantment,Integer>();
157
158 if (input.length() == 0)
159 return map;
160
161 String parts[] = input.split(";");
162 for(String part : parts) {
163 String keyval[] = part.split("=");
164
165 Enchantment enc = Enchantment.getByName( keyval[0] );
166 int level = Integer.parseInt( keyval[1]);
167 map.put(enc, level);
168 }
169
170 return map;
171 }
172
173 }

  ViewVC Help
Powered by ViewVC 1.1.20