mirror of
https://github.com/DieReicheErethons/Brewery.git
synced 2024-09-28 03:57:28 +02:00
LogBlock ChestAccess logging Support
This commit is contained in:
parent
1c6fe6cc33
commit
13abf2475c
@ -2,7 +2,7 @@ name: Brewery
|
||||
version: 1.2
|
||||
main: com.dre.brewery.P
|
||||
authors: [Milan Albrecht, Frank Baumann]
|
||||
softdepend: [LWC]
|
||||
softdepend: [LWC, LogBlock]
|
||||
commands:
|
||||
brewery:
|
||||
description: Command for Administration
|
||||
|
17
pom.xml
17
pom.xml
@ -94,6 +94,15 @@
|
||||
</snapshots>
|
||||
</repository>
|
||||
|
||||
<repository>
|
||||
<id>lb-repo</id>
|
||||
<url>http://junction.at/repo/</url>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
<updatePolicy>always</updatePolicy>
|
||||
</snapshots>
|
||||
</repository>
|
||||
|
||||
<repository>
|
||||
<id>Plugin Metrics</id>
|
||||
<url>http://repo.mcstats.org/content/repositories/public</url>
|
||||
@ -133,6 +142,14 @@
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>de.diddiz</groupId>
|
||||
<artifactId>logblock</artifactId>
|
||||
<version>LATEST</version>
|
||||
<scope>compile</scope>
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mcstats</groupId>
|
||||
<artifactId>metrics</artifactId>
|
||||
|
@ -16,6 +16,7 @@ import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.dre.brewery.integration.LWCBarrel;
|
||||
import com.dre.brewery.integration.LogBlockBarrel;
|
||||
import com.dre.brewery.integration.WGBarrel;
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
|
||||
@ -74,7 +75,7 @@ public class Barrel {
|
||||
if (woodsloc == null && stairsloc == null) {
|
||||
Block broken = getBrokenBlock(true);
|
||||
if (broken != null) {
|
||||
remove(broken);
|
||||
remove(broken, null);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -89,7 +90,8 @@ public class Barrel {
|
||||
broken = barrel.getBrokenBlock(false);
|
||||
if (broken != null) {
|
||||
// remove the barrel if it was destroyed
|
||||
barrel.remove(broken);
|
||||
barrel.willDestroy();
|
||||
barrel.remove(broken, null);
|
||||
continue;
|
||||
} else {
|
||||
// Dont check this barrel again, its enough to check it once after every restart
|
||||
@ -131,7 +133,12 @@ public class Barrel {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Ask for permission to destroy barrel, remove protection if has
|
||||
public boolean hasPermsDestroy(Player player) {
|
||||
if (player == null) {
|
||||
willDestroy();
|
||||
return true;
|
||||
}
|
||||
if (P.p.hasLWC) {
|
||||
return LWCBarrel.checkDestroy(player, this);
|
||||
}
|
||||
@ -139,6 +146,13 @@ public class Barrel {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If something other than the Player is destroying the barrel, inform protection plugins
|
||||
public void willDestroy() {
|
||||
if (P.p.hasLWC) {
|
||||
LWCBarrel.remove(this);
|
||||
}
|
||||
}
|
||||
|
||||
// player opens the barrel
|
||||
@SuppressWarnings("deprecation")
|
||||
public void open(Player player) {
|
||||
@ -173,6 +187,10 @@ public class Barrel {
|
||||
}
|
||||
// reset barreltime, potions have new age
|
||||
time = 0;
|
||||
|
||||
if (P.p.hasLB) {
|
||||
LogBlockBarrel.openBarrel(player, inventory, spigot.getLocation());
|
||||
}
|
||||
player.openInventory(inventory);
|
||||
}
|
||||
|
||||
@ -339,12 +357,15 @@ public class Barrel {
|
||||
}
|
||||
|
||||
// removes a barrel, throwing included potions to the ground
|
||||
public void remove(Block broken) {
|
||||
public void remove(Block broken, Player breaker) {
|
||||
if (inventory != null) {
|
||||
for (HumanEntity human : inventory.getViewers()) {
|
||||
human.closeInventory();
|
||||
}
|
||||
ItemStack[] items = inventory.getContents();
|
||||
if (P.p.hasLB && breaker != null) {
|
||||
LogBlockBarrel.breakBarrel(breaker.getName(), items, spigot.getLocation());
|
||||
}
|
||||
for (ItemStack item : items) {
|
||||
if (item != null) {
|
||||
Brew brew = Brew.get(item);
|
||||
|
@ -13,6 +13,8 @@ import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
import com.dre.brewery.integration.LogBlockBarrel;
|
||||
import org.apache.commons.lang.math.NumberUtils;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -35,6 +37,7 @@ public class P extends JavaPlugin {
|
||||
|
||||
// Third Party Enabled
|
||||
public boolean hasLWC;
|
||||
public boolean hasLB;
|
||||
|
||||
// Listeners
|
||||
public BlockListener blockListener;
|
||||
@ -51,9 +54,6 @@ public class P extends JavaPlugin {
|
||||
public void onEnable() {
|
||||
p = this;
|
||||
|
||||
// Check Third Party
|
||||
hasLWC = getServer().getPluginManager().isPluginEnabled("LWC");
|
||||
|
||||
readConfig();
|
||||
readData();
|
||||
|
||||
@ -125,6 +125,9 @@ public class P extends JavaPlugin {
|
||||
BIngredients.cookedNames.clear();
|
||||
Words.words.clear();
|
||||
BPlayer.drainItems.clear();
|
||||
if (hasLB) {
|
||||
LogBlockBarrel.clear();
|
||||
}
|
||||
|
||||
// load the Config
|
||||
readConfig();
|
||||
@ -164,6 +167,9 @@ public class P extends JavaPlugin {
|
||||
}
|
||||
|
||||
public void readConfig() {
|
||||
// Check Third Party
|
||||
hasLWC = getServer().getPluginManager().isPluginEnabled("LWC");
|
||||
hasLB = getServer().getPluginManager().isPluginEnabled("LogBlock");
|
||||
|
||||
File file = new File(p.getDataFolder(), "config.yml");
|
||||
if (!file.exists()) {
|
||||
@ -572,7 +578,7 @@ public class P extends JavaPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
// Returns true if the Block can be destroyed by the Player
|
||||
// Returns true if the Block can be destroyed by the Player or something else (null)
|
||||
public boolean blockDestroy(Block block, Player player) {
|
||||
switch (block.getType()) {
|
||||
case CAULDRON:
|
||||
@ -585,7 +591,7 @@ public class P extends JavaPlugin {
|
||||
Barrel barrel = Barrel.getBySpigot(block);
|
||||
if (barrel != null) {
|
||||
if (barrel.hasPermsDestroy(player)) {
|
||||
barrel.remove(null);
|
||||
barrel.remove(null, player);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@ -599,7 +605,7 @@ public class P extends JavaPlugin {
|
||||
if (barrel2 != null) {
|
||||
if (!barrel2.isLarge()) {
|
||||
if (barrel2.hasPermsDestroy(player)) {
|
||||
barrel2.remove(null);
|
||||
barrel2.remove(null, player);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@ -619,7 +625,7 @@ public class P extends JavaPlugin {
|
||||
Barrel barrel3 = Barrel.getByWood(block);
|
||||
if (barrel3 != null) {
|
||||
if (barrel3.hasPermsDestroy(player)) {
|
||||
barrel3.remove(block);
|
||||
barrel3.remove(block, player);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
@ -77,18 +77,26 @@ public class LWCBarrel {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If a Barrel is destroyed without player
|
||||
public static void remove(Barrel barrel) {
|
||||
Protection protection = LWC.getInstance().findProtection(barrel.getSignOfSpigot());
|
||||
if (protection != null) {
|
||||
protection.remove();
|
||||
}
|
||||
}
|
||||
|
||||
// Returns true if the block that exploded should not be removed
|
||||
public static boolean blockExplosion(Barrel barrel, Block block) {
|
||||
Protection protection = LWC.getInstance().findProtection(barrel.getSignOfSpigot());
|
||||
|
||||
if (protection == null) {
|
||||
barrel.remove(block);
|
||||
barrel.remove(block, null);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (protection.hasFlag(Flag.Type.ALLOWEXPLOSIONS)) {
|
||||
protection.remove();
|
||||
barrel.remove(block);
|
||||
barrel.remove(block, null);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
77
src/com/dre/brewery/integration/LogBlockBarrel.java
Normal file
77
src/com/dre/brewery/integration/LogBlockBarrel.java
Normal file
@ -0,0 +1,77 @@
|
||||
package com.dre.brewery.integration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import de.diddiz.LogBlock.Consumer;
|
||||
import de.diddiz.LogBlock.LogBlock;
|
||||
import de.diddiz.LogBlock.Logging;
|
||||
import static de.diddiz.LogBlock.config.Config.isLogging;
|
||||
import static de.diddiz.util.BukkitUtils.compareInventories;
|
||||
import static de.diddiz.util.BukkitUtils.compressInventory;
|
||||
import static de.diddiz.util.BukkitUtils.rawData;
|
||||
|
||||
public class LogBlockBarrel {
|
||||
private static final List<LogBlockBarrel> opened = new ArrayList<LogBlockBarrel>();
|
||||
public static Consumer consumer = LogBlock.getInstance().getConsumer();
|
||||
|
||||
private HumanEntity player;
|
||||
private ItemStack[] items;
|
||||
private Location loc;
|
||||
|
||||
public LogBlockBarrel(HumanEntity player, ItemStack[] items, Location spigotLoc) {
|
||||
this.player = player;
|
||||
this.items = items;
|
||||
this.loc = spigotLoc;
|
||||
opened.add(this);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void compareInv(final ItemStack[] after) {
|
||||
final ItemStack[] diff = compareInventories(items, after);
|
||||
for (final ItemStack item : diff) {
|
||||
consumer.queueChestAccess(player.getName(), loc, loc.getWorld().getBlockTypeIdAt(loc), (short) item.getTypeId(), (short) item.getAmount(), rawData(item));
|
||||
}
|
||||
}
|
||||
|
||||
public static LogBlockBarrel get(HumanEntity player) {
|
||||
for (LogBlockBarrel open : opened) {
|
||||
if (open.player.equals(player)) {
|
||||
return open;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void openBarrel(HumanEntity player, Inventory inv, Location spigotLoc) {
|
||||
if (!isLogging(player.getWorld(), Logging.CHESTACCESS)) return;
|
||||
new LogBlockBarrel(player, compressInventory(inv.getContents()), spigotLoc);
|
||||
}
|
||||
|
||||
public static void closeBarrel(HumanEntity player, Inventory inv) {
|
||||
if (!isLogging(player.getWorld(), Logging.CHESTACCESS)) return;
|
||||
LogBlockBarrel open = get(player);
|
||||
if (open != null) {
|
||||
open.compareInv(compressInventory(inv.getContents()));
|
||||
opened.remove(open);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static void breakBarrel(String playerName, ItemStack[] contents, Location spigotLoc) {
|
||||
if (!isLogging(spigotLoc.getWorld(), Logging.CHESTACCESS)) return;
|
||||
final ItemStack[] items = compressInventory(contents);
|
||||
for (final ItemStack item : items) {
|
||||
consumer.queueChestAccess(playerName, spigotLoc, spigotLoc.getWorld().getBlockTypeIdAt(spigotLoc), (short) item.getTypeId(), (short) (item.getAmount() * -1), rawData(item));
|
||||
}
|
||||
}
|
||||
|
||||
public static void clear() {
|
||||
opened.clear();
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ import org.bukkit.block.Block;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBurnEvent;
|
||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
||||
import org.bukkit.event.block.BlockPistonRetractEvent;
|
||||
import org.bukkit.event.block.SignChangeEvent;
|
||||
@ -43,6 +44,11 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onBlockBurn(BlockBurnEvent event) {
|
||||
P.p.blockDestroy(event.getBlock(), null);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onPistonRetract(BlockPistonRetractEvent event) {
|
||||
if (event.isSticky()) {
|
||||
|
@ -6,6 +6,7 @@ import org.bukkit.block.Block;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.entity.ItemDespawnEvent;
|
||||
import org.bukkit.event.entity.EntityCombustEvent;
|
||||
@ -48,19 +49,32 @@ public class EntityListener implements Listener {
|
||||
public void onExplode(EntityExplodeEvent event) {
|
||||
ListIterator<Block> iter = event.blockList().listIterator();
|
||||
Barrel barrel = null;
|
||||
boolean removedBarrel = false;
|
||||
while (iter.hasNext()) {
|
||||
Block block = iter.next();
|
||||
if (barrel == null || !barrel.hasBlock(block)) {
|
||||
barrel = Barrel.get(block);
|
||||
removedBarrel = false;
|
||||
}
|
||||
if (!removedBarrel) {
|
||||
if (barrel != null) {
|
||||
if (P.p.hasLWC) {
|
||||
if (LWCBarrel.blockExplosion(barrel, block)) {
|
||||
iter.remove();
|
||||
} else {
|
||||
removedBarrel = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onBlockChange(EntityChangeBlockEvent event) {
|
||||
if (Barrel.get(event.getBlock()) != null) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.BrewEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.event.inventory.InventoryPickupItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.BrewerInventory;
|
||||
@ -14,6 +15,7 @@ import org.bukkit.Material;
|
||||
|
||||
import com.dre.brewery.Brew;
|
||||
import com.dre.brewery.P;
|
||||
import com.dre.brewery.integration.LogBlockBarrel;
|
||||
|
||||
public class InventoryListener implements Listener {
|
||||
|
||||
@ -52,7 +54,7 @@ public class InventoryListener implements Listener {
|
||||
}
|
||||
|
||||
// convert to non colored Lore when taking out of Barrel/Brewer
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
if (event.getInventory().getType() == InventoryType.BREWING) {
|
||||
if (event.getSlot() > 2) {
|
||||
@ -90,4 +92,15 @@ public class InventoryListener implements Listener {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClose(InventoryCloseEvent event) {
|
||||
if (P.p.hasLB) {
|
||||
if (event.getInventory().getType() == InventoryType.CHEST) {
|
||||
if (event.getInventory().getTitle().equals(P.p.languageReader.get("Etc_Barrel"))) {
|
||||
LogBlockBarrel.closeBarrel(event.getPlayer(), event.getInventory());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user