Add a fire ward necklace that makes the player invulnerable to fire #18

Merged
BlakeRain merged 4 commits from BlakeRain/utamacraft:main into main 2023-12-02 01:05:55 +00:00
13 changed files with 120 additions and 9 deletions
Showing only changes of commit 4df387f53d - Show all commits

BIN
assets/fire_ward.afdesign Normal file

Binary file not shown.

View File

@ -144,6 +144,11 @@ repositories {
maven {
url 'https://modmaven.dev/'
}
maven {
name = "Illusive Soulworks maven"
url = "https://maven.theillusivec4.top/"
}
}
dependencies {
@ -154,6 +159,11 @@ dependencies {
annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
// Compile against only the Curios API artifact
compileOnly(fg.deobf("top.theillusivec4.curios:curios-forge:${minecraft_version}-${curios_version}:api"))
// Use the full Curios API jar at runtime
runtimeOnly(fg.deobf("top.theillusivec4.curios:curios-forge:${minecraft_version}-${curios_version}"))
// compile against the JEI API but do not include it at runtime
compileOnly(fg.deobf("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}"))
compileOnly(fg.deobf("mezz.jei:jei-${minecraft_version}-forge-api:${jei_version}"))

View File

@ -43,6 +43,8 @@ cct_version=1.101.3
jei_version=11.6.0.1015
# The version of Mekanism we use when testing
mekanism_version=10.3.8.477
# The version of Curios we use
curios_version=5.1.4.1
## Mod Properties

View File

@ -16,12 +16,16 @@ import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.InterModComms;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.slf4j.Logger;
import top.theillusivec4.curios.api.SlotTypeMessage;
import top.theillusivec4.curios.api.SlotTypePreset;
// The value here should match an entry in the META-INF/mods.toml file
@Mod(Utamacraft.MOD_ID)
@ -58,5 +62,11 @@ public class Utamacraft {
public static void onClientSetup(FMLClientSetupEvent event) {
MenuScreens.register(ModMenuTypes.INSOLATOR_MENU.get(), InsolatorScreen::new);
}
@SubscribeEvent
public static void onIntermodEnqueue(InterModEnqueueEvent event) {
InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE,
() -> SlotTypePreset.NECKLACE.getMessageBuilder().build());
}
}
}

View File

@ -0,0 +1,30 @@
package net.banutama.utamacraft.item;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.Nullable;
import top.theillusivec4.curios.api.type.capability.ICurioItem;
import java.util.List;
public class FireWardItem extends Item implements ICurioItem {
public FireWardItem() {
super(getProperties());
}
private static Properties getProperties() {
return new Properties().tab(ModCreativeModeTab.TAB).stacksTo(1);
}
@Override
public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List<Component> pTooltipComponents, TooltipFlag pIsAdvanced) {
super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced);
pTooltipComponents.add(Component.translatable("tooltip.utamacraft.fire_ward")
.withStyle(ChatFormatting.DARK_RED)
.withStyle(ChatFormatting.BOLD));
}
}

View File

@ -12,21 +12,27 @@ public class ModItems {
DeferredRegister.create(ForgeRegistries.ITEMS, Utamacraft.MOD_ID);
public static final RegistryObject<Item> LOGO =
ITEMS.register("utamacraft_logo", () -> new Item(new Item.Properties()));
ITEMS.register("utamacraft_logo", ModItems::simpleItem);
public static final RegistryObject<Item> PLAYER_PERIPHERAL =
ITEMS.register("player_peripheral", PlayerPeripheralItem::new);
public static final RegistryObject<Item> TUNGSTEN_INGOT =
ITEMS.register("tungsten_ingot", () -> new Item(new Item.Properties().tab(ModCreativeModeTab.TAB)));
ITEMS.register("tungsten_ingot", ModItems::simpleItem);
public static final RegistryObject<Item> RAW_TUNGSTEN =
ITEMS.register("raw_tungsten", () -> new Item(new Item.Properties().tab(ModCreativeModeTab.TAB)));
ITEMS.register("raw_tungsten", ModItems::simpleItem);
public static final RegistryObject<Item> FIBER_GLASS =
ITEMS.register("fiber_glass", () -> new Item(new Item.Properties().tab(ModCreativeModeTab.TAB)));
ITEMS.register("fiber_glass", ModItems::simpleItem);
public static final RegistryObject<Item> PCB =
ITEMS.register("pcb", () -> new Item(new Item.Properties().tab(ModCreativeModeTab.TAB)));
ITEMS.register("pcb", ModItems::simpleItem);
public static final RegistryObject<Item> BULB =
ITEMS.register("bulb", () -> new Item(new Item.Properties().tab(ModCreativeModeTab.TAB)));
ITEMS.register("bulb", ModItems::simpleItem);
public static final RegistryObject<FireWardItem> FIRE_WARD =
ITEMS.register("fire_ward", FireWardItem::new);
public static void register(IEventBus eventBus) {
ITEMS.register(eventBus);
}
private static Item simpleItem() {
return new Item(new Item.Properties().tab(ModCreativeModeTab.TAB));
}
}

View File

@ -1,19 +1,33 @@
package net.banutama.utamacraft.mixin;
import com.mojang.logging.LogUtils;
import net.banutama.utamacraft.item.ModItems;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import top.theillusivec4.curios.api.CuriosApi;
import top.theillusivec4.curios.api.SlotResult;
@Mixin(Entity.class)
public class EntityMixin {
@Inject(at = @At("HEAD"), method = "isInvulnerableTo", cancellable = true)
private void checkInvulnerabilities(DamageSource source, CallbackInfoReturnable<Boolean> cir) {
if (source.isFire()) {
LogUtils.getLogger().info("DamageSource is fire");
if (((Object) this) instanceof LivingEntity living) {
if (source.isFire()) {
ItemStack res = CuriosApi
.getCuriosHelper()
.findFirstCurio(living, ModItems.FIRE_WARD.get())
.map(SlotResult::stack)
.orElse(ItemStack.EMPTY);
if (!res.isEmpty()) {
cir.setReturnValue(true);
}
}
}
}
}

View File

@ -6,6 +6,7 @@
"block_entity.utamacraft.insolator": "Insolator",
"item.utamacraft.bulb": "Bulb",
"item.utamacraft.fiber_glass": "Fiberglass",
"item.utamacraft.fire_ward": "Fire Ward Necklace",
"item.utamacraft.insolator": "Insolator",
"item.utamacraft.pcb": "Printed Circuit Board",
"item.utamacraft.player_peripheral": "Player peripheral",
@ -18,6 +19,7 @@
"tooltip.utamacraft.energy.amount": "%s FE",
"tooltip.utamacraft.energy.amount.with_capacity": "%s / %s FE",
"tooltip.utamacraft.ethereal_glass": "Glass that is not solid to players",
"tooltip.utamacraft.fire_ward": "Protects the player from fire damage",
"tooltip.utamacraft.fluid.empty": "Empty",
"tooltip.utamacraft.fluid.amount": "%s mB",
"tooltip.utamacraft.fluid.amount.with_capacity": "%s / %s mB",

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "utamacraft:item/fire_ward"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,5 @@
{
"values": [
"utamacraft:fire_ward"
]
}

View File

@ -0,0 +1,26 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"C C",
"T T",
"FoF"
],
"key": {
"C": {
"item": "minecraft:copper_ingot"
},
"T": {
"item": "utamacraft:tungsten_ingot"
},
"F": {
"item": "minecraft:fire_charge"
},
"o": {
"item": "minecraft:ender_eye"
}
},
"result": {
"item": "utamacraft:fire_ward",
"count": 1
}
}

View File

@ -54,7 +54,7 @@ ITEMS = [
"minecraft:rose_bush",
"minecraft:sea_pickle",
"minecraft:seagrass",
"minecraft:short_grass",
# "minecraft:short_grass", TODO: 1.20 (replaces minecraft:grass)
"minecraft:small_dripleaf",
"minecraft:spore_blossom",
"minecraft:spruce_leaves",