diff --git a/src/main/java/ru/dbotthepony/mc/otm/mixin/ItemMixin.java b/src/main/java/ru/dbotthepony/mc/otm/mixin/ItemMixin.java new file mode 100644 index 000000000..ca6a21b43 --- /dev/null +++ b/src/main/java/ru/dbotthepony/mc/otm/mixin/ItemMixin.java @@ -0,0 +1,26 @@ +package ru.dbotthepony.mc.otm.mixin; + +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.dbotthepony.mc.otm.OverdriveThatMatters; +import ru.dbotthepony.mc.otm.registry.MCreativeTabsKt; + +@Mixin(Item.class) +public abstract class ItemMixin { + @Inject( + at = @At("HEAD"), + method = "getItemCategory()Lnet/minecraft/world/item/CreativeModeTab;", + cancellable = true + ) + public void getItemCategory$hook(CallbackInfoReturnable info) { + if (MCreativeTabsKt.getMainTabContents().contains((Item) ((Object) this))) { + info.setReturnValue(OverdriveThatMatters.INSTANCE.CREATIVE_TAB); + } else if (MCreativeTabsKt.getDecorativeTabContents().contains((Item) ((Object) this))) { + info.setReturnValue(OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE); + } + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCreativeTabs.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCreativeTabs.kt index a8aff6368..0a628f12b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCreativeTabs.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCreativeTabs.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.registry +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import net.minecraft.core.NonNullList import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Item @@ -17,13 +18,20 @@ import ru.dbotthepony.mc.otm.core.registryName class CreativeTabOutput { private val items = ArrayList() + private val itemTypes = ObjectOpenHashSet() fun accept(value: ItemLike) { items.add(ItemStack(value.asItem())) + itemTypes.add(value.asItem()) } fun accept(value: ItemStack) { items.add(value) + itemTypes.add(value.item) + } + + operator fun contains(item: Item): Boolean { + return item in itemTypes } fun fillIn(into: NonNullList) { diff --git a/src/main/resources/overdrive_that_matters.mixins.json b/src/main/resources/overdrive_that_matters.mixins.json index b812f9335..c11e4b161 100644 --- a/src/main/resources/overdrive_that_matters.mixins.json +++ b/src/main/resources/overdrive_that_matters.mixins.json @@ -17,7 +17,8 @@ "InventoryChangeTriggerMixin", "MixinPlayer", "HopperBlockEntityMixin", - "DispenserBlockEntityMixin" + "DispenserBlockEntityMixin", + "ItemMixin" ], "client": [ "MixinGameRenderer",