11package net .modificationstation .stationapi .mixin .flattening ;
22
3+ import lombok .val ;
4+ import net .mine_diver .unsafeevents .listener .Listener ;
35import net .minecraft .block .Block ;
46import net .minecraft .item .Item ;
57import net .minecraft .item .ItemStack ;
810import net .modificationstation .stationapi .api .block .BlockState ;
911import net .modificationstation .stationapi .api .event .item .IsItemSuitableForStateEvent ;
1012import net .modificationstation .stationapi .api .event .item .ItemMiningSpeedMultiplierOnStateEvent ;
13+ import net .modificationstation .stationapi .api .event .registry .RegistryIdRemapEvent ;
1114import net .modificationstation .stationapi .api .item .StationFlatteningItemStack ;
1215import net .modificationstation .stationapi .api .registry .ItemRegistry ;
1316import net .modificationstation .stationapi .api .registry .RegistryEntry ;
17+ import net .modificationstation .stationapi .api .util .Util ;
1418import org .objectweb .asm .Opcodes ;
1519import org .spongepowered .asm .mixin .Mixin ;
1620import org .spongepowered .asm .mixin .Shadow ;
2024import org .spongepowered .asm .mixin .injection .Redirect ;
2125import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
2226
27+ import java .util .Collections ;
2328import java .util .Objects ;
29+ import java .util .Set ;
30+ import java .util .WeakHashMap ;
2431
2532import static net .modificationstation .stationapi .api .StationAPI .LOGGER ;
2633import static net .modificationstation .stationapi .api .StationAPI .NAMESPACE ;
@@ -34,6 +41,19 @@ abstract class ItemStackMixin implements StationFlatteningItemStack {
3441
3542 @ Unique
3643 private static final String STATION_ID = of (NAMESPACE , "id" ).toString ();
44+
45+ @ Unique
46+ private static final Set <ItemStack > STATION_ITEM_STACKS = Util .make (
47+ Collections .newSetFromMap (new WeakHashMap <>()),
48+ stacks -> ItemRegistry .INSTANCE .getEventBus ().register (Listener .<RegistryIdRemapEvent <ItemRegistry >>simple ()
49+ .listener (event -> {
50+ val remap = event .state .getRawIdChangeMap ();
51+ stacks .forEach (
52+ stack -> stack .itemId = remap .getOrDefault (stack .itemId , stack .itemId )
53+ );
54+ })
55+ .build ()
56+ ));
3757
3858 @ Inject (
3959 method = "<init>(Lnet/minecraft/block/Block;)V" ,
@@ -131,4 +151,15 @@ public float getMiningSpeedMultiplier(BlockState state) {
131151 public boolean isOf (Item item ) {
132152 return this .getItem () == item ;
133153 }
154+
155+ @ Inject (
156+ method = {
157+ "<init>(III)V" ,
158+ "<init>(Lnet/minecraft/nbt/NbtCompound;)V"
159+ },
160+ at = @ At ("RETURN" )
161+ )
162+ private void stationapi_trackItemStack (CallbackInfo ci ) {
163+ STATION_ITEM_STACKS .add ((ItemStack ) (Object ) this );
164+ }
134165}
0 commit comments