mirror of
https://github.com/architectury/architectury-api.git
synced 2026-03-28 03:56:59 -05:00
Merge branch '1.19' into 1.19.2
This commit is contained in:
@@ -27,11 +27,14 @@ import net.minecraft.advancements.Advancement;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.Container;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.item.ItemEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.EntityHitResult;
|
||||
import net.minecraft.world.phys.HitResult;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -92,6 +95,10 @@ public interface PlayerEvent {
|
||||
* @see FillBucket#fill(Player, Level, ItemStack, HitResult)
|
||||
*/
|
||||
Event<FillBucket> FILL_BUCKET = EventFactory.createCompoundEventResult();
|
||||
/**
|
||||
* @see AttackEntity#attack(Player, Level, Entity, InteractionHand, EntityHitResult)
|
||||
*/
|
||||
Event<AttackEntity> ATTACK_ENTITY = EventFactory.createEventResult();
|
||||
|
||||
interface PlayerJoin {
|
||||
/**
|
||||
@@ -262,4 +269,20 @@ public interface PlayerEvent {
|
||||
*/
|
||||
CompoundEventResult<ItemStack> fill(Player player, Level level, ItemStack stack, @Nullable HitResult target);
|
||||
}
|
||||
|
||||
interface AttackEntity {
|
||||
/**
|
||||
* Invoked when a player is about to attack an entity using left-click.
|
||||
* Equivalent to Forge's {@code AttackEntityEvent} and Fabric API's {@code AttackEntityCallback} events.
|
||||
*
|
||||
* @param player The player attacking the entity.
|
||||
* @param level The level the player is in.
|
||||
* @param target The entity about to be attacked.
|
||||
* @param hand The hand the player is using.
|
||||
* @param result The entity hit result.
|
||||
* @return An {@link EventResult} determining the outcome of the event,
|
||||
* the attack may be cancelled by the result.
|
||||
*/
|
||||
EventResult attack(Player player, Level level, Entity target, InteractionHand hand, @Nullable EntityHitResult result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,9 +20,13 @@
|
||||
package dev.architectury.networking.simple;
|
||||
|
||||
import dev.architectury.networking.NetworkManager;
|
||||
import dev.architectury.networking.transformers.PacketTransformer;
|
||||
import dev.architectury.platform.Platform;
|
||||
import dev.architectury.utils.Env;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A simple wrapper for {@link NetworkManager} to make it easier to register messages and send them to clients/servers.
|
||||
@@ -49,34 +53,62 @@ public class SimpleNetworkManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a server -> client message.
|
||||
* Registers a server -> client message with no packet transformers.
|
||||
*
|
||||
* @param id a unique ID for the message, must be a valid value for {@link ResourceLocation#getPath}
|
||||
* @param decoder the message decoder for the message
|
||||
* @return a {@link MessageType} describing the registered message
|
||||
* @see #registerS2C(String, MessageDecoder, List)
|
||||
*/
|
||||
public MessageType registerS2C(String id, MessageDecoder<BaseS2CMessage> decoder) {
|
||||
return registerS2C(id, decoder, List.of());
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a server -> client message using the given packet transformers.
|
||||
*
|
||||
* @param id a unique ID for the message, must be a valid value for {@link ResourceLocation#getPath}
|
||||
* @param decoder the message decoder for the message
|
||||
* @param transformers a list of packet transformers to apply to the message packet
|
||||
* @return a {@link MessageType} describing the registered message
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
public MessageType registerS2C(String id, MessageDecoder<BaseS2CMessage> decoder, List<PacketTransformer> transformers) {
|
||||
MessageType messageType = new MessageType(this, new ResourceLocation(namespace, id), NetworkManager.s2c());
|
||||
|
||||
if (Platform.getEnvironment() == Env.CLIENT) {
|
||||
NetworkManager.NetworkReceiver receiver = decoder.createReceiver();
|
||||
NetworkManager.registerReceiver(NetworkManager.s2c(), messageType.getId(), receiver);
|
||||
NetworkManager.registerReceiver(NetworkManager.s2c(), messageType.getId(), transformers, receiver);
|
||||
}
|
||||
|
||||
return messageType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a client -> server message.
|
||||
* Registers a client -> server message with no packet transformers.
|
||||
*
|
||||
* @param id a unique ID for the message, must be a valid value for {@link ResourceLocation#getPath}
|
||||
* @param decoder the message decoder for the message
|
||||
* @return a {@link MessageType} describing the registered message
|
||||
* @see #registerC2S(String, MessageDecoder, List)
|
||||
*/
|
||||
public MessageType registerC2S(String id, MessageDecoder<BaseC2SMessage> decoder) {
|
||||
return registerC2S(id, decoder, List.of());
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a client -> server message using the given packet transformers.
|
||||
*
|
||||
* @param id a unique ID for the message, must be a valid value for {@link ResourceLocation#getPath}
|
||||
* @param decoder the message decoder for the message
|
||||
* @param transformers a list of packet transformers to apply to the message packet
|
||||
* @return a {@link MessageType} describing the registered message
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
public MessageType registerC2S(String id, MessageDecoder<BaseC2SMessage> decoder, List<PacketTransformer> transformers) {
|
||||
MessageType messageType = new MessageType(this, new ResourceLocation(namespace, id), NetworkManager.c2s());
|
||||
NetworkManager.NetworkReceiver receiver = decoder.createReceiver();
|
||||
NetworkManager.registerReceiver(NetworkManager.c2s(), messageType.getId(), receiver);
|
||||
NetworkManager.registerReceiver(NetworkManager.c2s(), messageType.getId(), transformers, receiver);
|
||||
return messageType;
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,7 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents;
|
||||
import net.fabricmc.fabric.api.event.player.AttackBlockCallback;
|
||||
import net.fabricmc.fabric.api.event.player.AttackEntityCallback;
|
||||
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
|
||||
import net.fabricmc.fabric.api.event.player.UseItemCallback;
|
||||
import net.fabricmc.fabric.api.loot.v2.LootTableEvents;
|
||||
@@ -79,6 +80,7 @@ public class EventHandlerImpl {
|
||||
UseItemCallback.EVENT.register((player, world, hand) -> InteractionEvent.RIGHT_CLICK_ITEM.invoker().click(player, hand).asMinecraft());
|
||||
UseBlockCallback.EVENT.register((player, world, hand, hitResult) -> InteractionEvent.RIGHT_CLICK_BLOCK.invoker().click(player, hand, hitResult.getBlockPos(), hitResult.getDirection()).asMinecraft());
|
||||
AttackBlockCallback.EVENT.register((player, world, hand, pos, face) -> InteractionEvent.LEFT_CLICK_BLOCK.invoker().click(player, hand, pos, face).asMinecraft());
|
||||
AttackEntityCallback.EVENT.register((player, world, hand, entity, hitResult) -> PlayerEvent.ATTACK_ENTITY.invoker().attack(player, world, entity, hand, hitResult).asMinecraft());
|
||||
|
||||
LootTableEvents.MODIFY.register((resourceManager, lootManager, id, tableBuilder, source) -> LootEvent.MODIFY_LOOT_TABLE.invoker().modifyLootTable(lootManager, id, new LootTableModificationContextImpl(tableBuilder), source.isBuiltin()));
|
||||
|
||||
|
||||
@@ -423,6 +423,14 @@ public class EventHandlerImplCommon {
|
||||
LootEvent.MODIFY_LOOT_TABLE.invoker().modifyLootTable(event.getLootTableManager(), event.getName(), new LootTableModificationContextImpl(event.getTable()), true);
|
||||
}
|
||||
|
||||
@SubscribeEvent(priority = EventPriority.HIGH)
|
||||
public static void event(AttackEntityEvent event) {
|
||||
EventResult result = PlayerEvent.ATTACK_ENTITY.invoker().attack(event.getEntity(), event.getEntity().level, event.getTarget(), event.getEntity().getUsedItemHand(), null);
|
||||
if (result.isFalse()) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
public interface LevelEventAttachment {
|
||||
LevelAccessor architectury$getAttachedLevel();
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ artifact_type=release
|
||||
|
||||
archives_base_name=architectury
|
||||
archives_base_name_snapshot=architectury-snapshot
|
||||
base_version=6.4
|
||||
base_version=6.5
|
||||
maven_group=dev.architectury
|
||||
|
||||
fabric_loader_version=0.14.10
|
||||
|
||||
Reference in New Issue
Block a user