player swinging events.
This commit is contained in:
1 parent
c6529c3d3c
commit
f54ab746fe
8 files changed
+58
-1
No files matched your search
@@ -344,6 +344,11 @@ Boolean, true if the entity is swimming.
|
||||
|
||||
Boolean, true if the entity is jumping.
|
||||
|
||||
### `query(e, 'swinging')`
|
||||
|
||||
Returns `true` if the entity is actively swinging their hand, `false` if not and `null` if swinging is not applicable to
|
||||
that entity.
|
||||
|
||||
### `query(e, 'gamemode')`
|
||||
|
||||
String with gamemode, or `null` if not a player.
|
||||
|
||||
@@ -137,6 +137,11 @@ the slot.
|
||||
### `__on_player_swaps_hands(player)`
|
||||
Triggered when a player sends a command to swap their offhand item. Executed before the effect is applied on the server.
|
||||
|
||||
### `__on_player_swings_hand(player, hand)`
|
||||
Triggered when a player starts swinging their hand. The event typically triggers after a corresponding event that caused it
|
||||
(`player_uses_item`, `player_breaks_block`, etc.), but it triggers also after some failed events, like attacking the air. When
|
||||
swinging continues as an effect of an action, no new swinging events will be issued until the swinging is stopped.
|
||||
|
||||
### `__on_player_attacks_entity(player, entity)`
|
||||
Triggered when a player attacks entity, right before it happens server side.
|
||||
|
||||
|
||||
@@ -24,8 +24,11 @@ __on_player_starts_sneaking(player) ->
|
||||
__on_player_starts_sprinting(player) ->
|
||||
__on_player_stops_sneaking(player) ->
|
||||
__on_player_stops_sprinting(player) ->
|
||||
__on_player_swings_hand(player, hand) ->
|
||||
__on_player_switches_slot(player, from, to) ->
|
||||
__on_player_swaps_hands(player) ->
|
||||
__on_player_takes_damage(player, amount, source, entity) ->
|
||||
__on_player_trades(player, entity, buy_left, buy_right, sell) ->
|
||||
__on_player_uses_item(player, item_tuple, hand) ->
|
||||
__on_player_wakes_up(player) ->
|
||||
__on_player_escapes_sleep(player) ->
|
||||
|
||||
@@ -118,8 +118,11 @@
|
||||
__on_player_starts_sprinting
|
||||
__on_player_stops_sneaking
|
||||
__on_player_stops_sprinting
|
||||
__on_player_swings_hand
|
||||
__on_player_switches_slot
|
||||
__on_player_swaps_hands
|
||||
__on_player_takes_damage
|
||||
__on_player_trades
|
||||
__on_player_uses_item
|
||||
__on_player_wakes_up
|
||||
__on_player_escapes_sleep
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package carpet.mixins;
|
||||
|
||||
import carpet.CarpetSettings;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.packet.c2s.play.ButtonClickC2SPacket;
|
||||
import net.minecraft.network.packet.c2s.play.CraftRequestC2SPacket;
|
||||
import net.minecraft.network.packet.c2s.play.HandSwingC2SPacket;
|
||||
import net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket;
|
||||
import net.minecraft.server.network.ServerPlayNetworkHandler;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
@@ -40,6 +40,7 @@ import static carpet.script.CarpetEventServer.Event.PLAYER_STARTS_SPRINTING;
|
||||
import static carpet.script.CarpetEventServer.Event.PLAYER_STOPS_SNEAKING;
|
||||
import static carpet.script.CarpetEventServer.Event.PLAYER_STOPS_SPRINTING;
|
||||
import static carpet.script.CarpetEventServer.Event.PLAYER_SWAPS_HANDS;
|
||||
import static carpet.script.CarpetEventServer.Event.PLAYER_SWINGS_HAND;
|
||||
import static carpet.script.CarpetEventServer.Event.PLAYER_SWITCHES_SLOT;
|
||||
import static carpet.script.CarpetEventServer.Event.PLAYER_USES_ITEM;
|
||||
import static carpet.script.CarpetEventServer.Event.PLAYER_WAKES_UP;
|
||||
@@ -266,4 +267,17 @@ public class ServerPlayNetworkHandler_scarpetEventsMixin
|
||||
PLAYER_SWITCHES_SLOT.onSlotSwitch(player, player.inventory.selectedSlot, packet.getSelectedSlot());
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "onHandSwing", at = @At(
|
||||
value = "INVOKE", target =
|
||||
"Lnet/minecraft/server/network/ServerPlayerEntity;updateLastActionTime()V",
|
||||
shift = At.Shift.BEFORE)
|
||||
)
|
||||
private void onSwing(HandSwingC2SPacket packet, CallbackInfo ci)
|
||||
{
|
||||
if (PLAYER_SWINGS_HAND.isNeeded() && !player.handSwinging)
|
||||
{
|
||||
PLAYER_SWINGS_HAND.onHandAction(player, packet.getHand());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -693,6 +693,18 @@ public class CarpetEventServer
|
||||
handler.call( () -> Collections.singletonList(new EntityValue(player)), player::getCommandSource);
|
||||
}
|
||||
};
|
||||
public static final Event PLAYER_SWINGS_HAND = new Event("player_swings_hand", 2, false)
|
||||
{
|
||||
@Override
|
||||
public void onHandAction(ServerPlayerEntity player, Hand hand)
|
||||
{
|
||||
handler.call( () -> Arrays.asList(
|
||||
new EntityValue(player),
|
||||
StringValue.of(hand == Hand.MAIN_HAND ? "mainhand" : "offhand")
|
||||
)
|
||||
, player::getCommandSource);
|
||||
}
|
||||
};
|
||||
public static final Event PLAYER_TAKES_DAMAGE = new Event("player_takes_damage", 4, false)
|
||||
{
|
||||
@Override
|
||||
@@ -938,6 +950,7 @@ public class CarpetEventServer
|
||||
public void onBlockBroken(ServerPlayerEntity player, BlockPos pos, BlockState previousBS) { }
|
||||
public void onBlockPlaced(ServerPlayerEntity player, BlockPos pos, Hand enumhand, ItemStack itemstack) { }
|
||||
public void onEntityHandAction(ServerPlayerEntity player, Entity entity, Hand enumhand) { }
|
||||
public void onHandAction(ServerPlayerEntity player, Hand enumhand) { }
|
||||
public void onEntityAction(Entity entity) { }
|
||||
public void onDimensionChange(ServerPlayerEntity player, Vec3d from, Vec3d to, RegistryKey<World> fromDim, RegistryKey<World> dimTo) {}
|
||||
public void onDamage(Entity target, float amount, DamageSource source) { }
|
||||
|
||||
@@ -512,6 +512,11 @@ public class EntityValue extends Value
|
||||
put("sneaking", (e, a) -> e.isSneaking()?Value.TRUE:Value.FALSE);
|
||||
put("sprinting", (e, a) -> e.isSprinting()?Value.TRUE:Value.FALSE);
|
||||
put("swimming", (e, a) -> e.isSwimming()?Value.TRUE:Value.FALSE);
|
||||
put("swinging", (e, a) -> {
|
||||
if (e instanceof LivingEntity) return new NumericValue(((LivingEntity) e).handSwinging);
|
||||
return Value.NULL;
|
||||
});
|
||||
|
||||
put("air", (e, a) -> new NumericValue(e.getAir()));
|
||||
put("persistence", (e, a) -> {
|
||||
if (e instanceof MobEntity) return new NumericValue(((MobEntity) e).isPersistent());
|
||||
|
||||
@@ -303,3 +303,12 @@ __on_player_trades(player, entity, buy_left, buy_right, sell) ->
|
||||
print(' - buy_right: '+ buy_right);
|
||||
print(' - sell: '+ sell)
|
||||
);
|
||||
|
||||
__on_player_swings_hand(player, hand) ->
|
||||
(
|
||||
print('');
|
||||
print('__on_player_swings_hand(player, hand)');
|
||||
print('player swings hand:');
|
||||
print(' - player: '+player);
|
||||
print(' - hand: '+hand);
|
||||
);
|
||||
Reference in new issue
Block a user