Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ minecraft {
copyIdeResources = true
// generateRunFolders = true

// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')

runs {
client {
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ forgeVersion=43.3.5
# Parchment Version
parchmentVersion=2022.11.27
# Mod Information see https://mcforge.readthedocs.io/en/1.18.x/gettingstarted/versioning/#examples
modVersion=2.1.4.0
modVersion=2.1.4.6
modId=manascore
# Mixin Extras
mixinExtrasVersion=0.3.2
mixinExtrasVersion=0.2.0
# Photon: https://modrinth.com/mod/photon-editor/versions?l=forge&g=1.19.2
photonVersion=1.0.7.a
# LDLib: https://modrinth.com/mod/ldlib/versions?l=forge&g=1.19.2
Expand Down
4 changes: 0 additions & 4 deletions src/main/java/com/github/manasmods/manascore/ManasCore.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,11 @@
package com.github.manasmods.manascore;

import com.github.manasmods.manascore.attribute.ManasCoreAttributes;
import com.github.manasmods.manascore.config.ManasCoreConfig;
import com.github.manasmods.manascore.network.ManasCoreNetwork;
import com.github.manasmods.manascore.skill.SkillRegistry;
import lombok.Getter;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig.Type;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
Expand All @@ -27,7 +24,6 @@ public final class ManasCore {
private static final Logger logger = LogManager.getLogger();

public ManasCore() {
ModLoadingContext.get().registerConfig(Type.COMMON, ManasCoreConfig.SPEC);
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
ManasCoreAttributes.register(modEventBus);
SkillRegistry.register(modEventBus);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,8 +226,9 @@ public void addHeldAttributeModifiers(ManasSkillInstance instance, LivingEntity
* Removes the attribute modifiers of this skill from the {@link LivingEntity} holding the skill activation button.
*
* @param entity Affected {@link LivingEntity} owning this Skill.
* @param instance Affected {@link ManasSkillInstance}
*/
public void removeHeldAttributeModifiers(LivingEntity entity) {
public void removeHeldAttributeModifiers(ManasSkillInstance instance, LivingEntity entity) {
for(Map.Entry<Attribute, AttributeModifier> entry : this.onHeldAttributeModifiers.entrySet()) {
AttributeInstance attributeinstance = entity.getAttributes().getInstance(entry.getKey());
if (attributeinstance != null) attributeinstance.removeModifier(entry.getValue());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,15 @@ public void addHeldAttributeModifiers(LivingEntity entity) {
this.getSkill().addHeldAttributeModifiers(this, entity);
}

/**
* Removes the attribute modifiers of this instance from the {@link LivingEntity} holding the skill activation button.
*
* @param entity Affected {@link LivingEntity} owning this Skill.
*/
public void removeHeldAttributeModifiers(LivingEntity entity) {
this.getSkill().removeHeldAttributeModifiers(this, entity);
}

/**
* Called when the {@link LivingEntity} owning this Skill toggles this {@link ManasSkill} type of this instance on.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ public static SkillStorage getSkillsFrom(Entity entity) {
*
* @see InternalSkillPacketActions#sendSkillActivationPacket
*/
public static void skillActivationPacket(int keyNumber) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InternalSkillPacketActions.sendSkillActivationPacket(keyNumber));
public static void skillActivationPacket(ResourceLocation skill, int keyNumber) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InternalSkillPacketActions.sendSkillActivationPacket(skill, keyNumber));
}

/**
Expand All @@ -61,8 +61,8 @@ public static void skillActivationPacket(int keyNumber) {
*
* @see InternalSkillPacketActions#sendSkillReleasePacket
*/
public static void skillReleasePacket(int keyNumber, int heldTicks) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InternalSkillPacketActions.sendSkillReleasePacket(keyNumber, heldTicks));
public static void skillReleasePacket(ResourceLocation skill, int keyNumber, int heldTicks) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InternalSkillPacketActions.sendSkillReleasePacket(skill, keyNumber, heldTicks));
}

/**
Expand All @@ -71,7 +71,7 @@ public static void skillReleasePacket(int keyNumber, int heldTicks) {
*
* @see InternalSkillPacketActions#sendSkillTogglePacket
*/
public static void skillTogglePacket() {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> InternalSkillPacketActions::sendSkillTogglePacket);
public static void skillTogglePacket(ResourceLocation skill) {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InternalSkillPacketActions.sendSkillTogglePacket(skill));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,38 @@
import com.github.manasmods.manascore.api.skills.capability.SkillStorage;
import lombok.Getter;
import net.minecraft.world.entity.LivingEntity;
import org.jetbrains.annotations.Nullable;

import java.util.Optional;

@Getter
public class TickingSkill {
private int duration = 0;
@Getter
private final ManasSkill skill;
public TickingSkill(ManasSkill skill) {
this.skill = skill;
}

public boolean tick(SkillStorage storage, LivingEntity entity) {
Optional<ManasSkillInstance> optional = storage.getSkill(skill);
if (optional.isEmpty()) return false;
public @Nullable ManasSkillInstance getSkillInstance(SkillStorage storage, LivingEntity entity) {
Optional<ManasSkillInstance> optional = storage.getSkill(this.getSkill());
return optional.orElse(null);
}

ManasSkillInstance instance = optional.get();
public boolean tick(SkillStorage storage, LivingEntity entity) {
ManasSkillInstance instance = this.getSkillInstance(storage, entity);
if (instance == null) return false;
if (reachedMaxDuration(instance, entity)) return false;

if (!instance.canInteractSkill(entity)) return false;
if (!instance.canInteractSkill(entity)) {
instance.onRelease(entity, this.getDuration());
return false;
}
return instance.onHeld(entity, this.duration++);
}

public boolean reachedMaxDuration(ManasSkillInstance instance, LivingEntity entity) {
int maxDuration = instance.getMaxHeldTime(entity);
if (maxDuration == -1) return false;
return duration >= maxDuration;
return this.getDuration() >= maxDuration;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,15 @@ public static void applyEntityCrit(final LivingHurtEvent e) {

@SubscribeEvent(priority = EventPriority.HIGH)
public static void modifyCrit(final CriticalHitEvent e) {
float vanillaMultiplier = e.getDamageModifier() / e.getOldDamageModifier();
float critMultiplier = (float) e.getEntity().getAttributeValue(ManasCoreAttributes.CRIT_MULTIPLIER.get());
if (e.isVanillaCritical()) {
e.setDamageModifier(e.getDamageModifier() * (float) e.getEntity().getAttributeValue(ManasCoreAttributes.CRIT_MULTIPLIER.get()));
e.setDamageModifier(vanillaMultiplier * critMultiplier);
return;
}

double critChance = e.getEntity().getAttributeValue(ManasCoreAttributes.CRIT_CHANCE.get()) / 100; // convert to %
float critMultiplier = (float) e.getEntity().getAttributeValue(ManasCoreAttributes.CRIT_MULTIPLIER.get());
CriticalChanceEvent event = new CriticalChanceEvent(e.getEntity(), e.getTarget(), e.getDamageModifier() * critMultiplier, critChance);
CriticalChanceEvent event = new CriticalChanceEvent(e.getEntity(), e.getTarget(), vanillaMultiplier * critMultiplier, critChance);
if (MinecraftForge.EVENT_BUS.post(event)) return;

RandomSource random = e.getEntity().getRandom();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import net.minecraft.world.entity.monster.Creeper;
import net.minecraft.world.entity.monster.Spider;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.ThrownTrident;
import net.minecraft.world.entity.projectile.AbstractArrow;
import net.minecraft.world.item.Items;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.common.MinecraftForge;
Expand All @@ -35,6 +35,10 @@ public boolean canTick(ManasSkillInstance instance, LivingEntity entity) {
return instance.isToggled();
}

public boolean canBeToggled(ManasSkillInstance instance, LivingEntity entity) {
return entity.isShiftKeyDown();
}

public void onToggleOn(ManasSkillInstance instance, LivingEntity entity) {
log.debug("Toggled On");
}
Expand Down Expand Up @@ -104,7 +108,7 @@ public void onTakenDamage(ManasSkillInstance instance, LivingDamageEvent event)
}

public void onProjectileHit(ManasSkillInstance instance, LivingEntity living, ProjectileImpactEvent event) {
if (event.getProjectile() instanceof ThrownTrident) {
if (event.getProjectile() instanceof AbstractArrow) {
log.debug("Dodged");
event.setCanceled(true);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.github.manasmods.manascore.capability.skill.event;

import com.github.manasmods.manascore.api.skills.ManasSkill;
import com.github.manasmods.manascore.api.skills.ManasSkillInstance;
import com.github.manasmods.manascore.api.skills.SkillAPI;
import com.github.manasmods.manascore.api.skills.event.SkillActivationEvent;
import com.github.manasmods.manascore.api.skills.event.SkillReleaseEvent;
import com.github.manasmods.manascore.api.skills.event.SkillToggleEvent;
Expand All @@ -13,72 +11,41 @@
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.common.MinecraftForge;
import org.jetbrains.annotations.ApiStatus;

import java.util.ArrayList;
import java.util.List;

@ApiStatus.Internal
@ApiStatus.AvailableSince("2.0.18.0")
public final class InternalSkillPacketActions {
/**
* This Method filters {@link ManasSkill} that meets the conditions of the {@link SkillActivationEvent} then send packet for them.
* Only executes on client using the dist executor.
*/
public static void sendSkillActivationPacket(int keyNumber) {
public static void sendSkillActivationPacket(ResourceLocation skill, int keyNumber) {
var minecraft = Minecraft.getInstance();
Player player = minecraft.player;
if (player == null) return;
List<ResourceLocation> packetSkills = new ArrayList<>();

for (ManasSkillInstance skillInstance : SkillAPI.getSkillsFrom(player).getLearnedSkills()) {
SkillActivationEvent event = new SkillActivationEvent(skillInstance, player, keyNumber);
if (MinecraftForge.EVENT_BUS.post(event)) continue;
packetSkills.add(skillInstance.getSkillId());
}

if (packetSkills.isEmpty()) return;
ManasCoreNetwork.INSTANCE.sendToServer(new RequestSkillActivationPacket(packetSkills, keyNumber));
ManasCoreNetwork.INSTANCE.sendToServer(new RequestSkillActivationPacket(skill, keyNumber));
}

/**
* This Method filters {@link ManasSkill} that meets the conditions of the {@link SkillReleaseEvent} then send packet for them.
* Only executes on client using the dist executor.
*/
public static void sendSkillReleasePacket(int keyNumber, int heldTicks) {
public static void sendSkillReleasePacket(ResourceLocation skill, int keyNumber, int heldTicks) {
var minecraft = Minecraft.getInstance();
Player player = minecraft.player;
if (player == null) return;
List<ResourceLocation> packetSkills = new ArrayList<>();

for (ManasSkillInstance skillInstance : SkillAPI.getSkillsFrom(player).getLearnedSkills()) {
SkillReleaseEvent event = new SkillReleaseEvent(skillInstance, player, keyNumber, heldTicks);
if (MinecraftForge.EVENT_BUS.post(event)) continue;
packetSkills.add(skillInstance.getSkillId());
}

if (packetSkills.isEmpty()) return;
ManasCoreNetwork.INSTANCE.sendToServer(new RequestSkillReleasePacket(packetSkills, keyNumber, heldTicks));
ManasCoreNetwork.INSTANCE.sendToServer(new RequestSkillReleasePacket(skill, keyNumber, heldTicks));
}

/**
* This Method filters {@link ManasSkill} that meets the conditions of the {@link SkillToggleEvent} then send packet for them.
* Only executes on client using the dist executor.
*/
public static void sendSkillTogglePacket() {
public static void sendSkillTogglePacket(ResourceLocation skill) {
var minecraft = Minecraft.getInstance();
Player player = minecraft.player;
if (player == null) return;
List<ResourceLocation> packetSkills = new ArrayList<>();

for (ManasSkillInstance skillInstance : SkillAPI.getSkillsFrom(player).getLearnedSkills()) {
SkillToggleEvent event = new SkillToggleEvent(skillInstance, player, !skillInstance.isToggled());
if (MinecraftForge.EVENT_BUS.post(event)) continue;
packetSkills.add(skillInstance.getSkillId());
}

if (packetSkills.isEmpty()) return;
ManasCoreNetwork.INSTANCE.sendToServer(new RequestSkillTogglePacket(packetSkills));
ManasCoreNetwork.INSTANCE.sendToServer(new RequestSkillTogglePacket(skill));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@
import com.github.manasmods.manascore.api.skills.event.SkillDamageEvent;
import com.github.manasmods.manascore.api.skills.event.UnlockSkillEvent;
import com.google.common.collect.Multimap;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.AbstractArrow;
import net.minecraft.world.phys.EntityHitResult;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.ProjectileImpactEvent;
Expand Down Expand Up @@ -149,6 +151,10 @@ public static void onProjectileHit(final ProjectileImpactEvent e) {
if (!skillInstance.canInteractSkill(living)) continue;

skillInstance.onProjectileHit(living, e);
if (e.isCanceled() && e.getProjectile() instanceof AbstractArrow arrow) {
if (arrow.piercingIgnoreEntityIds == null) arrow.piercingIgnoreEntityIds = new IntOpenHashSet(10);
arrow.piercingIgnoreEntityIds.add(living.getId());
}
}
skillStorage.syncChanges();
}
Expand Down Expand Up @@ -216,8 +222,25 @@ public static void onLogOut(final PlayerEvent.PlayerLoggedOutEvent e) {
Player player = e.getEntity();
Multimap<UUID, TickingSkill> multimap = TickEventListenerHandler.tickingSkills;
if (multimap.containsKey(player.getUUID())) {
for (TickingSkill tickingSkill : multimap.get(player.getUUID()))
tickingSkill.getSkill().removeHeldAttributeModifiers(player);
for (TickingSkill tickingSkill : multimap.get(player.getUUID())) {
ManasSkillInstance instance = tickingSkill.getSkillInstance(SkillAPI.getSkillsFrom(player), player);
if (instance == null) continue;
instance.removeHeldAttributeModifiers(player);
}
multimap.removeAll(player.getUUID());
}
}

@SubscribeEvent
public static void onChangingDimension(final PlayerEvent.PlayerChangedDimensionEvent e) {
Player player = e.getEntity();
Multimap<UUID, TickingSkill> multimap = TickEventListenerHandler.tickingSkills;
if (multimap.containsKey(player.getUUID())) {
for (TickingSkill tickingSkill : multimap.get(player.getUUID())) {
ManasSkillInstance instance = tickingSkill.getSkillInstance(SkillAPI.getSkillsFrom(player), player);
if (instance == null) continue;
instance.removeHeldAttributeModifiers(player);
}
multimap.removeAll(player.getUUID());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.github.manasmods.manascore.api.client.keybinding.ManasKeybinding;
import com.github.manasmods.manascore.api.skills.SkillAPI;
import lombok.extern.log4j.Log4j2;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
Expand Down Expand Up @@ -32,10 +33,11 @@ public class KeybindingRegistry {
keybindings.add(new ManasKeybinding("manascore.keybinding.test_press", category, () -> log.info("Pressed")));

keybindings.add(new ManasKeybinding("manascore.keybinding.skill", category,
() -> SkillAPI.skillActivationPacket(0),
duration -> SkillAPI.skillReleasePacket(0, (int) (duration / 50))
() -> SkillAPI.skillActivationPacket(new ResourceLocation(ManasCore.MOD_ID, "example_test_skill"), 0),
duration -> SkillAPI.skillReleasePacket(new ResourceLocation(ManasCore.MOD_ID, "example_test_skill"),0, (int) (duration / 50))
));
keybindings.add(new ManasKeybinding("manascore.keybinding.skill_toggle", category, SkillAPI::skillTogglePacket));
keybindings.add(new ManasKeybinding("manascore.keybinding.skill_toggle", category,
() -> SkillAPI.skillTogglePacket(new ResourceLocation(ManasCore.MOD_ID, "example_test_skill"))));
}
}

Expand Down

This file was deleted.

Loading
Loading