Update to Minecraft 1.21.4

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot
2024-12-04 03:20:00 +11:00
parent 267ae64dd6
commit 5381ea78f7
125 changed files with 1383 additions and 1093 deletions

View File

@@ -1,15 +1,15 @@
--- a/net/minecraft/world/item/ItemEgg.java
+++ b/net/minecraft/world/item/ItemEgg.java
@@ -23,10 +23,18 @@
@@ -25,10 +25,18 @@
public EnumInteractionResult use(World world, EntityHuman entityhuman, EnumHand enumhand) {
ItemStack itemstack = entityhuman.getItemInHand(enumhand);
- world.playSound((EntityHuman) null, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEffects.EGG_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
+ // world.playSound((EntityHuman) null, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEffects.EGG_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F)); // CraftBukkit - moved down
if (world instanceof WorldServer worldserver) {
- IProjectile.spawnProjectileFromRotation(EntityEgg::new, worldserver, itemstack, entityhuman, 0.0F, 1.5F, 1.0F);
- IProjectile.spawnProjectileFromRotation(EntityEgg::new, worldserver, itemstack, entityhuman, 0.0F, ItemEgg.PROJECTILE_SHOOT_POWER, 1.0F);
+ // CraftBukkit start
+ if (IProjectile.spawnProjectileFromRotation(EntityEgg::new, worldserver, itemstack, entityhuman, 0.0F, 1.5F, 1.0F).isRemoved()) {
+ if (IProjectile.spawnProjectileFromRotation(EntityEgg::new, worldserver, itemstack, entityhuman, 0.0F, ItemEgg.PROJECTILE_SHOOT_POWER, 1.0F).isRemoved()) {
+ if (entityhuman instanceof net.minecraft.server.level.EntityPlayer) {
+ ((net.minecraft.server.level.EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
+ }

View File

@@ -1,14 +1,14 @@
--- a/net/minecraft/world/item/ItemEnderPearl.java
+++ b/net/minecraft/world/item/ItemEnderPearl.java
@@ -21,10 +21,17 @@
@@ -23,10 +23,17 @@
public EnumInteractionResult use(World world, EntityHuman entityhuman, EnumHand enumhand) {
ItemStack itemstack = entityhuman.getItemInHand(enumhand);
- world.playSound((EntityHuman) null, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEffects.ENDER_PEARL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
if (world instanceof WorldServer worldserver) {
- IProjectile.spawnProjectileFromRotation(EntityEnderPearl::new, worldserver, itemstack, entityhuman, 0.0F, 1.5F, 1.0F);
- IProjectile.spawnProjectileFromRotation(EntityEnderPearl::new, worldserver, itemstack, entityhuman, 0.0F, ItemEnderPearl.PROJECTILE_SHOOT_POWER, 1.0F);
+ // CraftBukkit start
+ if (IProjectile.spawnProjectileFromRotation(EntityEnderPearl::new, worldserver, itemstack, entityhuman, 0.0F, 1.5F, 1.0F).isRemoved()) {
+ if (IProjectile.spawnProjectileFromRotation(EntityEnderPearl::new, worldserver, itemstack, entityhuman, 0.0F, ItemEnderPearl.PROJECTILE_SHOOT_POWER, 1.0F).isRemoved()) {
+ if (entityhuman instanceof net.minecraft.server.level.EntityPlayer) {
+ ((net.minecraft.server.level.EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
+ }

View File

@@ -23,9 +23,9 @@
int j = (int) (EnchantmentManager.getFishingTimeReduction(worldserver, itemstack, entityhuman) * 20.0F);
int k = EnchantmentManager.getFishingLuckBonus(worldserver, itemstack, entityhuman);
- IProjectile.spawnProjectile(new EntityFishingHook(entityhuman, world, k, j, itemstack), worldserver, itemstack);
- IProjectile.spawnProjectile(new EntityFishingHook(entityhuman, world, k, j), worldserver, itemstack);
+ // CraftBukkit start
+ EntityFishingHook entityfishinghook = new EntityFishingHook(entityhuman, world, k, j, itemstack);
+ EntityFishingHook entityfishinghook = new EntityFishingHook(entityhuman, world, k, j);
+ PlayerFishEvent playerFishEvent = new PlayerFishEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), null, (org.bukkit.entity.FishHook) entityfishinghook.getBukkitEntity(), CraftEquipmentSlot.getHand(enumhand), PlayerFishEvent.State.FISHING);
+ world.getCraftServer().getPluginManager().callEvent(playerFishEvent);
+

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/item/ItemSnowball.java
+++ b/net/minecraft/world/item/ItemSnowball.java
@@ -23,13 +23,21 @@
@@ -25,13 +25,21 @@
public EnumInteractionResult use(World world, EntityHuman entityhuman, EnumHand enumhand) {
ItemStack itemstack = entityhuman.getItemInHand(enumhand);
@@ -8,8 +8,8 @@
+ // CraftBukkit start - moved down
+ // world.playSound((EntityHuman) null, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEffects.SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
if (world instanceof WorldServer worldserver) {
- IProjectile.spawnProjectileFromRotation(EntitySnowball::new, worldserver, itemstack, entityhuman, 0.0F, 1.5F, 1.0F);
+ if (IProjectile.spawnProjectileFromRotation(EntitySnowball::new, worldserver, itemstack, entityhuman, 0.0F, 1.5F, 1.0F).isAlive()) {
- IProjectile.spawnProjectileFromRotation(EntitySnowball::new, worldserver, itemstack, entityhuman, 0.0F, ItemSnowball.PROJECTILE_SHOOT_POWER, 1.0F);
+ if (IProjectile.spawnProjectileFromRotation(EntitySnowball::new, worldserver, itemstack, entityhuman, 0.0F, ItemSnowball.PROJECTILE_SHOOT_POWER, 1.0F).isAlive()) {
+ itemstack.consume(1, entityhuman);
+
+ world.playSound((EntityHuman) null, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEffects.SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/item/ItemStack.java
+++ b/net/minecraft/world/item/ItemStack.java
@@ -96,17 +96,51 @@
@@ -96,18 +96,52 @@
import org.apache.commons.lang3.mutable.MutableBoolean;
import org.slf4j.Logger;
@@ -40,6 +40,7 @@
+
public final class ItemStack implements DataComponentHolder {
private static final List<IChatBaseComponent> OP_NBT_WARNING = List.of(IChatBaseComponent.translatable("item.op_warning.line1").withStyle(EnumChatFormat.RED, EnumChatFormat.BOLD), IChatBaseComponent.translatable("item.op_warning.line2").withStyle(EnumChatFormat.RED), IChatBaseComponent.translatable("item.op_warning.line3").withStyle(EnumChatFormat.RED));
public static final Codec<ItemStack> CODEC = Codec.lazyInitialized(() -> {
- return RecordCodecBuilder.create((instance) -> {
+ return RecordCodecBuilder.<ItemStack>create((instance) -> { // CraftBukkit - decompile error
@@ -54,7 +55,7 @@
return instance.group(Item.CODEC.fieldOf("id").forGetter(ItemStack::getItemHolder), DataComponentPatch.CODEC.optionalFieldOf("components", DataComponentPatch.EMPTY).forGetter((itemstack) -> {
return itemstack.components.asPatch();
})).apply(instance, (holder, datacomponentpatch) -> {
@@ -131,19 +165,25 @@
@@ -132,19 +166,25 @@
if (i <= 0) {
return ItemStack.EMPTY;
} else {
@@ -84,7 +85,7 @@
DataComponentPatch.STREAM_CODEC.encode(registryfriendlybytebuf, itemstack.components.asPatch());
}
}
@@ -186,7 +226,7 @@
@@ -187,7 +227,7 @@
return dataresult.isError() ? dataresult.map((unit) -> {
return itemstack;
@@ -93,7 +94,7 @@
int i = itemstack.getCount();
return "Item stack with stack size of " + i + " was larger than maximum: " + itemstack.getMaxStackSize();
@@ -289,8 +329,9 @@
@@ -294,8 +334,9 @@
j = itemstack.getMaxStackSize();
} while (i <= j);
@@ -104,7 +105,7 @@
});
}
}
@@ -372,15 +413,173 @@
@@ -377,15 +418,173 @@
return EnumInteractionResult.PASS;
} else {
Item item = this.getItem();
@@ -280,7 +281,7 @@
return enuminteractionresult;
}
@@ -487,6 +686,21 @@
@@ -492,6 +691,21 @@
public void hurtAndBreak(int i, WorldServer worldserver, @Nullable EntityPlayer entityplayer, Consumer<Item> consumer) {
int j = this.processDurabilityChange(i, worldserver, entityplayer);
@@ -302,7 +303,7 @@
if (j != 0) {
this.applyDamage(this.getDamageValue() + j, entityplayer, consumer);
@@ -506,6 +720,11 @@
@@ -511,6 +725,11 @@
this.setDamageValue(i);
if (this.isBroken()) {
Item item = this.getItem();
@@ -314,7 +315,7 @@
this.shrink(1);
consumer.accept(item);
@@ -765,6 +984,12 @@
@@ -770,6 +989,12 @@
return this.getItem().useOnRelease(this);
}
@@ -327,7 +328,7 @@
@Nullable
public <T> T set(DataComponentType<? super T> datacomponenttype, @Nullable T t0) {
return this.components.set(datacomponenttype, t0);
@@ -846,7 +1071,7 @@
@@ -858,7 +1083,7 @@
}
private <T extends TooltipProvider> void addToTooltip(DataComponentType<T> datacomponenttype, Item.b item_b, Consumer<IChatBaseComponent> consumer, TooltipFlag tooltipflag) {
@@ -336,7 +337,7 @@
if (t0 != null) {
t0.addToTooltip(item_b, consumer, tooltipflag);
@@ -1073,6 +1298,13 @@
@@ -1091,6 +1316,13 @@
EnchantmentManager.forEachModifier(this, enumitemslot, biconsumer);
}
@@ -350,7 +351,7 @@
public IChatBaseComponent getDisplayName() {
IChatMutableComponent ichatmutablecomponent = IChatBaseComponent.empty().append(this.getHoverName());
@@ -1135,7 +1367,7 @@
@@ -1153,7 +1385,7 @@
}
public void consume(int i, @Nullable EntityLiving entityliving) {

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/item/ItemTrident.java
+++ b/net/minecraft/world/item/ItemTrident.java
@@ -85,9 +85,19 @@
@@ -86,9 +86,19 @@
if (world instanceof WorldServer) {
WorldServer worldserver = (WorldServer) world;
@@ -21,7 +21,7 @@
if (entityhuman.hasInfiniteMaterials()) {
entitythrowntrident.pickup = EntityArrow.PickupStatus.CREATIVE_ONLY;
@@ -97,6 +107,10 @@
@@ -98,6 +108,10 @@
world.playSound((EntityHuman) null, (Entity) entitythrowntrident, (SoundEffect) holder.value(), SoundCategory.PLAYERS, 1.0F, 1.0F);
return true;

View File

@@ -9,7 +9,7 @@
}
public int getColor() {
@@ -176,7 +176,7 @@
@@ -172,7 +172,7 @@
if (((MobEffectList) mobeffect.getEffect().value()).isInstantenous()) {
((MobEffectList) mobeffect.getEffect().value()).applyInstantenousEffect(worldserver, entityhuman2, entityhuman2, entityliving, mobeffect.getAmplifier(), 1.0D);
} else {

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/item/crafting/CraftingManager.java
+++ b/net/minecraft/world/item/crafting/CraftingManager.java
@@ -38,6 +38,11 @@
@@ -39,6 +39,11 @@
import net.minecraft.world.level.World;
import org.slf4j.Logger;
@@ -12,7 +12,7 @@
public class CraftingManager extends ResourceDataAbstract<RecipeMap> implements RecipeAccess {
private static final Logger LOGGER = LogUtils.getLogger();
@@ -109,7 +114,25 @@
@@ -111,7 +116,25 @@
CraftingManager.LOGGER.info("Loaded {} recipes", recipemap.values().size());
}
@@ -38,7 +38,7 @@
List<SelectableRecipe.a<RecipeStonecutting>> list = new ArrayList();
List<CraftingManager.b> list1 = CraftingManager.RECIPE_PROPERTY_SETS.entrySet().stream().map((entry) -> {
return new CraftingManager.b((ResourceKey) entry.getKey(), (CraftingManager.c) entry.getValue());
@@ -128,7 +151,7 @@
@@ -130,7 +153,7 @@
RecipeStonecutting recipestonecutting = (RecipeStonecutting) irecipe;
if (isIngredientEnabled(featureflagset, recipestonecutting.input()) && recipestonecutting.resultDisplay().isEnabled(featureflagset)) {
@@ -47,7 +47,7 @@
}
}
@@ -170,7 +193,10 @@
@@ -172,7 +195,10 @@
}
public <I extends RecipeInput, T extends IRecipe<I>> Optional<RecipeHolder<T>> getRecipeFor(Recipes<T> recipes, I i0, World world) {
@@ -59,7 +59,7 @@
}
public Optional<RecipeHolder<?>> byKey(ResourceKey<IRecipe<?>> resourcekey) {
@@ -181,7 +207,7 @@
@@ -183,7 +209,7 @@
private <T extends IRecipe<?>> RecipeHolder<T> byKeyTyped(Recipes<T> recipes, ResourceKey<IRecipe<?>> resourcekey) {
RecipeHolder<?> recipeholder = this.recipes.byKey(resourcekey);
@@ -68,7 +68,7 @@
}
public Map<ResourceKey<RecipePropertySet>, RecipePropertySet> getSynchronizedItemProperties() {
@@ -229,6 +255,22 @@
@@ -231,6 +257,22 @@
return new RecipeHolder<>(resourcekey, irecipe);
}

View File

@@ -1,9 +1,21 @@
--- a/net/minecraft/world/item/crafting/RecipeItemStack.java
+++ b/net/minecraft/world/item/crafting/RecipeItemStack.java
@@ -42,6 +42,24 @@
@@ -21,6 +21,11 @@
import net.minecraft.world.item.crafting.display.SlotDisplay;
import net.minecraft.world.level.IMaterial;
+// CraftBukkit start
+import java.util.List;
+import javax.annotation.Nullable;
+// CraftBukkit end
+
public final class RecipeItemStack implements AutoRecipeStackManager.a<Holder<Item>>, Predicate<ItemStack> {
public static final StreamCodec<RegistryFriendlyByteBuf, RecipeItemStack> CONTENTS_STREAM_CODEC = ByteBufCodecs.holderSet(Registries.ITEM).map(RecipeItemStack::new, (recipeitemstack) -> {
@@ -38,6 +43,24 @@
return recipeitemstack.values;
});
private final HolderSet<Item> values;
@Nullable
private List<Holder<Item>> items;
+ // CraftBukkit start
+ @Nullable
+ private List<ItemStack> itemStacks;
@@ -25,7 +37,7 @@
private RecipeItemStack(HolderSet<Item> holderset) {
holderset.unwrap().ifRight((list) -> {
@@ -72,6 +90,17 @@
@@ -70,6 +93,17 @@
}
public boolean test(ItemStack itemstack) {
@@ -40,10 +52,10 @@
+ return false;
+ }
+ // CraftBukkit end
List<Holder<Item>> list = this.items();
return itemstack.is(this.values);
}
for (int i = 0; i < list.size(); ++i) {
@@ -85,7 +114,7 @@
@@ -79,7 +113,7 @@
public boolean equals(Object object) {
if (object instanceof RecipeItemStack recipeitemstack) {

View File

@@ -1,9 +1,9 @@
--- a/net/minecraft/world/item/trading/IMerchant.java
+++ b/net/minecraft/world/item/trading/IMerchant.java
@@ -52,4 +52,6 @@
}
@@ -54,4 +54,6 @@
boolean isClientSide();
boolean stillValid(EntityHuman entityhuman);
+
+ org.bukkit.craftbukkit.inventory.CraftMerchant getCraftMerchant(); // CraftBukkit
}