Allow multiplying entity health by factor
This commit is contained in:
parent
fa18139a82
commit
c9ec990770
|
@ -8,4 +8,4 @@ maven_group=io.gitlab.jfronny
|
|||
archives_base_name=combit
|
||||
|
||||
fabric_version=0.45.0+1.18
|
||||
jfapi_version=2.2.0
|
||||
jfapi_version=2.2.1
|
|
@ -64,10 +64,13 @@ public class Combit implements ModInitializer {
|
|||
if (player.getEntityWorld().isClient)
|
||||
return ActionResult.PASS;
|
||||
|
||||
if (CombitConfig.debug)
|
||||
if (CombitConfig.debug) {
|
||||
player.sendMessage(new LiteralText(
|
||||
String.format("Entity attacked: %s", EntityType.getId(target.getType()))
|
||||
target instanceof LivingEntity le
|
||||
? String.format("LivingEntity attacked: %s (%s/%s)", EntityType.getId(target.getType()), le.getHealth(), le.getMaxHealth())
|
||||
: String.format("Entity attacked: %s", EntityType.getId(target.getType()))
|
||||
), false);
|
||||
}
|
||||
|
||||
float str = player.getAttackCooldownProgress(0);
|
||||
if (str <= CombitConfig.attackCancelThreshold)
|
||||
|
@ -79,11 +82,10 @@ public class Combit implements ModInitializer {
|
|||
});
|
||||
}
|
||||
|
||||
private String getId(Entity entity) {
|
||||
public static String getId(Entity entity) {
|
||||
return EntityType.getId(entity.getType()).toString();
|
||||
}
|
||||
|
||||
private boolean idMatches(String entityId, Set<String> matches) {
|
||||
public static boolean idMatches(String entityId, Set<String> matches) {
|
||||
for (String id : matches) {
|
||||
int starIndex = id.indexOf('*');
|
||||
if (starIndex != -1) {
|
||||
|
|
|
@ -16,10 +16,14 @@ public class CombitConfig implements JfConfig {
|
|||
@Entry public static HashSet<String> targetEntityWhitelist = null;
|
||||
@Entry public static Boolean excludeAllMobs = false;
|
||||
@Entry public static Boolean excludePlayers = false;
|
||||
// Fluff
|
||||
// Health
|
||||
@Entry public static Double entityHealthFactor = 1.5;
|
||||
@Entry public static HashSet<String> entityHealthBlacklist = null;
|
||||
// Weapons
|
||||
@Entry public static Double cooldownProgressOverride = 0.8;
|
||||
@Entry public static Double cooldownProgressPerTickOverride = Double.MIN_VALUE;
|
||||
@Entry public static Double weaponAttackDamageFactor = 0.6;
|
||||
@Entry public static Double axeAttackDamageFactor = 0.5;
|
||||
// Debug
|
||||
@Entry public static Boolean debug = FabricLoader.getInstance().isDevelopmentEnvironment();
|
||||
}
|
||||
|
|
|
@ -33,6 +33,11 @@ public class CombitConfigValidator implements UltraEarlyInit {
|
|||
CombitConfig.damageSourceWhitelist.add(DamageSource.OUT_OF_WORLD.getName());
|
||||
CombitConfig.damageSourceWhitelist.add(DamageSource.SWEET_BERRY_BUSH.getName());
|
||||
}
|
||||
if (CombitConfig.entityHealthBlacklist == null) {
|
||||
changed = true;
|
||||
CombitConfig.entityHealthBlacklist = new HashSet<>();
|
||||
CombitConfig.entityHealthBlacklist.add("minecraft:player");
|
||||
}
|
||||
if (changed) {
|
||||
ConfigHolder.getInstance().getRegistered().get("combit").write();
|
||||
}
|
||||
|
|
|
@ -1,17 +1,30 @@
|
|||
package io.gitlab.jfronny.combit.mixin;
|
||||
|
||||
import io.gitlab.jfronny.combit.Combit;
|
||||
import io.gitlab.jfronny.combit.CombitConfig;
|
||||
import io.gitlab.jfronny.combit.events.EntityHurtEvent;
|
||||
import io.gitlab.jfronny.combit.events.EntityKnockbackEvent;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.attribute.EntityAttribute;
|
||||
import net.minecraft.entity.attribute.EntityAttributeInstance;
|
||||
import net.minecraft.entity.attribute.EntityAttributes;
|
||||
import net.minecraft.entity.damage.DamageSource;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.world.World;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(LivingEntity.class)
|
||||
public class LivingEntityMixin {
|
||||
public abstract class LivingEntityMixin {
|
||||
@Shadow public abstract float getMaxHealth();
|
||||
@Shadow public abstract void setHealth(float health);
|
||||
@Shadow @Nullable public abstract EntityAttributeInstance getAttributeInstance(EntityAttribute attribute);
|
||||
|
||||
@Inject(at = @At("TAIL"), method = "applyDamage", cancellable = true)
|
||||
private void onEntityHurt(final DamageSource source, final float amount, CallbackInfo ci) {
|
||||
ActionResult result = EntityHurtEvent.EVENT.invoker().hurtEntity((LivingEntity) (Object) this, source, amount);
|
||||
|
@ -27,4 +40,14 @@ public class LivingEntityMixin {
|
|||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(at = @At("RETURN"), method = "<init>(Lnet/minecraft/entity/EntityType;Lnet/minecraft/world/World;)V")
|
||||
private void injectMaxHealth(EntityType<?> entityType, World world, CallbackInfo ci) {
|
||||
if (!Combit.idMatches(EntityType.getId(entityType).toString(), CombitConfig.entityHealthBlacklist)) {
|
||||
EntityAttributeInstance att = getAttributeInstance(EntityAttributes.GENERIC_MAX_HEALTH);
|
||||
att.setBaseValue(att.getBaseValue() * CombitConfig.entityHealthFactor);
|
||||
setHealth(getMaxHealth());
|
||||
}
|
||||
else System.out.println("Skipping " + EntityType.getId(entityType).toString());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,18 +18,15 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||
|
||||
@Mixin(MiningToolItem.class)
|
||||
public abstract class MiningToolItemMixin extends ToolItem {
|
||||
@Mutable
|
||||
@Shadow @Final private Multimap<EntityAttribute, EntityAttributeModifier> attributeModifiers;
|
||||
|
||||
@Mutable
|
||||
@Shadow @Final private float attackDamage;
|
||||
@Shadow @Final @Mutable private Multimap<EntityAttribute, EntityAttributeModifier> attributeModifiers;
|
||||
@Shadow @Final @Mutable private float attackDamage;
|
||||
|
||||
public MiningToolItemMixin(ToolMaterial material, Settings settings) {
|
||||
super(material, settings);
|
||||
}
|
||||
|
||||
@Inject(at = @At("RETURN"), method = "<init>(FFLnet/minecraft/item/ToolMaterial;Lnet/minecraft/tag/Tag;Lnet/minecraft/item/Item$Settings;)V")
|
||||
private void modifyAttackDamage(float attackDamage, float attackSpeed, ToolMaterial material, Tag effectiveBlocks, Settings settings, CallbackInfo ci) {
|
||||
private void modifyAttackDamage(float attackDamage, float attackSpeed, ToolMaterial material, Tag<?> effectiveBlocks, Settings settings, CallbackInfo ci) {
|
||||
double factor = ((MiningToolItem)(Object)this) instanceof AxeItem ? CombitConfig.axeAttackDamageFactor : CombitConfig.weaponAttackDamageFactor;
|
||||
if (factor >= 0) {
|
||||
this.attackDamage *= factor;
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 119 KiB |
|
@ -18,6 +18,11 @@
|
|||
"combit.jfconfig.excludePlayers": "Exclude Players",
|
||||
"combit.jfconfig.excludePlayers.tooltip": "Still apply I-Frames to players",
|
||||
|
||||
"combit.jfconfig.entityHealthFactor": "Entity Health Factor",
|
||||
"combit.jfconfig.entityHealthFactor.tooltip": "Factor to apply to the maximum health of entities",
|
||||
"combit.jfconfig.entityHealthBlacklist": "Entity Health Blacklist",
|
||||
"combit.jfconfig.entityHealthBlacklist.tooltip": "Entities which should retain their original health (configure in JSON)",
|
||||
|
||||
"combit.jfconfig.cooldownProgressOverride": "Cooldown Progress Override",
|
||||
"combit.jfconfig.cooldownProgressOverride.tooltip": "Always set the cooldown of items to this value (negative to disable override)",
|
||||
"combit.jfconfig.cooldownProgressPerTickOverride": "Cooldown Progress/Tick Override",
|
||||
|
@ -26,6 +31,7 @@
|
|||
"combit.jfconfig.weaponAttackDamageFactor.tooltip": "Factor to multiply to the attack damage of weapons except axes",
|
||||
"combit.jfconfig.axeAttackDamageFactor": "Axe Attack Damage Factor",
|
||||
"combit.jfconfig.axeAttackDamageFactor.tooltip": "Factor to multiply to the attack damage of axes",
|
||||
|
||||
"combit.jfconfig.debug": "Debug",
|
||||
"combit.jfconfig.debug.tooltip": "Enable Debug Logging"
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
"required": true,
|
||||
"minVersion": "0.8",
|
||||
"package": "io.gitlab.jfronny.combit.mixin",
|
||||
"compatibilityLevel": "JAVA_8",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"mixins": [
|
||||
"LivingEntityMixin",
|
||||
"MiningToolItemMixin",
|
||||
|
|
Loading…
Reference in New Issue