diff --git a/libraries/blocks/blocks-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/blocks/impl/BlockRegistryImpl.java b/libraries/blocks/blocks-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/blocks/impl/BlockRegistryImpl.java index 442a7d38..d3e4dee3 100644 --- a/libraries/blocks/blocks-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/blocks/impl/BlockRegistryImpl.java +++ b/libraries/blocks/blocks-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/blocks/impl/BlockRegistryImpl.java @@ -64,6 +64,7 @@ public static void init() { } VanillaBlocks.init(); + BlockEvents.REGISTER_BLOCKS.invoker().run(); initialized = true; } diff --git a/libraries/items/README.md b/libraries/items/README.md new file mode 100644 index 00000000..0566ce42 --- /dev/null +++ b/libraries/items/README.md @@ -0,0 +1,41 @@ +# Items API + +The Items API provides events and utilities for registering and working with items. + +## Registering Custom Items + +Item registration should be done in a listener to the `REGISTER_ITEMS` event. The `ItemRegistry` class provides utility methods for registering items. + +An example is shown below. + +```java +package com.example; + +import net.ornithemc.osl.entrypoints.api.ModInitializer; +import net.ornithemc.osl.items.api.ItemEvents; + +public class ExampleInitializer implements ModInitializer { + + @Override + public void init() { + ItemEvents.REGISTER_ITEMS.register(ExampleItems::init); + } +} +``` + +```java +package com.example; + +import net.minecraft.item.Item; + +import net.ornithemc.osl.core.util.NamespacedIdentifiers; +import net.ornithemc.osl.items.api.ItemRegistry; + +public final class ExampleItems { + + public static final CookieItem COOKIE = ItemRegistry.register(NamespacedIdentifiers.from("example", "cookie"), new CookieItem()); + + public static void init() { + } +} +``` diff --git a/libraries/items/build.gradle b/libraries/items/build.gradle new file mode 100644 index 00000000..e98ba2c6 --- /dev/null +++ b/libraries/items/build.gradle @@ -0,0 +1 @@ +setUpLibrary(project) diff --git a/libraries/items/gradle.properties b/libraries/items/gradle.properties new file mode 100644 index 00000000..a3ddc062 --- /dev/null +++ b/libraries/items/gradle.properties @@ -0,0 +1,6 @@ +library_id = items +library_name = Items +library_description = Items API and events. +library_version = 0.1.0-alpha.1 + +osl_dependencies = core:>=0.7.0,blocks:>=0.1.0- diff --git a/libraries/items/items-mc13w36a-mc14w25b/build.gradle b/libraries/items/items-mc13w36a-mc14w25b/build.gradle new file mode 100644 index 00000000..0a350fdb --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/build.gradle @@ -0,0 +1 @@ +setUpModule(project) diff --git a/libraries/items/items-mc13w36a-mc14w25b/gradle.properties b/libraries/items/items-mc13w36a-mc14w25b/gradle.properties new file mode 100644 index 00000000..fd8d10fb --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/gradle.properties @@ -0,0 +1,8 @@ +min_mc_version = 13w36a +max_mc_version = 14w25b +minecraft_dependency = >=1.7-alpha.13.36.a <=1.8-alpha.14.25.b + +minecraft_version = 1.7.2 +raven_build = 1 +sparrow_build = 1 +nests_build = 3 diff --git a/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java new file mode 100644 index 00000000..4d0923b9 --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java @@ -0,0 +1,34 @@ +package net.ornithemc.osl.items.api; + +import net.ornithemc.osl.core.api.events.Event; + +/** + * Events related to the items lifecycle. + */ +public final class ItemEvents { + + /** + * This event is invoked upon game start-up, after Vanilla item registration is finished. + * + *

+ * Custom item registration should be done in a listener of this event. + * Helper methods for registering items can be found in the {@linkplain + * ItemRegistry} class. + * + *

+ * Listeners to this event should be registered in your mod's entrypoint, + * and can be done as follows: + * + *

+	 * {@code
+	 * ItemEvents.REGISTER_ITEMS.register(() -> {
+	 * 	ItemRegistry.register(999, NamespacedIdentifiers.from("example", "cookie"), new CookieItem());
+	 * });
+	 * }
+	 * 
+ * + * @see ItemRegistry + */ + public static final Event REGISTER_ITEMS = Event.runnable(); + +} diff --git a/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java new file mode 100644 index 00000000..5c9fdcbc --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java @@ -0,0 +1,89 @@ +package net.ornithemc.osl.items.api; + +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; + +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +/** + * Public access to the Items registry. + */ +public final class ItemRegistry { + + /** + * @return the numerical ID assigned to the given item. + */ + public static int getId(Item item) { + return ItemRegistryImpl.getId(item); + } + + /** + * @return the namespaced ID assigned to the given item. + */ + public static NamespacedIdentifier getKey(Item item) { + return ItemRegistryImpl.getKey(item); + } + + /** + * @return the item mapped to the given numerical ID. + */ + public static Item getItem(int id) { + return ItemRegistryImpl.getItem(id); + } + + /** + * @return the item mapped to the given namespaced ID. + */ + public static Item getItem(NamespacedIdentifier key) { + return ItemRegistryImpl.getItem(key); + } + + /** + * @return a set containing all namespaced IDs in the registry. + */ + public static Set keySet() { + return ItemRegistryImpl.keySet(); + } + + /** + * @param block the block item to register. + * @return the registered block item. + */ + public static BlockItem register(Block block) { + return ItemRegistryImpl.register(block); + } + + /** + * @param the item type. + * @param item the item to register. + * @return the registered block item. + */ + public static T register(T item) { + return ItemRegistryImpl.register(item); + } + + /** + * @param the item type. + * @param block the block placed by the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(Block block, T item) { + return ItemRegistryImpl.register(block, item); + } + + /** + * @param the item type. + * @param id the numerical ID of the item. + * @param key the namespaced ID of the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(int id, NamespacedIdentifier key, T item) { + return ItemRegistryImpl.register(id, key, item); + } +} diff --git a/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java new file mode 100644 index 00000000..72e7dace --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java @@ -0,0 +1,96 @@ +package net.ornithemc.osl.items.impl; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; + +import net.ornithemc.osl.blocks.api.BlockRegistry; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.core.api.util.NamespacedIdentifiers; +import net.ornithemc.osl.items.api.ItemEvents; +import net.ornithemc.osl.items.impl.mixin.common.BlockItemAccess; + +public final class ItemRegistryImpl { + + public static final Map BLOCK_ITEMS = new HashMap<>(); + + private static boolean locked = true; + private static boolean initialized = false; + + public static int getId(Item item) { + return Item.REGISTRY.getId(item); + } + + public static NamespacedIdentifier getKey(Item item) { + String key = Item.REGISTRY.getKey(item); + return key == null ? null : NamespacedIdentifiers.parse(key); + } + + public static Item getItem(int id) { + return Item.REGISTRY.get(id); + } + + public static Item getItem(NamespacedIdentifier key) { + return Item.REGISTRY.get(key.toString()); + } + + public static Set keySet() { + return Item.REGISTRY.keySet().stream().map(NamespacedIdentifiers::parse).collect(Collectors.toSet()); + } + + public static BlockItem register(Block block) { + return register(block, new BlockItem(block)); + } + + public static T register(T item) { + return register(((BlockItemAccess) item).accessBlock(), item); + } + + public static T register(Block block, T item) { + if (!locked) { + BLOCK_ITEMS.put(block, item); + } + + return register(BlockRegistry.getId(block), BlockRegistry.getKey(block), item); + } + + public static T register(int id, NamespacedIdentifier key, T item) { + if (locked) { + throw new IllegalStateException("register called too " + (initialized ? "late" : "early") + ": registry locked!"); + } else { + Item.REGISTRY.register(id, key.toString(), item); + } + + return item; + } + + public static void lock() { + if (!initialized) { + throw new IllegalStateException("cannot lock item registry unless it's been initialized!"); + } + + locked = true; + } + + public static void unlock() { + if (initialized) { + throw new IllegalStateException("cannot unlock item registry once it's been initialized!"); + } + + locked = false; + } + + public static void init() { + if (locked) { + throw new IllegalStateException("cannot initialize item registry when it's locked!"); + } + + ItemEvents.REGISTER_ITEMS.invoker().run(); + initialized = true; + } +} diff --git a/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/ItemsMixinPlugin.java b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/ItemsMixinPlugin.java new file mode 100644 index 00000000..03397a6a --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/ItemsMixinPlugin.java @@ -0,0 +1,54 @@ +package net.ornithemc.osl.items.impl; + +import java.util.List; +import java.util.Set; + +import org.objectweb.asm.tree.ClassNode; + +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import net.ornithemc.osl.core.impl.util.MinecraftVersion; + +public class ItemsMixinPlugin implements IMixinConfigPlugin { + + public static final boolean SPECIAL_BLOCK_ITEM_HANDLING = MinecraftVersion.resolve().compareTo("13w37a") >= 0; + + @Override + public void onLoad(String mixinPackage) { + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if ("net.ornithemc.osl.items.impl.mixin.common.ItemMixinNew".equals(mixinClassName)) { + return SPECIAL_BLOCK_ITEM_HANDLING; + } + if ("net.ornithemc.osl.items.impl.mixin.common.ItemMixinOld".equals(mixinClassName)) { + return !SPECIAL_BLOCK_ITEM_HANDLING; + } + + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } +} diff --git a/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockItemAccess.java b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockItemAccess.java new file mode 100644 index 00000000..001592ad --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockItemAccess.java @@ -0,0 +1,15 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; + +@Mixin(BlockItem.class) +public interface BlockItemAccess { + + @Accessor("block") + Block accessBlock(); + +} diff --git a/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinNew.java b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinNew.java new file mode 100644 index 00000000..017fd676 --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinNew.java @@ -0,0 +1,43 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +import java.util.HashSet; + +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.CallbackInfo; + +import com.llamalad7.mixinextras.sugar.Local; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; + +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Item.class) +public class ItemMixinNew { + + @Inject( + method = "init", + at = @At( + value = "HEAD" + ) + ) + private static void osl$items$unlockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.unlock(); + } + + @Inject( + method = "init", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/util/registry/IdRegistry;keySet()Ljava/util/Set;" + ) + ) + private static void osl$items$initAndLockItemRegistry(CallbackInfo ci, @Local HashSet blocksToSkip) { + ItemRegistryImpl.init(); + ItemRegistryImpl.lock(); + + blocksToSkip.addAll(ItemRegistryImpl.BLOCK_ITEMS.keySet()); + } +} diff --git a/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinOld.java b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinOld.java new file mode 100644 index 00000000..b9cc935a --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinOld.java @@ -0,0 +1,63 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +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.Slice; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.util.registry.IdRegistry; + +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Item.class) +public class ItemMixinOld { + + @Inject( + method = "init", + at = @At( + value = "HEAD" + ) + ) + private static void osl$items$unlockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.unlock(); + } + + @Inject( + method = "init", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/util/registry/IdRegistry;keySet()Ljava/util/Set;" + ) + ) + private static void osl$items$initAndLockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.init(); + ItemRegistryImpl.lock(); + } + + @WrapOperation( + method = "init", + slice = @Slice( + from = @At( + value = "INVOKE", + target = "Lnet/minecraft/util/registry/IdRegistry;keySet()Ljava/util/Set;" + ) + ), + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/util/registry/IdRegistry;register(ILjava/lang/String;Ljava/lang/Object;)V" + ) + ) + private static void osl$items$registerBlockItems(IdRegistry registry, int id, String key, Object value, Operation operation, @Local Block block, @Local BlockItem item) { + if (item.getClass() != BlockItem.class || !ItemRegistryImpl.BLOCK_ITEMS.containsKey(block)) { + operation.call(registry, id, key, value); + } + } +} diff --git a/libraries/items/items-mc13w36a-mc14w25b/src/main/resources/fabric.mod.json b/libraries/items/items-mc13w36a-mc14w25b/src/main/resources/fabric.mod.json new file mode 100644 index 00000000..e8acd0b2 --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/src/main/resources/fabric.mod.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "id": "osl-items", + "version": "0.1.0-alpha.1+mc13w36a-mc14w25b", + "environment": "*", + "mixins": [ + "osl.items.mixins.json" + ], + "accessWidener": "osl.items.classtweaker", + "depends": { + "fabricloader": "\u003e\u003d0.18.0", + "minecraft": "\u003e\u003d1.7-alpha.13.36.a \u003c\u003d1.8-alpha.14.25.b", + "osl-core": "\u003e\u003d0.7.0", + "osl-blocks": "\u003e\u003d0.1.0-" + }, + "name": "OSL Items", + "description": "Items API and events.", + "authors": [ + "OrnitheMC" + ], + "contact": { + "homepage": "https://ornithemc.net/", + "issues": "https://github.com/OrnitheMC/ornithe-standard-libraries/issues", + "sources": "https://github.com/OrnitheMC/ornithe-standard-libraries" + }, + "license": "Apache-2.0" +} \ No newline at end of file diff --git a/libraries/items/items-mc13w36a-mc14w25b/src/main/resources/osl.items.classtweaker b/libraries/items/items-mc13w36a-mc14w25b/src/main/resources/osl.items.classtweaker new file mode 100644 index 00000000..68957c43 --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/src/main/resources/osl.items.classtweaker @@ -0,0 +1,11 @@ +classTweaker v1 named + +transitive-accessible method net/minecraft/item/Item setMaxStackSize (I)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setHasCustomData (Z)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setMaxDamage (I)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setHandheld ()Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setKey (Ljava/lang/String;)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setRecipeRemainder (Lnet/minecraft/item/Item;)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setPotionIngredient (Ljava/lang/String;)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setCreativeModeTab (Lnet/minecraft/item/CreativeModeTab;)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setSpriteName (Ljava/lang/String;)Lnet/minecraft/item/Item; \ No newline at end of file diff --git a/libraries/items/items-mc13w36a-mc14w25b/src/main/resources/osl.items.mixins.json b/libraries/items/items-mc13w36a-mc14w25b/src/main/resources/osl.items.mixins.json new file mode 100644 index 00000000..23794a0f --- /dev/null +++ b/libraries/items/items-mc13w36a-mc14w25b/src/main/resources/osl.items.mixins.json @@ -0,0 +1,19 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.ornithemc.osl.items.impl.mixin", + "compatibilityLevel": "JAVA_8", + "plugin": "net.ornithemc.osl.items.impl.ItemsMixinPlugin", + "mixins": [ + "common.BlockItemAccess", + "common.ItemMixinNew", + "common.ItemMixinOld" + ], + "client": [ + ], + "server": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/libraries/items/items-mc14w26a-mc17w46a/build.gradle b/libraries/items/items-mc14w26a-mc17w46a/build.gradle new file mode 100644 index 00000000..0a350fdb --- /dev/null +++ b/libraries/items/items-mc14w26a-mc17w46a/build.gradle @@ -0,0 +1 @@ +setUpModule(project) diff --git a/libraries/items/items-mc14w26a-mc17w46a/gradle.properties b/libraries/items/items-mc14w26a-mc17w46a/gradle.properties new file mode 100644 index 00000000..abd5c757 --- /dev/null +++ b/libraries/items/items-mc14w26a-mc17w46a/gradle.properties @@ -0,0 +1,5 @@ +min_mc_version = 14w26a +max_mc_version = 17w46a +minecraft_dependency = >=1.8-alpha.14.26.a <=1.13-alpha.17.46.a + +minecraft_version = 1.12.2 diff --git a/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java b/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java new file mode 100644 index 00000000..4d0923b9 --- /dev/null +++ b/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java @@ -0,0 +1,34 @@ +package net.ornithemc.osl.items.api; + +import net.ornithemc.osl.core.api.events.Event; + +/** + * Events related to the items lifecycle. + */ +public final class ItemEvents { + + /** + * This event is invoked upon game start-up, after Vanilla item registration is finished. + * + *

+ * Custom item registration should be done in a listener of this event. + * Helper methods for registering items can be found in the {@linkplain + * ItemRegistry} class. + * + *

+ * Listeners to this event should be registered in your mod's entrypoint, + * and can be done as follows: + * + *

+	 * {@code
+	 * ItemEvents.REGISTER_ITEMS.register(() -> {
+	 * 	ItemRegistry.register(999, NamespacedIdentifiers.from("example", "cookie"), new CookieItem());
+	 * });
+	 * }
+	 * 
+ * + * @see ItemRegistry + */ + public static final Event REGISTER_ITEMS = Event.runnable(); + +} diff --git a/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java b/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java new file mode 100644 index 00000000..5c9fdcbc --- /dev/null +++ b/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java @@ -0,0 +1,89 @@ +package net.ornithemc.osl.items.api; + +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; + +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +/** + * Public access to the Items registry. + */ +public final class ItemRegistry { + + /** + * @return the numerical ID assigned to the given item. + */ + public static int getId(Item item) { + return ItemRegistryImpl.getId(item); + } + + /** + * @return the namespaced ID assigned to the given item. + */ + public static NamespacedIdentifier getKey(Item item) { + return ItemRegistryImpl.getKey(item); + } + + /** + * @return the item mapped to the given numerical ID. + */ + public static Item getItem(int id) { + return ItemRegistryImpl.getItem(id); + } + + /** + * @return the item mapped to the given namespaced ID. + */ + public static Item getItem(NamespacedIdentifier key) { + return ItemRegistryImpl.getItem(key); + } + + /** + * @return a set containing all namespaced IDs in the registry. + */ + public static Set keySet() { + return ItemRegistryImpl.keySet(); + } + + /** + * @param block the block item to register. + * @return the registered block item. + */ + public static BlockItem register(Block block) { + return ItemRegistryImpl.register(block); + } + + /** + * @param the item type. + * @param item the item to register. + * @return the registered block item. + */ + public static T register(T item) { + return ItemRegistryImpl.register(item); + } + + /** + * @param the item type. + * @param block the block placed by the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(Block block, T item) { + return ItemRegistryImpl.register(block, item); + } + + /** + * @param the item type. + * @param id the numerical ID of the item. + * @param key the namespaced ID of the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(int id, NamespacedIdentifier key, T item) { + return ItemRegistryImpl.register(id, key, item); + } +} diff --git a/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java b/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java new file mode 100644 index 00000000..428f6240 --- /dev/null +++ b/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java @@ -0,0 +1,94 @@ +package net.ornithemc.osl.items.impl; + +import java.util.Collections; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.resource.Identifier; + +import net.ornithemc.osl.blocks.api.BlockRegistry; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.api.ItemEvents; + +public final class ItemRegistryImpl { + + private static boolean locked = true; + private static boolean initialized = false; + + public static int getId(Item item) { + return Item.REGISTRY.getId(item); + } + + public static NamespacedIdentifier getKey(Item item) { + return Item.REGISTRY.getKey(item); + } + + public static Item getItem(int id) { + return Item.REGISTRY.get(id); + } + + public static Item getItem(NamespacedIdentifier key) { + return Item.REGISTRY.get(identifier(key)); + } + + public static Set keySet() { + return Collections.unmodifiableSet(Item.REGISTRY.keySet()); + } + + public static BlockItem register(Block block) { + return register(block, new BlockItem(block)); + } + + public static T register(T item) { + return register(item.getBlock(), item); + } + + public static T register(Block block, T item) { + if (!locked) { + Item.BLOCK_ITEMS.put(block, item); + } + + return register(BlockRegistry.getId(block), BlockRegistry.getKey(block), item); + } + + public static T register(int id, NamespacedIdentifier key, T item) { + if (locked) { + throw new IllegalStateException("register called too " + (initialized ? "late" : "early") + ": registry locked!"); + } else { + Item.REGISTRY.register(id, identifier(key), item); + } + + return item; + } + + private static Identifier identifier(NamespacedIdentifier id) { + return id instanceof Identifier ? (Identifier) id : new Identifier(id.namespace(), id.identifier()); + } + + public static void lock() { + if (!initialized) { + throw new IllegalStateException("cannot lock item registry unless it's been initialized!"); + } + + locked = true; + } + + public static void unlock() { + if (initialized) { + throw new IllegalStateException("cannot unlock item registry once it's been initialized!"); + } + + locked = false; + } + + public static void init() { + if (locked) { + throw new IllegalStateException("cannot initialize item registry when it's locked!"); + } + + ItemEvents.REGISTER_ITEMS.invoker().run(); + initialized = true; + } +} diff --git a/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixin.java b/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixin.java new file mode 100644 index 00000000..d50463e1 --- /dev/null +++ b/libraries/items/items-mc14w26a-mc17w46a/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixin.java @@ -0,0 +1,35 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +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.CallbackInfo; + +import net.minecraft.item.Item; + +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Item.class) +public class ItemMixin { + + @Inject( + method = "init", + at = @At( + value = "HEAD" + ) + ) + private static void osl$items$unlockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.unlock(); + } + + @Inject( + method = "init", + at = @At( + value = "TAIL" + ) + ) + private static void osl$items$initAndLockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.init(); + ItemRegistryImpl.lock(); + } +} diff --git a/libraries/items/items-mc14w26a-mc17w46a/src/main/resources/fabric.mod.json b/libraries/items/items-mc14w26a-mc17w46a/src/main/resources/fabric.mod.json new file mode 100644 index 00000000..db78343f --- /dev/null +++ b/libraries/items/items-mc14w26a-mc17w46a/src/main/resources/fabric.mod.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "id": "osl-items", + "version": "0.1.0-alpha.1+mc14w26a-mc17w46a", + "environment": "*", + "mixins": [ + "osl.items.mixins.json" + ], + "accessWidener": "osl.items.classtweaker", + "depends": { + "fabricloader": "\u003e\u003d0.18.0", + "minecraft": "\u003e\u003d1.8-alpha.14.26.a \u003c\u003d1.13-alpha.17.46.a", + "osl-core": "\u003e\u003d0.7.0", + "osl-blocks": "\u003e\u003d0.1.0-" + }, + "name": "OSL Items", + "description": "Items API and events.", + "authors": [ + "OrnitheMC" + ], + "contact": { + "homepage": "https://ornithemc.net/", + "issues": "https://github.com/OrnitheMC/ornithe-standard-libraries/issues", + "sources": "https://github.com/OrnitheMC/ornithe-standard-libraries" + }, + "license": "Apache-2.0" +} \ No newline at end of file diff --git a/libraries/items/items-mc14w26a-mc17w46a/src/main/resources/osl.items.classtweaker b/libraries/items/items-mc14w26a-mc17w46a/src/main/resources/osl.items.classtweaker new file mode 100644 index 00000000..2a595cb6 --- /dev/null +++ b/libraries/items/items-mc14w26a-mc17w46a/src/main/resources/osl.items.classtweaker @@ -0,0 +1,11 @@ +classTweaker v1 named + +accessible field net/minecraft/item/Item BLOCK_ITEMS Ljava/util/Map; + +transitive-accessible method net/minecraft/item/Item setMaxStackSize (I)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setHasCustomData (Z)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setMaxDamage (I)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setHandheld ()Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setKey (Ljava/lang/String;)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setRecipeRemainder (Lnet/minecraft/item/Item;)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setCreativeModeTab (Lnet/minecraft/item/CreativeModeTab;)Lnet/minecraft/item/Item; \ No newline at end of file diff --git a/libraries/items/items-mc14w26a-mc17w46a/src/main/resources/osl.items.mixins.json b/libraries/items/items-mc14w26a-mc17w46a/src/main/resources/osl.items.mixins.json new file mode 100644 index 00000000..eba99f92 --- /dev/null +++ b/libraries/items/items-mc14w26a-mc17w46a/src/main/resources/osl.items.mixins.json @@ -0,0 +1,16 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.ornithemc.osl.items.impl.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "common.ItemMixin" + ], + "client": [ + ], + "server": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/libraries/items/items-mc17w47a-mc18w31a/build.gradle b/libraries/items/items-mc17w47a-mc18w31a/build.gradle new file mode 100644 index 00000000..0a350fdb --- /dev/null +++ b/libraries/items/items-mc17w47a-mc18w31a/build.gradle @@ -0,0 +1 @@ +setUpModule(project) diff --git a/libraries/items/items-mc17w47a-mc18w31a/gradle.properties b/libraries/items/items-mc17w47a-mc18w31a/gradle.properties new file mode 100644 index 00000000..214f5d68 --- /dev/null +++ b/libraries/items/items-mc17w47a-mc18w31a/gradle.properties @@ -0,0 +1,5 @@ +min_mc_version = 17w47a +max_mc_version = 18w31a +minecraft_dependency = >=1.13-alpha.17.47.a <=1.13.1-alpha.18.31.a + +minecraft_version = 1.13 diff --git a/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java b/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java new file mode 100644 index 00000000..e4b60f8b --- /dev/null +++ b/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java @@ -0,0 +1,34 @@ +package net.ornithemc.osl.items.api; + +import net.ornithemc.osl.core.api.events.Event; + +/** + * Events related to the items lifecycle. + */ +public final class ItemEvents { + + /** + * This event is invoked upon game start-up, after Vanilla item registration is finished. + * + *

+ * Custom item registration should be done in a listener of this event. + * Helper methods for registering items can be found in the {@linkplain + * ItemRegistry} class. + * + *

+ * Listeners to this event should be registered in your mod's entrypoint, + * and can be done as follows: + * + *

+	 * {@code
+	 * ItemEvents.REGISTER_ITEMS.register(() -> {
+	 * 	ItemRegistry.register(NamespacedIdentifiers.from("example", "cookie"), new CookieItem());
+	 * });
+	 * }
+	 * 
+ * + * @see ItemRegistry + */ + public static final Event REGISTER_ITEMS = Event.runnable(); + +} diff --git a/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java b/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java new file mode 100644 index 00000000..fc2acc8b --- /dev/null +++ b/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java @@ -0,0 +1,88 @@ +package net.ornithemc.osl.items.api; + +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; + +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +/** + * Public access to the Items registry. + */ +public final class ItemRegistry { + + /** + * @return the numerical ID assigned to the given item. + */ + public static int getId(Item item) { + return ItemRegistryImpl.getId(item); + } + + /** + * @return the namespaced ID assigned to the given item. + */ + public static NamespacedIdentifier getKey(Item item) { + return ItemRegistryImpl.getKey(item); + } + + /** + * @return the item mapped to the given numerical ID. + */ + public static Item getItem(int id) { + return ItemRegistryImpl.getItem(id); + } + + /** + * @return the item mapped to the given namespaced ID. + */ + public static Item getItem(NamespacedIdentifier key) { + return ItemRegistryImpl.getItem(key); + } + + /** + * @return a set containing all namespaced IDs in the registry. + */ + public static Set keySet() { + return ItemRegistryImpl.keySet(); + } + + /** + * @param block the block item to register. + * @return the registered block item. + */ + public static BlockItem register(Block block) { + return ItemRegistryImpl.register(block); + } + + /** + * @param the item type. + * @param item the item to register. + * @return the registered block item. + */ + public static T register(T item) { + return ItemRegistryImpl.register(item); + } + + /** + * @param the item type. + * @param block the block placed by the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(Block block, T item) { + return ItemRegistryImpl.register(block, item); + } + + /** + * @param the item type. + * @param key the namespaced ID of the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(NamespacedIdentifier key, T item) { + return ItemRegistryImpl.register(key, item); + } +} diff --git a/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java b/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java new file mode 100644 index 00000000..484c47ce --- /dev/null +++ b/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java @@ -0,0 +1,94 @@ +package net.ornithemc.osl.items.impl; + +import java.util.Collections; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.resource.Identifier; + +import net.ornithemc.osl.blocks.api.BlockRegistry; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.api.ItemEvents; + +public final class ItemRegistryImpl { + + private static boolean locked = true; + private static boolean initialized = false; + + public static int getId(Item item) { + return Item.REGISTRY.getId(item); + } + + public static NamespacedIdentifier getKey(Item item) { + return Item.REGISTRY.getKey(item); + } + + public static Item getItem(int id) { + return Item.REGISTRY.get(id); + } + + public static Item getItem(NamespacedIdentifier key) { + return Item.REGISTRY.get(identifier(key)); + } + + public static Set keySet() { + return Collections.unmodifiableSet(Item.REGISTRY.entrySet()); + } + + public static BlockItem register(Block block) { + return register(block, new BlockItem(block, new Item.Properties())); + } + + public static T register(T item) { + return register(item.getBlock(), item); + } + + public static T register(Block block, T item) { + return register(BlockRegistry.getKey(block), item); + } + + public static T register(NamespacedIdentifier key, T item) { + if (locked) { + throw new IllegalStateException("register called too " + (initialized ? "late" : "early") + ": registry locked!"); + } else { + if (item instanceof BlockItem) { + ((BlockItem) item).register(Item.BLOCK_ITEMS, item); + } + + Item.REGISTRY.put(identifier(key), item); + } + + return item; + } + + private static Identifier identifier(NamespacedIdentifier id) { + return id instanceof Identifier ? (Identifier) id : new Identifier(id.namespace(), id.identifier()); + } + + public static void lock() { + if (!initialized) { + throw new IllegalStateException("cannot lock item registry unless it's been initialized!"); + } + + locked = true; + } + + public static void unlock() { + if (initialized) { + throw new IllegalStateException("cannot unlock item registry once it's been initialized!"); + } + + locked = false; + } + + public static void init() { + if (locked) { + throw new IllegalStateException("cannot initialize item registry when it's locked!"); + } + + ItemEvents.REGISTER_ITEMS.invoker().run(); + initialized = true; + } +} diff --git a/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixin.java b/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixin.java new file mode 100644 index 00000000..d50463e1 --- /dev/null +++ b/libraries/items/items-mc17w47a-mc18w31a/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixin.java @@ -0,0 +1,35 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +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.CallbackInfo; + +import net.minecraft.item.Item; + +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Item.class) +public class ItemMixin { + + @Inject( + method = "init", + at = @At( + value = "HEAD" + ) + ) + private static void osl$items$unlockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.unlock(); + } + + @Inject( + method = "init", + at = @At( + value = "TAIL" + ) + ) + private static void osl$items$initAndLockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.init(); + ItemRegistryImpl.lock(); + } +} diff --git a/libraries/items/items-mc17w47a-mc18w31a/src/main/resources/fabric.mod.json b/libraries/items/items-mc17w47a-mc18w31a/src/main/resources/fabric.mod.json new file mode 100644 index 00000000..032ee1b8 --- /dev/null +++ b/libraries/items/items-mc17w47a-mc18w31a/src/main/resources/fabric.mod.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "id": "osl-items", + "version": "0.1.0-alpha.1+mc17w47a-mc18w31a", + "environment": "*", + "mixins": [ + "osl.items.mixins.json" + ], + "depends": { + "fabricloader": "\u003e\u003d0.18.0", + "minecraft": "\u003e\u003d1.13-alpha.17.47.a \u003c\u003d1.13.1-alpha.18.31.a", + "osl-core": "\u003e\u003d0.7.0", + "osl-blocks": "\u003e\u003d0.1.0-" + }, + "name": "OSL Items", + "description": "Items API and events.", + "authors": [ + "OrnitheMC" + ], + "contact": { + "homepage": "https://ornithemc.net/", + "issues": "https://github.com/OrnitheMC/ornithe-standard-libraries/issues", + "sources": "https://github.com/OrnitheMC/ornithe-standard-libraries" + }, + "license": "Apache-2.0" +} \ No newline at end of file diff --git a/libraries/items/items-mc17w47a-mc18w31a/src/main/resources/osl.items.mixins.json b/libraries/items/items-mc17w47a-mc18w31a/src/main/resources/osl.items.mixins.json new file mode 100644 index 00000000..eba99f92 --- /dev/null +++ b/libraries/items/items-mc17w47a-mc18w31a/src/main/resources/osl.items.mixins.json @@ -0,0 +1,16 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.ornithemc.osl.items.impl.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "common.ItemMixin" + ], + "client": [ + ], + "server": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/libraries/items/items-mc18w32a-mc1.13.2/build.gradle b/libraries/items/items-mc18w32a-mc1.13.2/build.gradle new file mode 100644 index 00000000..0a350fdb --- /dev/null +++ b/libraries/items/items-mc18w32a-mc1.13.2/build.gradle @@ -0,0 +1 @@ +setUpModule(project) diff --git a/libraries/items/items-mc18w32a-mc1.13.2/gradle.properties b/libraries/items/items-mc18w32a-mc1.13.2/gradle.properties new file mode 100644 index 00000000..4c9c2619 --- /dev/null +++ b/libraries/items/items-mc18w32a-mc1.13.2/gradle.properties @@ -0,0 +1,5 @@ +min_mc_version = 18w32a +max_mc_version = 1.13.2 +minecraft_dependency = >=1.13.1-alpha.18.32.a <=1.13.2 + +minecraft_version = 1.13.2 diff --git a/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java b/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java new file mode 100644 index 00000000..e4b60f8b --- /dev/null +++ b/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java @@ -0,0 +1,34 @@ +package net.ornithemc.osl.items.api; + +import net.ornithemc.osl.core.api.events.Event; + +/** + * Events related to the items lifecycle. + */ +public final class ItemEvents { + + /** + * This event is invoked upon game start-up, after Vanilla item registration is finished. + * + *

+ * Custom item registration should be done in a listener of this event. + * Helper methods for registering items can be found in the {@linkplain + * ItemRegistry} class. + * + *

+ * Listeners to this event should be registered in your mod's entrypoint, + * and can be done as follows: + * + *

+	 * {@code
+	 * ItemEvents.REGISTER_ITEMS.register(() -> {
+	 * 	ItemRegistry.register(NamespacedIdentifiers.from("example", "cookie"), new CookieItem());
+	 * });
+	 * }
+	 * 
+ * + * @see ItemRegistry + */ + public static final Event REGISTER_ITEMS = Event.runnable(); + +} diff --git a/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java b/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java new file mode 100644 index 00000000..fc2acc8b --- /dev/null +++ b/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java @@ -0,0 +1,88 @@ +package net.ornithemc.osl.items.api; + +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; + +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +/** + * Public access to the Items registry. + */ +public final class ItemRegistry { + + /** + * @return the numerical ID assigned to the given item. + */ + public static int getId(Item item) { + return ItemRegistryImpl.getId(item); + } + + /** + * @return the namespaced ID assigned to the given item. + */ + public static NamespacedIdentifier getKey(Item item) { + return ItemRegistryImpl.getKey(item); + } + + /** + * @return the item mapped to the given numerical ID. + */ + public static Item getItem(int id) { + return ItemRegistryImpl.getItem(id); + } + + /** + * @return the item mapped to the given namespaced ID. + */ + public static Item getItem(NamespacedIdentifier key) { + return ItemRegistryImpl.getItem(key); + } + + /** + * @return a set containing all namespaced IDs in the registry. + */ + public static Set keySet() { + return ItemRegistryImpl.keySet(); + } + + /** + * @param block the block item to register. + * @return the registered block item. + */ + public static BlockItem register(Block block) { + return ItemRegistryImpl.register(block); + } + + /** + * @param the item type. + * @param item the item to register. + * @return the registered block item. + */ + public static T register(T item) { + return ItemRegistryImpl.register(item); + } + + /** + * @param the item type. + * @param block the block placed by the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(Block block, T item) { + return ItemRegistryImpl.register(block, item); + } + + /** + * @param the item type. + * @param key the namespaced ID of the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(NamespacedIdentifier key, T item) { + return ItemRegistryImpl.register(key, item); + } +} diff --git a/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java b/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java new file mode 100644 index 00000000..99878100 --- /dev/null +++ b/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java @@ -0,0 +1,95 @@ +package net.ornithemc.osl.items.impl; + +import java.util.Collections; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.resource.Identifier; +import net.minecraft.util.registry.Registry; + +import net.ornithemc.osl.blocks.api.BlockRegistry; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.api.ItemEvents; + +public final class ItemRegistryImpl { + + private static boolean locked = true; + private static boolean initialized = false; + + public static int getId(Item item) { + return Registry.ITEM.getId(item); + } + + public static NamespacedIdentifier getKey(Item item) { + return Registry.ITEM.getKey(item); + } + + public static Item getItem(int id) { + return Registry.ITEM.get(id); + } + + public static Item getItem(NamespacedIdentifier key) { + return Registry.ITEM.get(identifier(key)); + } + + public static Set keySet() { + return Collections.unmodifiableSet(Registry.ITEM.keySet()); + } + + public static BlockItem register(Block block) { + return register(block, new BlockItem(block, new Item.Properties())); + } + + public static T register(T item) { + return register(item.getBlock(), item); + } + + public static T register(Block block, T item) { + return register(BlockRegistry.getKey(block), item); + } + + public static T register(NamespacedIdentifier key, T item) { + if (locked) { + throw new IllegalStateException("register called too " + (initialized ? "late" : "early") + ": registry locked!"); + } else { + if (item instanceof BlockItem) { + ((BlockItem) item).register(Item.BLOCK_ITEMS, item); + } + + Registry.ITEM.register(identifier(key), item); + } + + return item; + } + + private static Identifier identifier(NamespacedIdentifier id) { + return id instanceof Identifier ? (Identifier) id : new Identifier(id.namespace(), id.identifier()); + } + + public static void lock() { + if (!initialized) { + throw new IllegalStateException("cannot lock item registry unless it's been initialized!"); + } + + locked = true; + } + + public static void unlock() { + if (initialized) { + throw new IllegalStateException("cannot unlock item registry once it's been initialized!"); + } + + locked = false; + } + + public static void init() { + if (locked) { + throw new IllegalStateException("cannot initialize item registry when it's locked!"); + } + + ItemEvents.REGISTER_ITEMS.invoker().run(); + initialized = true; + } +} diff --git a/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixin.java b/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixin.java new file mode 100644 index 00000000..d50463e1 --- /dev/null +++ b/libraries/items/items-mc18w32a-mc1.13.2/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixin.java @@ -0,0 +1,35 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +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.CallbackInfo; + +import net.minecraft.item.Item; + +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Item.class) +public class ItemMixin { + + @Inject( + method = "init", + at = @At( + value = "HEAD" + ) + ) + private static void osl$items$unlockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.unlock(); + } + + @Inject( + method = "init", + at = @At( + value = "TAIL" + ) + ) + private static void osl$items$initAndLockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.init(); + ItemRegistryImpl.lock(); + } +} diff --git a/libraries/items/items-mc18w32a-mc1.13.2/src/main/resources/fabric.mod.json b/libraries/items/items-mc18w32a-mc1.13.2/src/main/resources/fabric.mod.json new file mode 100644 index 00000000..6fb7a32b --- /dev/null +++ b/libraries/items/items-mc18w32a-mc1.13.2/src/main/resources/fabric.mod.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "id": "osl-items", + "version": "0.1.0-alpha.1+mc18w32a-mc1.13.2", + "environment": "*", + "mixins": [ + "osl.items.mixins.json" + ], + "depends": { + "fabricloader": "\u003e\u003d0.18.0", + "minecraft": "\u003e\u003d1.13.1-alpha.18.32.a \u003c\u003d1.13.2", + "osl-core": "\u003e\u003d0.7.0", + "osl-blocks": "\u003e\u003d0.1.0-" + }, + "name": "OSL Items", + "description": "Items API and events.", + "authors": [ + "OrnitheMC" + ], + "contact": { + "homepage": "https://ornithemc.net/", + "issues": "https://github.com/OrnitheMC/ornithe-standard-libraries/issues", + "sources": "https://github.com/OrnitheMC/ornithe-standard-libraries" + }, + "license": "Apache-2.0" +} \ No newline at end of file diff --git a/libraries/items/items-mc18w32a-mc1.13.2/src/main/resources/osl.items.mixins.json b/libraries/items/items-mc18w32a-mc1.13.2/src/main/resources/osl.items.mixins.json new file mode 100644 index 00000000..eba99f92 --- /dev/null +++ b/libraries/items/items-mc18w32a-mc1.13.2/src/main/resources/osl.items.mixins.json @@ -0,0 +1,16 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.ornithemc.osl.items.impl.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "common.ItemMixin" + ], + "client": [ + ], + "server": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/libraries/items/items-mc18w43a-mc1.14.4/build.gradle b/libraries/items/items-mc18w43a-mc1.14.4/build.gradle new file mode 100644 index 00000000..0a350fdb --- /dev/null +++ b/libraries/items/items-mc18w43a-mc1.14.4/build.gradle @@ -0,0 +1 @@ +setUpModule(project) diff --git a/libraries/items/items-mc18w43a-mc1.14.4/gradle.properties b/libraries/items/items-mc18w43a-mc1.14.4/gradle.properties new file mode 100644 index 00000000..071d210e --- /dev/null +++ b/libraries/items/items-mc18w43a-mc1.14.4/gradle.properties @@ -0,0 +1,5 @@ +min_mc_version = 18w43a +max_mc_version = 1.14.4 +minecraft_dependency = >=1.14-alpha.18.43.a <=1.14.4 + +minecraft_version = 1.14.4 diff --git a/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java b/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java new file mode 100644 index 00000000..e4b60f8b --- /dev/null +++ b/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java @@ -0,0 +1,34 @@ +package net.ornithemc.osl.items.api; + +import net.ornithemc.osl.core.api.events.Event; + +/** + * Events related to the items lifecycle. + */ +public final class ItemEvents { + + /** + * This event is invoked upon game start-up, after Vanilla item registration is finished. + * + *

+ * Custom item registration should be done in a listener of this event. + * Helper methods for registering items can be found in the {@linkplain + * ItemRegistry} class. + * + *

+ * Listeners to this event should be registered in your mod's entrypoint, + * and can be done as follows: + * + *

+	 * {@code
+	 * ItemEvents.REGISTER_ITEMS.register(() -> {
+	 * 	ItemRegistry.register(NamespacedIdentifiers.from("example", "cookie"), new CookieItem());
+	 * });
+	 * }
+	 * 
+ * + * @see ItemRegistry + */ + public static final Event REGISTER_ITEMS = Event.runnable(); + +} diff --git a/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java b/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java new file mode 100644 index 00000000..fc2acc8b --- /dev/null +++ b/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java @@ -0,0 +1,88 @@ +package net.ornithemc.osl.items.api; + +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; + +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +/** + * Public access to the Items registry. + */ +public final class ItemRegistry { + + /** + * @return the numerical ID assigned to the given item. + */ + public static int getId(Item item) { + return ItemRegistryImpl.getId(item); + } + + /** + * @return the namespaced ID assigned to the given item. + */ + public static NamespacedIdentifier getKey(Item item) { + return ItemRegistryImpl.getKey(item); + } + + /** + * @return the item mapped to the given numerical ID. + */ + public static Item getItem(int id) { + return ItemRegistryImpl.getItem(id); + } + + /** + * @return the item mapped to the given namespaced ID. + */ + public static Item getItem(NamespacedIdentifier key) { + return ItemRegistryImpl.getItem(key); + } + + /** + * @return a set containing all namespaced IDs in the registry. + */ + public static Set keySet() { + return ItemRegistryImpl.keySet(); + } + + /** + * @param block the block item to register. + * @return the registered block item. + */ + public static BlockItem register(Block block) { + return ItemRegistryImpl.register(block); + } + + /** + * @param the item type. + * @param item the item to register. + * @return the registered block item. + */ + public static T register(T item) { + return ItemRegistryImpl.register(item); + } + + /** + * @param the item type. + * @param block the block placed by the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(Block block, T item) { + return ItemRegistryImpl.register(block, item); + } + + /** + * @param the item type. + * @param key the namespaced ID of the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(NamespacedIdentifier key, T item) { + return ItemRegistryImpl.register(key, item); + } +} diff --git a/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java b/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java new file mode 100644 index 00000000..8bc9e720 --- /dev/null +++ b/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java @@ -0,0 +1,93 @@ +package net.ornithemc.osl.items.impl; + +import java.util.Collections; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.resource.Identifier; +import net.minecraft.util.registry.Registry; + +import net.ornithemc.osl.blocks.api.BlockRegistry; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.api.ItemEvents; + +public final class ItemRegistryImpl { + + private static boolean locked = true; + private static boolean initialized = false; + + public static int getId(Item item) { + return Registry.ITEM.getId(item); + } + + public static NamespacedIdentifier getKey(Item item) { + return Registry.ITEM.getKey(item); + } + + public static Item getItem(int id) { + return Registry.ITEM.get(id); + } + + public static Item getItem(NamespacedIdentifier key) { + return Registry.ITEM.getOrDefault(identifier(key)); + } + + public static Set keySet() { + return Collections.unmodifiableSet(Registry.ITEM.keySet()); + } + + public static BlockItem register(Block block) { + return register(block, new BlockItem(block, new Item.Properties())); + } + + public static T register(T item) { + return register(item.getBlock(), item); + } + + public static T register(Block block, T item) { + return register(BlockRegistry.getKey(block), item); + } + + public static T register(NamespacedIdentifier key, T item) { + if (locked) { + throw new IllegalStateException("register called too " + (initialized ? "late" : "early") + ": registry locked!"); + } else { + if (item instanceof BlockItem) { + ((BlockItem) item).register(Item.BLOCK_ITEMS, item); + } + + return Registry.ITEM.m_30368144(identifier(key), item); + } + } + + private static Identifier identifier(NamespacedIdentifier id) { + return id instanceof Identifier ? (Identifier) id : new Identifier(id.namespace(), id.identifier()); + } + + public static void lock() { + if (!initialized) { + throw new IllegalStateException("cannot lock item registry unless it's been initialized!"); + } + + locked = true; + } + + public static void unlock() { + if (initialized) { + throw new IllegalStateException("cannot unlock item registry once it's been initialized!"); + } + + locked = false; + } + + public static void init() { + if (locked) { + throw new IllegalStateException("cannot initialize item registry when it's locked!"); + } + + ItemEvents.REGISTER_ITEMS.invoker().run(); + initialized = true; + } +} diff --git a/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemsMixin.java b/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemsMixin.java new file mode 100644 index 00000000..44264b2e --- /dev/null +++ b/libraries/items/items-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemsMixin.java @@ -0,0 +1,35 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +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.CallbackInfo; + +import net.minecraft.item.Items; + +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Items.class) +public class ItemsMixin { + + @Inject( + method = "", + at = @At( + value = "HEAD" + ) + ) + private static void osl$items$unlockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.unlock(); + } + + @Inject( + method = "", + at = @At( + value = "TAIL" + ) + ) + private static void osl$items$initAndLockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.init(); + ItemRegistryImpl.lock(); + } +} diff --git a/libraries/items/items-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json b/libraries/items/items-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json new file mode 100644 index 00000000..3e43e575 --- /dev/null +++ b/libraries/items/items-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "id": "osl-items", + "version": "0.1.0-alpha.1+mc18w43a-mc1.14.4", + "environment": "*", + "mixins": [ + "osl.items.mixins.json" + ], + "depends": { + "fabricloader": "\u003e\u003d0.18.0", + "minecraft": "\u003e\u003d1.14-alpha.18.43.a \u003c\u003d1.14.4", + "osl-core": "\u003e\u003d0.7.0", + "osl-blocks": "\u003e\u003d0.1.0-" + }, + "name": "OSL Items", + "description": "Items API and events.", + "authors": [ + "OrnitheMC" + ], + "contact": { + "homepage": "https://ornithemc.net/", + "issues": "https://github.com/OrnitheMC/ornithe-standard-libraries/issues", + "sources": "https://github.com/OrnitheMC/ornithe-standard-libraries" + }, + "license": "Apache-2.0" +} \ No newline at end of file diff --git a/libraries/items/items-mc18w43a-mc1.14.4/src/main/resources/osl.items.mixins.json b/libraries/items/items-mc18w43a-mc1.14.4/src/main/resources/osl.items.mixins.json new file mode 100644 index 00000000..a0d26288 --- /dev/null +++ b/libraries/items/items-mc18w43a-mc1.14.4/src/main/resources/osl.items.mixins.json @@ -0,0 +1,16 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.ornithemc.osl.items.impl.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "common.ItemsMixin" + ], + "client": [ + ], + "server": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/build.gradle b/libraries/items/items-mca1.0.1_01-mc1.6.4/build.gradle new file mode 100644 index 00000000..0a350fdb --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/build.gradle @@ -0,0 +1 @@ +setUpModule(project) diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/gradle.properties b/libraries/items/items-mca1.0.1_01-mc1.6.4/gradle.properties new file mode 100644 index 00000000..48fac24e --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/gradle.properties @@ -0,0 +1,8 @@ +min_mc_version = a1.0.1_01 +max_mc_version = 1.6.4 +minecraft_dependency = >=1.0.0-alpha.0.1 <=1.6.4 + +minecraft_version = 1.6.4 +raven_build = 1 +sparrow_build = 1 +nests_build = 3 diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java new file mode 100644 index 00000000..ec6dfe26 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/api/ItemEvents.java @@ -0,0 +1,58 @@ +package net.ornithemc.osl.items.api; + +import net.ornithemc.osl.core.api.events.Event; + +/** + * Events related to the items lifecycle. + */ +public final class ItemEvents { + + /** + * This event is invoked upon game start-up, after Vanilla item registration is finished. + * + *

+ * Custom item registration should be done in a listener of this event. + * Helper methods for registering items can be found in the {@linkplain + * ItemRegistry} class. + * + *

+ * Listeners to this event should be registered in your mod's entrypoint, + * and can be done as follows: + * + *

+	 * {@code
+	 * ItemEvents.REGISTER_ITEMS.register(() -> {
+	 * 	ItemRegistry.register(999, NamespacedIdentifiers.from("example", "cookie"), new CookieItem(999));
+	 * });
+	 * }
+	 * 
+ * + * @see ItemRegistry + */ + public static final Event REGISTER_ITEMS = Event.runnable(); + + /** + * This event is invoked upon game start-up, after Vanilla block item registration is finished. + * + *

+ * Custom block item registration should be done in a listener of this event. + * Helper methods for registering block items can be found in the {@linkplain + * ItemRegistry} class. + * + *

+ * Listeners to this event should be registered in your mod's entrypoint, + * and can be done as follows: + * + *

+	 * {@code
+	 * ItemEvents.REGISTER_BLOCK_ITEMS.register(() -> {
+	 * 	ItemRegistry.register(COOKIE_BLOCK, new CookieItem(999));
+	 * });
+	 * }
+	 * 
+ * + * @see ItemRegistry + */ + public static final Event REGISTER_BLOCK_ITEMS = Event.runnable(); + +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java new file mode 100644 index 00000000..5c9fdcbc --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/api/ItemRegistry.java @@ -0,0 +1,89 @@ +package net.ornithemc.osl.items.api; + +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; + +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +/** + * Public access to the Items registry. + */ +public final class ItemRegistry { + + /** + * @return the numerical ID assigned to the given item. + */ + public static int getId(Item item) { + return ItemRegistryImpl.getId(item); + } + + /** + * @return the namespaced ID assigned to the given item. + */ + public static NamespacedIdentifier getKey(Item item) { + return ItemRegistryImpl.getKey(item); + } + + /** + * @return the item mapped to the given numerical ID. + */ + public static Item getItem(int id) { + return ItemRegistryImpl.getItem(id); + } + + /** + * @return the item mapped to the given namespaced ID. + */ + public static Item getItem(NamespacedIdentifier key) { + return ItemRegistryImpl.getItem(key); + } + + /** + * @return a set containing all namespaced IDs in the registry. + */ + public static Set keySet() { + return ItemRegistryImpl.keySet(); + } + + /** + * @param block the block item to register. + * @return the registered block item. + */ + public static BlockItem register(Block block) { + return ItemRegistryImpl.register(block); + } + + /** + * @param the item type. + * @param item the item to register. + * @return the registered block item. + */ + public static T register(T item) { + return ItemRegistryImpl.register(item); + } + + /** + * @param the item type. + * @param block the block placed by the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(Block block, T item) { + return ItemRegistryImpl.register(block, item); + } + + /** + * @param the item type. + * @param id the numerical ID of the item. + * @param key the namespaced ID of the item. + * @param item the item to register. + * @return the registered item. + */ + public static T register(int id, NamespacedIdentifier key, T item) { + return ItemRegistryImpl.register(id, key, item); + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/api/item/ItemExtension.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/api/item/ItemExtension.java new file mode 100644 index 00000000..947b0934 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/api/item/ItemExtension.java @@ -0,0 +1,11 @@ +package net.ornithemc.osl.items.api.item; + +import net.minecraft.item.Item; + +import net.ornithemc.osl.core.api.registry.SimpleIdRegistry; + +public interface ItemExtension { + + SimpleIdRegistry REGISTRY = new SimpleIdRegistry<>(); + +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java new file mode 100644 index 00000000..d7beeda9 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/ItemRegistryImpl.java @@ -0,0 +1,119 @@ +package net.ornithemc.osl.items.impl; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; + +import net.ornithemc.osl.blocks.api.BlockRegistry; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.items.api.ItemEvents; +import net.ornithemc.osl.items.impl.mixin.common.BlockItemAccess; + +public final class ItemRegistryImpl { + + public static final Map BLOCK_ITEMS = new HashMap<>(); + + private static boolean locked = true; + private static boolean itemsInitialized = false; + private static boolean blocksInitialized = false; + + public static int getId(Item item) { + return Item.REGISTRY.getId(item); + } + + public static NamespacedIdentifier getKey(Item item) { + return Item.REGISTRY.getKey(item); + } + + public static Item getItem(int id) { + return Item.REGISTRY.get(id); + } + + public static Item getItem(NamespacedIdentifier key) { + return Item.REGISTRY.get(key); + } + + public static Set keySet() { + return Item.REGISTRY.keySet(); + } + + public static BlockItem register(Block block) { + return register(block, new BlockItem(BlockRegistry.getId(block))); + } + + public static T register(T item) { + return register(BlockRegistry.getBlock(((BlockItemAccess) item).accessBlock()), item); + } + + public static T register(Block block, T item) { + if (!locked) { + BLOCK_ITEMS.put(block, item); + } + + return register(BlockRegistry.getId(block), BlockRegistry.getKey(block), item); + } + + public static T register(int id, NamespacedIdentifier key, T item) { + if (locked) { + throw new IllegalStateException("register called too " + (itemsInitialized ? "late" : "early") + ": registry locked!"); + } else { + Item.REGISTRY.register(id, key, item); + } + + return item; + } + + public static void lock() { + if (!itemsInitialized || !blocksInitialized) { + throw new IllegalStateException("cannot lock item registry unless it's been initialized!"); + } + + locked = true; + } + + public static void unlock() { + if (itemsInitialized || blocksInitialized) { + throw new IllegalStateException("cannot unlock item registry once it's been initialized!"); + } + + locked = false; + } + + public static void initItems() { + if (locked) { + throw new IllegalStateException("cannot initialize items when the registry is locked!"); + } + + VanillaItems.init(); + itemsInitialized = true; + } + + public static void initBlocks() { + if (locked) { + throw new IllegalStateException("cannot initialize block items when the registry is locked!"); + } + + VanillaBlockItems.init(); + blocksInitialized = true; + } + + public static void registerItems() { + if (locked) { + throw new IllegalStateException("cannot initialize item registry when it's locked!"); + } + + ItemEvents.REGISTER_ITEMS.invoker().run(); + } + + public static void registerBlocks() { + if (locked) { + throw new IllegalStateException("cannot initialize item registry when it's locked!"); + } + + ItemEvents.REGISTER_BLOCK_ITEMS.invoker().run(); + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/ItemsMixinPlugin.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/ItemsMixinPlugin.java new file mode 100644 index 00000000..590562d9 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/ItemsMixinPlugin.java @@ -0,0 +1,56 @@ +package net.ornithemc.osl.items.impl; + +import java.util.List; +import java.util.Set; + +import org.objectweb.asm.tree.ClassNode; + +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import net.ornithemc.osl.core.impl.util.MinecraftVersion; + +public class ItemsMixinPlugin implements IMixinConfigPlugin { + + public static final boolean STATS_EXIST = MinecraftVersion.resolve().compareTo("b1.4") >= 0; + + @Override + public void onLoad(String mixinPackage) { + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if ("net.ornithemc.osl.items.impl.mixin.common.ItemMixinNew".equals(mixinClassName) + || "net.ornithemc.osl.items.impl.mixin.common.BlockMixinNew".equals(mixinClassName)) { + return STATS_EXIST; + } + if ("net.ornithemc.osl.items.impl.mixin.common.ItemMixinOld".equals(mixinClassName) + || "net.ornithemc.osl.items.impl.mixin.common.BlockMixinOld".equals(mixinClassName)) { + return !STATS_EXIST; + } + + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/VanillaBlockItems.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/VanillaBlockItems.java new file mode 100644 index 00000000..97576967 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/VanillaBlockItems.java @@ -0,0 +1,28 @@ +package net.ornithemc.osl.items.impl; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.ornithemc.osl.blocks.api.block.Blocks; +import net.ornithemc.osl.blocks.impl.BlockRegistryImpl; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; + +final class VanillaBlockItems { + + static void init() { + for (int id = 0; id < VanillaItems.ITEM_ID_OFFSET; id++) { + Block block = Block.BY_ID[id]; + Item item = Item.BY_ID[id]; + + if (block != Blocks.AIR && item != null) { + NamespacedIdentifier key = BlockRegistryImpl.getKey(block); + + if (ItemRegistryImpl.getItem(key) == null) { + ItemRegistryImpl.register(block, item); + } else { + // some blocks have both a block item and special item form + // we should handle that in some way, but how? TODO + } + } + } + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/VanillaItems.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/VanillaItems.java new file mode 100644 index 00000000..63e9a962 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/VanillaItems.java @@ -0,0 +1,258 @@ +package net.ornithemc.osl.items.impl; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +import net.minecraft.item.Item; + +import net.ornithemc.osl.core.api.util.NamespacedIdentifiers; + +final class VanillaItems { + + /** + * Namespaced IDs were introduced in 1.7. Before then, the numerical IDs + * were the only unique identifiers for items. Here we assign namespaced + * IDs to pre-1.7 items, matching the 1.7 IDs where possible. + *

+ * Note that in 1.7 snapshots the IDs went through several changes. + * The IDs used here match those used in Release 1.7.2. + */ + private static final String[] IDENTIFIERS = { + // grouped per 10 for easier lookup + + "iron_shovel", + "iron_pickaxe", + "iron_axe", + "flint_and_steel", + "apple", + "bow", + "arrow", + "coal", + "diamond", + "iron_ingot", + + "gold_ingot", + "iron_sword", + "wooden_sword", + "wooden_shovel", + "wooden_pickaxe", + "wooden_axe", + "stone_sword", + "stone_shovel", + "stone_pickaxe", + "stone_axe", + + "diamond_sword", + "diamond_shovel", + "diamond_pickaxe", + "diamond_axe", + "stick", + "bowl", + "mushroom_stew", + "golden_sword", + "golden_shovel", + "golden_pickaxe", + + "golden_axe", + "string", + "feather", + "gunpowder", + "wooden_hoe", + "stone_hoe", + "iron_hoe", + "diamond_hoe", + "golden_hoe", + "wheat_seeds", + + "wheat", + "bread", + "leather_helmet", + "leather_chestplate", + "leather_leggings", + "leather_boots", + "chainmail_helmet", + "chainmail_chestplate", + "chainmail_leggings", + "chainmail_boots", + + "iron_helmet", + "iron_chestplate", + "iron_leggings", + "iron_boots", + "diamond_helmet", + "diamond_chestplate", + "diamond_leggings", + "diamond_boots", + "golden_helmet", + "golden_chestplate", + + "golden_leggings", + "golden_boots", + "flint", + "porkchop", + "cooked_porkchop", + "painting", + "golden_apple", + "sign", + "wooden_door", + "bucket", + + "water_bucket", + "lava_bucket", + "minecart", + "saddle", + "iron_door", + "redstone", + "snowball", + "boat", + "leather", + "milk_bucket", + + "brick", + "clay_ball", + "reeds", + "paper", + "book", + "slime_ball", + "chest_minecart", + "furnace_minecart", + "egg", + "compass", + + "fishing_rod", + "clock", + "glowstone_dust", + "fish", + "cooked_fished", + "dye", + "bone", + "sugar", + "cake", + "bed", + + "repeater", + "cookie", + "filled_map", + "shears", + "melon", + "pumpkin_seeds", + "melon_seeds", + "beef", + "cooked_beef", + "chicken", + + "cooked_chicken", + "rotten_flesh", + "ender_pearl", + "blaze_rod", + "ghast_tear", + "gold_nugget", + "nether_wart", + "potion", + "glass_bottle", + "spider_eye", + + "fermented_spider_eye", + "blaze_powder", + "magma_cream", + "brewing_stand", + "cauldron", + "ender_eye", + "speckled_melon", + "spawn_egg", + "experience_bottle", + "fire_charge", + + "writable_book", + "written_book", + "emerald", + "item_frame", + "flower_pot", + "carrot", + "potato", + "baked_potato", + "poisonous_potato", + "map", + + "golden_carrot", + "skull", + "carrot_on_a_stick", + "nether_star", + "pumpkin_pie", + "fireworks", + "firework_charge", + "enchanted_book", + "comparator", + "netherbrick", + + "quartz", + "tnt_minecart", + "hopper_minecart", + null, + null, + null, + null, + null, + null, + null, + + null, + "iron_horse_armor", + "golden_horse_armor", + "diamond_horse_armor", + "lead", + "name_tag", + "command_block_minecart" + }; + private static final String[] DISC_IDENTIFIERS = { + "record_13", + "record_cat", + "record_blocks", + "record_chirp", + "record_far", + "record_mall", + "record_mellohi", + "record_stal", + "record_strad", + "record_ward", + + "record_11", + "record_wait" + }; + + static final int ITEM_ID_OFFSET = 256; + static final int DISC_ITEM_ID_OFFSET = 2000 + ITEM_ID_OFFSET; + + static void init() { + for (Field f : Item.class.getDeclaredFields()) { + if (Modifier.isStatic(f.getModifiers()) && Item.class.isAssignableFrom(f.getType())) { + try { + Item item = (Item) f.get(null); + + if (item != null) { + String identifier = null; + + if (item.id >= DISC_ITEM_ID_OFFSET) { + int id = item.id - DISC_ITEM_ID_OFFSET; + + if (id >= 0 && id < DISC_IDENTIFIERS.length) { + identifier = DISC_IDENTIFIERS[id]; + } + } else if (item.id >= ITEM_ID_OFFSET) { + int id = item.id - ITEM_ID_OFFSET; + + if (id >= 0 && id < IDENTIFIERS.length) { + identifier = IDENTIFIERS[id]; + } + } + + if (identifier != null) { + ItemRegistryImpl.register(item.id, NamespacedIdentifiers.from(identifier), item); + } + } + } catch (Throwable t) { + } + } + } + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/item/ItemExtensionImpl.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/item/ItemExtensionImpl.java new file mode 100644 index 00000000..52a911cd --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/item/ItemExtensionImpl.java @@ -0,0 +1,6 @@ +package net.ornithemc.osl.items.impl.item; + +import net.ornithemc.osl.items.api.item.ItemExtension; + +public interface ItemExtensionImpl extends ItemExtension { +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockItemAccess.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockItemAccess.java new file mode 100644 index 00000000..4d2224a9 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockItemAccess.java @@ -0,0 +1,14 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.item.BlockItem; + +@Mixin(BlockItem.class) +public interface BlockItemAccess { + + @Accessor("block") + int accessBlock(); + +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockMixin.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockMixin.java new file mode 100644 index 00000000..61efe4bd --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockMixin.java @@ -0,0 +1,117 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +import org.objectweb.asm.Opcodes; + +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.Slice; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Share; +import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef; +import com.llamalad7.mixinextras.sugar.ref.LocalRef; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; + +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Block.class) +public class BlockMixin { + + /* + * Block and Item initialization is cursed AF prior to 13w36a. + * There are no registries, only arrays, and all initialization + * happens in the static initializer instead of a dedicated init + * method. + * + * In general the order of operations is as follows: + * 1. Block:: + * 1.1. construct all blocks + * 1.2. Item:: + * 1.2.1 construct all regular items + * 1.2.2 init regular item stats + * 1.3. init special block items + * 1.4. auto-generate remaining block items + * 1.5. init block item stats + * But this is not always the case. In Alpha and early Beta versions, + * Item:: happens before all blocks have been initialized. + * + * To mess with this order as little as possible, there are two item + * registration events: one for regular items and one for block items. + * + * The regular item registration event is fired in Item::, + * after Vanilla items have been initialized. + * + * The block item registration even is fired in Block::, so + * that block item stats initialize correctly, but *before* Vanilla + * block items are initialized. This is because Vanilla auto-generates + * most block items, but we want to allow mods to register special + * item forms of their blocks. + */ + + @Inject( + method = "", + slice = @Slice( + from = @At( + value = "FIELD", + opcode = Opcodes.PUTSTATIC, + target = "Lnet/minecraft/block/Block;STONE:Lnet/minecraft/block/Block;" + ) + ), + at = @At( + value = "FIELD", + target = "Lnet/minecraft/item/Item;BY_ID:[Lnet/minecraft/item/Item;", + ordinal = 0 + ) + ) + private static void osl$items$registerBlockItems(CallbackInfo ci, @Share("osl$items$blockItemsRegistered") LocalBooleanRef blockItemsRegistered) { + // in some versions this injector targets a for-loop + if (!blockItemsRegistered.get()) { + // Item registration would be initiated here anyway + // force it to happen *before* we register block items + Item.BY_ID.getClass(); + + ItemRegistryImpl.registerBlocks(); + } + + blockItemsRegistered.set(true); + } + + @WrapOperation( + method = "", + at = @At( + value = "NEW", + target = "net/minecraft/item/BlockItem" + ) + ) + private static BlockItem osl$items$cancelAutoGeneratedBlockItem(int id, Operation op) { + if (ItemRegistryImpl.BLOCK_ITEMS.containsKey(Block.BY_ID[id + 256])) { + return null; + } else { + return op.call(id); + } + } + + @WrapOperation( + method = "", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/item/Item;BY_ID:[Lnet/minecraft/item/Item;", + opcode = Opcodes.GETSTATIC, + args = "array=set" + ) + ) + private static Item[] osl$items$cancelPutBlockItemInArray(Operation op, @Share("osl$items$dummyItemArray") LocalRef dummyItems) { + // operation is unnecessary as Item:: already puts the item in the array + if (dummyItems.get() == null) { + dummyItems.set(new Item[Item.BY_ID.length]); + } + + return dummyItems.get(); + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockMixinNew.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockMixinNew.java new file mode 100644 index 00000000..4b83fda4 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockMixinNew.java @@ -0,0 +1,25 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +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.CallbackInfo; + +import net.minecraft.block.Block; + +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Block.class) +public class BlockMixinNew { + + @Inject( + method = "", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/stat/Stats;initBlockStats()V" + ) + ) + private static void osl$items$initBlockItems(CallbackInfo ci) { + ItemRegistryImpl.initBlocks(); + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockMixinOld.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockMixinOld.java new file mode 100644 index 00000000..bcd2f490 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/BlockMixinOld.java @@ -0,0 +1,24 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +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.CallbackInfo; + +import net.minecraft.block.Block; + +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Block.class) +public class BlockMixinOld { + + @Inject( + method = "", + at = @At( + value = "TAIL" + ) + ) + private static void osl$items$initBlockItems(CallbackInfo ci) { + ItemRegistryImpl.initBlocks(); + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinNew.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinNew.java new file mode 100644 index 00000000..62f47ab7 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinNew.java @@ -0,0 +1,36 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +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.CallbackInfo; + +import net.minecraft.item.Item; + +import net.ornithemc.osl.items.api.item.ItemExtension; +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Item.class) +public class ItemMixinNew implements ItemExtension { + + @Inject( + method = "", + at = @At( + value = "HEAD" + ) + ) + private static void osl$items$unlockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.unlock(); + } + + @Inject( + method = "", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/stat/Stats;initItemStats()V" + ) + ) + private static void osl$items$registerItems(CallbackInfo ci) { + ItemRegistryImpl.registerItems(); + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinOld.java b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinOld.java new file mode 100644 index 00000000..498b6344 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/java/net/ornithemc/osl/items/impl/mixin/common/ItemMixinOld.java @@ -0,0 +1,35 @@ +package net.ornithemc.osl.items.impl.mixin.common; + +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.CallbackInfo; + +import net.minecraft.item.Item; + +import net.ornithemc.osl.items.api.item.ItemExtension; +import net.ornithemc.osl.items.impl.ItemRegistryImpl; + +@Mixin(Item.class) +public class ItemMixinOld implements ItemExtension { + + @Inject( + method = "", + at = @At( + value = "HEAD" + ) + ) + private static void osl$items$unlockItemRegistry(CallbackInfo ci) { + ItemRegistryImpl.unlock(); + } + + @Inject( + method = "", + at = @At( + value = "TAIL" + ) + ) + private static void osl$items$registerItems(CallbackInfo ci) { + ItemRegistryImpl.registerItems(); + } +} diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/resources/fabric.mod.json b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/resources/fabric.mod.json new file mode 100644 index 00000000..1c738f86 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/resources/fabric.mod.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "id": "osl-items", + "version": "0.1.0-alpha.1+mca1.0.1_01-mc1.6.4", + "environment": "*", + "mixins": [ + "osl.items.mixins.json" + ], + "accessWidener": "osl.items.classtweaker", + "depends": { + "fabricloader": "\u003e\u003d0.18.0", + "minecraft": "\u003e\u003d1.0.0-alpha.0.1 \u003c\u003d1.6.4", + "osl-core": "\u003e\u003d0.7.0", + "osl-blocks": "\u003e\u003d0.1.0-" + }, + "name": "OSL Items", + "description": "Items API and events.", + "authors": [ + "OrnitheMC" + ], + "contact": { + "homepage": "https://ornithemc.net/", + "issues": "https://github.com/OrnitheMC/ornithe-standard-libraries/issues", + "sources": "https://github.com/OrnitheMC/ornithe-standard-libraries" + }, + "license": "Apache-2.0" +} \ No newline at end of file diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/resources/osl.items.classtweaker b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/resources/osl.items.classtweaker new file mode 100644 index 00000000..d15f78a3 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/resources/osl.items.classtweaker @@ -0,0 +1,13 @@ +classTweaker v1 named + +transitive-accessible method net/minecraft/item/Item setMaxStackSize (I)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setHasCustomData (Z)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setMaxDamage (I)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setHandheld ()Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setKey (Ljava/lang/String;)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setRecipeRemainder (Lnet/minecraft/item/Item;)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setPotionIngredient (Ljava/lang/String;)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setCreativeModeTab (Lnet/minecraft/item/CreativeModeTab;)Lnet/minecraft/item/Item; +transitive-accessible method net/minecraft/item/Item setSpriteName (Ljava/lang/String;)Lnet/minecraft/item/Item; + +transitive-inject-interface net/minecraft/item/Item net/ornithemc/osl/items/impl/item/ItemExtensionImpl \ No newline at end of file diff --git a/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/resources/osl.items.mixins.json b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/resources/osl.items.mixins.json new file mode 100644 index 00000000..a3b10ea6 --- /dev/null +++ b/libraries/items/items-mca1.0.1_01-mc1.6.4/src/main/resources/osl.items.mixins.json @@ -0,0 +1,22 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.ornithemc.osl.items.impl.mixin", + "compatibilityLevel": "JAVA_8", + "plugin": "net.ornithemc.osl.items.impl.ItemsMixinPlugin", + "mixins": [ + "common.BlockItemAccess", + "common.BlockMixin", + "common.BlockMixinNew", + "common.BlockMixinOld", + "common.ItemMixinNew", + "common.ItemMixinOld" + ], + "client": [ + ], + "server": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/settings.gradle b/settings.gradle index ac8df0b8..a71fb158 100644 --- a/settings.gradle +++ b/settings.gradle @@ -59,6 +59,14 @@ include ':libraries:executors:executors-mc14w07a-mc14w20b' include ':libraries:executors:executors-mc14w21a-mc1.13.2' include ':libraries:executors:executors-mc18w43a-mc1.14.4' +include ':libraries:items' +include ':libraries:items:items-mca1.0.1_01-mc1.6.4' +include ':libraries:items:items-mc13w36a-mc14w25b' +include ':libraries:items:items-mc14w26a-mc17w46a' +include ':libraries:items:items-mc17w47a-mc18w31a' +include ':libraries:items:items-mc18w32a-mc1.13.2' +include ':libraries:items:items-mc18w43a-mc1.14.4' + include ':libraries:keybinds' include ':libraries:keybinds:keybinds-mcc0.0.23a_01-mcb1.7.3' include ':libraries:keybinds:keybinds-mcb1.8-pre1-mc1.6.4'