316 lines
10 KiB
Java
316 lines
10 KiB
Java
package eu.univento.lobby.listeners;
|
|
|
|
import eu.univento.core.api.Config;
|
|
import eu.univento.core.api.player.CustomPlayer;
|
|
import eu.univento.lobby.Lobby;
|
|
import eu.univento.lobby.story.missions.StartMission;
|
|
import eu.univento.lobby.utils.CustomMapRenderer;
|
|
import eu.univento.lobby.utils.PetManager;
|
|
import eu.univento.lobby.utils.Pets;
|
|
import eu.univento.lobby.utils.Scoreboards;
|
|
import net.minecraft.server.v1_10_R1.EnumParticle;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.GameMode;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.Sound;
|
|
import org.bukkit.block.Skull;
|
|
import org.bukkit.entity.Creature;
|
|
import org.bukkit.entity.ItemFrame;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.block.Action;
|
|
import org.bukkit.event.block.BlockBurnEvent;
|
|
import org.bukkit.event.block.BlockGrowEvent;
|
|
import org.bukkit.event.block.BlockIgniteEvent;
|
|
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
|
|
import org.bukkit.event.entity.*;
|
|
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
|
import org.bukkit.event.inventory.InventoryCreativeEvent;
|
|
import org.bukkit.event.inventory.InventoryMoveItemEvent;
|
|
import org.bukkit.event.player.*;
|
|
import org.bukkit.event.server.MapInitializeEvent;
|
|
import org.bukkit.event.weather.WeatherChangeEvent;
|
|
import org.bukkit.event.world.StructureGrowEvent;
|
|
import org.bukkit.map.MapView;
|
|
import org.bukkit.util.Vector;
|
|
|
|
/**
|
|
* some short events
|
|
*
|
|
* @author joethei
|
|
* @version 1.0
|
|
*/
|
|
public class Events implements Listener {
|
|
|
|
@EventHandler
|
|
public void onMapInit(MapInitializeEvent e) {
|
|
MapView map = e.getMap();
|
|
map.getRenderers().forEach(map::removeRenderer);
|
|
map.addRenderer(new CustomMapRenderer());
|
|
}
|
|
|
|
/**
|
|
* cancels food level changes
|
|
*
|
|
* @param e FoodLevelChangeEvent
|
|
*/
|
|
@EventHandler
|
|
public void onFoodLevelChange(FoodLevelChangeEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
/**
|
|
* cancels weather changes
|
|
*
|
|
* @param e WeatherChangeEvent
|
|
*/
|
|
@EventHandler
|
|
public void onWeatherChange(WeatherChangeEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
/**
|
|
* cancels item consume
|
|
*
|
|
* @param e PlayerItemConsumeEvent
|
|
*/
|
|
@EventHandler
|
|
public void onConsume(PlayerItemConsumeEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
/**
|
|
* cancels death message and drops
|
|
*
|
|
* @param e PlayerDeathEvent
|
|
*/
|
|
@EventHandler
|
|
public void onDeath(PlayerDeathEvent e) {
|
|
e.setDeathMessage(null);
|
|
e.setKeepInventory(true);
|
|
e.setKeepLevel(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onItemMove(InventoryMoveItemEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onItemSwapHands(PlayerSwapHandItemsEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
/**
|
|
* sets respawn location
|
|
*
|
|
* @param e PlayerRespawnEvent
|
|
*/
|
|
@EventHandler
|
|
public void onRespawn(PlayerRespawnEvent e) {
|
|
e.setRespawnLocation(Config.readLocation("Lobby.Locs.Spawn"));
|
|
}
|
|
|
|
/**
|
|
* cancels inventory dropping in creative
|
|
*
|
|
* @param e InventoryCreativeEvent
|
|
*/
|
|
@EventHandler
|
|
public void onInventoryCreative(InventoryCreativeEvent e) {
|
|
e.setCancelled(false);
|
|
}
|
|
|
|
/**
|
|
* cancels item drop
|
|
*
|
|
* @param e PlayerDropItemEvent
|
|
*/
|
|
@EventHandler
|
|
public void onDrop(PlayerDropItemEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
/**
|
|
* cancels player damage
|
|
*
|
|
* @param e EntityDamageEvent
|
|
*/
|
|
@EventHandler
|
|
public void onDamage(EntityDamageEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
/**
|
|
* cancels explosions
|
|
*
|
|
* @param e EntityExplodeEvent
|
|
*/
|
|
@EventHandler
|
|
public void onExplode(EntityExplodeEvent e) {
|
|
e.blockList().clear();
|
|
}
|
|
|
|
/**
|
|
* cancels block destroying when block burns
|
|
*
|
|
* @param e BlockBurnEvent
|
|
*/
|
|
@EventHandler
|
|
public void onBurn(BlockBurnEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
/**
|
|
* @param e BlockIgniteEvent
|
|
*/
|
|
@EventHandler
|
|
public void onBlockIgnite(BlockIgniteEvent e) {
|
|
if (e.getCause() == IgniteCause.SPREAD)
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
/**
|
|
* cancels chest opening and stuff + some easter egg
|
|
*
|
|
* @param e PlayerInteract
|
|
*/
|
|
@EventHandler
|
|
public void onInteract(PlayerInteractEvent e) {
|
|
if (e.getAction() == Action.PHYSICAL && e.getClickedBlock().getType() == Material.SOIL)
|
|
e.setCancelled(true);
|
|
if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName());
|
|
if (e.getClickedBlock().getType() == Material.CHEST) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.FURNACE) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.BURNING_FURNACE) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.WORKBENCH) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.BREWING_STAND) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.ARMOR_STAND) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.ACACIA_DOOR) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.BIRCH_DOOR) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.DARK_OAK_DOOR) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.JUNGLE_DOOR) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.TRAP_DOOR) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.SPRUCE_DOOR) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.WOOD_DOOR) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.WOODEN_DOOR) e.setCancelled(true);
|
|
if (e.getClickedBlock().getType() == Material.SKULL) {
|
|
Skull skull = (Skull) e.getClickedBlock().getState();
|
|
if (skull.getOwner().equals("MHF_Chest")) {
|
|
p.playSound(p.getEyeLocation(), Sound.BLOCK_PORTAL_TRAVEL, 5.0F, 1.0F);
|
|
p.playParticle(skull.getLocation().add(0.5D, 1.5D, 0.5D), EnumParticle.ENCHANTMENT_TABLE, 0.3F, 500);
|
|
Bukkit.getScheduler().scheduleAsyncDelayedTask(Lobby.getInstance(), () -> {
|
|
p.playParticle(skull.getLocation().add(0.5D, 0.0D, 0.5D), EnumParticle.SPELL_WITCH, 0.4F, 500);
|
|
p.sendTitle(10, 50, 10, "§eDu hast ein Versteck gefunden", "§6Name hier einfügen");
|
|
p.getDatabasePlayer().addCoins(100);
|
|
Scoreboards.updateScoreboard(p);
|
|
}, 3 * 20L);
|
|
|
|
}
|
|
}
|
|
if(e.getClickedBlock().getType() == Material.STONE_BUTTON) {
|
|
new StartMission(p);
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* prevents item despawning
|
|
*
|
|
* @param e ItemDespawnEvent
|
|
*/
|
|
@EventHandler
|
|
public void onItemDespawn(ItemDespawnEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onHangingBreak(HangingBreakByEntityEvent e) {
|
|
if (e.getEntity() instanceof ItemFrame)
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onBlockGrow(BlockGrowEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onStructureGrow(StructureGrowEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onArmorstandManipulate(PlayerArmorStandManipulateEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onChat(AsyncPlayerChatEvent e) {
|
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
|
|
|
for (CustomPlayer players : PlayerHider.getSilentlobby()) e.getRecipients().remove(players);
|
|
|
|
if (PlayerHider.getSilentlobby().contains(p)) e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onMove(PlayerMoveEvent e) {
|
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
|
if (PetManager.hasPet(p)) {
|
|
new Pets().followPlayer((Creature) PetManager.getPet(p), p, 1.4);
|
|
}
|
|
if ((p.getLocation().getBlock().getType() == Material.STATIONARY_WATER)
|
|
&& (p.getLocation().subtract(0.0D, 3.0D, 0.0D).getBlock().getType() == Material.STATIONARY_WATER)
|
|
&& (p.getVehicle() == null) && (p.getGameMode() != GameMode.CREATIVE)
|
|
&& (!p.isFlying())) {
|
|
p.setGliding(true);
|
|
}
|
|
if ((p.getLocation().getBlock().getType() != Material.STATIONARY_WATER)
|
|
&& (p.getLocation().subtract(0.0D, 3.0D, 0.0D).getBlock().getType() != Material.STATIONARY_WATER)
|
|
&& (p.getVehicle() == null)) {
|
|
p.setGliding(false);
|
|
}
|
|
//only for debugging purposes
|
|
if(p.getLocation().getY() >= 5.0D && p.getLocation().getBlock().getType() == Material.STATIONARY_WATER) {
|
|
Vector v = p.getLocation().getDirection().multiply(0D).setY(3D);
|
|
p.setVelocity(v);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void onEntityToggleGlideEvent(EntityToggleGlideEvent e) {
|
|
if(e.getEntity() instanceof Player) {
|
|
final CustomPlayer p = CustomPlayer.getPlayer((Player) e.getEntity());
|
|
if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() != Material.STATIONARY_WATER) {
|
|
p.setVelocity(new Vector(p.getLocation().getDirection().getX() * 1, 1 * -1.0, p.getLocation().getDirection().getZ() * 0.1));
|
|
e.setCancelled(true);
|
|
}
|
|
if(p.isSneaking()) {
|
|
e.setCancelled(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void onToogleSneak(PlayerToggleSneakEvent e) {
|
|
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
|
|
if(!p.isSneaking()) {
|
|
p.setGliding(true);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void onEntityBlockChange(EntityChangeBlockEvent e) {
|
|
e.setCancelled(true);
|
|
}
|
|
|
|
@EventHandler
|
|
public void onCreatureSpawn(CreatureSpawnEvent e) {
|
|
if (e.getSpawnReason() != CreatureSpawnEvent.SpawnReason.CUSTOM) {
|
|
e.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
} |