Skip to content

Commit

Permalink
feat: fire PlayerPickupExperienceEvent and make it cancellable.
Browse files Browse the repository at this point in the history
Related to GlowstoneMC#922
  • Loading branch information
VaiTon committed Jul 8, 2021
1 parent ed097a5 commit 9678b16
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions src/main/java/net/glowstone/entity/objects/GlowExperienceOrb.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.glowstone.entity.objects;

import com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent;
import com.flowpowered.network.Message;
import com.google.common.base.Preconditions;
import java.util.Collections;
Expand All @@ -8,6 +9,7 @@
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;
import net.glowstone.EventFactory;
import net.glowstone.entity.GlowEntity;
import net.glowstone.net.message.play.entity.DestroyEntitiesMessage;
import net.glowstone.net.message.play.entity.SpawnXpOrbMessage;
Expand Down Expand Up @@ -74,16 +76,22 @@ public void damage(double amount, Entity source, @NotNull EntityDamageEvent.Dama
@Override
public void pulse() {
super.pulse();
// todo: drag self towards player

if (tickSkipped) {
// find player to give experience
// todo: drag self towards player
Optional<Player> player = getWorld().getPlayers().stream()
.filter(p -> p.getLocation().distanceSquared(location) <= 1)
.findAny();
if (player.isPresent()) {
player.get().giveExp(experience);
world.playSound(location, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0F, 1.0F);
remove();
PlayerPickupExperienceEvent event =
new PlayerPickupExperienceEvent(player.get(), this);
event = EventFactory.getInstance().callEvent(event);
if (!event.isCancelled()) {
player.get().giveExp(experience);
world.playSound(location, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0F, 1.0F);
remove();
}
return;
}
}
Expand Down Expand Up @@ -116,7 +124,7 @@ public void setExperience(int experience) {
}

@Override
public EntityType getType() {
public @NotNull EntityType getType() {
return EntityType.EXPERIENCE_ORB;
}
}

0 comments on commit 9678b16

Please sign in to comment.