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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (hide annotations) (download)
Wed Jul 18 07:41:35 2018 UTC (5 years, 10 months ago) by torben
File size: 5548 byte(s)
Compile with spigot 1.13
1 torben 1657 package dk.thoerup.bukkit.creativeworld;
2    
3     import org.bukkit.*;
4     import org.bukkit.entity.*;
5 torben 1681 import org.bukkit.event.*;
6 torben 1657 import org.bukkit.event.player.*;
7     import org.bukkit.configuration.*;
8     import org.bukkit.inventory.*;
9 torben 1875 import org.bukkit.enchantments.*;
10 torben 1966 import org.bukkit.material.*;
11 torben 1657
12 torben 1875 import java.util.*;
13    
14 torben 1681 public class WorldChanged implements Listener {
15 torben 1658 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 torben 1875 final static String STACK_ENCHANTMENT = ".enchantment";
20 torben 1657
21 torben 1658 final static String INVENTORY_CREATIVE = ".inventory.creative.";
22     final static String INVENTORY_CREATIVE_ARMOR = ".inventory.creative.armor.";
23    
24 torben 1657 CreativeMain plugin;
25     public WorldChanged(CreativeMain plugin) {
26     this.plugin = plugin;
27     }
28    
29 torben 1682
30 torben 1681 @EventHandler
31 torben 1682 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 torben 1657 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 torben 1658 String node = player.getName() + INVENTORY_CREATIVE + i;;
55 torben 1657 //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 torben 1658 String node = player.getName() + INVENTORY_CREATIVE_ARMOR + i;;
62 torben 1657 //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 torben 1658 String node = player.getName() + INVENTORY_CREATIVE + i;;
84 torben 1657 //items[i] = config.getItemStack(node);
85 torben 2038 items[i] = getItemStack(player, config, node);
86 torben 1657 }
87    
88    
89    
90     ItemStack armor[] = new ItemStack[ inv.getArmorContents().length];
91     for (int i=0; i<armor.length; i++) {
92 torben 1658 String node = player.getName() + INVENTORY_CREATIVE_ARMOR + i;
93 torben 1657 //armor[i] = config.getItemStack(node);
94 torben 2038 armor[i] = getItemStack(player, config, node);
95 torben 1657 }
96    
97     inv.setContents( items );
98     inv.setArmorContents( armor );
99     }
100     }
101    
102    
103     public void saveItemStack(Configuration config, String node, ItemStack stack) {
104 torben 3238 String type = "";
105 torben 1713 int amount = 0;
106     int damage = 0;
107     int data = 0;
108 torben 1875 String enchantment = "";
109 torben 1713
110     if (stack != null) {
111 torben 3238 type = stack.getType().name();
112 torben 1713 amount = stack.getAmount();
113     damage = stack.getDurability();
114     data = stack.getData().getData();
115 torben 1875 enchantment = getEnchantmentString(stack);
116 torben 1713 }
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 torben 1875 config.set(node + STACK_ENCHANTMENT, enchantment );
123 torben 1657 }
124    
125 torben 2038 public ItemStack getItemStack(Player player, Configuration config, String node) {
126 torben 3238 String typeStr = config.getString( node + STACK_TYPE);
127 torben 1658 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 torben 1875 String enc = config.getString(node + STACK_ENCHANTMENT );
131 torben 1657
132 torben 3238 Material mat = Material.valueOf(typeStr);
133    
134     ItemStack stack = new ItemStack(mat,amount,damage);
135     MaterialData matData = new MaterialData(mat,data); //TODO: fix this
136 torben 1966 stack.setData(matData);
137 torben 3238
138 torben 1663 stack.setDurability( damage ); //ItemStack constructor with Data value overrides durability
139 torben 1973 try {
140     stack.addEnchantments( parseEnchantmentString(enc) );
141     } catch (IllegalArgumentException e) {
142     plugin.getLogger().info( "EXCEPTION Error applying enchantment" + e.getMessage() );
143 torben 2038 plugin.getLogger().info( "EXCEPTION Player " + player.getName() );
144 torben 3238 plugin.getLogger().info( "EXCEPTION Type=" + typeStr + " enhancement=" + enc);
145 torben 1973 }
146 torben 1663 return stack;
147 torben 1657 }
148 torben 1875
149     public String getEnchantmentString(ItemStack stack) {
150     StringBuilder sb = new StringBuilder();
151    
152     Map<Enchantment,Integer> map = stack.getEnchantments();
153     for(Enchantment enc : map.keySet() ) {
154     if (sb.length() > 0)
155     sb.append(";");
156    
157     Integer level = map.get(enc);
158     sb.append( enc.getName() ).append("=").append(level);
159     }
160    
161     return sb.toString();
162     }
163    
164     public Map<Enchantment,Integer> parseEnchantmentString(String input) {
165     Map<Enchantment,Integer> map = new HashMap<Enchantment,Integer>();
166    
167     if (input.length() == 0)
168     return map;
169    
170     String parts[] = input.split(";");
171     for(String part : parts) {
172     String keyval[] = part.split("=");
173    
174     Enchantment enc = Enchantment.getByName( keyval[0] );
175     int level = Integer.parseInt( keyval[1]);
176     map.put(enc, level);
177     }
178    
179     return map;
180     }
181 torben 1657
182     }

  ViewVC Help
Powered by ViewVC 1.1.20