Skip to content

Commit 6b7934b

Browse files
committed
bugfix
1 parent eaac9e5 commit 6b7934b

5 files changed

Lines changed: 139 additions & 32 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import org.apache.tools.ant.filters.ReplaceTokens
33
apply plugin: 'java'
44

55
group = 'xyz.n7mn.dev.yululi'
6-
version = '3.0.7-rc2'
6+
version = '3.0.7-rc3'
77

88
sourceCompatibility = '1.8'
99
targetCompatibility = '1.8'

src/main/java/xyz/n7mn/dev/yululi/itemframeprotectionplugin/AutoRemoveTimer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import xyz.n7mn.dev.yululi.itemframeprotectionplugin.data.DataAPI;
1010
import xyz.n7mn.dev.yululi.itemframeprotectionplugin.data.DropItemData;
1111
import xyz.n7mn.dev.yululi.itemframeprotectionplugin.data.FrameData;
12+
import xyz.n7mn.dev.yululi.itemframeprotectionplugin.data.ItemFrameProtectDeleteEvent;
1213

1314
import java.util.List;
1415

@@ -39,11 +40,13 @@ public void run() {
3940
Entity entity = Bukkit.getEntity(frameData.getItemFrameUUID());
4041
if (entity == null){
4142
api.deleteTableByFrame(frameData.getItemFrameUUID());
43+
Bukkit.getServer().getPluginManager().callEvent(new ItemFrameProtectDeleteEvent(frameData.getItemFrameUUID()));
4244
continue;
4345
}
4446

4547
if (entity.getType() != EntityType.ITEM_FRAME){
4648
api.deleteTableByFrame(frameData.getItemFrameUUID());
49+
Bukkit.getServer().getPluginManager().callEvent(new ItemFrameProtectDeleteEvent(frameData.getItemFrameUUID()));
4750
}
4851

4952
}

src/main/java/xyz/n7mn/dev/yululi/itemframeprotectionplugin/ItemFrameListener.java

Lines changed: 103 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
import org.bukkit.event.EventPriority;
1010
import org.bukkit.event.Listener;
1111
import org.bukkit.event.entity.*;
12-
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
1312
import org.bukkit.event.hanging.HangingBreakEvent;
14-
import org.bukkit.event.hanging.HangingEvent;
1513
import org.bukkit.event.player.PlayerDropItemEvent;
1614
import org.bukkit.event.player.PlayerInteractEntityEvent;
1715
import org.bukkit.inventory.ItemStack;
@@ -21,6 +19,7 @@
2119
import xyz.n7mn.dev.yululi.itemframeprotectionplugin.data.DataAPI;
2220
import xyz.n7mn.dev.yululi.itemframeprotectionplugin.data.DropItemData;
2321
import xyz.n7mn.dev.yululi.itemframeprotectionplugin.data.FrameData;
22+
import xyz.n7mn.dev.yululi.itemframeprotectionplugin.data.ItemFrameProtectDeleteEvent;
2423

2524
import java.util.*;
2625

@@ -29,12 +28,13 @@ class ItemFrameListener implements Listener {
2928
final private DataAPI api;
3029
final private Plugin plugin = Bukkit.getPluginManager().getPlugin("ItemFrameProtectionPlugin");
3130

31+
private Set<UUID> frameBreakList = Collections.synchronizedSet(new HashSet<>());
32+
private UUID uuid = null;
33+
3234
public ItemFrameListener(DataAPI api){
3335
this.api = api;
3436
}
3537

36-
private UUID uuid = null;
37-
3838
@EventHandler (priority = EventPriority.HIGHEST)
3939
public void PlayerInteractEntityEvent (PlayerInteractEntityEvent e){
4040

@@ -68,6 +68,9 @@ public void run() {
6868

6969
if (foundData.getProtectUser().equals(player.getUniqueId())){
7070
api.deleteTableByFrame(frame.getUniqueId());
71+
synchronized (frameBreakList){
72+
frameBreakList.remove(frame.getUniqueId());
73+
}
7174
player.sendMessage(ChatColor.GREEN + "保護解除しました。 もう一度保護するにはスニークしながら右クリックしてください。");
7275

7376
e.setCancelled(true);
@@ -76,6 +79,9 @@ public void run() {
7679

7780
if (player.hasPermission("ifp.op")){
7881
api.deleteTableByFrame(frame.getUniqueId());
82+
synchronized (frameBreakList){
83+
frameBreakList.remove(frame.getUniqueId());
84+
}
7985
player.sendMessage(ChatColor.YELLOW + "保護を代理解除しました。 もう一度保護するにはスニークしながら右クリックしてください。");
8086
} else {
8187
player.sendMessage(ChatColor.RED + "他の人が保護しています。");
@@ -122,8 +128,12 @@ public void run() {
122128
}
123129

124130

125-
// ItemStack itemInMainHand = e.getPlayer().getInventory().getItemInMainHand();
126-
// e.getPlayer().getInventory().addItem(itemInMainHand);
131+
if (e.getPlayer().getGameMode() != GameMode.CREATIVE && e.getPlayer().getGameMode() != GameMode.SPECTATOR){
132+
133+
ItemStack itemInMainHand = e.getPlayer().getInventory().getItemInMainHand();
134+
e.getPlayer().getInventory().addItem(itemInMainHand);
135+
136+
}
127137

128138

129139
} catch (Exception ex){
@@ -139,7 +149,6 @@ public void run() {
139149
uuid = null;
140150
}
141151

142-
private Set<UUID> frameBreakList = new HashSet<>();
143152

144153
@EventHandler (priority = EventPriority.HIGHEST)
145154
public void BlockBreakEvent (HangingBreakEvent e){
@@ -187,20 +196,23 @@ public void EntityDamageEvent (EntityDamageEvent e){
187196
// 額縁の中身消されたとき
188197
ItemFrame frame = (ItemFrame) e.getEntity();
189198

190-
for (UUID uuid : frameBreakList){
191-
if (uuid.equals(frame.getUniqueId())){
199+
synchronized (frameBreakList){
200+
for (UUID uuid : frameBreakList){
201+
if (uuid.equals(frame.getUniqueId())){
202+
e.setCancelled(true);
203+
return;
204+
}
205+
}
206+
207+
FrameData itemFrame = api.getItemFrame(frame.getUniqueId());
208+
if (itemFrame != null){
209+
210+
frameBreakList.add(frame.getUniqueId());
192211
e.setCancelled(true);
193212
return;
194213
}
195214
}
196215

197-
FrameData itemFrame = api.getItemFrame(frame.getUniqueId());
198-
if (itemFrame != null){
199-
200-
frameBreakList.add(frame.getUniqueId());
201-
e.setCancelled(true);
202-
return;
203-
}
204216

205217
if (frame.getItem().getType() != Material.AIR){
206218

@@ -222,20 +234,23 @@ public void EntityDamageByEntityEvent (EntityDamageByEntityEvent e){
222234
// 額縁の中身を取り出されるとき
223235
ItemFrame frame = (ItemFrame) e.getEntity();
224236

225-
for (UUID uuid : frameBreakList) {
226-
if (uuid.equals(frame.getUniqueId())) {
227-
frameBreakList.add(frame.getUniqueId());
237+
synchronized (frameBreakList){
238+
for (UUID uuid : frameBreakList) {
239+
if (uuid.equals(frame.getUniqueId())) {
240+
241+
e.setCancelled(true);
242+
return;
243+
}
244+
}
245+
246+
FrameData itemFrame = api.getItemFrame(frame.getUniqueId());
247+
if (itemFrame != null){
228248
e.setCancelled(true);
249+
frameBreakList.add(frame.getUniqueId());
229250
return;
230251
}
231252
}
232253

233-
FrameData itemFrame = api.getItemFrame(frame.getUniqueId());
234-
if (itemFrame != null){
235-
e.setCancelled(true);
236-
return;
237-
}
238-
239254
if (e.getDamager() instanceof Player){
240255

241256

@@ -302,23 +317,81 @@ public void EntityTeleportEvent (EntityTeleportEvent e){
302317

303318
ItemFrame frame = (ItemFrame) e.getEntity();
304319

305-
for (UUID uuid : frameBreakList) {
306-
if (uuid.equals(frame.getUniqueId())) {
307-
frameBreakList.add(frame.getUniqueId());
308-
e.setCancelled(true);
309-
return;
320+
synchronized (frameBreakList){
321+
for (UUID uuid : frameBreakList) {
322+
if (uuid.equals(frame.getUniqueId())) {
323+
324+
e.setCancelled(true);
325+
return;
326+
}
310327
}
311328
}
312329

330+
313331
FrameData itemFrame = api.getItemFrame(frame.getUniqueId());
314332
if (itemFrame != null){
333+
frameBreakList.add(frame.getUniqueId());
315334
e.setCancelled(true);
316335
return;
317336
}
318337

319338
e.setCancelled(true);
320339
}
321340

341+
@EventHandler(priority = EventPriority.HIGHEST)
342+
public void EntityRemoveFromWorldEvent(EntityRemoveFromWorldEvent e){
343+
344+
// 額縁がkillされそうなとき
345+
346+
if (e.getEntity().getType() != EntityType.ITEM_FRAME){
347+
return;
348+
}
349+
350+
ItemFrame frame = (ItemFrame) e.getEntity();
351+
352+
synchronized (frameBreakList){
353+
for (UUID uuid : frameBreakList) {
354+
if (uuid.equals(frame.getUniqueId())) {
355+
ItemFramePlace(e.getEntity().getLocation(), frame);
356+
return;
357+
}
358+
}
359+
360+
FrameData itemFrame = api.getItemFrame(frame.getUniqueId());
361+
if (itemFrame != null){
362+
ItemFramePlace(e.getEntity().getLocation(), frame);
363+
frameBreakList.add(frame.getUniqueId());
364+
}
365+
}
366+
367+
}
368+
369+
private void ItemFramePlace(Location loc, ItemFrame frame){
370+
371+
372+
World world = loc.getWorld();
373+
ItemFrame spawn = world.spawn(loc, ItemFrame.class);
374+
spawn.setItem(frame.getItem());
375+
376+
FrameData data = api.getItemFrame(frame.getUniqueId());
377+
378+
api.deleteTableByFrame(frame.getUniqueId());
379+
synchronized (frameBreakList){
380+
frameBreakList.remove(frame.getUniqueId());
381+
}
382+
api.addItemFrame(new FrameData(spawn.getUniqueId(), frame.getItem(), data.getProtectUser(), new Date(), true));
383+
384+
385+
}
386+
387+
@EventHandler(priority = EventPriority.HIGHEST)
388+
public void ItemFrameProtectDeleteEvent(ItemFrameProtectDeleteEvent e){
389+
// キャッシュ削除
390+
synchronized (frameBreakList){
391+
frameBreakList.remove(e.getItemFrameUUID());
392+
}
393+
}
394+
322395

323396

324397
@EventHandler(priority = EventPriority.HIGHEST)
@@ -337,7 +410,6 @@ public void PlayerDropItemEvent (PlayerDropItemEvent e){
337410
}
338411

339412

340-
341413
private boolean ItemStackEqual(ItemStack item1, ItemStack item2){
342414

343415
if (item1 == null && item2 == null){

src/main/java/xyz/n7mn/dev/yululi/itemframeprotectionplugin/data/DataAPI.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package xyz.n7mn.dev.yululi.itemframeprotectionplugin.data;
22

3+
import org.bukkit.Bukkit;
34
import org.bukkit.plugin.Plugin;
45

56
import java.sql.Connection;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package xyz.n7mn.dev.yululi.itemframeprotectionplugin.data;
2+
3+
import org.bukkit.event.Event;
4+
import org.bukkit.event.HandlerList;
5+
6+
import java.util.UUID;
7+
8+
public class ItemFrameProtectDeleteEvent extends Event {
9+
10+
private static HandlerList handlerList = new HandlerList();
11+
private final UUID itemFrameUUID;
12+
13+
public ItemFrameProtectDeleteEvent(UUID itemFrameUUID){
14+
15+
this.itemFrameUUID = itemFrameUUID;
16+
17+
}
18+
19+
public UUID getItemFrameUUID() {
20+
return itemFrameUUID;
21+
}
22+
23+
@Override
24+
public HandlerList getHandlers() {
25+
return handlerList;
26+
}
27+
28+
public static HandlerList getHandlerList(){
29+
return handlerList;
30+
}
31+
}

0 commit comments

Comments
 (0)