Skip to content

Commit 67cf694

Browse files
authored
fix: Entity drop capture during collisions. (#3777)
Fixes SpongePowered/SpongeForge#3304 Signed-off-by: Gabriel Harris-Rouquette <[email protected]>
1 parent 2c89f52 commit 67cf694

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

src/main/java/org/spongepowered/common/event/tracking/phase/entity/EntityCollisionState.java

+31-1
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,45 @@
2424
*/
2525
package org.spongepowered.common.event.tracking.phase.entity;
2626

27+
import org.spongepowered.api.Sponge;
28+
import org.spongepowered.api.entity.Entity;
29+
import org.spongepowered.api.event.cause.EventContextKeys;
30+
import org.spongepowered.api.event.cause.entity.spawn.SpawnTypes;
31+
import org.spongepowered.common.event.SpongeCommonEventFactory;
32+
import org.spongepowered.common.event.tracking.TrackingUtil;
33+
34+
import java.util.ArrayList;
35+
import java.util.List;
36+
import java.util.stream.Collectors;
37+
2738
public final class EntityCollisionState extends EntityPhaseState<BasicEntityContext> {
2839

2940
@Override
3041
protected BasicEntityContext createNewContext() {
31-
return new BasicEntityContext(this);
42+
return new BasicEntityContext(this).addEntityCaptures();
3243
}
3344

3445
@Override
3546
public boolean isCollision() {
3647
return true;
3748
}
49+
50+
@Override
51+
public void unwind(BasicEntityContext context) {
52+
context.getCapturedItemsSupplier()
53+
.acceptAndClearIfNotEmpty(items -> {
54+
final List<Entity> entities = items.stream()
55+
.map(entity -> (Entity) entity)
56+
.collect(Collectors.toList());
57+
Sponge.getCauseStackManager().addContext(EventContextKeys.SPAWN_TYPE, SpawnTypes.PASSIVE);
58+
SpongeCommonEventFactory.callDropItemCustom(entities, context);
59+
});
60+
TrackingUtil.processBlockCaptures(context);
61+
context.getCapturedEntitySupplier()
62+
.acceptAndClearIfNotEmpty(mc -> {
63+
final List<Entity> entities = new ArrayList<>(mc);
64+
Sponge.getCauseStackManager().addContext(EventContextKeys.SPAWN_TYPE, SpawnTypes.PASSIVE);
65+
SpongeCommonEventFactory.callSpawnEntityCustom(entities, context);
66+
});
67+
}
3868
}

0 commit comments

Comments
 (0)