Skip to content

Commit 0f1494e

Browse files
committed
ItemStack synchronization
1 parent 257147b commit 0f1494e

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

  • station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening

station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/ItemStackMixin.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package net.modificationstation.stationapi.mixin.flattening;
22

3+
import lombok.val;
4+
import net.mine_diver.unsafeevents.listener.Listener;
35
import net.minecraft.block.Block;
46
import net.minecraft.item.Item;
57
import net.minecraft.item.ItemStack;
@@ -8,9 +10,11 @@
810
import net.modificationstation.stationapi.api.block.BlockState;
911
import net.modificationstation.stationapi.api.event.item.IsItemSuitableForStateEvent;
1012
import net.modificationstation.stationapi.api.event.item.ItemMiningSpeedMultiplierOnStateEvent;
13+
import net.modificationstation.stationapi.api.event.registry.RegistryIdRemapEvent;
1114
import net.modificationstation.stationapi.api.item.StationFlatteningItemStack;
1215
import net.modificationstation.stationapi.api.registry.ItemRegistry;
1316
import net.modificationstation.stationapi.api.registry.RegistryEntry;
17+
import net.modificationstation.stationapi.api.util.Util;
1418
import org.objectweb.asm.Opcodes;
1519
import org.spongepowered.asm.mixin.Mixin;
1620
import org.spongepowered.asm.mixin.Shadow;
@@ -20,7 +24,10 @@
2024
import org.spongepowered.asm.mixin.injection.Redirect;
2125
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2226

27+
import java.util.Collections;
2328
import java.util.Objects;
29+
import java.util.Set;
30+
import java.util.WeakHashMap;
2431

2532
import static net.modificationstation.stationapi.api.StationAPI.LOGGER;
2633
import 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

Comments
 (0)