Essentials/Essentials/src/main/java/com/earth2me/essentials/EssentialsBlockListener.java

63 lines
2.4 KiB
Java
Raw Normal View History

package com.earth2me.essentials;
2013-06-08 23:31:19 +02:00
import com.earth2me.essentials.utils.LocationUtil;
2018-12-09 14:47:22 +01:00
import com.earth2me.essentials.utils.MaterialUtil;
2013-10-11 04:44:41 +02:00
import net.ess3.api.IEssentials;
import org.bukkit.GameMode;
import org.bukkit.block.BlockState;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;
2015-04-15 06:06:16 +02:00
import java.util.Locale;
public class EssentialsBlockListener implements Listener {
private final transient IEssentials ess;
2015-04-15 06:06:16 +02:00
public EssentialsBlockListener(final IEssentials ess) {
this.ess = ess;
}
2015-04-15 06:06:16 +02:00
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockPlace(final BlockPlaceEvent event) {
// Do not rely on getItemInHand();
// http://leaky.bukkit.org/issues/663
final ItemStack is = LocationUtil.convertBlockToItem(event.getBlockPlaced());
2018-12-09 14:47:22 +01:00
2015-04-15 06:06:16 +02:00
if (is == null) {
return;
}
2018-12-09 14:47:22 +01:00
if (is.getType() == MaterialUtil.SPAWNER && event.getItemInHand() != null && event.getPlayer() != null && event.getItemInHand().getType() == MaterialUtil.SPAWNER) {
2015-04-15 06:06:16 +02:00
final BlockState blockState = event.getBlockPlaced().getState();
if (blockState instanceof CreatureSpawner) {
final CreatureSpawner spawner = (CreatureSpawner) blockState;
final EntityType type = ess.getSpawnerItemProvider().getEntityType(event.getItemInHand());
2015-04-15 06:06:16 +02:00
if (type != null && Mob.fromBukkitType(type) != null) {
if (ess.getUser(event.getPlayer()).isAuthorized("essentials.spawnerconvert." + Mob.fromBukkitType(type).name().toLowerCase(Locale.ENGLISH))) {
spawner.setSpawnedType(type);
spawner.update();
2015-04-15 06:06:16 +02:00
}
}
}
}
2015-04-15 06:06:16 +02:00
final User user = ess.getUser(event.getPlayer());
if (user.hasUnlimited(is) && user.getBase().getGameMode() == GameMode.SURVIVAL) {
class UnlimitedItemSpawnTask implements Runnable {
@Override
public void run() {
user.getBase().getInventory().addItem(is);
user.getBase().updateInventory();
}
}
2020-10-03 19:46:05 +02:00
2015-04-15 06:06:16 +02:00
ess.scheduleSyncDelayedTask(new UnlimitedItemSpawnTask());
}
}
}