Skip to content

Commit

Permalink
Starcaller and more nerf configs
Browse files Browse the repository at this point in the history
  • Loading branch information
Partonetrain committed Aug 24, 2024
1 parent ca9c557 commit 808c3ac
Show file tree
Hide file tree
Showing 25 changed files with 198 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
import com.github.crimsondawn45.fabricshieldlib.lib.event.ShieldSetModelCallback;
import info.partonetrain.botaniacombat.item.GaiaGreatswordItem;
import info.partonetrain.botaniacombat.item.TerrasteelWeaponItem;
import info.partonetrain.botaniacombat.network.StarcallerAttackHitHandler;
import info.partonetrain.botaniacombat.registry.BotaniaCombatShieldItems;
import info.partonetrain.botaniacombat.render.entity.BotaniaCombatEntityRenderers;
import net.bettercombat.api.AttackHand;
import net.bettercombat.api.client.BetterCombatClientEvents;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
Expand All @@ -23,6 +25,7 @@
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.InteractionResult;
import vazkii.botania.common.item.equipment.tool.StarcallerItem;
import vazkii.botania.common.item.equipment.tool.terrasteel.TerraBladeItem;

import static com.github.crimsondawn45.fabricshieldlib.initializers.FabricShieldLibClient.renderBanner;
Expand All @@ -41,7 +44,8 @@ public void onInitializeClient() {

if (BotaniaCombat.BETTER_COMBAT_INSTALLED) {
BotaniaCombat.LOGGER.info("BetterCombat found, running client code");
BetterCombatClientEvents.ATTACK_START.register(this::checkSwing);
BetterCombatClientEvents.ATTACK_START.register(this::checkBetterCombatSwing);
BetterCombatClientEvents.ATTACK_HIT.register(new StarcallerAttackHitHandler());
}

if (BotaniaCombat.FABRIC_SHIELD_LIB_INSTALLED) {
Expand All @@ -66,12 +70,14 @@ public void onInitializeClient() {
}
}

public void checkSwing(LocalPlayer clientPlayerEntity, AttackHand attackHand) {
public void checkBetterCombatSwing(LocalPlayer clientPlayerEntity, AttackHand attackHand) {
if (attackHand.itemStack().getItem() instanceof TerrasteelWeaponItem) {
TerrasteelWeaponItem.leftClick(attackHand.itemStack());
}else if (attackHand.itemStack().getItem() instanceof GaiaGreatswordItem) {
}
else if (attackHand.itemStack().getItem() instanceof GaiaGreatswordItem) {
GaiaGreatswordItem.leftClick(attackHand.itemStack());
} else if (attackHand.itemStack().getItem() instanceof TerraBladeItem) {
}
else if (attackHand.itemStack().getItem() instanceof TerraBladeItem) {
TerraBladeItem.leftClick(attackHand.itemStack()); //the botania weapon
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package info.partonetrain.botaniacombat.network;

import net.bettercombat.api.AttackHand;
import net.bettercombat.api.client.BetterCombatClientEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;
import vazkii.botania.common.item.equipment.tool.StarcallerItem;

import java.util.List;

public class StarcallerAttackHitHandler implements BetterCombatClientEvents.PlayerAttackHit {
@Override
public void onPlayerAttackStart(LocalPlayer player, AttackHand attackHand, List<Entity> list, @Nullable Entity entity) {
ItemStack stack = attackHand.isOffHand() ? player.getOffhandItem() : player.getMainHandItem();
if (stack.isEmpty()) {
return;
}
Item item = stack.getItem();
if (item instanceof StarcallerItem) {
ClientPlayNetworking.send(new StarcallerHitPacket(attackHand.isOffHand()));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@
import info.partonetrain.botaniacombat.item.GaiaGreatswordItem;
import info.partonetrain.botaniacombat.item.TerrasteelWeaponItem;
import info.partonetrain.botaniacombat.item.shield.ElementiumBannerShieldItem;
import info.partonetrain.botaniacombat.network.StarcallerHitPacket;
import info.partonetrain.botaniacombat.registry.*;
import me.shedaniel.autoconfig.AutoConfig;
import me.shedaniel.autoconfig.serializer.JanksonConfigSerializer;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.event.player.AttackEntityCallback;
import net.fabricmc.fabric.api.networking.v1.PacketType;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.resources.ResourceLocation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -24,11 +27,14 @@ public class BotaniaCombat implements ModInitializer {
public static final int MANA_PER_DAMAGE = 60;
public static final int MANA_PER_DAMAGE_TERRA = 100;

public static final ResourceLocation STARCALLER_PACKET_ID = new ResourceLocation(MOD_ID, "starcaller");
public static final PacketType<StarcallerHitPacket> STARCALLER_HIT_PACKET_PACKET_TYPE = PacketType.create(STARCALLER_PACKET_ID, StarcallerHitPacket::new);

@Override
public void onInitialize() {
AutoConfig.register(BotaniaCombatConfig.class, JanksonConfigSerializer::new);
BotaniaCombatItems.init();
ConfiguredValues.init(); //prevents loading issues; ensures autoconfig is registered before values are used
BotaniaNerfConfiguredValues.init(); //prevents loading issues; ensures autoconfig is registered before values are used

AttackEntityCallback.EVENT.register(TerrasteelWeaponItem::attackEntity); //fabric events for if BetterCombat is not installed
AttackEntityCallback.EVENT.register(GaiaGreatswordItem::attackEntity);
Expand All @@ -45,6 +51,8 @@ public void onInitialize() {
BotaniaCombatBlockEntities.init();

PsiContributorColors.get();

BotaniaCombatNetworking.init();
LOGGER.info("BotaniaCombat initialized");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,14 @@ public static class RangedItemConfig{
@ConfigEntry.Gui.CollapsibleObject
public BotaniaNerfsConfig botaniaNerfsConfig = new BotaniaNerfsConfig();
public static class BotaniaNerfsConfig{
@Comment("Terrasteel Mana Burst damage")
@Comment("Terrasteel weapon projectile damage")
public float terraBladeDamage = 8;
@Comment("Thorn Chakram damage")
@Comment("Chakram damage, poison/fire damage is unchanged")
public float chakramDamage = 12;
@Comment("Starcaller projectile")
public float fallingStarNormalDamage = 5;
@Comment("Starcaller projectile, 25% chance of using this instead of normal damage")
public float fallingStarHighDamage = 10;
@Comment("Missile from Unstable Reservoir Rod (does not effect Gaia Gaurdian)")
public float missileDamage = 7;
@Comment("Damaging Lens damage, recommended to lower if RWAPI is installed")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
if(Arrays.asList(packageTree).contains("nerf")){
return true;
}
if (Arrays.asList(packageTree).contains("bettercombat")) {
return BotaniaCombat.BETTER_COMBAT_INSTALLED;
}
if (Arrays.asList(packageTree).contains("ranged")) {
return BotaniaCombat.RANGED_WEAPON_API_INSTALLED;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import me.shedaniel.autoconfig.AutoConfig;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;

public class ConfiguredValues {
public class BotaniaNerfConfiguredValues { //have default values loaded so mixins don't classload config
public static float terraBladeDamage = 7;
public static float chakramDamage = 12;
public static float fallingStarNormalDamage = 5;
public static float fallingStarHighDamage = 10;
public static float dmgLensDamage = 8;
public static float odinHealthMod = 20f;
public static AttributeModifier.Operation odinHealthOperation = AttributeModifier.Operation.ADDITION;
Expand All @@ -14,6 +16,8 @@ public class ConfiguredValues {
public static void init(){
terraBladeDamage = AutoConfig.getConfigHolder(BotaniaCombatConfig.class).getConfig().botaniaNerfsConfig.terraBladeDamage;
chakramDamage = AutoConfig.getConfigHolder(BotaniaCombatConfig.class).getConfig().botaniaNerfsConfig.chakramDamage;
fallingStarNormalDamage = AutoConfig.getConfigHolder(BotaniaCombatConfig.class).getConfig().botaniaNerfsConfig.fallingStarNormalDamage;
fallingStarHighDamage = AutoConfig.getConfigHolder(BotaniaCombatConfig.class).getConfig().botaniaNerfsConfig.fallingStarHighDamage;
dmgLensDamage = AutoConfig.getConfigHolder(BotaniaCombatConfig.class).getConfig().botaniaNerfsConfig.dmgLensDamage;
odinHealthMod = AutoConfig.getConfigHolder(BotaniaCombatConfig.class).getConfig().botaniaNerfsConfig.odinHealthMod;
odinHealthOperation = AutoConfig.getConfigHolder(BotaniaCombatConfig.class).getConfig().botaniaNerfsConfig.odinHealthOperation;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package info.partonetrain.botaniacombat;

import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

public interface IStarcaller {
void botaniacombat_summonStarBetterCombat(ItemStack stack, Level level, Player player);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package info.partonetrain.botaniacombat.mixin;
package info.partonetrain.botaniacombat.mixin.bettercombat;

import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
Expand All @@ -22,14 +22,10 @@ public ElementiumAxeItemMixin(Properties properties) {
@Override
public Multimap<Attribute, AttributeModifier> getDefaultAttributeModifiers(EquipmentSlot slot) {
Multimap<Attribute, AttributeModifier> ret = super.getDefaultAttributeModifiers(slot);

if (BotaniaCombat.BETTER_COMBAT_INSTALLED) {
if (slot == EquipmentSlot.MAINHAND || slot == EquipmentSlot.OFFHAND) {
ret = HashMultimap.create(ret);
ret.put(PixieHandler.PIXIE_SPAWN_CHANCE, PixieHandler.makeModifier(slot, "Axe modifier", 0.05));
}
if (slot == EquipmentSlot.MAINHAND || slot == EquipmentSlot.OFFHAND) {
ret = HashMultimap.create(ret);
ret.put(PixieHandler.PIXIE_SPAWN_CHANCE, PixieHandler.makeModifier(slot, "Axe modifier", 0.05));
}

return ret;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package info.partonetrain.botaniacombat.mixin;
package info.partonetrain.botaniacombat.mixin.bettercombat;

import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
Expand All @@ -23,7 +23,7 @@ public class ElementiumSwordItemMixin {
locals = LocalCapture.CAPTURE_FAILHARD
)
private void botaniacombat$addOffhandAttributeToElementiumSword(@NotNull EquipmentSlot slot, CallbackInfoReturnable<@NotNull Multimap<Attribute, AttributeModifier>> cir, Multimap<Attribute, AttributeModifier> ret) {
if (BotaniaCombat.BETTER_COMBAT_INSTALLED && slot == EquipmentSlot.OFFHAND) {
if (slot == EquipmentSlot.OFFHAND) {
ret = HashMultimap.create(ret);
ret.put(PixieHandler.PIXIE_SPAWN_CHANCE, PixieHandler.makeModifier(slot, "Sword modifier", 0.05));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package info.partonetrain.botaniacombat.mixin.bettercombat;

import info.partonetrain.botaniacombat.IStarcaller;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import vazkii.botania.common.helper.ItemNBTHelper;
import vazkii.botania.common.item.equipment.tool.StarcallerItem;

@Mixin(StarcallerItem.class)
public class StarcallerItemMixin implements IStarcaller { //StarcallerItem will implement IStarcaller
@Shadow(remap = false) //summonFallingStar is private for some reason
private void summonFallingStar(ItemStack stack, Level world, Player player) {}
@Override
public void botaniacombat_summonStarBetterCombat(ItemStack stack, Level level, Player player){
long timeSinceLast = level.getGameTime() - ItemNBTHelper.getLong(stack, "lastTriggerTime", level.getGameTime());
if (timeSinceLast > 12L && !level.isClientSide()) { //12L = StarcallerItem.INTERVAL
ItemNBTHelper.setLong(stack, "lastTriggerTime", level.getGameTime());
this.summonFallingStar(stack, level, player);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package info.partonetrain.botaniacombat.mixin;
package info.partonetrain.botaniacombat.mixin.bettercombat;

import com.llamalad7.mixinextras.sugar.Local;
import info.partonetrain.botaniacombat.BotaniaCombat;
import info.partonetrain.botaniacombat.PsiContributorColors;
import net.minecraft.sounds.SoundSource;
Expand All @@ -22,26 +23,23 @@ public class TerraBladeItemMixin {
@Inject(
method = "trySpawnBurst(Lnet/minecraft/world/entity/player/Player;F)V",
at = @At("HEAD"),
locals = LocalCapture.CAPTURE_FAILHARD,
cancellable = true
)
private static void botaniacombat$addOffhandBurst(Player player, float attackStrength, CallbackInfo ci) {
if (BotaniaCombat.BETTER_COMBAT_INSTALLED) {
if (!player.isSpectator()
&& !player.getOffhandItem().isEmpty()
&& player.getOffhandItem().is(BotaniaItems.terraSword)
&& attackStrength == 1) {
ManaBurstEntity burst = TerraBladeItem.getBurst(player, player.getOffhandItem());
player.level().addFreshEntity(burst);
player.getOffhandItem().hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.OFF_HAND));
player.level().playSound(null, player.getX(), player.getY(), player.getZ(), BotaniaSounds.terraBlade, SoundSource.PLAYERS, 1F, 1F);
ci.cancel(); //cancel the rest of the method so it doesn't check the main hand if there was an offhand burst.
}
if (!player.isSpectator()
&& !player.getOffhandItem().isEmpty()
&& player.getOffhandItem().is(BotaniaItems.terraSword)
&& attackStrength == 1) {
ManaBurstEntity burst = TerraBladeItem.getBurst(player, player.getOffhandItem());
player.level().addFreshEntity(burst);
player.getOffhandItem().hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.OFF_HAND));
player.level().playSound(null, player.getX(), player.getY(), player.getZ(), BotaniaSounds.terraBlade, SoundSource.PLAYERS, 1F, 1F);
ci.cancel(); //cancel the rest of the method so it doesn't check the main hand if there was an offhand burst.
}
}

@Inject(method = "getBurst", at = @At("TAIL"), locals = LocalCapture.CAPTURE_FAILHARD)
private static void botaniacombat$makeManaBeamPatronColors(Player player, ItemStack stack, CallbackInfoReturnable<ManaBurstEntity> cir, ManaBurstEntity burst) {
@Inject(method = "getBurst", at = @At("TAIL"))
private static void botaniacombat$makeManaBeamPatronColors(Player player, ItemStack stack, CallbackInfoReturnable<ManaBurstEntity> cir, @Local ManaBurstEntity burst) {
if (PsiContributorColors.isContributor(player.getName().getString().toLowerCase())) {
int[] colors = PsiContributorColors.getColors(player.getName().getString().toLowerCase());
int random = player.level().getRandom().nextInt(colors.length);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package info.partonetrain.botaniacombat.mixin.nerf;

import info.partonetrain.botaniacombat.ConfiguredValues;
import info.partonetrain.botaniacombat.BotaniaNerfConfiguredValues;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
Expand All @@ -10,6 +10,6 @@
public class BabylonWeaponEntityMixin {
@ModifyArg(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;hurt(Lnet/minecraft/world/damagesource/DamageSource;F)Z"))
public float botanaicombat_modifyBabylonWeaponDamage(float value){
return ConfiguredValues.babylonDamage;
return BotaniaNerfConfiguredValues.babylonDamage;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.llamalad7.mixinextras.sugar.Local;
import info.partonetrain.botaniacombat.BotaniaCombat;
import info.partonetrain.botaniacombat.ConfiguredValues;
import info.partonetrain.botaniacombat.BotaniaNerfConfiguredValues;
import net.fabric_extras.ranged_weapon.api.EntityAttributes_RangedWeapon;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.ThrowableProjectile;
Expand All @@ -20,7 +20,7 @@ public float botanaicombat_modifyDamageLensDamage(float value, @Local ThrowableP
damage = (float) player.getAttributeValue(EntityAttributes_RangedWeapon.DAMAGE.attribute); //will get value from held blaster
}
else{
damage = ConfiguredValues.dmgLensDamage;
damage = BotaniaNerfConfiguredValues.dmgLensDamage;
}

return damage;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package info.partonetrain.botaniacombat.mixin.nerf;

import info.partonetrain.botaniacombat.BotaniaNerfConfiguredValues;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import vazkii.botania.common.entity.FallingStarEntity;

@Mixin(FallingStarEntity.class)
public class FallingStarEntityMixin {
@ModifyArg(method = "onHitEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;hurt(Lnet/minecraft/world/damagesource/DamageSource;F)Z"), index = 1)
public float botanaicombat_modifyFallingStarDamage(float amount){
return Math.random() < 0.25 ? BotaniaNerfConfiguredValues.fallingStarHighDamage : BotaniaNerfConfiguredValues.fallingStarNormalDamage;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package info.partonetrain.botaniacombat.mixin.nerf;

import com.llamalad7.mixinextras.sugar.Local;
import info.partonetrain.botaniacombat.ConfiguredValues;
import info.partonetrain.botaniacombat.BotaniaNerfConfiguredValues;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
Expand All @@ -15,8 +15,7 @@ public float botanaicombat_modifyMagicMissleDamage(float amount, @Local boolean
return 12;
}
else{
return ConfiguredValues.missileDamage;
return BotaniaNerfConfiguredValues.missileDamage;
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import info.partonetrain.botaniacombat.ConfiguredValues;
import info.partonetrain.botaniacombat.BotaniaNerfConfiguredValues;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.entity.ai.attributes.Attributes;
Expand All @@ -21,7 +21,7 @@ public class RingOfOdinItemMixin {
public void botaniacombat_nerfAttributeModifiers(ItemStack stack, CallbackInfoReturnable<Multimap<Attribute, AttributeModifier>> cir){
Multimap<Attribute, AttributeModifier> attributes = HashMultimap.create();
attributes.put(Attributes.MAX_HEALTH,
new AttributeModifier(getBaubleUUID(stack), "Odin Ring", ConfiguredValues.odinHealthMod, ConfiguredValues.odinHealthOperation));
new AttributeModifier(getBaubleUUID(stack), "Odin Ring", BotaniaNerfConfiguredValues.odinHealthMod, BotaniaNerfConfiguredValues.odinHealthOperation));
cir.setReturnValue(attributes);
cir.cancel();
}
Expand Down
Loading

0 comments on commit 808c3ac

Please sign in to comment.