Skip to content

Commit 910137a

Browse files
committed
Merge branch '1.19.2' into 1.18.2
2 parents f2bae7f + f94b0aa commit 910137a

File tree

10 files changed

+48
-7
lines changed

10 files changed

+48
-7
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# 1.5.4
2+
- Fix attacking hostile mounts/vehicles (Thanks to Emily Darrow)
3+
- Fix cleaving for decoration items (such as Item Frames)
4+
- (Fabric) Figura `breaks` flag lifted
5+
16
# 1.5.3
27
- Fix offhand attack attribute race condition causing random crashes #174
38
- Weapon collision detection no longer ignores `Entity.getTargetingMargin()`

common/src/main/java/net/bettercombat/api/animation/FirstPersonAnimation.java

+8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
package net.bettercombat.api.animation;
22

3+
import dev.kosmx.playerAnim.api.layered.ModifierLayer;
4+
import net.bettercombat.client.animation.FirstPersonAnimator;
35
import net.bettercombat.client.animation.FirstPersonRenderHelper;
6+
import net.minecraft.client.network.AbstractClientPlayerEntity;
47

58
public class FirstPersonAnimation {
9+
// Adding the given layer will make it visible in first person while it is actively playing
10+
public static void addLayer(AbstractClientPlayerEntity player, ModifierLayer layer) {
11+
((FirstPersonAnimator)player).addLayer(layer);
12+
}
13+
614
public static boolean isRenderingAttackAnimationInFirstPerson() {
715
return FirstPersonRenderHelper.isRenderingFirstPersonPlayerModel;
816
}

common/src/main/java/net/bettercombat/api/animation/FirstPersonAnimator.java common/src/main/java/net/bettercombat/client/animation/FirstPersonAnimator.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.bettercombat.api.animation;
1+
package net.bettercombat.client.animation;
22

33
import dev.kosmx.playerAnim.api.layered.ModifierLayer;
44

common/src/main/java/net/bettercombat/client/collision/TargetFinder.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public static List<Entity> getInitialTargets(PlayerEntity player, Entity cursorT
7373
var result = entity != player
7474
&& entity != cursorTarget
7575
&& entity.isAttackable()
76-
&& (BetterCombat.config.allow_attacking_mount || !entity.equals(player.getVehicle()))
76+
&& (!entity.equals(player.getVehicle()) || TargetHelper.isAttackableMount(entity))
7777
&& TargetHelper.getRelation(player, entity) == TargetHelper.Relation.HOSTILE;
7878
return result;
7979
})
@@ -84,6 +84,7 @@ public static List<Entity> getInitialTargets(PlayerEntity player, Entity cursorT
8484
return entities;
8585
}
8686

87+
8788
public interface Filter {
8889
List<Entity> filter(List<Entity> entities);
8990
}

common/src/main/java/net/bettercombat/config/ServerConfig.java

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ public class ServerConfig implements ConfigData {
1919
public boolean allow_fast_attacks = true;
2020
@Comment("Allows client-side target search and server-side attack request execution against currently mounted entity of the player")
2121
public boolean allow_attacking_mount = false;
22+
@Comment("""
23+
Blacklist for entities that are acting as vehicle but should not be treated as protected mounts.
24+
Classical example is an alexsmobs:crocodile attempting a death spin.
25+
(Note all hostile mobs hittable by default, this config is to fix faulty mobs)""")
26+
public String[] hostile_player_vehicles = {"alexsmobs:crocodile"};
2227
@Comment("Allows vanilla sweeping mechanic to work and Sweeping Edge enchantment")
2328
public boolean allow_sweeping = true;
2429
@Comment("Allows client-side target search to ignore obstacles. WARNING! Setting this to `false` significantly increases the load on clients.")

common/src/main/java/net/bettercombat/logic/TargetHelper.java

+21
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
import net.bettercombat.BetterCombat;
44
import net.minecraft.entity.Entity;
55
import net.minecraft.entity.Tameable;
6+
import net.minecraft.entity.decoration.AbstractDecorationEntity;
67
import net.minecraft.entity.mob.HostileEntity;
78
import net.minecraft.entity.mob.MobEntity;
89
import net.minecraft.entity.passive.PassiveEntity;
910
import net.minecraft.entity.passive.VillagerEntity;
1011
import net.minecraft.entity.player.PlayerEntity;
1112

13+
import java.util.Arrays;
14+
1215
public class TargetHelper {
1316
public enum Relation {
1417
FRIENDLY, NEUTRAL, HOSTILE;
@@ -48,9 +51,27 @@ public static Relation getRelation(PlayerEntity attacker, Entity target) {
4851
if (target instanceof HostileEntity) {
4952
return Relation.coalesce(config.player_relation_to_hostiles, Relation.HOSTILE);
5053
}
54+
if (target instanceof AbstractDecorationEntity) {
55+
return Relation.NEUTRAL;
56+
}
5157
return Relation.coalesce(config.player_relation_to_other, Relation.HOSTILE);
5258
} else {
5359
return attacker.isTeammate(target) ? Relation.FRIENDLY : Relation.HOSTILE;
5460
}
5561
}
62+
63+
public static boolean isAttackableMount(Entity entity) {
64+
if (entity instanceof HostileEntity || isEntityHostileVehicle(entity.getEntityName())) {
65+
return true;
66+
}
67+
return BetterCombat.config.allow_attacking_mount;
68+
}
69+
70+
public static boolean isEntityHostileVehicle(String entityName) {
71+
// An entity is a hostile vehicle via blacklist specifically
72+
var config = BetterCombat.config;
73+
return config.hostile_player_vehicles != null
74+
&& config.hostile_player_vehicles.length > 0
75+
&& Arrays.asList(config.hostile_player_vehicles).contains(entityName);
76+
}
5677
}

common/src/main/java/net/bettercombat/mixin/client/AbstractClientPlayerEntityMixin.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import dev.kosmx.playerAnim.impl.IAnimatedPlayer;
1212
import net.bettercombat.BetterCombat;
1313
import net.bettercombat.api.animation.FirstPersonAnimation;
14-
import net.bettercombat.api.animation.FirstPersonAnimator;
14+
import net.bettercombat.client.animation.FirstPersonAnimator;
1515
import net.bettercombat.client.AnimationRegistry;
1616
import net.bettercombat.client.PlayerAttackAnimatable;
1717
import net.bettercombat.client.animation.*;

common/src/main/java/net/bettercombat/network/ServerNetwork.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.bettercombat.Platform;
99
import net.bettercombat.logic.PlayerAttackHelper;
1010
import net.bettercombat.logic.PlayerAttackProperties;
11+
import net.bettercombat.logic.TargetHelper;
1112
import net.bettercombat.logic.WeaponRegistry;
1213
import net.bettercombat.mixin.LivingEntityAccessor;
1314
import net.bettercombat.utils.SoundHelper;
@@ -23,6 +24,7 @@
2324
import net.minecraft.entity.attribute.EntityAttributeModifier;
2425
import net.minecraft.entity.attribute.EntityAttributes;
2526
import net.minecraft.entity.decoration.ArmorStandEntity;
27+
import net.minecraft.entity.mob.HostileEntity;
2628
import net.minecraft.entity.projectile.PersistentProjectileEntity;
2729
import net.minecraft.network.PacketByteBuf;
2830
import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket;
@@ -129,7 +131,7 @@ public static void initializeHandlers() {
129131
}
130132

131133
if (entity == null
132-
|| (!BetterCombat.config.allow_attacking_mount && entity.equals(player.getVehicle()))
134+
|| (entity.equals(player.getVehicle()) && !TargetHelper.isAttackableMount(entity))
133135
|| (entity instanceof ArmorStandEntity && ((ArmorStandEntity)entity).isMarker())) {
134136
continue;
135137
}

fabric/src/main/resources/fabric.mod.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@
4040
"player-animator": ">=0.3.5"
4141
},
4242
"breaks": {
43-
"inventorio": "*",
44-
"figura": "*"
43+
"inventorio": "*"
4544
},
4645
"custom": {
4746
"modmenu": {

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ loader_version=0.14.11
1515
forge_version=40.1.0
1616

1717
# Mod Properties
18-
mod_version=1.5.3
18+
mod_version=1.5.4
1919
maven_group=net
2020
archives_base_name=bettercombat
2121

0 commit comments

Comments
 (0)