Compare commits

...

6 Commits

Author SHA1 Message Date
Johannes Frohnmeyer 5db7c4c867
chore: update to 1.20.5
ci/woodpecker/push/jfmod Pipeline was successful Details
ci/woodpecker/tag/jfmod Pipeline was successful Details
2024-04-25 22:20:18 +02:00
Johannes Frohnmeyer 8ca745196d
chore: update to 1.20.4
ci/woodpecker/push/jfmod Pipeline was successful Details
2023-12-07 20:12:48 +01:00
Johannes Frohnmeyer e722a1cf0c
chore: update to 1.20.2
ci/woodpecker/push/jfmod Pipeline was successful Details
2023-09-22 21:03:17 +02:00
Johannes Frohnmeyer 2c63ac2efe
Update to 1.20
ci/woodpecker/push/jfmod Pipeline was successful Details
ci/woodpecker/tag/jfmod Pipeline was successful Details
2023-06-09 17:44:55 +02:00
Johannes Frohnmeyer f003d6febb
Bump to 1.19.4
ci/woodpecker/push/jfmod Pipeline failed Details
ci/woodpecker/tag/jfmod Pipeline was successful Details
2023-03-14 22:11:32 +01:00
Johannes Frohnmeyer 390a704d5c
Use new config compiler
ci/woodpecker/push/jfmod Pipeline was successful Details
2022-12-29 14:31:08 +01:00
14 changed files with 127 additions and 69 deletions

View File

@ -1,16 +1,40 @@
import io.gitlab.jfronny.scripts.*
plugins {
id("jfmod") version "1.2-SNAPSHOT"
id("io.gitlab.jfronny.libjf.libjf-config-compiler-plugin")
id("jfmod") version "1.6-SNAPSHOT"
}
allprojects { group = "io.gitlab.jfronny" }
base.archivesName = "combit"
jfMod {
minecraftVersion = "1.20.5"
yarn("build.1")
loaderVersion = "0.15.10"
libJfVersion = "3.15.5"
fabricApiVersion = "0.97.6+1.20.5"
modrinth {
projectId = "combit"
requiredDependencies.add("libjf")
optionalDependencies.add("modmenu")
}
curseforge {
projectId = "561742"
requiredDependencies.add("libjf")
optionalDependencies.add("modmenu")
}
}
dependencies {
modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v1:${prop("libjf_version")}")
modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v2")
modImplementation("net.fabricmc.fabric-api:fabric-api-base")
// Dev env
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-config-reflect-v1:${prop("libjf_version")}")
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-config-ui-tiny-v1:${prop("libjf_version")}")
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-devutil:${prop("libjf_version")}")
modLocalRuntime("com.terraformersmc:modmenu:5.0.0-alpha.4")
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-config-ui-tiny")
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-devutil")
modLocalRuntime("com.terraformersmc:modmenu:10.0.0-beta.1")
// for modmenu
modLocalRuntime("net.fabricmc.fabric-api:fabric-resource-loader-v0")
modLocalRuntime("net.fabricmc.fabric-api:fabric-screen-api-v1")
modLocalRuntime("net.fabricmc.fabric-api:fabric-key-binding-api-v1")
}

View File

@ -1,17 +0,0 @@
# https://fabricmc.net/develop/
minecraft_version=1.19.3
yarn_mappings=build.2
loader_version=0.14.11
maven_group=io.gitlab.jfronny
archives_base_name=combit
modrinth_id=combit
modrinth_required_dependencies=libjf
modrinth_optional_dependencies=modmenu, cloth-config
curseforge_id=561742
curseforge_required_dependencies=libjf
curseforge_optional_dependencies=modmenu, cloth-config
fabric_version=0.68.1+1.19.3
libjf_version=3.3.1

View File

@ -1,13 +1,9 @@
pluginManagement {
val libjf_version: String by settings
repositories {
maven("https://maven.fabricmc.net/") // FabricMC
maven("https://maven.frohnmeyer-wds.de/artifacts") // scripts
gradlePluginPortal()
}
plugins {
id("io.gitlab.jfronny.libjf.libjf-config-compiler-plugin") version libjf_version
}
}
rootProject.name = "combit"

View File

@ -2,6 +2,7 @@ package io.gitlab.jfronny.combit.mixin;
import io.gitlab.jfronny.combit.*;
import net.minecraft.client.*;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.*;
import net.minecraft.client.option.*;
import net.minecraft.client.util.math.*;
@ -14,16 +15,16 @@ public class InGameHudMixin {
@Shadow @Final private MinecraftClient client;
private AttackIndicator combit$attackIndicator;
@Inject(at = @At("HEAD"), method = "renderCrosshair(Lnet/minecraft/client/util/math/MatrixStack;)V")
private void renderCrosshair(MatrixStack matrices, CallbackInfo info) {
@Inject(at = @At("HEAD"), method = "renderCrosshair(Lnet/minecraft/client/gui/DrawContext;F)V")
private void renderCrosshair(DrawContext context, float tickDelta, CallbackInfo info) {
if (CombitConfig.cooldownProgressOverride >= 0) {
combit$attackIndicator = this.client.options.getAttackIndicator().getValue();
this.client.options.getAttackIndicator().setValue(AttackIndicator.OFF);
}
}
@Inject(at = @At("RETURN"), method = "renderCrosshair(Lnet/minecraft/client/util/math/MatrixStack;)V")
private void renderCrosshairPost(MatrixStack matrices, CallbackInfo info) {
@Inject(at = @At("RETURN"), method = "renderCrosshair(Lnet/minecraft/client/gui/DrawContext;F)V")
private void renderCrosshairPost(DrawContext context, float tickDelta, CallbackInfo info) {
if (CombitConfig.cooldownProgressOverride >= 0) {
this.client.options.getAttackIndicator().setValue(combit$attackIndicator);
}

View File

@ -1,13 +1,13 @@
package io.gitlab.jfronny.combit;
import io.gitlab.jfronny.combit.events.*;
import net.fabricmc.api.*;
import net.fabricmc.api.ModInitializer;
import net.minecraft.entity.*;
import net.minecraft.entity.player.*;
import net.minecraft.text.*;
import net.minecraft.util.*;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;
import java.util.*;
import java.util.Set;
public class Combit implements ModInitializer {
@Override

View File

@ -1,6 +1,6 @@
package io.gitlab.jfronny.combit;
import io.gitlab.jfronny.libjf.config.api.v1.*;
import io.gitlab.jfronny.libjf.config.api.v2.*;
import net.fabricmc.loader.api.FabricLoader;
import java.util.HashSet;
@ -65,6 +65,7 @@ public class CombitConfig {
damageSourceWhitelist.add("cactus");
damageSourceWhitelist.add("outOfWorld");
damageSourceWhitelist.add("sweetBerryBush");
damageSourceWhitelist.add("dryout");
}
if (entityHealthBlacklist == null) {
entityHealthBlacklist = new HashSet<>();
@ -129,4 +130,8 @@ public class CombitConfig {
@Preset public static void noInvulnerability() {
iFrameInterval = 0;
}
static {
JFC_CombitConfig.ensureInitialized();
}
}

View File

@ -0,0 +1,13 @@
package io.gitlab.jfronny.combit.mixin;
import it.unimi.dsi.fastutil.objects.Reference2ObjectMap;
import net.minecraft.component.ComponentMap;
import net.minecraft.component.DataComponentType;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(ComponentMap.Builder.class)
public interface ComponentMapBuilderAccessor {
@Accessor("components") Reference2ObjectMap<DataComponentType<?>, Object> combit$getComponents();
@Accessor("components") void combit$setComponents(Reference2ObjectMap<DataComponentType<?>, Object> components);
}

View File

@ -3,7 +3,6 @@ package io.gitlab.jfronny.combit.mixin;
import io.gitlab.jfronny.combit.CombitConfig;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.projectile.thrown.EggEntity;
import net.minecraft.entity.projectile.thrown.ThrownItemEntity;
@ -29,7 +28,7 @@ public abstract class EggEntityMixin extends ThrownItemEntity {
e.velocityModified = true;
}
if (CombitConfig.eggDamage > 0) {
e.damage(DamageSource.thrownProjectile(this, this.getOwner()), CombitConfig.eggDamage);
e.damage(getDamageSources().thrown(this, this.getOwner()), CombitConfig.eggDamage);
}
}
}

View File

@ -0,0 +1,12 @@
package io.gitlab.jfronny.combit.mixin;
import net.minecraft.component.ComponentMap;
import net.minecraft.item.Item;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(Item.Settings.class)
public interface ItemSettingsAccessor {
@Accessor("components") ComponentMap.Builder combit$getComponents();
@Accessor("components") void combit$setComponents(ComponentMap.Builder components);
}

View File

@ -10,6 +10,7 @@ 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.registry.entry.RegistryEntry;
import net.minecraft.util.ActionResult;
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;
@ -23,7 +24,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
public abstract class LivingEntityMixin {
@Shadow public abstract float getMaxHealth();
@Shadow public abstract void setHealth(float health);
@Shadow @Nullable public abstract EntityAttributeInstance getAttributeInstance(EntityAttribute attribute);
@Shadow @Nullable public abstract EntityAttributeInstance getAttributeInstance(RegistryEntry<EntityAttribute> attribute);
@Inject(at = @At("TAIL"), method = "applyDamage", cancellable = true)
private void onEntityHurt(final DamageSource source, final float amount, CallbackInfo ci) {

View File

@ -1,48 +1,71 @@
package io.gitlab.jfronny.combit.mixin;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import io.gitlab.jfronny.combit.CombitConfig;
import net.minecraft.block.Block;
import net.minecraft.entity.attribute.EntityAttribute;
import net.minecraft.component.ComponentMap;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.AttributeModifierSlot;
import net.minecraft.component.type.AttributeModifiersComponent;
import net.minecraft.entity.attribute.EntityAttributeModifier;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.item.*;
import net.minecraft.registry.tag.TagKey;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
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;
import java.util.ArrayList;
import java.util.List;
@Mixin(MiningToolItem.class)
public abstract class MiningToolItemMixin extends ToolItem {
@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/registry/tag/TagKey;Lnet/minecraft/item/Item$Settings;)V")
private void modifyAttackDamage(float attackDamage, float attackSpeed, ToolMaterial material, TagKey<Block> effectiveBlocks, Settings settings, CallbackInfo ci) {
@Inject(at = @At("RETURN"), method = "<init>(Lnet/minecraft/item/ToolMaterial;Lnet/minecraft/registry/tag/TagKey;Lnet/minecraft/item/Item$Settings;)V")
private void modifyAttackDamage(ToolMaterial material, TagKey<Block> effectiveBlocks, Settings settings, CallbackInfo ci) {
double factor = ((MiningToolItem)(Object)this) instanceof AxeItem ? CombitConfig.axeAttackDamageFactor : CombitConfig.weaponAttackDamageFactor;
if (factor >= 0) {
this.attackDamage *= factor;
ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE,
new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID,
"Tool modifier",
this.attackDamage,
EntityAttributeModifier.Operation.ADDITION));
this.attributeModifiers.forEach((k, v) -> {
if (!k.getTranslationKey().equals(EntityAttributes.GENERIC_ATTACK_DAMAGE.getTranslationKey())) {
builder.put(k, v);
ItemSettingsAccessor isa = (ItemSettingsAccessor) settings;
ComponentMap.Builder cb = isa.combit$getComponents();
if (cb == null) {
cb = ComponentMap.builder().addAll(DataComponentTypes.DEFAULT_ITEM_COMPONENTS);
isa.combit$setComponents(cb);
}
ComponentMapBuilderAccessor cbi = (ComponentMapBuilderAccessor) cb;
List<AttributeModifiersComponent.Entry> entries = new ArrayList<>();
boolean showInTooltip = false;
AttributeModifiersComponent amcOrig = (AttributeModifiersComponent) cbi.combit$getComponents().get(DataComponentTypes.ATTRIBUTE_MODIFIERS);
if (amcOrig != null) {
entries.addAll(amcOrig.modifiers());
showInTooltip = amcOrig.showInTooltip();
}
AttributeModifiersComponent.Entry damageEntry = null;
for (AttributeModifiersComponent.Entry entry : entries) {
if (entry.attribute().equals(EntityAttributes.GENERIC_ATTACK_DAMAGE)) {
damageEntry = entry;
}
});
this.attributeModifiers = builder.build();
}
double damage = 5;
if (damageEntry != null) {
entries.remove(damageEntry);
damage = damageEntry.modifier().value();
}
damageEntry = new AttributeModifiersComponent.Entry(
EntityAttributes.GENERIC_ATTACK_DAMAGE,
new EntityAttributeModifier(
ATTACK_DAMAGE_MODIFIER_ID,
"Tool modifier",
damage * factor,
EntityAttributeModifier.Operation.ADD_VALUE),
AttributeModifierSlot.MAINHAND);
entries.add(damageEntry);
cb.add(DataComponentTypes.ATTRIBUTE_MODIFIERS, new AttributeModifiersComponent(entries, showInTooltip));
}
}
}

View File

@ -3,7 +3,6 @@ package io.gitlab.jfronny.combit.mixin;
import io.gitlab.jfronny.combit.CombitConfig;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.projectile.thrown.SnowballEntity;
import net.minecraft.entity.projectile.thrown.ThrownItemEntity;
@ -29,7 +28,7 @@ public abstract class SnowballEntityMixin extends ThrownItemEntity {
e.velocityModified = true;
}
if (CombitConfig.snowballDamage > 0) {
e.damage(DamageSource.thrownProjectile(this, this.getOwner()), CombitConfig.snowballDamage);
e.damage(getDamageSources().thrown(this, this.getOwner()), CombitConfig.snowballDamage);
}
}
}

View File

@ -5,9 +5,11 @@
"compatibilityLevel": "JAVA_17",
"mixins": [
"AbstractSkeletonEntityMixin",
"ComponentMapBuilderAccessor",
"EggEntityMixin",
"FishingBobberEntityMixin",
"HostileEntityMixin",
"ItemSettingsAccessor",
"LivingEntityMixin",
"MiningToolItemMixin",
"MobEntityMixin",

View File

@ -16,7 +16,7 @@
"environment": "*",
"entrypoints": {
"main": ["io.gitlab.jfronny.combit.Combit"],
"libjf:config": ["io.gitlab.jfronny.combit.CombitConfig"]
"libjf:config": ["io.gitlab.jfronny.combit.JFC_CombitConfig"]
},
"mixins": [
"combit.mixins.json",