Skip to content

Commit

Permalink
Armors ’n stuff
Browse files Browse the repository at this point in the history
Signed-off-by: cph101 <[email protected]>
  • Loading branch information
cph101 committed Sep 27, 2024
1 parent 8456ccd commit 5d542da
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 41 deletions.
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package com.sammy.malum.common.item.curiosities.armor;

import com.google.common.collect.*;
import com.sammy.malum.MalumMod;
import com.sammy.malum.client.cosmetic.*;
import com.sammy.malum.common.item.cosmetic.skins.*;
import com.sammy.malum.registry.client.*;
import com.sammy.malum.registry.common.*;
import net.minecraft.client.*;
import net.minecraft.client.model.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.*;
import net.minecraft.world.entity.*;
import net.minecraft.world.entity.ai.attributes.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.component.ItemAttributeModifiers;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;
Expand All @@ -19,7 +21,7 @@
import java.util.*;
import java.util.function.*;

import static com.sammy.malum.registry.common.item.ArmorTiers.ArmorTierEnum.*;
import static com.sammy.malum.registry.common.item.ArmorTiers.MALIGNANT_ALLOY;

public class MalignantStrongholdArmorItem extends MalumArmorItem {

Expand All @@ -28,15 +30,11 @@ public MalignantStrongholdArmorItem(Type slot, Properties builder) {
}

@Override
public Multimap<Attribute, AttributeModifier> createExtraAttributes(Type type) {
Multimap<Attribute, AttributeModifier> attributes = ArrayListMultimap.create();
public List<ItemAttributeModifiers.Entry> createExtraAttributes() {
ItemAttributeModifiers.Builder attributes = ItemAttributeModifiers.builder();
UUID uuid = ARMOR_MODIFIER_UUID_PER_TYPE.get(type);
attributes.put(AttributeRegistry.MALIGNANT_CONVERSION.get(), new AttributeModifier(uuid, "Malignant Conversion", 0.25f, AttributeModifier.Operation.ADDITION));
return attributes;
}

public String getTexture() {
return "malignant_stronghold";
attributes.add(AttributeRegistry.MALIGNANT_CONVERSION, new AttributeModifier(MalumMod.malumPath("malignant_conversion"), 0.25f, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.ARMOR);
return attributes.build().modifiers();
}

@OnlyIn(Dist.CLIENT)
Expand Down Expand Up @@ -74,4 +72,9 @@ public LodestoneArmorModel getHumanoidArmorModel(LivingEntity entity, ItemStack
}
});
}

@Override
public ResourceLocation getArmorTexture() {
return MalumMod.malumPath("textures/armor/malignant_stronghold");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,6 @@

public abstract class MalumArmorItem extends LodestoneArmorItem {

//TODO: access transformer for the vanilla one in ArmorItem is being fucking stupid, just putting this here as a temporary measure
protected static final EnumMap<ArmorItem.Type, UUID> ARMOR_MODIFIER_UUID_PER_TYPE = Util.make(new EnumMap<>(ArmorItem.Type.class), (p_266744_) -> {
p_266744_.put(ArmorItem.Type.BOOTS, UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"));
p_266744_.put(ArmorItem.Type.LEGGINGS, UUID.fromString("D8499B04-0E66-4726-AB29-64469D734E0D"));
p_266744_.put(ArmorItem.Type.CHESTPLATE, UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"));
p_266744_.put(ArmorItem.Type.HELMET, UUID.fromString("2AD3F246-FEE1-4E67-B886-69FD380BB150"));
});

public MalumArmorItem(Holder<ArmorMaterial> materialIn, ArmorItem.Type slot, Properties builder) {
super(materialIn, slot, builder);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,44 +1,43 @@
package com.sammy.malum.common.item.curiosities.armor;

import com.google.common.collect.*;
import com.sammy.malum.MalumMod;
import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData;
import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin;
import com.sammy.malum.registry.client.ModelRegistry;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.EquipmentSlotGroup;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.component.ItemAttributeModifiers;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;
import team.lodestar.lodestone.registry.common.LodestoneAttributes;
import team.lodestar.lodestone.systems.model.LodestoneArmorModel;

import java.util.List;
import java.util.UUID;
import java.util.function.Consumer;

import static com.sammy.malum.registry.common.item.ArmorTiers.ArmorTierEnum.SPIRIT_HUNTER;
import static com.sammy.malum.registry.common.item.ArmorTiers.SPIRIT_HUNTER;

public class SoulHunterArmorItem extends MalumArmorItem {
public SoulHunterArmorItem(ArmorItem.Type slot, Properties builder) {
super(SPIRIT_HUNTER, slot, builder);
}

@Override
public Multimap<Attribute, AttributeModifier> createExtraAttributes(Type type) {
Multimap<Attribute, AttributeModifier> attributes = ArrayListMultimap.create();
public List<ItemAttributeModifiers.Entry> createExtraAttributes() {
ItemAttributeModifiers.Builder attributes = ItemAttributeModifiers.builder();
UUID uuid = ARMOR_MODIFIER_UUID_PER_TYPE.get(type);
attributes.put(LodestoneAttributes.MAGIC_PROFICIENCY.get(), new AttributeModifier(uuid, "Magic Proficiency", 2f, AttributeModifier.Operation.ADD_VALUE));
return attributes;
}

public String getTexture() {
return "spirit_hunter_reforged";
attributes.add(LodestoneAttributes.MAGIC_PROFICIENCY, new AttributeModifier(MalumMod.malumPath("magic_proficiency"), 2f, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.ARMOR);
return attributes.build().modifiers();
}

@OnlyIn(Dist.CLIENT)
Expand All @@ -47,7 +46,7 @@ public void initializeClient(Consumer<IClientItemExtensions> consumer) {
consumer.accept(new IClientItemExtensions() {
@Override
public LodestoneArmorModel getHumanoidArmorModel(LivingEntity entity, ItemStack itemStack, EquipmentSlot armorSlot, HumanoidModel _default) {
float pticks = Minecraft.getInstance().getFrameTime();
float pticks = (float)(Minecraft.getInstance().getFrameTimeNs() / 20000000000L);
float f = Mth.rotLerp(pticks, entity.yBodyRotO, entity.yBodyRot);
float f1 = Mth.rotLerp(pticks, entity.yHeadRotO, entity.yHeadRot);
float netHeadYaw = f1 - f;
Expand All @@ -70,4 +69,9 @@ public LodestoneArmorModel getHumanoidArmorModel(LivingEntity entity, ItemStack
}
});
}

@Override
public ResourceLocation getArmorTexture() {
return MalumMod.malumPath("textures/armor/spirit_hunter_reforged");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent;
import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent;
import net.neoforged.neoforge.client.extensions.common.*;
import net.neoforged.neoforge.client.gui.VanillaGuiLayers;

@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
public class ClientSetupEvents {
Expand All @@ -20,10 +22,10 @@ public static void registerClientExtensions(RegisterClientExtensionsEvent event)
}

@SubscribeEvent
public static void registerOverlays(RegisterGuiOverlaysEvent event) {
event.registerAbove(VanillaGuiOverlay.ARMOR_LEVEL.id(), "soul_ward", (gui, poseStack, partialTick, width, height) ->
public static void registerOverlays(RegisterGuiLayersEvent event) {
event.registerAbove(VanillaGuiLayers.ARMOR_LEVEL, "soul_ward", (gui, poseStack, partialTick, width, height) ->
SoulWardHandler.ClientOnly.renderSoulWard(gui, poseStack, width, height));
event.registerAbove(VanillaGuiOverlay.PLAYER_LIST.id(), "touch_of_darkness", (gui, poseStack, partialTick, width, height) ->
event.registerBelow(VanillaGuiLayers.BOSS_OVERLAY, "touch_of_darkness", (gui, poseStack, partialTick, width, height) ->
TouchOfDarknessHandler.ClientOnly.renderDarknessVignette(poseStack));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ public static void onHurt(LivingDamageEvent.Pre event) {


@SubscribeEvent(priority = EventPriority.LOWEST)
public static void onLateHurt(LivingDamageEvent.Pre event) {
public static void onLateHurt(LivingDamageEvent.Post event) {
SoulWardHandler.shieldPlayer(event);
}

Expand Down
17 changes: 10 additions & 7 deletions src/main/java/com/sammy/malum/core/handlers/SoulWardHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@
import com.sammy.malum.common.capability.MalumPlayerDataCapability;
import com.sammy.malum.config.CommonConfig;
import com.sammy.malum.common.item.IMalumEventResponderItem;
import com.sammy.malum.mixin.AccessorEvent;
import com.sammy.malum.registry.common.AttributeRegistry;
import com.sammy.malum.registry.common.SoundRegistry;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.nbt.CompoundTag;
Expand Down Expand Up @@ -52,7 +54,7 @@ public static void recoverSoulWard(PlayerTickEvent.Post event) {
Player player = event.getEntity();
if (!player.level().isClientSide) {
SoulWardHandler soulWardHandler = MalumPlayerDataCapability.getCapability(player).soulWardHandler;
AttributeInstance soulWardCap = player.getAttribute(AttributeRegistry.SOUL_WARD_CAP.get());
AttributeInstance soulWardCap = player.getAttribute(AttributeRegistry.SOUL_WARD_CAP);
if (soulWardCap != null) {
if (soulWardHandler.soulWard < soulWardCap.getValue() && soulWardHandler.soulWardProgress <= 0) {
soulWardHandler.soulWard++;
Expand All @@ -74,8 +76,9 @@ public static void recoverSoulWard(PlayerTickEvent.Post event) {
}
}

public static void shieldPlayer(LivingDamageEvent.Pre event) {
if (event.isCanceled() || event.getOriginalDamage() <= 0) {
public static void shieldPlayer(LivingDamageEvent.Post event) {
AccessorEvent.PostDamage evnt = (AccessorEvent.PostDamage) event;
if (evnt.malum$isCancelled() || event.getOriginalDamage() <= 0) {
return;
}
if (event.getEntity() instanceof Player player) {
Expand All @@ -96,7 +99,7 @@ public static void shieldPlayer(LivingDamageEvent.Pre event) {
}
float result = amount * multiplier;
float absorbed = amount - result;
double strength = 1+player.getAttributeValue(AttributeRegistry.SOUL_WARD_STRENGTH.get());
double strength = 1+player.getAttributeValue(AttributeRegistry.SOUL_WARD_STRENGTH);
float soulwardLost = (float) (soulWardHandler.soulWard - (absorbed / strength));
if (strength != 0) {
soulWardHandler.soulWard = Math.max(0, soulwardLost);
Expand All @@ -111,7 +114,7 @@ public static void shieldPlayer(LivingDamageEvent.Pre event) {
}
SoundEvent sound = soulWardHandler.soulWard == 0 ? SoundRegistry.SOUL_WARD_DEPLETE.get() : SoundRegistry.SOUL_WARD_HIT.get();
player.level().playSound(null, player.blockPosition(), sound, player.getSoundSource(), 1, Mth.nextFloat(player.getRandom(), 1f, 1.5f));
event.setNewDamage(result);
evnt.malum$setNewDamage(result);

MalumPlayerDataCapability.syncTrackingAndSelf(player);
}
Expand All @@ -120,7 +123,7 @@ public static void shieldPlayer(LivingDamageEvent.Pre event) {
}

public static int getSoulWardCooldown(Player player) {
return getSoulWardCooldown(player.getAttributeValue(AttributeRegistry.SOUL_WARD_RECOVERY_RATE.get()));
return getSoulWardCooldown(player.getAttributeValue(AttributeRegistry.SOUL_WARD_RECOVERY_RATE));
}

public static int getSoulWardCooldown(double recoverySpeed) {
Expand Down Expand Up @@ -168,7 +171,7 @@ public static void renderSoulWard(ForgeGui gui, GuiGraphics guiGraphics, int wid
shaderInstance.safeGetUniform("Speed").set(550f);
shaderInstance.safeGetUniform("Intensity").set(120f);
VFXBuilders.ScreenVFXBuilder builder = VFXBuilders.createScreen()
.setPosColorTexDefaultFormat()
.setPosTexColorDefaultFormat()
.setShader(() -> shaderInstance);

int size = 13;
Expand Down

0 comments on commit 5d542da

Please sign in to comment.