/******************************************************************************* * Copyright 2014 Tobias Welther * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package de.tobiyas.racesandclasses.eventprocessing.eventresolvage; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; import de.tobiyas.racesandclasses.eventprocessing.eventresolvage.EventWrapper.RegainResource; import de.tobiyas.racesandclasses.eventprocessing.eventresolvage.resolvers.EventActionResolver; import de.tobiyas.racesandclasses.eventprocessing.eventresolvage.resolvers.EventDamageHealResolver; import de.tobiyas.racesandclasses.eventprocessing.eventresolvage.resolvers.EventPlayerResolver; import de.tobiyas.racesandclasses.eventprocessing.eventresolvage.resolvers.EventTargetResolver; import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer; import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayerManager; public class EventWrapperFactory { /** * Builds an EventWrapper from the passed event * * @param event to build from * * @return the parsed {@link EventWrapper} */ public static EventWrapper buildFromEvent(Event event){ Player player = EventPlayerResolver.resolvePlayer(event); if(player == null) return null; //we have no interesting event involving a player RaCPlayer racPlayer = RaCPlayerManager.get().getPlayer(player); World world = player.getWorld(); PlayerAction action = EventActionResolver.resolveAction(event, player); //target parts Entity targetEntity = EventTargetResolver.getTargetEntityFromEvent(event); if(targetEntity == null) targetEntity = player; Block targetBlock = EventTargetResolver.getTargetBlockFromEvent(event); boolean arrowInvolved = EventPlayerResolver.isArrowInvolved(event); //damage parts double damageHealValue = EventDamageHealResolver.getDamageHealFromEvent(event); DamageCause damageCause = EventDamageHealResolver.getDamageCauseFromEvent(event); RegainReason regainReason = EventDamageHealResolver.getRegainReasonFromEvent(event); RegainResource regainResource = EventDamageHealResolver.getRegainResource(event); return new EventWrapper( racPlayer, world, action, targetEntity, targetBlock, damageHealValue, damageCause, arrowInvolved, regainReason, regainResource, event ); } /** * Builds an Fake event with ONLY a player! * <br>CAUTION this may break some traits if used incorrectly. * * @param player to generate to * * @return the almost empty wrapper */ public static EventWrapper buildOnlyWithplayer(Player player){ RaCPlayer racPlayer = RaCPlayerManager.get().getPlayer(player); if(!racPlayer.isOnline()) return null; return buildOnlyWithplayer(racPlayer); } /** * Builds an Fake event with ONLY a player! * <br>CAUTION this may break some traits if used incorrectly. * * @param player to generate to * * @return the almost empty wrapper */ public static EventWrapper buildOnlyWithplayer(RaCPlayer player){ return new EventWrapper(player, player.getWorld(), PlayerAction.NONE, null, null, -1, null, false, null, null, null); } }