FalsehoodMC / Fabrication

A huge collection of vanilla tweaks and small features for both Fabric and Forge.
https://www.curseforge.com/minecraft/mc-mods/fabrication
MIT License
114 stars 22 forks source link

Source Independent Invulnerability Frames doesn't allow different arrows from the same multi-shot to hit the same enemy #660

Closed lumagatto closed 7 months ago

lumagatto commented 7 months ago

In the combat tests you could hit with all 3 multishot arrows. I remember a mod, now discontinued afaik, that did this by making invulnerability frames UUID independent, and source dependent only when UUID didn't make sense (fire, lava, etc).

Idk but i feel like 1 arrow hitting and 2 bouncing back into your face is wrong lol and this option should fix that.

Thanks anyway it's still very useful even if you decide not to change it :)

SFort commented 7 months ago
Sure but as a sepearate feature. Mod you're thinking of is probably NoDamI by ProfHugo. while it removed i-frames for most damage the i-frames it gave ware still purely vanilla. so hugging a cactus / being in fire, (and quite a few modded damage sources like lot's of magic / IE flamethrowers/cables) could make all 3 arrows bounce off. Also with this change things like the Immersive Engineering framethrower, will kill you instantly since each particle is it's own entity, and probably the bow you're using will too. and currently it does use a UUID but it's the attackers UUID not the projectile. So i don't see this change being viable in a vanilla or the usuall modded setting. But i do think it could work in a more tailored map/boss or something simmilar so i don't mind adding it.
lumagatto commented 7 months ago

Ok, i remembered incorrectly NoDamI apparently. Your implementation is then better.

For the separate feature, what would you do, make it use the direct attacker UUID instead of the attacker's? Why do you think it wouldn't be viable in vanilla (smp)? What do you mean by the bow will kill instantly?

SFort commented 7 months ago

make it use the direct attacker UUID instead of the attacker's?

maybe make it use both? i don't recall how zombie attacks function, would need to check.

Why do you think it wouldn't be viable in vanilla (smp)? What do you mean by the bow will kill instantly?

There's no limit to how fast someone can throw damage potions. and i'm pretty sure three arrows hitting can kill.

Although to be fair you will be able to specifiy in the feature which damage types should use the current behaviour and which should filter by direct attacker UUID, so as long as you configure it right i guess it's not a problem?

lumagatto commented 7 months ago

Yes a multishot crossbow would kill a unarmored player if all three hit. Would the same damage to a full diamond player as a power 5 bow. Both a pow 5 bow and a multishot crossbow would kill an unarmored player, the crossbow will have a close to 100% chance of doing so while the bow a 47.5% chance (100% with flame). The bow can do so from far away.

Sorry, my bad, damage potions have a 4 tick delay in my plans (they are also stackable). Still, in vanilla, i think they would be balanced even if you can spam them, since they occupy 1 slot each and deal 2 hearts to a full prot 4 player. Against mobs it would be powerful but expensive. Ultimately i think magic should play a bigger role in pvp. It would just add options to combat, not replace anything.

Thank you for the interest and for planning to make it configurable :)

Off-Topic: If you are interested i have ideated (and partially tested) a rework/rebalance of armor and protection that would largely preserve the current vanilla meta but: - datapacks and mods adding extra armor above 25 points would work and so would total levels of protection above 20; - usefulness of special protection enchantments; - reasonable buff to weaker armors (needed since armor penetration added in 1.9). I'm telling you this because my available time is low and my coding knowledge is lower, and i don't mind someone else doing it, if they want to. I guess i'll make another thread for it in case you are interested.
SFort commented 7 months ago

i'm assuming you mean throwing delay and not damage delay. (in which case dispencers most certanly don't) i could ONLY count projectile UUIDs when there's an actuall attacker, which would fix dispencers. but that also breaks quickly when modded users are in play. i'm not sure about the feature as it's easy to poke holes in, so honestly i'm not sure you'd even end up using it after testing and adding a feature no one would use is very silly.

and sure i'm interested in hearing about balance changes but, uh

time is low

same

also considering how much configuring you're doing you might be interested in fabrications fscript compat. (i just point it out since outside of gh issues it's not really an advertized feature)

it's also how this feature would end up being configurable (since fabrication still dosn't have a config system beyond features.ini)

https://github.com/FalsehoodMC/Fabrication/assets/1879846/5f7bef9d-6135-468a-8003-8c9198b3d517

lumagatto commented 7 months ago

i could ONLY count projectile UUIDs when there's an actuall attacker, which would fix dispencers. but that also breaks quickly when modded users are in play.

Why not use only direct attacker UUID? what purpose does the UUID of the player that actually launched the arrow serve? Question just out of curiosity.

Anyway, ths way to solve this maybe is just to make projectiles, instant effects, etc., not trigger invulnerability frames, just like the combat tests do. And as far as i understand it should be compatible with your source dependent Invulnerability frames. Heck it could even be editable with just a tag.

also considering how much configuring you're doing you might be interested in fabrications fscript compat. (i just point it out since outside of gh issues it's not really an advertized feature)

thank you, I will be checking that out as soon as i can (from mobile rn)

Anyway, here is the armor and protection rebalance: https://www.desmos.com/calculator/2oxtcl62jl I put all that together a couple days ago from other various notes, not sure how legible and comprehensible it is.

SFort commented 7 months ago

Why not use only direct attacker UUID? what purpose does the UUID of the player that actually launched the arrow.

the purpose is making sure there was a player that launched an arrow. dispencers could otherwise do absurd damage. the proposed change assumes that there's a limit on how fast projectiles can be spammed and that's not true in vanilla and especially not in modded.

look just do me a favour download the source code checkout whatever branch you're using (3.0/1.16 .. 3.0/1.20.2) goto source_dependent_iframes/MixinLivingEntity.java#L40 and change the 3 getAttacker calls to getSource. and just test it out a bit. open the root of the source code directory and run ./gradlew build or ./gradlew.bat build on windows. the mod will be in build/libs and after since that will probably be broken with dispencers change source.getSource() == null || to source.getAttacker() == null || source.getSource() == null ||

i doubt i'll add it to the main version (since i think it's too fragile for generic use, maybe you'll prove me wrong idk), happy to help you have a custom version though if you need programming pointers.

lumagatto commented 7 months ago

will do, thanks a lot

lumagatto commented 7 months ago

tried fscript, the thing is great

I'll try testing getSource the whole next week/s while playing, I'll report back to you with any conclusions.

Opinion on the armor and protection rework?

SFort commented 7 months ago

neat glad you like it

I dunno i really like fabrications old_armor tweaks so i honestly don't even think about shifting existing calculations.

lumagatto commented 7 months ago

Fabrication's old_armor is very good, I am currently using it, but it removes one layer of depth to armors, making durability and toughness the only two factors. Armors with the same durability (iron and chainmail) are identical, and you still can't have armors that gives more than 80% damage reduction (with datapacks or mods). Again borrowing from hypixel skyblock, the formula they use is in practice pretty similar to mine (they don't use an exponential IIRC but it is similar)

I was trying to create something that at least fixes vanilla problems and that can be expanded later by the user.

Anyway thats the armor part, the enchantments part is another thing.