Skip to content

Commit 57de502

Browse files
committed
CompostItemEvent
1 parent 1a5fe45 commit 57de502

File tree

6 files changed

+102
-61
lines changed

6 files changed

+102
-61
lines changed
Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,43 @@
11
package io.papermc.paper.event.block;
22

3-
import org.bukkit.block.Block;
43
import org.bukkit.event.HandlerList;
5-
import org.bukkit.event.block.BlockEvent;
4+
import org.bukkit.event.block.BlockEventNew;
65
import org.bukkit.event.inventory.InventoryMoveItemEvent;
76
import org.bukkit.inventory.ItemStack;
8-
import org.jetbrains.annotations.ApiStatus;
97
import org.jspecify.annotations.NullMarked;
108

119
/**
1210
* Called when an item is about to be composted by a hopper.
1311
* To prevent hoppers from moving items into composters, cancel the {@link InventoryMoveItemEvent}.
1412
*/
1513
@NullMarked
16-
public class CompostItemEvent extends BlockEvent {
17-
18-
private static final HandlerList HANDLER_LIST = new HandlerList();
19-
20-
private final ItemStack item;
21-
private boolean willRaiseLevel;
22-
23-
@ApiStatus.Internal
24-
public CompostItemEvent(final Block composter, final ItemStack item, final boolean willRaiseLevel) {
25-
super(composter);
26-
this.item = item;
27-
this.willRaiseLevel = willRaiseLevel;
28-
}
14+
public interface CompostItemEvent extends BlockEventNew {
2915

3016
/**
3117
* Gets the item that was used on the composter.
3218
*
3319
* @return the item
3420
*/
35-
public ItemStack getItem() {
36-
return this.item;
37-
}
21+
ItemStack getItem();
3822

3923
/**
4024
* Gets whether the composter will rise a level.
4125
*
4226
* @return {@code true} if successful
4327
*/
44-
public boolean willRaiseLevel() {
45-
return this.willRaiseLevel;
46-
}
28+
boolean willRaiseLevel();
4729

4830
/**
4931
* Sets whether the composter will rise a level.
5032
*
5133
* @param willRaiseLevel {@code true} if the composter should rise a level
5234
*/
53-
public void setWillRaiseLevel(final boolean willRaiseLevel) {
54-
this.willRaiseLevel = willRaiseLevel;
55-
}
35+
void setWillRaiseLevel(boolean willRaiseLevel);
5636

57-
@Override
58-
public HandlerList getHandlers() {
59-
return HANDLER_LIST;
37+
static HandlerList getHandlerList() {
38+
final class Holder {
39+
private static final HandlerList HANDLER_LIST = new HandlerList();
40+
}
41+
return Holder.HANDLER_LIST;
6042
}
61-
62-
public static HandlerList getHandlerList() {
63-
return HANDLER_LIST;
64-
}
65-
6643
}
Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,20 @@
11
package io.papermc.paper.event.entity;
22

33
import io.papermc.paper.event.block.CompostItemEvent;
4-
import org.bukkit.block.Block;
54
import org.bukkit.entity.Entity;
65
import org.bukkit.event.Cancellable;
7-
import org.bukkit.inventory.ItemStack;
8-
import org.jetbrains.annotations.ApiStatus;
96
import org.jspecify.annotations.NullMarked;
107

118
/**
129
* Called when an item is about to be composted by an entity.
1310
*/
1411
@NullMarked
15-
public class EntityCompostItemEvent extends CompostItemEvent implements Cancellable {
16-
17-
private final Entity entity;
18-
private boolean cancelled;
19-
20-
@ApiStatus.Internal
21-
public EntityCompostItemEvent(final Entity entity, final Block composter, final ItemStack item, final boolean willRaiseLevel) {
22-
super(composter, item, willRaiseLevel);
23-
this.entity = entity;
24-
}
12+
public interface EntityCompostItemEvent extends CompostItemEvent, Cancellable {
2513

2614
/**
2715
* Gets the entity that interacted with the composter.
2816
*
2917
* @return the entity that composted an item.
3018
*/
31-
public Entity getEntity() {
32-
return this.entity;
33-
}
34-
35-
@Override
36-
public boolean isCancelled() {
37-
return this.cancelled;
38-
}
39-
40-
@Override
41-
public void setCancelled(final boolean cancel) {
42-
this.cancelled = cancel;
43-
}
44-
19+
Entity getEntity();
4520
}

paper-server/patches/features/0032-Events-to-interfaces.patch

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,6 +1273,22 @@ index 7b24213eb30f60d49c37fc7d1242b52db578e634..4824bc5185eed26407c3a43d3b083e64
12731273
if (!event.callEvent()) {
12741274
return InteractionResult.PASS;
12751275
}
1276+
diff --git a/net/minecraft/world/level/block/ComposterBlock.java b/net/minecraft/world/level/block/ComposterBlock.java
1277+
index 429e833ffe7c89d7b0ca7515dbd82ffc1ce8d60d..f565154a6705430bb4b33a56cedb30e7add57598 100644
1278+
--- a/net/minecraft/world/level/block/ComposterBlock.java
1279+
+++ b/net/minecraft/world/level/block/ComposterBlock.java
1280+
@@ -343,9 +343,9 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder {
1281+
boolean willRaiseLevel = !((levelValue != 0 || _float <= 0.0F) && rand >= (double) _float);
1282+
final io.papermc.paper.event.block.CompostItemEvent event;
1283+
if (entity == null) {
1284+
- event = new io.papermc.paper.event.block.CompostItemEvent(org.bukkit.craftbukkit.block.CraftBlock.at(level, pos), stack.getBukkitStack(), willRaiseLevel);
1285+
+ event = new io.papermc.paper.event.block.PaperCompostItemEvent(org.bukkit.craftbukkit.block.CraftBlock.at(level, pos), stack.getBukkitStack(), willRaiseLevel);
1286+
} else {
1287+
- event = new io.papermc.paper.event.entity.EntityCompostItemEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos), stack.getBukkitStack(), willRaiseLevel);
1288+
+ event = new io.papermc.paper.event.block.PaperEntityCompostItemEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos), stack.getBukkitStack(), willRaiseLevel);
1289+
}
1290+
if (!event.callEvent()) { // check for cancellation of entity event (non entity event can't be cancelled cause of hoppers)
1291+
return null;
12761292
diff --git a/net/minecraft/world/level/block/FlowerPotBlock.java b/net/minecraft/world/level/block/FlowerPotBlock.java
12771293
index b9cd84b1305cae67762eebde52aeab15ac6f0435..965c72dd4d7ee0afdd1c634cec3d0b0599258d17 100644
12781294
--- a/net/minecraft/world/level/block/FlowerPotBlock.java
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.papermc.paper.event.block;
2+
3+
import org.bukkit.block.Block;
4+
import org.bukkit.craftbukkit.event.block.CraftBlockEvent;
5+
import org.bukkit.event.HandlerList;
6+
import org.bukkit.inventory.ItemStack;
7+
8+
public class PaperCompostItemEvent extends CraftBlockEvent implements CompostItemEvent {
9+
10+
private final ItemStack item;
11+
private boolean willRaiseLevel;
12+
13+
public PaperCompostItemEvent(final Block composter, final ItemStack item, final boolean willRaiseLevel) {
14+
super(composter);
15+
this.item = item;
16+
this.willRaiseLevel = willRaiseLevel;
17+
}
18+
19+
@Override
20+
public ItemStack getItem() {
21+
return this.item;
22+
}
23+
24+
@Override
25+
public boolean willRaiseLevel() {
26+
return this.willRaiseLevel;
27+
}
28+
29+
@Override
30+
public void setWillRaiseLevel(final boolean willRaiseLevel) {
31+
this.willRaiseLevel = willRaiseLevel;
32+
}
33+
34+
@Override
35+
public HandlerList getHandlers() {
36+
return CompostItemEvent.getHandlerList();
37+
}
38+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.papermc.paper.event.block;
2+
3+
import io.papermc.paper.event.entity.EntityCompostItemEvent;
4+
import org.bukkit.block.Block;
5+
import org.bukkit.entity.Entity;
6+
import org.bukkit.inventory.ItemStack;
7+
8+
public class PaperEntityCompostItemEvent extends PaperCompostItemEvent implements EntityCompostItemEvent {
9+
10+
private final Entity entity;
11+
private boolean cancelled;
12+
13+
public PaperEntityCompostItemEvent(final Entity entity, final Block composter, final ItemStack item, final boolean willRaiseLevel) {
14+
super(composter, item, willRaiseLevel);
15+
this.entity = entity;
16+
}
17+
18+
@Override
19+
public Entity getEntity() {
20+
return this.entity;
21+
}
22+
23+
@Override
24+
public boolean isCancelled() {
25+
return this.cancelled;
26+
}
27+
28+
@Override
29+
public void setCancelled(final boolean cancel) {
30+
this.cancelled = cancel;
31+
}
32+
}

paper-server/src/main/java/io/papermc/paper/plugin/bytecode/EventToInterfaceMigration.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.papermc.asm.RewriteRuleVisitorFactory;
99
import io.papermc.asm.rules.classes.ClassToInterfaceRule;
1010
import io.papermc.paper.event.block.*;
11+
import io.papermc.paper.event.entity.*;
1112
import io.papermc.paper.event.packet.*;
1213
import io.papermc.paper.event.player.*;
1314
import java.util.Set;
@@ -169,7 +170,9 @@ public final class EventToInterfaceMigration {
169170
BlockFailedDispenseEvent.class,
170171
BlockLockCheckEvent.class,
171172
BlockPreDispenseEvent.class,
172-
VaultChangeStateEvent.class
173+
VaultChangeStateEvent.class,
174+
CompostItemEvent.class,
175+
EntityCompostItemEvent.class
173176
//</editor-fold>
174177
);
175178

0 commit comments

Comments
 (0)