mirror of
https://github.com/TotalFreedomMC/TF-WorldGuardExtraFlagsPlugin.git
synced 2025-07-31 18:01:42 +00:00
Fixed nether-portals flag on 1.14
This needs clean up later...
This commit is contained in:
parent
be129516c7
commit
78add0a96f
19 changed files with 201 additions and 69 deletions
|
@ -39,8 +39,29 @@
|
|||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>spigot-repo</id>
|
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>sk89q-repo</id>
|
||||
<url>https://maven.sk89q.com/repo/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>ess-repo</id>
|
||||
<url>http://repo.ess3.net/content/groups/essentials</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>empcraft</id>
|
||||
<url>http://ci.athion.net/job/FastAsyncWorldEdit/ws/mvn/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>dmulloy2-repo</id>
|
||||
<url>http://repo.dmulloy2.net/nexus/repository/public/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
@ -67,5 +88,48 @@
|
|||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.goldtreeservers.worldguardextraflags</groupId>
|
||||
<artifactId>spigot-1_14</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.13-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldedit</groupId>
|
||||
<artifactId>worldedit-bukkit</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
<artifactId>worldguard-legacy</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.ess3</groupId>
|
||||
<artifactId>Essentials</artifactId>
|
||||
<version>2.13-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.boydti</groupId>
|
||||
<artifactId>fawe-api</artifactId>
|
||||
<version>18.07.27-3ed2e57-1163-20.5.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.comphenix.protocol</groupId>
|
||||
<artifactId>ProtocolLib-API</artifactId>
|
||||
<version>4.4.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -0,0 +1,225 @@
|
|||
package net.goldtreeservers.worldguardextraflags;
|
||||
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.event.entity.EntityToggleGlideEvent;
|
||||
import org.bukkit.event.world.PortalCreateEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
|
||||
import lombok.Getter;
|
||||
import net.goldtreeservers.worldguardextraflags.essentials.EssentialsHelper;
|
||||
import net.goldtreeservers.worldguardextraflags.fawe.FAWEHelper;
|
||||
import net.goldtreeservers.worldguardextraflags.listeners.BlockListener;
|
||||
import net.goldtreeservers.worldguardextraflags.listeners.EntityListener;
|
||||
import net.goldtreeservers.worldguardextraflags.listeners.EntityListenerOnePointNine;
|
||||
import net.goldtreeservers.worldguardextraflags.listeners.EntityPotionEffectEventListener;
|
||||
import net.goldtreeservers.worldguardextraflags.listeners.PlayerListener;
|
||||
import net.goldtreeservers.worldguardextraflags.listeners.WorldEditListener;
|
||||
import net.goldtreeservers.worldguardextraflags.listeners.WorldListener;
|
||||
import net.goldtreeservers.worldguardextraflags.protocollib.ProtocolLibHelper;
|
||||
import net.goldtreeservers.worldguardextraflags.utils.SupportedFeatures;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.wrappers.WorldGuardCommunicator;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.wrappers.v6.WorldGuardSixCommunicator;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.wrappers.v7.WorldGuardSevenCommunicator;
|
||||
|
||||
public class WorldGuardExtraFlagsPlugin extends AbstractWorldGuardExtraFlagsPlugin
|
||||
{
|
||||
@Getter private static WorldGuardExtraFlagsPlugin plugin;
|
||||
|
||||
@Getter private WorldGuardPlugin worldGuardPlugin;
|
||||
@Getter private WorldEditPlugin worldEditPlugin;
|
||||
|
||||
@Getter private EssentialsHelper essentialsHelper;
|
||||
@Getter private FAWEHelper faweHelper;
|
||||
@Getter private ProtocolLibHelper protocolLibHelper;
|
||||
|
||||
public WorldGuardExtraFlagsPlugin()
|
||||
{
|
||||
WorldGuardExtraFlagsPlugin.plugin = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad()
|
||||
{
|
||||
this.worldEditPlugin = (WorldEditPlugin)this.getServer().getPluginManager().getPlugin("WorldEdit");
|
||||
this.worldGuardPlugin = (WorldGuardPlugin)this.getServer().getPluginManager().getPlugin("WorldGuard");
|
||||
|
||||
this.worldGuardCommunicator = WorldGuardExtraFlagsPlugin.createWorldGuardCommunicator();
|
||||
if (this.worldGuardCommunicator == null)
|
||||
{
|
||||
throw new RuntimeException("Unsupported WorldGuard version: " + this.worldGuardPlugin.getDescription().getVersion());
|
||||
}
|
||||
|
||||
WorldGuardUtils.setCommunicator(this.worldGuardCommunicator);
|
||||
|
||||
try
|
||||
{
|
||||
this.worldGuardCommunicator.onLoad(this);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
|
||||
throw new RuntimeException("Failed to load WorldGuard communicator", e);
|
||||
}
|
||||
|
||||
//Soft dependencies, due to some compatibility issues or add flags related to a plugin
|
||||
try
|
||||
{
|
||||
Plugin essentialsPlugin = WorldGuardExtraFlagsPlugin.getPlugin().getServer().getPluginManager().getPlugin("Essentials");
|
||||
if (essentialsPlugin != null)
|
||||
{
|
||||
this.essentialsHelper = new EssentialsHelper(this, essentialsPlugin);
|
||||
}
|
||||
}
|
||||
catch(Throwable ignore)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Plugin fastAsyncWorldEditPlugin = this.getServer().getPluginManager().getPlugin("FastAsyncWorldEdit");
|
||||
if (fastAsyncWorldEditPlugin != null)
|
||||
{
|
||||
this.faweHelper = new FAWEHelper(this, fastAsyncWorldEditPlugin);
|
||||
}
|
||||
}
|
||||
catch(Throwable ignore)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Plugin protocolLibPlugin = this.getServer().getPluginManager().getPlugin("ProtocolLib");
|
||||
if (protocolLibPlugin != null)
|
||||
{
|
||||
this.protocolLibHelper = new ProtocolLibHelper(this, protocolLibPlugin);
|
||||
}
|
||||
}
|
||||
catch(Throwable ignore)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
if (this.worldGuardCommunicator == null)
|
||||
{
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
this.worldGuardCommunicator.onEnable(this);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
|
||||
throw new RuntimeException("Failed to enable WorldGuard communicator", e);
|
||||
}
|
||||
|
||||
this.getServer().getPluginManager().registerEvents(new PlayerListener(this), this);
|
||||
this.getServer().getPluginManager().registerEvents(new BlockListener(this), this);
|
||||
this.getServer().getPluginManager().registerEvents(new WorldListener(this), this);
|
||||
|
||||
try
|
||||
{
|
||||
if (EntityToggleGlideEvent.class != null) //LOL, Just making it look nice xD
|
||||
{
|
||||
this.getServer().getPluginManager().registerEvents(new EntityListenerOnePointNine(this), this);
|
||||
}
|
||||
}
|
||||
catch(NoClassDefFoundError ignored)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
ParameterizedType type = (ParameterizedType)PortalCreateEvent.class.getDeclaredField("blocks").getGenericType();
|
||||
Class<?> clazz = (Class<?>)type.getActualTypeArguments()[0];
|
||||
if (clazz == BlockState.class)
|
||||
{
|
||||
this.getServer().getPluginManager().registerEvents(new net.goldtreeservers.worldguardextraflags.spigot1_14.EntityListener(this), this);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.getServer().getPluginManager().registerEvents(new EntityListener(this), this);
|
||||
}
|
||||
}
|
||||
catch(Throwable ignored)
|
||||
{
|
||||
this.getServer().getPluginManager().registerEvents(new EntityListener(this), this);
|
||||
}
|
||||
|
||||
if (this.faweHelper != null)
|
||||
{
|
||||
this.faweHelper.onEnable();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.worldEditPlugin.getWorldEdit().getEventBus().register(new WorldEditListener(this));
|
||||
}
|
||||
|
||||
if (this.essentialsHelper != null)
|
||||
{
|
||||
this.essentialsHelper.onEnable();
|
||||
}
|
||||
|
||||
if (this.protocolLibHelper != null)
|
||||
{
|
||||
this.protocolLibHelper.onEnable();
|
||||
}
|
||||
else if (SupportedFeatures.isPotionEffectEventSupported())
|
||||
{
|
||||
this.getServer().getPluginManager().registerEvents(new EntityPotionEffectEventListener(this), this);
|
||||
}
|
||||
|
||||
for(World world : this.getServer().getWorlds())
|
||||
{
|
||||
this.getWorldGuardCommunicator().doUnloadChunkFlagCheck(world);
|
||||
}
|
||||
}
|
||||
|
||||
public static WorldGuardCommunicator createWorldGuardCommunicator()
|
||||
{
|
||||
try
|
||||
{
|
||||
Class.forName("com.sk89q.worldguard.WorldGuard"); //Only exists in WG 7
|
||||
|
||||
return new WorldGuardSevenCommunicator();
|
||||
}
|
||||
catch (Throwable ignored)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Class<?> clazz = Class.forName("com.sk89q.worldguard.bukkit.WorldGuardPlugin");
|
||||
if (clazz.getMethod("getFlagRegistry") != null)
|
||||
{
|
||||
return new WorldGuardSixCommunicator();
|
||||
}
|
||||
}
|
||||
catch (Throwable ignored)
|
||||
{
|
||||
ignored.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package net.goldtreeservers.worldguardextraflags.essentials;
|
||||
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.earth2me.essentials.Essentials;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
import net.goldtreeservers.worldguardextraflags.listeners.EssentialsListener;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class EssentialsHelper
|
||||
{
|
||||
@Getter private final WorldGuardExtraFlagsPlugin plugin;
|
||||
@Getter private final Essentials essentialsPlugin;
|
||||
|
||||
public EssentialsHelper(WorldGuardExtraFlagsPlugin plugin, Plugin essentialsPlugin)
|
||||
{
|
||||
this(plugin, (Essentials)essentialsPlugin);
|
||||
}
|
||||
|
||||
public void onEnable()
|
||||
{
|
||||
this.plugin.getServer().getPluginManager().registerEvents(new EssentialsListener(this.plugin, this.essentialsPlugin), this.plugin);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package net.goldtreeservers.worldguardextraflags.fawe;
|
||||
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.boydti.fawe.FaweAPI;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class FAWEHelper
|
||||
{
|
||||
@Getter private final WorldGuardExtraFlagsPlugin plugin;
|
||||
@Getter private final Plugin fawePlugin;
|
||||
|
||||
public void onEnable()
|
||||
{
|
||||
FaweAPI.addMaskManager(new FaweWorldEditFlagMaskManager(this.plugin));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
package net.goldtreeservers.worldguardextraflags.fawe;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.boydti.fawe.object.FawePlayer;
|
||||
import com.boydti.fawe.regions.FaweMask;
|
||||
import com.boydti.fawe.regions.FaweMaskManager;
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag.State;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
import net.goldtreeservers.worldguardextraflags.flags.Flags;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.wrappers.AbstractRegionManagerWrapper;
|
||||
|
||||
public class FaweWorldEditFlagMaskManager extends FaweMaskManager<Player>
|
||||
{
|
||||
private final WorldGuardExtraFlagsPlugin plugin;
|
||||
|
||||
public FaweWorldEditFlagMaskManager(WorldGuardExtraFlagsPlugin plugin)
|
||||
{
|
||||
super(plugin.getName());
|
||||
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public ProtectedRegion getRegion(Player player, Location loc)
|
||||
{
|
||||
final com.sk89q.worldguard.LocalPlayer localplayer = this.plugin.getWorldGuardCommunicator().wrapPlayer(player);
|
||||
AbstractRegionManagerWrapper manager = this.plugin.getWorldGuardCommunicator().getRegionContainer().get(player.getWorld());
|
||||
final ProtectedRegion global = manager.getRegion("__global__");
|
||||
if (global != null && !isDenied(localplayer, global))
|
||||
{
|
||||
return global;
|
||||
}
|
||||
|
||||
final ApplicableRegionSet regions = manager.getApplicableRegions(player.getLocation());
|
||||
for (final ProtectedRegion region : regions)
|
||||
{
|
||||
if (!isDenied(localplayer, region))
|
||||
{
|
||||
return region;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isDenied(LocalPlayer localplayer, ProtectedRegion region)
|
||||
{
|
||||
return region.getFlag(Flags.WORLDEDIT) == State.DENY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FaweMask getMask(FawePlayer<Player> fawePlayer)
|
||||
{
|
||||
return null; //Problems here due to FaweMask using LocalWorld
|
||||
|
||||
/*final Player player = fawePlayer.parent;
|
||||
final Location location = player.getLocation();
|
||||
final ProtectedRegion myregion = this.getRegion(player, location);
|
||||
|
||||
if (myregion != null)
|
||||
{
|
||||
final BlockVector pos1;
|
||||
final BlockVector pos2;
|
||||
if (myregion.getId().equals("__global__"))
|
||||
{
|
||||
pos1 = new BlockVector(Integer.MIN_VALUE, 0, Integer.MIN_VALUE);
|
||||
pos2 = new BlockVector(Integer.MAX_VALUE, 255, Integer.MAX_VALUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
pos1 = new BlockVector(myregion.getMinimumPoint().getBlockX(), myregion.getMinimumPoint().getBlockY(), myregion.getMinimumPoint().getBlockZ());
|
||||
pos2 = new BlockVector(myregion.getMaximumPoint().getBlockX(), myregion.getMaximumPoint().getBlockY(), myregion.getMaximumPoint().getBlockZ());
|
||||
}
|
||||
|
||||
return new FaweMask(pos1, pos2)
|
||||
{
|
||||
@Override
|
||||
public String getName()
|
||||
{
|
||||
return myregion.getId();
|
||||
}
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}*/
|
||||
}
|
||||
}
|
|
@ -0,0 +1,138 @@
|
|||
package net.goldtreeservers.worldguardextraflags.listeners;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event.Result;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.EntityBlockFormEvent;
|
||||
|
||||
import com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent;
|
||||
import com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent;
|
||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag.State;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
import net.goldtreeservers.worldguardextraflags.flags.Flags;
|
||||
import net.goldtreeservers.worldguardextraflags.utils.SupportedFeatures;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class BlockListener implements Listener
|
||||
{
|
||||
@Getter private final WorldGuardExtraFlagsPlugin plugin;
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onEntityBlockFormEvent(EntityBlockFormEvent event)
|
||||
{
|
||||
if (SupportedFeatures.isFrostwalkerSupported())
|
||||
{
|
||||
BlockState newState = event.getNewState();
|
||||
if (newState.getType() == Material.FROSTED_ICE)
|
||||
{
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(newState.getLocation());
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (entity instanceof Player)
|
||||
{
|
||||
Player player = (Player)entity;
|
||||
if (WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.FROSTWALKER) == State.DENY)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (regions.queryValue(null, Flags.FROSTWALKER) == State.DENY)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: Figure out something better for this
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false)
|
||||
public void onBlockPlaceEvent(PlaceBlockEvent event)
|
||||
{
|
||||
Result originalResult = event.getResult();
|
||||
Object cause = event.getCause().getRootCause();
|
||||
|
||||
if (cause instanceof Player)
|
||||
{
|
||||
Player player = (Player)cause;
|
||||
|
||||
for(Block block : event.getBlocks())
|
||||
{
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(block.getLocation());
|
||||
|
||||
Set<Material> state = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.ALLOW_BLOCK_PLACE);
|
||||
if (state != null && state.contains(block.getType()))
|
||||
{
|
||||
event.setResult(Result.ALLOW);
|
||||
}
|
||||
else
|
||||
{
|
||||
Set<Material> state2 = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.DENY_BLOCK_PLACE);
|
||||
if (state2 != null && state2.contains(block.getType()))
|
||||
{
|
||||
event.setResult(Result.DENY);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
event.setResult(originalResult);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: Figure out something better for this
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false)
|
||||
public void onBlockBreakEvent(BreakBlockEvent event)
|
||||
{
|
||||
Result originalResult = event.getResult();
|
||||
Object cause = event.getCause().getRootCause();
|
||||
|
||||
if (cause instanceof Player)
|
||||
{
|
||||
Player player = (Player)cause;
|
||||
|
||||
for(Block block : event.getBlocks())
|
||||
{
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(block.getLocation());
|
||||
|
||||
Set<Material> state = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.ALLOW_BLOCK_BREAK);
|
||||
if (state != null && state.contains(block.getType()))
|
||||
{
|
||||
event.setResult(Result.ALLOW);
|
||||
}
|
||||
else
|
||||
{
|
||||
Set<Material> state2 = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.DENY_BLOCK_BREAK);
|
||||
if (state2 != null && state2.contains(block.getType()))
|
||||
{
|
||||
event.setResult(Result.DENY);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
event.setResult(originalResult);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package net.goldtreeservers.worldguardextraflags.listeners;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.world.PortalCreateEvent;
|
||||
|
||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag.State;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
import net.goldtreeservers.worldguardextraflags.flags.Flags;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class EntityListener implements Listener
|
||||
{
|
||||
@Getter private final WorldGuardExtraFlagsPlugin plugin;
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPortalCreateEvent(PortalCreateEvent event)
|
||||
{
|
||||
for(Block block : event.getBlocks())
|
||||
{
|
||||
//Unable to get the player who created it....
|
||||
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(block.getLocation());
|
||||
if (regions.queryValue(null, Flags.NETHER_PORTALS) == State.DENY)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package net.goldtreeservers.worldguardextraflags.listeners;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityToggleGlideEvent;
|
||||
|
||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag.State;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
import net.goldtreeservers.worldguardextraflags.flags.Flags;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class EntityListenerOnePointNine implements Listener
|
||||
{
|
||||
@Getter private final WorldGuardExtraFlagsPlugin plugin;
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onEntityToggleGlideEvent(EntityToggleGlideEvent event)
|
||||
{
|
||||
Entity entity = event.getEntity();
|
||||
if (entity instanceof Player)
|
||||
{
|
||||
Player player = (Player)entity;
|
||||
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(player.getLocation());
|
||||
|
||||
State state = WorldGuardUtils.queryState(player, player.getWorld(), regions.getRegions(), Flags.GLIDE);
|
||||
if (state != null)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
player.setGliding(state == State.ALLOW);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
package net.goldtreeservers.worldguardextraflags.listeners;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
||||
|
||||
import com.sk89q.worldguard.session.Session;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.GiveEffectsFlagHandler;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class EntityPotionEffectEventListener implements Listener
|
||||
{
|
||||
@Getter private final WorldGuardExtraFlagsPlugin plugin;
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onEntityPotionEffectEvent(EntityPotionEffectEvent event)
|
||||
{
|
||||
if (event.getAction() != EntityPotionEffectEvent.Action.REMOVED)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getCause() != EntityPotionEffectEvent.Cause.PLUGIN)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (!(entity instanceof Player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player)entity;
|
||||
if (!player.isValid()) //Work around, getIfPresent is broken inside WG due to using LocalPlayer as key instead of CacheKey
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Session session = WorldGuardExtraFlagsPlugin.getPlugin().getWorldGuardCommunicator().getSessionManager().get(player);
|
||||
|
||||
GiveEffectsFlagHandler giveEffectsHandler = session.getHandler(GiveEffectsFlagHandler.class);
|
||||
if (giveEffectsHandler.isSupressRemovePotionPacket())
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
catch(IllegalStateException wgBug)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
package net.goldtreeservers.worldguardextraflags.listeners;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||
|
||||
import com.earth2me.essentials.Essentials;
|
||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag.State;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.ess3.api.IUser;
|
||||
import net.ess3.api.events.GodStatusChangeEvent;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
import net.goldtreeservers.worldguardextraflags.flags.Flags;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.FlyFlagHandler;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.GodmodeFlagHandler;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class EssentialsListener implements Listener
|
||||
{
|
||||
@Getter private final WorldGuardExtraFlagsPlugin plugin;
|
||||
@Getter private final Essentials essentialsPlugin;
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onGodStatusChangeEvent(GodStatusChangeEvent event)
|
||||
{
|
||||
IUser user = event.getAffected();
|
||||
Player player = user.getBase();
|
||||
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(player.getLocation());
|
||||
|
||||
State state = WorldGuardUtils.queryState(player, player.getWorld(), regions.getRegions(), Flags.GODMODE);
|
||||
if (state != null)
|
||||
{
|
||||
if (this.plugin.getWorldGuardCommunicator().getSessionManager().get(player).getHandler(GodmodeFlagHandler.class).getIsGodmodeEnabled() != null)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerChangedWorldEvent(PlayerChangedWorldEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (player.getGameMode() != GameMode.CREATIVE && !this.essentialsPlugin.getUser(player).isAuthorized("essentials.fly"))
|
||||
{
|
||||
//Essentials now turns off flight, fuck him
|
||||
Boolean value = this.plugin.getWorldGuardCommunicator().getSessionManager().get(player).getHandler(FlyFlagHandler.class).getCurrentValue();
|
||||
if (value != null)
|
||||
{
|
||||
player.setAllowFlight(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,213 @@
|
|||
package net.goldtreeservers.worldguardextraflags.listeners;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerGameModeChangeEvent;
|
||||
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
||||
import org.bukkit.event.player.PlayerItemDamageEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.potion.Potion;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.spigotmc.event.player.PlayerSpawnLocationEvent;
|
||||
|
||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag.State;
|
||||
import com.sk89q.worldguard.session.Session;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
import net.goldtreeservers.worldguardextraflags.flags.Flags;
|
||||
import net.goldtreeservers.worldguardextraflags.we.WorldEditUtils;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.WorldGuardUtils;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.FlyFlagHandler;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.GiveEffectsFlagHandler;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class PlayerListener implements Listener
|
||||
{
|
||||
@Getter private final WorldGuardExtraFlagsPlugin plugin;
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerTeleportEvent(PlayerTeleportEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
player.removeMetadata(WorldGuardUtils.PREVENT_TELEPORT_LOOP_META, WorldGuardExtraFlagsPlugin.getPlugin());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerDeathEvent(PlayerDeathEvent event)
|
||||
{
|
||||
Player player = event.getEntity();
|
||||
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(player.getLocation());
|
||||
|
||||
Boolean keepInventory = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.KEEP_INVENTORY);
|
||||
if (keepInventory != null)
|
||||
{
|
||||
event.setKeepInventory(keepInventory);
|
||||
|
||||
if (keepInventory)
|
||||
{
|
||||
event.getDrops().clear();
|
||||
}
|
||||
}
|
||||
|
||||
Boolean keepExp = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.KEEP_EXP);
|
||||
if (keepExp != null)
|
||||
{
|
||||
event.setKeepLevel(keepExp);
|
||||
|
||||
if (keepExp)
|
||||
{
|
||||
event.setDroppedExp(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(player.getLocation());
|
||||
|
||||
String prefix = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.CHAT_PREFIX);
|
||||
String suffix = WorldGuardUtils.queryValue(player, player.getWorld(), regions.getRegions(), Flags.CHAT_SUFFIX);
|
||||
|
||||
if (prefix != null)
|
||||
{
|
||||
event.setFormat(prefix + event.getFormat());
|
||||
}
|
||||
|
||||
if (suffix != null)
|
||||
{
|
||||
event.setFormat(event.getFormat() + suffix);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPlayerRespawnEvent(PlayerRespawnEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(player.getLocation());
|
||||
|
||||
Object respawnLocation = WorldGuardUtils.queryValueUnchecked(player, player.getWorld(), regions.getRegions(), Flags.RESPAWN_LOCATION);
|
||||
if (respawnLocation != null)
|
||||
{
|
||||
event.setRespawnLocation(WorldEditUtils.toLocation(respawnLocation));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerItemConsumeEvent(PlayerItemConsumeEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
ItemMeta itemMeta = event.getItem().getItemMeta();
|
||||
if (itemMeta instanceof PotionMeta)
|
||||
{
|
||||
this.plugin.getWorldGuardCommunicator().getSessionManager().get(player).getHandler(GiveEffectsFlagHandler.class).drinkPotion(player, Potion.fromItemStack(event.getItem()).getEffects());
|
||||
}
|
||||
else
|
||||
{
|
||||
Material material = event.getItem().getType();
|
||||
if (material == Material.MILK_BUCKET)
|
||||
{
|
||||
this.plugin.getWorldGuardCommunicator().getSessionManager().get(player).getHandler(GiveEffectsFlagHandler.class).drinkMilk(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerGameModeChangeEvent(PlayerGameModeChangeEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
Session wgSession = this.plugin.getWorldGuardCommunicator().getSessionManager().getIfPresent(player);
|
||||
if (wgSession != null)
|
||||
{
|
||||
Boolean value = wgSession.getHandler(FlyFlagHandler.class).getCurrentValue();
|
||||
if (value != null)
|
||||
{
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
PlayerListener.this.checkFlyStatus(player);
|
||||
}
|
||||
}.runTask(WorldGuardExtraFlagsPlugin.getPlugin());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
PlayerListener.this.checkFlyStatus(player);
|
||||
}
|
||||
}.runTask(WorldGuardExtraFlagsPlugin.getPlugin());
|
||||
}
|
||||
}
|
||||
|
||||
private void checkFlyStatus(Player player)
|
||||
{
|
||||
Boolean value = this.plugin.getWorldGuardCommunicator().getSessionManager().get(player).getHandler(FlyFlagHandler.class).getCurrentValue();
|
||||
if (value != null)
|
||||
{
|
||||
player.setAllowFlight(value);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onPlayerItemDamageEvent(PlayerItemDamageEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(player.getLocation());
|
||||
if (WorldGuardUtils.queryState(player, player.getWorld(), regions.getRegions(), Flags.ITEM_DURABILITY) == State.DENY)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onPlayerSpawnLocationEvent(PlayerSpawnLocationEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
ApplicableRegionSet regions = this.plugin.getWorldGuardCommunicator().getRegionContainer().createQuery().getApplicableRegions(player.getLocation());
|
||||
|
||||
Object location = WorldGuardUtils.queryValueUnchecked(player, player.getWorld(), regions.getRegions(), Flags.JOIN_LOCATION);
|
||||
if (location != null)
|
||||
{
|
||||
event.setSpawnLocation(WorldEditUtils.toLocation(location));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerJoinEvent(PlayerJoinEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
Boolean value = this.plugin.getWorldGuardCommunicator().getSessionManager().get(player).getHandler(FlyFlagHandler.class).getCurrentValue();
|
||||
if (value != null)
|
||||
{
|
||||
player.setAllowFlight(value);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package net.goldtreeservers.worldguardextraflags.listeners;
|
||||
|
||||
import com.sk89q.worldedit.entity.Player;
|
||||
import com.sk89q.worldedit.event.extent.EditSessionEvent;
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.util.eventbus.EventHandler;
|
||||
import com.sk89q.worldedit.util.eventbus.Subscribe;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class WorldEditListener
|
||||
{
|
||||
private final WorldGuardExtraFlagsPlugin plugin;
|
||||
|
||||
@Subscribe(priority = EventHandler.Priority.VERY_EARLY)
|
||||
public void onEditSessionEvent(EditSessionEvent event)
|
||||
{
|
||||
Actor actor = event.getActor();
|
||||
if (actor != null && actor.isPlayer())
|
||||
{
|
||||
event.setExtent(this.plugin.getWorldGuardCommunicator().getWorldEditFlag(event.getWorld(), event.getExtent(), (Player)actor));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package net.goldtreeservers.worldguardextraflags.listeners;
|
||||
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.world.ChunkUnloadEvent;
|
||||
import org.bukkit.event.world.WorldLoadEvent;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class WorldListener implements Listener
|
||||
{
|
||||
@Getter private final WorldGuardExtraFlagsPlugin plugin;
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onWorldLoadEvent(WorldLoadEvent event)
|
||||
{
|
||||
World world = event.getWorld();
|
||||
|
||||
this.plugin.getWorldGuardCommunicator().doUnloadChunkFlagCheck(world);
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onChunkUnloadEvent(ChunkUnloadEvent event)
|
||||
{
|
||||
World world = event.getWorld();
|
||||
Chunk chunk = event.getChunk();
|
||||
|
||||
if (!this.plugin.getWorldGuardCommunicator().doUnloadChunkFlagCheck(world, chunk))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package net.goldtreeservers.worldguardextraflags.protocollib;
|
||||
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
|
||||
import lombok.Getter;
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
|
||||
public class ProtocolLibHelper
|
||||
{
|
||||
@Getter private final WorldGuardExtraFlagsPlugin plugin;
|
||||
@Getter private final Plugin protocolLibPlugin;
|
||||
|
||||
public ProtocolLibHelper(WorldGuardExtraFlagsPlugin plugin, Plugin protocolLibPlugin)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
this.protocolLibPlugin = protocolLibPlugin;
|
||||
}
|
||||
|
||||
public void onEnable()
|
||||
{
|
||||
ProtocolLibrary.getProtocolManager().addPacketListener(new RemoveEffectPacketListener());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
package net.goldtreeservers.worldguardextraflags.protocollib;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.PacketAdapter;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.sk89q.worldguard.session.Session;
|
||||
|
||||
import net.goldtreeservers.worldguardextraflags.WorldGuardExtraFlagsPlugin;
|
||||
import net.goldtreeservers.worldguardextraflags.wg.handlers.GiveEffectsFlagHandler;
|
||||
|
||||
public class RemoveEffectPacketListener extends PacketAdapter
|
||||
{
|
||||
public RemoveEffectPacketListener()
|
||||
{
|
||||
super(WorldGuardExtraFlagsPlugin.getPlugin(), PacketType.Play.Server.REMOVE_ENTITY_EFFECT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPacketSending(PacketEvent event)
|
||||
{
|
||||
if (!event.isCancelled())
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
if (!player.isValid()) //Work around, getIfPresent is broken inside WG due to using LocalPlayer as key instead of CacheKey
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Session session = WorldGuardExtraFlagsPlugin.getPlugin().getWorldGuardCommunicator().getSessionManager().get(player);
|
||||
|
||||
GiveEffectsFlagHandler giveEffectsHandler = session.getHandler(GiveEffectsFlagHandler.class);
|
||||
if (giveEffectsHandler.isSupressRemovePotionPacket())
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
catch(IllegalStateException wgBug)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue