Merge branch '1.19' into 1.19.2

This commit is contained in:
Max
2023-02-06 18:01:55 +01:00
5 changed files with 70 additions and 5 deletions

View File

@@ -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);
}
}

View File

@@ -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 -&gt; client message.
* Registers a server -&gt; 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 -&gt; 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 -&gt; server message.
* Registers a client -&gt; 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 -&gt; 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;
}
}