Skip to content

Commit ca11131

Browse files
committed
Should restore compatibility with forge 55.0.6+
1 parent 52a3b70 commit ca11131

11 files changed

Lines changed: 119 additions & 25 deletions

File tree

common/src/main/java/fr/rakambda/fallingtree/common/FallingTreeCommon.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import fr.rakambda.fallingtree.common.tree.builder.TreeBuilder;
1414
import fr.rakambda.fallingtree.common.wrapper.DirectionCompat;
1515
import fr.rakambda.fallingtree.common.wrapper.IBlock;
16+
import fr.rakambda.fallingtree.common.wrapper.IBlockBreakEvent;
1617
import fr.rakambda.fallingtree.common.wrapper.IBlockPos;
1718
import fr.rakambda.fallingtree.common.wrapper.IBlockState;
1819
import fr.rakambda.fallingtree.common.wrapper.IComponent;
@@ -233,4 +234,8 @@ public TreePartType getTreePart(@NotNull IBlock checkBlock) {
233234

234235
@NotNull
235236
public abstract IItemStack getEmptyItemStack();
237+
238+
public boolean isOwnEvent(@NotNull IBlockBreakEvent event){
239+
return false;
240+
}
236241
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package fr.rakambda.fallingtree.common.utils;
2+
3+
import java.util.LinkedList;
4+
5+
public class BoundedList<T> extends LinkedList<T> {
6+
private final int maxSize;
7+
8+
public BoundedList(int maxSize) {
9+
this.maxSize = maxSize;
10+
}
11+
12+
@Override
13+
public boolean add(T element) {
14+
while (size() > maxSize) {
15+
super.removeFirst(); // Evict the oldest element
16+
}
17+
return super.add(element);
18+
}
19+
20+
@Override
21+
public void add(int index, T element) {
22+
while (size() > maxSize) {
23+
super.removeFirst(); // Still evict from the beginning to maintain "oldest"
24+
}
25+
super.add(index, element);
26+
}
27+
28+
@Override
29+
public boolean addAll(java.util.Collection<? extends T> c) {
30+
while (size() > maxSize) {
31+
super.removeFirst();
32+
}
33+
return super.addAll(c);
34+
}
35+
36+
@Override
37+
public boolean addAll(int index, java.util.Collection<? extends T> c) {
38+
while (size() > maxSize) {
39+
super.removeFirst();
40+
}
41+
return super.addAll(index, c);
42+
}
43+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package fr.rakambda.fallingtree.common.wrapper;
2+
3+
public interface IBlockBreakEvent extends IWrapper{
4+
}

forge/src/main/java/fr/rakambda/fallingtree/forge/common/FallingTreeCommonsImpl.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import fr.rakambda.fallingtree.common.config.enums.BreakMode;
55
import fr.rakambda.fallingtree.common.leaf.LeafBreakingHandler;
66
import fr.rakambda.fallingtree.common.network.ServerPacketHandler;
7+
import fr.rakambda.fallingtree.common.utils.BoundedList;
78
import fr.rakambda.fallingtree.common.wrapper.DirectionCompat;
89
import fr.rakambda.fallingtree.common.wrapper.IBlock;
10+
import fr.rakambda.fallingtree.common.wrapper.IBlockBreakEvent;
911
import fr.rakambda.fallingtree.common.wrapper.IBlockPos;
1012
import fr.rakambda.fallingtree.common.wrapper.IBlockState;
1113
import fr.rakambda.fallingtree.common.wrapper.IComponent;
@@ -19,7 +21,6 @@
1921
import fr.rakambda.fallingtree.forge.common.wrapper.ItemStackWrapper;
2022
import fr.rakambda.fallingtree.forge.common.wrapper.ItemWrapper;
2123
import fr.rakambda.fallingtree.forge.event.BlockBreakListener;
22-
import fr.rakambda.fallingtree.forge.event.FallingTreeBlockBreakEvent;
2324
import fr.rakambda.fallingtree.forge.event.LeafBreakingListener;
2425
import fr.rakambda.fallingtree.forge.event.ServerCommandRegistrationListener;
2526
import fr.rakambda.fallingtree.forge.network.ForgePacketHandler;
@@ -43,10 +44,12 @@
4344
import net.minecraft.world.level.block.Blocks;
4445
import net.minecraft.world.level.block.state.BlockState;
4546
import net.minecraftforge.common.MinecraftForge;
47+
import net.minecraftforge.event.level.BlockEvent;
4648
import net.minecraftforge.eventbus.api.IEventBus;
4749
import org.jetbrains.annotations.NotNull;
4850
import java.util.Arrays;
4951
import java.util.HashMap;
52+
import java.util.List;
5053
import java.util.Map;
5154
import java.util.Optional;
5255
import java.util.Set;
@@ -64,6 +67,7 @@ public class FallingTreeCommonsImpl extends FallingTreeCommon<Direction>{
6467
private final TagKey<Enchantment> chopperEnchantmentTag;
6568
@Getter
6669
private final Map<BreakMode, TagKey<Enchantment>> breakModeChopperEnchantmentTag;
70+
private final List<BlockEvent.BreakEvent> breakEvents;
6771

6872
public FallingTreeCommonsImpl(){
6973
leafBreakingHandler = new LeafBreakingHandler(this);
@@ -77,6 +81,8 @@ public FallingTreeCommonsImpl(){
7781
breakModeChopperEnchantmentTag.put(BreakMode.FALL_ITEM, TagKey.create(Registries.ENCHANTMENT, id("chopper_fall_item")));
7882
breakModeChopperEnchantmentTag.put(BreakMode.INSTANTANEOUS, TagKey.create(Registries.ENCHANTMENT, id("chopper_instantaneous")));
7983
breakModeChopperEnchantmentTag.put(BreakMode.SHIFT_DOWN, TagKey.create(Registries.ENCHANTMENT, id("chopper_shift_down")));
84+
85+
breakEvents = new BoundedList<>(50);
8086
}
8187

8288
@Override
@@ -199,7 +205,14 @@ public boolean isMangroveRoots(@NotNull IBlock block){
199205

200206
@Override
201207
public boolean checkCanBreakBlock(@NotNull ILevel level, @NotNull IBlockPos blockPos, @NotNull IBlockState blockState, @NotNull IPlayer player){
202-
return !MinecraftForge.EVENT_BUS.post(new FallingTreeBlockBreakEvent((Level) level.getRaw(), (BlockPos) blockPos.getRaw(), (BlockState) blockState.getRaw(), (Player) player.getRaw()));
208+
var event = new BlockEvent.BreakEvent((Level) level.getRaw(), (BlockPos) blockPos.getRaw(), (BlockState) blockState.getRaw(), (Player) player.getRaw());
209+
breakEvents.add(event);
210+
return !MinecraftForge.EVENT_BUS.post(event);
211+
}
212+
213+
@Override
214+
public boolean isOwnEvent(@NotNull IBlockBreakEvent event){
215+
return breakEvents.contains((BlockEvent.BreakEvent) event.getRaw());
203216
}
204217

205218
@Override
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package fr.rakambda.fallingtree.forge.common.wrapper;
2+
3+
import fr.rakambda.fallingtree.common.wrapper.IBlockBreakEvent;
4+
import lombok.Getter;
5+
import lombok.RequiredArgsConstructor;
6+
import lombok.ToString;
7+
import net.minecraftforge.event.level.BlockEvent;
8+
import org.jetbrains.annotations.NotNull;
9+
10+
@RequiredArgsConstructor
11+
@ToString
12+
public class BlockBreakEventWrapper implements IBlockBreakEvent{
13+
@NotNull
14+
@Getter
15+
private final BlockEvent.BreakEvent raw;
16+
}

forge/src/main/java/fr/rakambda/fallingtree/forge/event/BlockBreakListener.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package fr.rakambda.fallingtree.forge.event;
22

3-
import javax.annotation.Nonnull;
43
import fr.rakambda.fallingtree.common.FallingTreeCommon;
4+
import fr.rakambda.fallingtree.forge.common.wrapper.BlockBreakEventWrapper;
55
import fr.rakambda.fallingtree.forge.common.wrapper.BlockPosWrapper;
66
import fr.rakambda.fallingtree.forge.common.wrapper.BlockStateWrapper;
77
import fr.rakambda.fallingtree.forge.common.wrapper.LevelWrapper;
@@ -13,6 +13,7 @@
1313
import net.minecraftforge.event.level.BlockEvent;
1414
import net.minecraftforge.eventbus.api.SubscribeEvent;
1515
import org.jetbrains.annotations.NotNull;
16+
import javax.annotation.Nonnull;
1617

1718
@RequiredArgsConstructor
1819
public class BlockBreakListener{
@@ -47,7 +48,7 @@ public void onBlockBreakEvent(@Nonnull BlockEvent.BreakEvent event){
4748
if(event.isCanceled()){
4849
return;
4950
}
50-
if(event instanceof FallingTreeBlockBreakEvent){
51+
if(mod.isOwnEvent(new BlockBreakEventWrapper(event))){
5152
return;
5253
}
5354

forge/src/main/java/fr/rakambda/fallingtree/forge/event/FallingTreeBlockBreakEvent.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ log4j2-version = "2.24.1"
1010
minecraftVersion = "1.21.5"
1111
fabric-loader-version = "0.16.10"
1212
fabric-api-version = "0.119.5+1.21.5"
13-
forge-version = "1.21.5-55.0.1"
13+
forge-version = "1.21.5-55.0.12"
1414
neoforge-version = "21.5.4-beta"
1515

1616
# Mod dependencies

neoforge/src/main/java/fr/rakambda/fallingtree/neoforge/common/FallingTreeCommonsImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import fr.rakambda.fallingtree.common.config.enums.BreakMode;
55
import fr.rakambda.fallingtree.common.leaf.LeafBreakingHandler;
66
import fr.rakambda.fallingtree.common.network.ServerPacketHandler;
7+
import fr.rakambda.fallingtree.common.utils.BoundedList;
78
import fr.rakambda.fallingtree.common.wrapper.DirectionCompat;
89
import fr.rakambda.fallingtree.common.wrapper.IBlock;
10+
import fr.rakambda.fallingtree.common.wrapper.IBlockBreakEvent;
911
import fr.rakambda.fallingtree.common.wrapper.IBlockPos;
1012
import fr.rakambda.fallingtree.common.wrapper.IBlockState;
1113
import fr.rakambda.fallingtree.common.wrapper.IComponent;
@@ -43,9 +45,11 @@
4345
import net.minecraft.world.level.block.state.BlockState;
4446
import net.neoforged.bus.api.IEventBus;
4547
import net.neoforged.neoforge.common.NeoForge;
48+
import net.neoforged.neoforge.event.level.BlockEvent;
4649
import org.jetbrains.annotations.NotNull;
4750
import java.util.Arrays;
4851
import java.util.HashMap;
52+
import java.util.List;
4953
import java.util.Map;
5054
import java.util.Optional;
5155
import java.util.Set;
@@ -64,6 +68,7 @@ public class FallingTreeCommonsImpl extends FallingTreeCommon<Direction>{
6468
private final TagKey<Enchantment> chopperEnchantmentTag;
6569
@Getter
6670
private final Map<BreakMode, TagKey<Enchantment>> breakModeChopperEnchantmentTag;
71+
private final List<BlockEvent.BreakEvent> breakEvents;
6772

6873
public FallingTreeCommonsImpl(@NotNull IEventBus modEventBus){
6974
this.modEventBus = modEventBus;
@@ -79,6 +84,8 @@ public FallingTreeCommonsImpl(@NotNull IEventBus modEventBus){
7984
breakModeChopperEnchantmentTag.put(BreakMode.FALL_ITEM, TagKey.create(Registries.ENCHANTMENT, id("chopper_fall_item")));
8085
breakModeChopperEnchantmentTag.put(BreakMode.INSTANTANEOUS, TagKey.create(Registries.ENCHANTMENT, id("chopper_instantaneous")));
8186
breakModeChopperEnchantmentTag.put(BreakMode.SHIFT_DOWN, TagKey.create(Registries.ENCHANTMENT, id("chopper_shift_down")));
87+
88+
breakEvents = new BoundedList<>(50);
8289
}
8390

8491
@Override
@@ -201,8 +208,14 @@ public boolean isMangroveRoots(@NotNull IBlock block){
201208
@Override
202209
public boolean checkCanBreakBlock(@NotNull ILevel level, @NotNull IBlockPos blockPos, @NotNull IBlockState blockState, @NotNull IPlayer player){
203210
var event = NeoForge.EVENT_BUS.post(new FallingTreeBlockBreakEvent((Level) level.getRaw(), (BlockPos) blockPos.getRaw(), (BlockState) blockState.getRaw(), (Player) player.getRaw()));
211+
breakEvents.add(event);
204212
return !event.isCanceled();
205213
}
214+
215+
@Override
216+
public boolean isOwnEvent(@NotNull IBlockBreakEvent event){
217+
return breakEvents.contains((BlockEvent.BreakEvent) event.getRaw()) || event instanceof FallingTreeBlockBreakEvent;
218+
}
206219

207220
@Override
208221
@NotNull
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package fr.rakambda.fallingtree.neoforge.common.wrapper;
2+
3+
import fr.rakambda.fallingtree.common.wrapper.IBlockBreakEvent;
4+
import lombok.Getter;
5+
import lombok.RequiredArgsConstructor;
6+
import lombok.ToString;
7+
import net.neoforged.neoforge.event.level.BlockEvent;
8+
import org.jetbrains.annotations.NotNull;
9+
10+
@RequiredArgsConstructor
11+
@ToString
12+
public class BlockBreakEventWrapper implements IBlockBreakEvent{
13+
@NotNull
14+
@Getter
15+
private final BlockEvent.BreakEvent raw;
16+
}

0 commit comments

Comments
 (0)