Add a fire ward necklace that makes the player invulnerable to fire #18
BIN
assets/fire_ward.afdesign
Normal file
BIN
assets/fire_ward.afdesign
Normal file
Binary file not shown.
10
build.gradle
10
build.gradle
@ -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}"))
|
||||
|
@ -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
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
30
src/main/java/net/banutama/utamacraft/item/FireWardItem.java
Normal file
30
src/main/java/net/banutama/utamacraft/item/FireWardItem.java
Normal 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));
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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 (((Object) this) instanceof LivingEntity living) {
|
||||
if (source.isFire()) {
|
||||
LogUtils.getLogger().info("DamageSource is fire");
|
||||
ItemStack res = CuriosApi
|
||||
.getCuriosHelper()
|
||||
.findFirstCurio(living, ModItems.FIRE_WARD.get())
|
||||
.map(SlotResult::stack)
|
||||
.orElse(ItemStack.EMPTY);
|
||||
if (!res.isEmpty()) {
|
||||
cir.setReturnValue(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "utamacraft:item/fire_ward"
|
||||
}
|
||||
}
|
BIN
src/main/resources/assets/utamacraft/textures/item/fire_ward.png
Normal file
BIN
src/main/resources/assets/utamacraft/textures/item/fire_ward.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
5
src/main/resources/data/curios/tags/items/necklace.json
Normal file
5
src/main/resources/data/curios/tags/items/necklace.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"values": [
|
||||
"utamacraft:fire_ward"
|
||||
]
|
||||
}
|
26
src/main/resources/data/utamacraft/recipes/fire_ward.json
Normal file
26
src/main/resources/data/utamacraft/recipes/fire_ward.json
Normal 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
|
||||
}
|
||||
}
|
@ -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",
|
||||
|
Loading…
Reference in New Issue
Block a user