diff --git a/CHANGELOG.md b/CHANGELOG.md index de5d033..cfd9263 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +**1.0.18** +* Give RelicCraft its own Item Group +* Give Targeted Ender Pearls a Cooldown +* Add Creative Relic Generator + **1.0.17** * The Teleportation Restrictor now blocks Portal Teleportation diff --git a/gradle.properties b/gradle.properties index c82dd14..41616c2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ org.gradle.jvmargs = -Xmx1G fabric_loader_version = 0.7.10+build.191 # Mod Properties - mod_version = 1.0.17 + mod_version = 1.0.18 maven_group = com.thebrokenrail archives_base_name = reliccraft diff --git a/src/main/java/com/thebrokenrail/reliccraft/RelicCraft.java b/src/main/java/com/thebrokenrail/reliccraft/RelicCraft.java index 900dbad..4fa2146 100644 --- a/src/main/java/com/thebrokenrail/reliccraft/RelicCraft.java +++ b/src/main/java/com/thebrokenrail/reliccraft/RelicCraft.java @@ -12,6 +12,7 @@ import com.thebrokenrail.reliccraft.block.TeleportationBeaconBlock; import com.thebrokenrail.reliccraft.block.TeleportationRestrictorBlock; import com.thebrokenrail.reliccraft.entity.RelicEntity; import com.thebrokenrail.reliccraft.item.DragonEggHolderBlockItem; +import com.thebrokenrail.reliccraft.item.GenerateRelicItem; import com.thebrokenrail.reliccraft.item.TargetedEnderPearlItem; import com.thebrokenrail.reliccraft.item.TimeDilaterItem; import com.thebrokenrail.reliccraft.item.RelicItem; @@ -22,6 +23,7 @@ import com.thebrokenrail.reliccraft.recipe.TimeDilaterRecipe; import com.thebrokenrail.reliccraft.structure.TimeTempleFeature; import com.thebrokenrail.reliccraft.structure.TimeTempleGenerator; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.fabricmc.fabric.api.entity.FabricEntityTypeBuilder; import net.fabricmc.fabric.api.loot.v1.FabricLootPoolBuilder; import net.fabricmc.fabric.api.loot.v1.event.LootTableLoadingCallback; @@ -33,6 +35,9 @@ import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.loot.BinomialLootTableRange; import net.minecraft.loot.LootTables; import net.minecraft.loot.entry.ItemEntry; @@ -65,8 +70,8 @@ public class RelicCraft implements ModInitializer { public static Item ORB_ITEM; public static Item STAFF_ITEM; public static Item TIME_DILATER_ITEM; - public static Item TARGETED_ENDER_PEARL_ITEM; + public static Item GENERATE_RELIC_ITEM; public static EntityType RELIC_ENTITY; @@ -124,13 +129,17 @@ public class RelicCraft implements ModInitializer { public static StructurePieceType TIME_TEMPLE_STRUCTURE_PIECE = TimeTempleGenerator.Piece::new; public static final String TIME_TEMPLE_ID = "RelicCraft Time Temple"; + public static ItemGroup ITEM_GROUP; + @Override public void onInitialize() { + ITEM_GROUP = FabricItemGroupBuilder.build(new Identifier(NAMESPACE, "item_group"), () -> new ItemStack(Items.ENDER_CHEST)); + ORB_ITEM = Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "orb"), new RelicItem()); STAFF_ITEM = Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "staff"), new RelicItem()); TIME_DILATER_ITEM = Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "time_dilater"), new TimeDilaterItem()); - TARGETED_ENDER_PEARL_ITEM = Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "targeted_ender_pearl"), new TargetedEnderPearlItem()); + GENERATE_RELIC_ITEM = Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "generate_relic"), new GenerateRelicItem()); RELIC_ENTITY = FabricEntityTypeBuilder.create(EntityCategory.MISC, (EntityType.EntityFactory) RelicEntity::new).size(EntityDimensions.fixed(0.25f, 0.25f)).build(); @@ -168,7 +177,7 @@ public class RelicCraft implements ModInitializer { //noinspection ResultOfMethodCallIgnored TagRegistry.item(new Identifier(NAMESPACE, "relics")); //noinspection ResultOfMethodCallIgnored - TagRegistry.item(new Identifier(NAMESPACE, "items")); + TagRegistry.item(new Identifier(NAMESPACE, "advancement_trigger_items")); Registry.register(Registry.STRUCTURE_PIECE, new Identifier(NAMESPACE, "time_temple"), TIME_TEMPLE_STRUCTURE_PIECE); Registry.register(Registry.FEATURE, new Identifier(NAMESPACE, "time_temple"), TIME_TEMPLE_STRUCTURE_FEATURE); diff --git a/src/main/java/com/thebrokenrail/reliccraft/block/AbstractDragonEggHolderBlock.java b/src/main/java/com/thebrokenrail/reliccraft/block/AbstractDragonEggHolderBlock.java index 4ff9507..653e377 100644 --- a/src/main/java/com/thebrokenrail/reliccraft/block/AbstractDragonEggHolderBlock.java +++ b/src/main/java/com/thebrokenrail/reliccraft/block/AbstractDragonEggHolderBlock.java @@ -45,26 +45,30 @@ public abstract class AbstractDragonEggHolderBlock extends Block implements Bloc } @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity user, Hand hand, BlockHitResult hit) { BlockEntity blockEntity = world.getBlockEntity(pos); if (blockEntity instanceof Inventory) { Inventory inventory = (Inventory) blockEntity; - ItemStack stack = player.getStackInHand(hand); + ItemStack stack = user.getStackInHand(hand); - if (!stack.isEmpty()) { - if (inventory.isValidInvStack(0, stack) && inventory.getInvStack(0).isEmpty()) { - inventory.setInvStack(0, stack.split(1)); - if (!world.isClient()) { - grantAdvancement(player); - } - return ActionResult.SUCCESS; + if (inventory.isValidInvStack(0, stack) && inventory.getInvStack(0).isEmpty()) { + if (user.isCreative()) { + inventory.setInvStack(0, stack.copy().split(1)); } else { - return ActionResult.PASS; + inventory.setInvStack(0, stack.split(1)); } + + if (!world.isClient()) { + grantAdvancement(user); + } + return ActionResult.SUCCESS; } else { if (!inventory.getInvStack(0).isEmpty()) { - player.inventory.offerOrDrop(world, inventory.getInvStack(0)); + if (!user.isCreative()) { + user.inventory.offerOrDrop(world, inventory.getInvStack(0)); + } + inventory.removeInvStack(0); return ActionResult.SUCCESS; } else { diff --git a/src/main/java/com/thebrokenrail/reliccraft/item/DragonEggHolderBlockItem.java b/src/main/java/com/thebrokenrail/reliccraft/item/DragonEggHolderBlockItem.java index b286978..8f2b518 100644 --- a/src/main/java/com/thebrokenrail/reliccraft/item/DragonEggHolderBlockItem.java +++ b/src/main/java/com/thebrokenrail/reliccraft/item/DragonEggHolderBlockItem.java @@ -4,7 +4,6 @@ import com.thebrokenrail.reliccraft.RelicCraft; import net.minecraft.block.Block; import net.minecraft.inventory.Inventories; import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.DefaultedList; @@ -13,7 +12,7 @@ import net.minecraft.util.Rarity; public class DragonEggHolderBlockItem extends BlockItem { public DragonEggHolderBlockItem(Block block) { - super(block, new Settings().rarity(Rarity.UNCOMMON).group(ItemGroup.MISC)); + super(block, new Settings().rarity(Rarity.UNCOMMON).group(RelicCraft.ITEM_GROUP)); addPropertyGetter(new Identifier(RelicCraft.NAMESPACE, "active"), (stack, world, entity) -> { CompoundTag tag = stack.getSubTag("BlockEntityTag"); if (tag != null) { diff --git a/src/main/java/com/thebrokenrail/reliccraft/item/GenerateRelicItem.java b/src/main/java/com/thebrokenrail/reliccraft/item/GenerateRelicItem.java new file mode 100644 index 0000000..2ec3114 --- /dev/null +++ b/src/main/java/com/thebrokenrail/reliccraft/item/GenerateRelicItem.java @@ -0,0 +1,69 @@ +package com.thebrokenrail.reliccraft.item; + +import com.squareup.moshi.JsonAdapter; +import com.squareup.moshi.Moshi; +import com.thebrokenrail.reliccraft.RelicCraft; +import com.thebrokenrail.reliccraft.data.RelicData; +import net.minecraft.client.item.TooltipContext; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.text.Text; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Formatting; +import net.minecraft.util.Hand; +import net.minecraft.util.Rarity; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +import java.util.List; + +public class GenerateRelicItem extends Item { + public GenerateRelicItem() { + super(new Settings().maxCount(1).group(RelicCraft.ITEM_GROUP).rarity(Rarity.UNCOMMON)); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + ItemStack stack = user.getStackInHand(hand); + + if (!world.isClient()) { + RelicCraft.playRelicSound(user); + + ItemStack newStack; + if (RANDOM.nextBoolean()) { + newStack = new ItemStack(RelicCraft.ORB_ITEM); + } else { + newStack = new ItemStack(RelicCraft.STAFF_ITEM); + } + + CompoundTag tag = new CompoundTag(); + Moshi moshi = new Moshi.Builder().build(); + JsonAdapter jsonAdapter = moshi.adapter(RelicData.class); + tag.putString("RelicData", jsonAdapter.toJson(RelicData.generate(RANDOM))); + newStack.setTag(tag); + + if (!user.isCreative()) { + stack.decrement(1); + } + + if (!user.inventory.insertStack(newStack.copy())) { + user.dropItem(newStack, false); + } + } + + return new TypedActionResult<>(ActionResult.SUCCESS, stack); + } + + @Override + public void appendTooltip(ItemStack stack, World world, List tooltip, TooltipContext context) { + tooltip.add(new TranslatableText("item." + RelicCraft.NAMESPACE + ".generate_relic.tooltip").formatted(Formatting.GRAY)); + } + + @Override + public boolean hasEnchantmentGlint(ItemStack stack) { + return true; + } +} diff --git a/src/main/java/com/thebrokenrail/reliccraft/item/TargetedEnderPearlItem.java b/src/main/java/com/thebrokenrail/reliccraft/item/TargetedEnderPearlItem.java index a773246..38da4d8 100644 --- a/src/main/java/com/thebrokenrail/reliccraft/item/TargetedEnderPearlItem.java +++ b/src/main/java/com/thebrokenrail/reliccraft/item/TargetedEnderPearlItem.java @@ -9,12 +9,12 @@ import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; +import net.minecraft.stat.Stats; import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; @@ -34,7 +34,7 @@ import java.util.List; public class TargetedEnderPearlItem extends Item { public TargetedEnderPearlItem() { - super(new Settings().rarity(Rarity.UNCOMMON).group(ItemGroup.MISC).maxCount(16)); + super(new Settings().rarity(Rarity.UNCOMMON).group(RelicCraft.ITEM_GROUP).maxCount(16)); } @Override @@ -46,6 +46,9 @@ public class TargetedEnderPearlItem extends Item { public TypedActionResult use(World world, PlayerEntity user, Hand hand) { ItemStack stack = user.getStackInHand(hand); + user.getItemCooldownManager().set(this, 20); + user.incrementStat(Stats.USED.getOrCreateStat(this)); + if (!world.isClient()) { CompoundTag tag = stack.getTag(); if (tag == null) { diff --git a/src/main/java/com/thebrokenrail/reliccraft/item/TimeDilaterItem.java b/src/main/java/com/thebrokenrail/reliccraft/item/TimeDilaterItem.java index 2994913..a0b3304 100644 --- a/src/main/java/com/thebrokenrail/reliccraft/item/TimeDilaterItem.java +++ b/src/main/java/com/thebrokenrail/reliccraft/item/TimeDilaterItem.java @@ -7,10 +7,10 @@ import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.stat.Stats; import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; @@ -36,12 +36,15 @@ public class TimeDilaterItem extends Item { } public TimeDilaterItem() { - super(new Settings().group(ItemGroup.MISC).maxDamage(9).rarity(Rarity.UNCOMMON)); + super(new Settings().group(RelicCraft.ITEM_GROUP).maxDamage(9).rarity(Rarity.UNCOMMON)); } @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { ItemStack stack = user.getStackInHand(hand); + + user.incrementStat(Stats.USED.getOrCreateStat(this)); + if (!world.isClient()) { DilatedWorld dilatedWorld = (DilatedWorld) world; switch (dilatedWorld.getTimeSpeed()) { @@ -65,6 +68,7 @@ public class TimeDilaterItem extends Item { RelicCraft.playRelicSound(user); stack.damage(1, user, e -> e.sendToolBreakStatus(hand)); + return new TypedActionResult<>(ActionResult.SUCCESS, stack); } diff --git a/src/main/resources/assets/reliccraft/lang/en_us.json b/src/main/resources/assets/reliccraft/lang/en_us.json index 23fd1cb..73bdafb 100644 --- a/src/main/resources/assets/reliccraft/lang/en_us.json +++ b/src/main/resources/assets/reliccraft/lang/en_us.json @@ -36,6 +36,8 @@ "item.reliccraft.tooltip.targeted_ender_pearl.y": "Y: %s", "item.reliccraft.tooltip.targeted_ender_pearl.z": "Z: %s", "item.reliccraft.tooltip.targeted_ender_pearl.dimension": "Dimension: %s", + "item.reliccraft.generate_relic": "Creative Relic Generator", + "item.reliccraft.generate_relic.tooltip": "Use To Generate A Random Relic", "text.reliccraft.relic.action.heal_action": "Heal", "text.reliccraft.relic.action.bedrock_action": "Turn To Bedrock", "text.reliccraft.relic.action.gold_action": "Turn Coal To Gold", @@ -69,5 +71,6 @@ "advancements.reliccraft.duplicate_time_dilater.description": "Duplicate a Time Dilater", "text.reliccraft.dimension.minecraft.overworld": "The Overworld", "text.reliccraft.dimension.minecraft.the_nether": "The Nether", - "text.reliccraft.dimension.minecraft.the_end": "The End" + "text.reliccraft.dimension.minecraft.the_end": "The End", + "itemGroup.reliccraft.item_group": "RelicCraft" } \ No newline at end of file diff --git a/src/main/resources/assets/reliccraft/models/item/generate_relic.json b/src/main/resources/assets/reliccraft/models/item/generate_relic.json new file mode 100644 index 0000000..8b5d40b --- /dev/null +++ b/src/main/resources/assets/reliccraft/models/item/generate_relic.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/blaze_rod" +} \ No newline at end of file diff --git a/src/main/resources/data/reliccraft/advancements/root.json b/src/main/resources/data/reliccraft/advancements/root.json index 937ff87..498d4d0 100644 --- a/src/main/resources/data/reliccraft/advancements/root.json +++ b/src/main/resources/data/reliccraft/advancements/root.json @@ -21,7 +21,7 @@ "conditions": { "items": [ { - "tag": "reliccraft:items" + "tag": "reliccraft:advancement_trigger_items" } ] } diff --git a/src/main/resources/data/reliccraft/tags/items/items.json b/src/main/resources/data/reliccraft/tags/items/advancement_trigger_items.json similarity index 72% rename from src/main/resources/data/reliccraft/tags/items/items.json rename to src/main/resources/data/reliccraft/tags/items/advancement_trigger_items.json index c3fb874..27333e4 100644 --- a/src/main/resources/data/reliccraft/tags/items/items.json +++ b/src/main/resources/data/reliccraft/tags/items/advancement_trigger_items.json @@ -5,6 +5,7 @@ "reliccraft:time_dilater", "reliccraft:teleportation_restrictor", "reliccraft:teleportation_beacon", - "reliccraft:targeted_ender_pearl" + "reliccraft:targeted_ender_pearl", + "minecraft:dragon_egg" ] } \ No newline at end of file