diff --git a/.gitignore b/.gitignore index b8ff5ce3..3ec90af5 100644 --- a/.gitignore +++ b/.gitignore @@ -88,6 +88,7 @@ tmp/ local.properties .settings/ .loadpath +.jardesc # Eclipse Core .project diff --git a/src/main/java/think/rpgitems/Events.java b/src/main/java/think/rpgitems/Events.java index 3b24c738..91715bf6 100644 --- a/src/main/java/think/rpgitems/Events.java +++ b/src/main/java/think/rpgitems/Events.java @@ -44,6 +44,8 @@ import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.hanging.HangingBreakEvent; +import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryOpenEvent; @@ -73,6 +75,15 @@ public class Events implements Listener { public static TObjectIntHashMap recipeWindows = new TObjectIntHashMap(); public static HashMap> drops = new HashMap>(); public static boolean useLocaleInv = false; + + @EventHandler + public void onHangingBreak(HangingBreakEvent e) { + if(e.getCause().equals(RemoveCause.EXPLOSION)) + if(e.getEntity().hasMetadata("Rumble")) { + e.getEntity().removeMetadata("Rumble", Plugin.plugin); //Allow the entity to be broken again + e.setCancelled(true); + } + } @SuppressWarnings("deprecation") @EventHandler(ignoreCancelled = true) diff --git a/src/main/java/think/rpgitems/data/Locale.java b/src/main/java/think/rpgitems/data/Locale.java index 3eb74377..3a8e40a2 100644 --- a/src/main/java/think/rpgitems/data/Locale.java +++ b/src/main/java/think/rpgitems/data/Locale.java @@ -66,6 +66,10 @@ private Locale(Plugin plugin) { plugin.getConfig().set("localeDownload", true); plugin.saveConfig(); } + if (!plugin.getConfig().contains("language")) { + plugin.getConfig().set("language", "en_GB"); + plugin.saveConfig(); + } } private final static String localeUpdateURL = "http://198.199.127.128/rpgitems/index.php?page=localeget&lastupdate="; diff --git a/src/main/java/think/rpgitems/power/PowerRumble.java b/src/main/java/think/rpgitems/power/PowerRumble.java index d2de1a1c..0618851f 100644 --- a/src/main/java/think/rpgitems/power/PowerRumble.java +++ b/src/main/java/think/rpgitems/power/PowerRumble.java @@ -18,13 +18,18 @@ import java.util.Random; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.ItemFrame; +import org.bukkit.entity.Painting; import org.bukkit.entity.Player; +import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; @@ -101,12 +106,17 @@ public void run() { } } if (hit) { - location.getWorld().createExplosion(location.getX(), location.getY(), location.getZ(), power, false, false); near = getNearbyEntities(location, 2.5); for (Entity e : near) { - if (e != player) + if (e != player) { + if(e instanceof ItemFrame || e instanceof Painting) { + e.setMetadata("Rumble", new FixedMetadataValue(Plugin.plugin, null)); //Add metadata to protect hanging entities from the explosion + continue; + } e.setVelocity(new Vector(random.nextGaussian() / 4d, 1d + random.nextDouble() * (double) power, random.nextGaussian() / 4d)); + } } + location.getWorld().createExplosion(location.getX(), location.getY(), location.getZ(), power, false, false); //Trigger the explosion after all hanging entities have been protected cancel(); return; }