From de6e9f1d80d9c60831cd41dabac8783aa03f61db Mon Sep 17 00:00:00 2001 From: gbui Date: Mon, 16 Jul 2018 09:53:08 -0700 Subject: [PATCH 01/11] Add item groups (aka creative tabs) --- SpongeAPI | 2 +- .../common/mixin/core/block/MixinBlock.java | 8 +++ .../core/creativetab/MixinCreativeTabs.java | 62 +++++++++++++++++++ .../common/mixin/core/item/MixinItem.java | 8 +++ .../common/registry/CommonModuleRegistry.java | 2 + .../type/item/ItemGroupRegistryModule.java | 47 ++++++++++++++ src/main/resources/META-INF/common_at.cfg | 1 + src/main/resources/mixins.common.core.json | 1 + .../org/spongepowered/test/ItemGroupTest.java | 23 +++++++ 9 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/spongepowered/common/mixin/core/creativetab/MixinCreativeTabs.java create mode 100644 src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java create mode 100644 testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java diff --git a/SpongeAPI b/SpongeAPI index b0ed2421f89..03a96c55dc2 160000 --- a/SpongeAPI +++ b/SpongeAPI @@ -1 +1 @@ -Subproject commit b0ed2421f89faae6ceeb84bde47d398f8d944123 +Subproject commit 03a96c55dc279f86eac40edaea255cbaf63479cd diff --git a/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java b/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java index cdd8bfbc6db..d7e6615bc98 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java +++ b/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java @@ -38,6 +38,7 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -63,6 +64,7 @@ import org.spongepowered.api.event.CauseStackManager; import org.spongepowered.api.event.SpongeEventFactory; import org.spongepowered.api.event.entity.ConstructEntityEvent; +import org.spongepowered.api.item.ItemGroup; import org.spongepowered.api.item.ItemType; import org.spongepowered.api.text.translation.Translation; import org.spongepowered.api.util.annotation.NonnullByDefault; @@ -126,6 +128,7 @@ public abstract class MixinBlock implements BlockType, IMixinBlock { @Shadow public abstract String getUnlocalizedName(); @Shadow public abstract Material getMaterial(IBlockState state); + @Shadow public abstract CreativeTabs getCreativeTabToDisplayOn(); @Shadow public abstract IBlockState shadow$getDefaultState(); @Shadow public abstract boolean shadow$getTickRandomly(); @Shadow public abstract void dropBlockAsItem(net.minecraft.world.World worldIn, BlockPos pos, IBlockState state, int fortune); @@ -215,6 +218,11 @@ public Optional getItem() { return Items.AIR.equals(itemType) ? Optional.empty() : Optional.of(itemType); } + @Override + public Optional getItemGroup() { + return Optional.ofNullable((ItemGroup) getCreativeTabToDisplayOn()); + } + @Override public Translation getTranslation() { return new SpongeTranslation(getUnlocalizedName() + ".name"); diff --git a/src/main/java/org/spongepowered/common/mixin/core/creativetab/MixinCreativeTabs.java b/src/main/java/org/spongepowered/common/mixin/core/creativetab/MixinCreativeTabs.java new file mode 100644 index 00000000000..b71c7264037 --- /dev/null +++ b/src/main/java/org/spongepowered/common/mixin/core/creativetab/MixinCreativeTabs.java @@ -0,0 +1,62 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.spongepowered.common.mixin.core.creativetab; + +import com.google.common.base.MoreObjects; +import net.minecraft.creativetab.CreativeTabs; +import org.spongepowered.api.item.ItemGroup; +import org.spongepowered.api.text.translation.Translation; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.common.text.translation.SpongeTranslation; + +@Mixin(CreativeTabs.class) +public abstract class MixinCreativeTabs implements ItemGroup { + + @Shadow @Final private String tabLabel; + + @Override + public String getId() { + return this.tabLabel; + } + + @Override + public String getName() { + return getId(); + } + + @Override + public Translation getTranslation() { + return new SpongeTranslation("itemGroup." + this.tabLabel); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("Name", this.tabLabel) + .toString(); + } +} diff --git a/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java b/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java index c0fb2f96228..900ec00f36f 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java +++ b/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java @@ -25,6 +25,7 @@ package org.spongepowered.common.mixin.core.item; import com.google.common.base.MoreObjects; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import org.spongepowered.api.block.BlockType; @@ -33,6 +34,7 @@ import org.spongepowered.api.data.manipulator.mutable.DisplayNameData; import org.spongepowered.api.data.manipulator.mutable.item.EnchantmentData; import org.spongepowered.api.data.manipulator.mutable.item.LoreData; +import org.spongepowered.api.item.ItemGroup; import org.spongepowered.api.item.ItemType; import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; @@ -57,6 +59,7 @@ public abstract class MixinItem implements ItemType, IMixinItem, SpongeGameDicti @Shadow public abstract int getItemStackLimit(); @Shadow public abstract String getUnlocalizedName(); + @Shadow @Nullable public abstract CreativeTabs getCreativeTab(); // A item stack used to retrieve properties @Nullable private org.spongepowered.api.item.inventory.ItemStack propertyItemStack; @@ -71,6 +74,11 @@ public String getName() { return getId(); } + @Override + public Optional getItemGroup() { + return Optional.ofNullable((ItemGroup) getCreativeTab()); + } + @Override public > Optional getDefaultProperty(Class propertyClass) { if (this.propertyItemStack == null) { diff --git a/src/main/java/org/spongepowered/common/registry/CommonModuleRegistry.java b/src/main/java/org/spongepowered/common/registry/CommonModuleRegistry.java index ab96e760434..0210144b75f 100644 --- a/src/main/java/org/spongepowered/common/registry/CommonModuleRegistry.java +++ b/src/main/java/org/spongepowered/common/registry/CommonModuleRegistry.java @@ -46,6 +46,7 @@ import org.spongepowered.api.boss.ServerBossBar; import org.spongepowered.api.data.DataRegistration; import org.spongepowered.api.data.key.Key; +import org.spongepowered.api.item.ItemGroup; import org.spongepowered.api.item.enchantment.Enchantment; import org.spongepowered.api.data.meta.PatternLayer; import org.spongepowered.api.data.persistence.DataFormat; @@ -458,6 +459,7 @@ protected void registerCommonModules(SpongeGameRegistry registry) { .registerModule(GoldenApple.class, new GoldenAppleRegistryModule()) .registerModule(Hinge.class, new HingeRegistryModule()) .registerModule(IntegerTrait.class, IntegerTraitRegistryModule.getInstance()) + .registerModule(ItemGroup.class, new ItemGroupRegistryModule()) .registerModule(ItemType.class, ItemTypeRegistryModule.getInstance()) .registerModule(new LocaleRegistryModule()) .registerModule(LogAxis.class, new LogAxisRegistryModule()) diff --git a/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java b/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java new file mode 100644 index 00000000000..5ef6ab9f562 --- /dev/null +++ b/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java @@ -0,0 +1,47 @@ +package org.spongepowered.common.registry.type.item; + +import static com.google.common.base.Preconditions.checkNotNull; + +import net.minecraft.creativetab.CreativeTabs; +import org.spongepowered.api.item.ItemGroup; +import org.spongepowered.api.item.ItemGroups; +import org.spongepowered.api.registry.CatalogRegistryModule; +import org.spongepowered.api.registry.util.RegisterCatalog; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.Optional; + +public class ItemGroupRegistryModule implements CatalogRegistryModule { + + @RegisterCatalog(ItemGroups.class) + private final Map itemGroupMap = new HashMap<>(); + + @Override + public Optional getById(String id) { + String key = checkNotNull(id).toLowerCase(Locale.ENGLISH); + return Optional.ofNullable(this.itemGroupMap.get(key)); + } + + @Override + public Collection getAll() { + return Collections.unmodifiableCollection(this.itemGroupMap.values()); + } + + @Override + public void registerDefaults() { + this.itemGroupMap.put("brewing", (ItemGroup) CreativeTabs.BREWING); + this.itemGroupMap.put("building_blocks", (ItemGroup) CreativeTabs.BUILDING_BLOCKS); + this.itemGroupMap.put("combat", (ItemGroup) CreativeTabs.COMBAT); + this.itemGroupMap.put("decorations", (ItemGroup) CreativeTabs.DECORATIONS); + this.itemGroupMap.put("food", (ItemGroup) CreativeTabs.FOOD); + this.itemGroupMap.put("materials", (ItemGroup) CreativeTabs.MATERIALS); + this.itemGroupMap.put("misc", (ItemGroup) CreativeTabs.MISC); + this.itemGroupMap.put("redstone", (ItemGroup) CreativeTabs.REDSTONE); + this.itemGroupMap.put("tools", (ItemGroup) CreativeTabs.TOOLS); + this.itemGroupMap.put("transportation", (ItemGroup) CreativeTabs.TRANSPORTATION); + } +} diff --git a/src/main/resources/META-INF/common_at.cfg b/src/main/resources/META-INF/common_at.cfg index fd3b618d3ed..885fcd4259c 100644 --- a/src/main/resources/META-INF/common_at.cfg +++ b/src/main/resources/META-INF/common_at.cfg @@ -488,6 +488,7 @@ public-f org.spongepowered.api.extra.fluid.FluidTypes * public-f org.spongepowered.api.item.enchantment.EnchantmentTypes * public-f org.spongepowered.api.item.FireworkShapes * +public-f org.spongepowered.api.item.ItemGroups * public-f org.spongepowered.api.item.ItemTypes * public-f org.spongepowered.api.item.inventory.InventoryArchetypes * diff --git a/src/main/resources/mixins.common.core.json b/src/main/resources/mixins.common.core.json index 28dbf7d7f12..3f58053799f 100644 --- a/src/main/resources/mixins.common.core.json +++ b/src/main/resources/mixins.common.core.json @@ -161,6 +161,7 @@ "command.server.MixinCommandSummon", "command.server.MixinCommandTeleport", "command.server.MixinCommandTP", + "creativetab.MixinCreativeTabs", "data.MixinCustomDataHolder", "data.MixinDataHolder", "data.MixinPropertyHolder", diff --git a/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java b/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java new file mode 100644 index 00000000000..c0234c77653 --- /dev/null +++ b/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java @@ -0,0 +1,23 @@ +package org.spongepowered.test; + +import org.spongepowered.api.entity.living.player.Player; +import org.spongepowered.api.event.Listener; +import org.spongepowered.api.event.filter.cause.First; +import org.spongepowered.api.event.item.inventory.InteractItemEvent; +import org.spongepowered.api.item.ItemGroup; +import org.spongepowered.api.plugin.Plugin; +import org.spongepowered.api.text.Text; + +import java.util.Optional; + +@Plugin(id = "item_group_test", name = "Item Group Test", version = "0.0.0", description = ItemGroupTest.DESCRIPTION) +public class ItemGroupTest { + + public static final String DESCRIPTION = "Right click an item to get the ItemGroup"; + + @Listener + public void onUseItem(InteractItemEvent.Secondary event, @First Player player) { + Optional ig = event.getItemStack().getType().getItemGroup(); + player.sendMessage(Text.of("This item is in the item group: " + ig.map(ItemGroup::getName).orElse("none"))); + } +} From 86b0e8c9e27769e16b4ebbfd1656861a2081bdf9 Mon Sep 17 00:00:00 2001 From: gbui Date: Mon, 16 Jul 2018 19:38:47 -0700 Subject: [PATCH 02/11] Add license header to ItemGroupTest --- SpongeAPI | 2 +- .../org/spongepowered/test/ItemGroupTest.java | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/SpongeAPI b/SpongeAPI index 03a96c55dc2..93e10557911 160000 --- a/SpongeAPI +++ b/SpongeAPI @@ -1 +1 @@ -Subproject commit 03a96c55dc279f86eac40edaea255cbaf63479cd +Subproject commit 93e10557911f136d6f72d8b8d13befae3c793637 diff --git a/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java b/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java index c0234c77653..cccd099ba2b 100644 --- a/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java +++ b/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java @@ -1,3 +1,27 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package org.spongepowered.test; import org.spongepowered.api.entity.living.player.Player; From 2654e51190992e4f36caae2ba43e326070a905ce Mon Sep 17 00:00:00 2001 From: gbui Date: Mon, 16 Jul 2018 19:48:42 -0700 Subject: [PATCH 03/11] Add license header to ItemGroupRegistryModule --- .../type/item/ItemGroupRegistryModule.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java b/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java index 5ef6ab9f562..c0b3604a854 100644 --- a/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java +++ b/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java @@ -1,3 +1,27 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package org.spongepowered.common.registry.type.item; import static com.google.common.base.Preconditions.checkNotNull; From ecf33ddaee345abe3e16c077b622f0758b752af8 Mon Sep 17 00:00:00 2001 From: gbui Date: Mon, 16 Jul 2018 20:00:38 -0700 Subject: [PATCH 04/11] Remove getItemGroup() in MixinBlock --- .../spongepowered/common/mixin/core/block/MixinBlock.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java b/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java index d7e6615bc98..320985b4da8 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java +++ b/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java @@ -64,7 +64,6 @@ import org.spongepowered.api.event.CauseStackManager; import org.spongepowered.api.event.SpongeEventFactory; import org.spongepowered.api.event.entity.ConstructEntityEvent; -import org.spongepowered.api.item.ItemGroup; import org.spongepowered.api.item.ItemType; import org.spongepowered.api.text.translation.Translation; import org.spongepowered.api.util.annotation.NonnullByDefault; @@ -218,11 +217,6 @@ public Optional getItem() { return Items.AIR.equals(itemType) ? Optional.empty() : Optional.of(itemType); } - @Override - public Optional getItemGroup() { - return Optional.ofNullable((ItemGroup) getCreativeTabToDisplayOn()); - } - @Override public Translation getTranslation() { return new SpongeTranslation(getUnlocalizedName() + ".name"); From d26d4a9075acb3ebd00ad665b9627317b854a4e5 Mon Sep 17 00:00:00 2001 From: gbui Date: Tue, 17 Jul 2018 00:19:54 -0700 Subject: [PATCH 05/11] Add customRegistration() to ItemGroupRegistryModule --- .../registry/type/item/ItemGroupRegistryModule.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java b/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java index c0b3604a854..e514f45d668 100644 --- a/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java +++ b/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java @@ -30,6 +30,7 @@ import org.spongepowered.api.item.ItemGroup; import org.spongepowered.api.item.ItemGroups; import org.spongepowered.api.registry.CatalogRegistryModule; +import org.spongepowered.api.registry.util.AdditionalRegistration; import org.spongepowered.api.registry.util.RegisterCatalog; import java.util.Collection; @@ -68,4 +69,14 @@ public void registerDefaults() { this.itemGroupMap.put("tools", (ItemGroup) CreativeTabs.TOOLS); this.itemGroupMap.put("transportation", (ItemGroup) CreativeTabs.TRANSPORTATION); } + + @AdditionalRegistration + public void customRegistration() { + for (ItemGroup itemGroup : this.itemGroupMap.values()) { + String key = itemGroup.getId().toLowerCase(Locale.ENGLISH); + if (!this.itemGroupMap.containsKey(key)) { + this.itemGroupMap.put(key, itemGroup); + } + } + } } From 774e071f882062a7a3da2285b06a65f97b622ed9 Mon Sep 17 00:00:00 2001 From: gbui Date: Tue, 17 Jul 2018 00:43:44 -0700 Subject: [PATCH 06/11] Remove getCreativeTabToDisplayOn() in MixinBlock --- .../org/spongepowered/common/mixin/core/block/MixinBlock.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java b/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java index 320985b4da8..cdd8bfbc6db 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java +++ b/src/main/java/org/spongepowered/common/mixin/core/block/MixinBlock.java @@ -38,7 +38,6 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -127,7 +126,6 @@ public abstract class MixinBlock implements BlockType, IMixinBlock { @Shadow public abstract String getUnlocalizedName(); @Shadow public abstract Material getMaterial(IBlockState state); - @Shadow public abstract CreativeTabs getCreativeTabToDisplayOn(); @Shadow public abstract IBlockState shadow$getDefaultState(); @Shadow public abstract boolean shadow$getTickRandomly(); @Shadow public abstract void dropBlockAsItem(net.minecraft.world.World worldIn, BlockPos pos, IBlockState state, int fortune); From d4490f4fc5332108f84097f093eae3a4c52c192b Mon Sep 17 00:00:00 2001 From: gbui Date: Tue, 17 Jul 2018 10:06:05 -0700 Subject: [PATCH 07/11] Use CreativeTabs.CREATIVE_TAB_ARRAY in customRegistration() --- .../common/registry/type/item/ItemGroupRegistryModule.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java b/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java index e514f45d668..63837dfcede 100644 --- a/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java +++ b/src/main/java/org/spongepowered/common/registry/type/item/ItemGroupRegistryModule.java @@ -72,7 +72,8 @@ public void registerDefaults() { @AdditionalRegistration public void customRegistration() { - for (ItemGroup itemGroup : this.itemGroupMap.values()) { + for (CreativeTabs creativeTab : CreativeTabs.CREATIVE_TAB_ARRAY) { + ItemGroup itemGroup = (ItemGroup) creativeTab; String key = itemGroup.getId().toLowerCase(Locale.ENGLISH); if (!this.itemGroupMap.containsKey(key)) { this.itemGroupMap.put(key, itemGroup); From b2ac4a1872ddae359e8224b591c3c5332e163ffd Mon Sep 17 00:00:00 2001 From: gbui Date: Tue, 17 Jul 2018 10:13:51 -0700 Subject: [PATCH 08/11] Replace getItemGroup() with getItemGroups() Move implementation to SpongeVanilla --- SpongeAPI | 2 +- .../spongepowered/common/mixin/core/item/MixinItem.java | 8 -------- .../main/java/org/spongepowered/test/ItemGroupTest.java | 7 ++++--- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/SpongeAPI b/SpongeAPI index 93e10557911..d6cf055cf2b 160000 --- a/SpongeAPI +++ b/SpongeAPI @@ -1 +1 @@ -Subproject commit 93e10557911f136d6f72d8b8d13befae3c793637 +Subproject commit d6cf055cf2b9b06a2522dc8276a44cc735113940 diff --git a/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java b/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java index 900ec00f36f..c0fb2f96228 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java +++ b/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java @@ -25,7 +25,6 @@ package org.spongepowered.common.mixin.core.item; import com.google.common.base.MoreObjects; -import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import org.spongepowered.api.block.BlockType; @@ -34,7 +33,6 @@ import org.spongepowered.api.data.manipulator.mutable.DisplayNameData; import org.spongepowered.api.data.manipulator.mutable.item.EnchantmentData; import org.spongepowered.api.data.manipulator.mutable.item.LoreData; -import org.spongepowered.api.item.ItemGroup; import org.spongepowered.api.item.ItemType; import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; @@ -59,7 +57,6 @@ public abstract class MixinItem implements ItemType, IMixinItem, SpongeGameDicti @Shadow public abstract int getItemStackLimit(); @Shadow public abstract String getUnlocalizedName(); - @Shadow @Nullable public abstract CreativeTabs getCreativeTab(); // A item stack used to retrieve properties @Nullable private org.spongepowered.api.item.inventory.ItemStack propertyItemStack; @@ -74,11 +71,6 @@ public String getName() { return getId(); } - @Override - public Optional getItemGroup() { - return Optional.ofNullable((ItemGroup) getCreativeTab()); - } - @Override public > Optional getDefaultProperty(Class propertyClass) { if (this.propertyItemStack == null) { diff --git a/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java b/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java index cccd099ba2b..384f0d1b246 100644 --- a/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java +++ b/testplugins/src/main/java/org/spongepowered/test/ItemGroupTest.java @@ -32,7 +32,8 @@ import org.spongepowered.api.plugin.Plugin; import org.spongepowered.api.text.Text; -import java.util.Optional; +import java.util.Collection; +import java.util.stream.Collectors; @Plugin(id = "item_group_test", name = "Item Group Test", version = "0.0.0", description = ItemGroupTest.DESCRIPTION) public class ItemGroupTest { @@ -41,7 +42,7 @@ public class ItemGroupTest { @Listener public void onUseItem(InteractItemEvent.Secondary event, @First Player player) { - Optional ig = event.getItemStack().getType().getItemGroup(); - player.sendMessage(Text.of("This item is in the item group: " + ig.map(ItemGroup::getName).orElse("none"))); + Collection itemGroups = event.getItemStack().getType().getItemGroups(); + player.sendMessage(Text.of("This item is in the item group(s): " + itemGroups.stream().map(ItemGroup::getName).collect(Collectors.joining(", ")))); } } From e51f5232e6b10b65bfe0b7e6d7407d038644540f Mon Sep 17 00:00:00 2001 From: gbui Date: Tue, 17 Jul 2018 20:38:54 -0700 Subject: [PATCH 09/11] Implement getItemGroups() in MixinItem Move implementation from SpongeVanilla back to SpongeCommon --- .../common/mixin/core/item/MixinItem.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java b/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java index c0fb2f96228..f981cb49200 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java +++ b/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java @@ -25,6 +25,7 @@ package org.spongepowered.common.mixin.core.item; import com.google.common.base.MoreObjects; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import org.spongepowered.api.block.BlockType; @@ -33,6 +34,7 @@ import org.spongepowered.api.data.manipulator.mutable.DisplayNameData; import org.spongepowered.api.data.manipulator.mutable.item.EnchantmentData; import org.spongepowered.api.data.manipulator.mutable.item.LoreData; +import org.spongepowered.api.item.ItemGroup; import org.spongepowered.api.item.ItemType; import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; @@ -43,6 +45,8 @@ import org.spongepowered.common.registry.SpongeGameDictionaryEntry; import org.spongepowered.common.text.translation.SpongeTranslation; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Optional; @@ -57,6 +61,7 @@ public abstract class MixinItem implements ItemType, IMixinItem, SpongeGameDicti @Shadow public abstract int getItemStackLimit(); @Shadow public abstract String getUnlocalizedName(); + @Shadow @Nullable public abstract CreativeTabs getCreativeTab(); // A item stack used to retrieve properties @Nullable private org.spongepowered.api.item.inventory.ItemStack propertyItemStack; @@ -71,6 +76,11 @@ public String getName() { return getId(); } + @Override + public Collection getItemGroups() { + return Collections.singleton((ItemGroup) getCreativeTab()); + } + @Override public > Optional getDefaultProperty(Class propertyClass) { if (this.propertyItemStack == null) { From efc0fd2000f09c7c22b162e2243a01569601bc74 Mon Sep 17 00:00:00 2001 From: gbui Date: Tue, 17 Jul 2018 20:46:39 -0700 Subject: [PATCH 10/11] Update MixinCreativeTabs to match #1792 * Lazy load translation * In getName(), return getTranslation().get() instead of getId() --- .../mixin/core/creativetab/MixinCreativeTabs.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/spongepowered/common/mixin/core/creativetab/MixinCreativeTabs.java b/src/main/java/org/spongepowered/common/mixin/core/creativetab/MixinCreativeTabs.java index b71c7264037..672fe507507 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/creativetab/MixinCreativeTabs.java +++ b/src/main/java/org/spongepowered/common/mixin/core/creativetab/MixinCreativeTabs.java @@ -33,9 +33,13 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.common.text.translation.SpongeTranslation; +import javax.annotation.Nullable; + @Mixin(CreativeTabs.class) public abstract class MixinCreativeTabs implements ItemGroup { + @Nullable private Translation translation; + @Shadow @Final private String tabLabel; @Override @@ -45,12 +49,15 @@ public String getId() { @Override public String getName() { - return getId(); + return getTranslation().get(); } @Override public Translation getTranslation() { - return new SpongeTranslation("itemGroup." + this.tabLabel); + if (this.translation == null) { + this.translation = new SpongeTranslation("itemGroup." + this.tabLabel); + } + return this.translation; } @Override From 4aceb68ffdddb7912a146fe92043190b2ccf31f4 Mon Sep 17 00:00:00 2001 From: gbui Date: Thu, 19 Jul 2018 09:47:59 -0700 Subject: [PATCH 11/11] Add null check in MixinItem.getItemGroups() --- .../spongepowered/common/mixin/core/item/MixinItem.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java b/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java index f981cb49200..c2da736ef37 100644 --- a/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java +++ b/src/main/java/org/spongepowered/common/mixin/core/item/MixinItem.java @@ -78,7 +78,12 @@ public String getName() { @Override public Collection getItemGroups() { - return Collections.singleton((ItemGroup) getCreativeTab()); + CreativeTabs creativeTab = getCreativeTab(); + if (creativeTab == null) { + return Collections.emptySet(); + } else { + return Collections.singleton((ItemGroup) creativeTab); + } } @Override