Fix Failing to Open Nautilus Inventory (#13297)

This commit is contained in:
Miles 2025-11-12 16:09:18 +00:00 committed by GitHub
parent a6b7467552
commit 19ed6da2e5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 52 additions and 2 deletions

View File

@ -319,6 +319,7 @@ public net.minecraft.world.entity.animal.horse.AbstractHorse owner
public net.minecraft.world.entity.animal.horse.Horse setVariantAndMarkings(Lnet/minecraft/world/entity/animal/horse/Variant;Lnet/minecraft/world/entity/animal/horse/Markings;)V
public net.minecraft.world.entity.animal.horse.Llama setVariant(Lnet/minecraft/world/entity/animal/horse/Llama$Variant;)V
public net.minecraft.world.entity.animal.horse.SkeletonHorse trapTime
public net.minecraft.world.entity.animal.nautilus.AbstractNautilus inventory
public net.minecraft.world.entity.animal.sniffer.Sniffer calculateDigPosition()Ljava/util/Optional;
public net.minecraft.world.entity.animal.sniffer.Sniffer canDig()Z
public net.minecraft.world.entity.animal.sniffer.Sniffer getExploredPositions()Ljava/util/stream/Stream;

View File

@ -1,4 +1,6 @@
package org.bukkit.entity;
public interface AbstractNautilus extends Animals, Tameable {
import org.bukkit.inventory.InventoryHolder;
public interface AbstractNautilus extends Animals, InventoryHolder, Tameable {
}

View File

@ -1043,7 +1043,7 @@
return OptionalInt.of(this.containerCounter);
}
}
@@ -1342,14 +_,25 @@
@@ -1342,27 +_,49 @@
@Override
public void openHorseInventory(AbstractHorse horse, Container inventory) {
@ -1072,6 +1072,32 @@
this.initMenu(this.containerMenu);
}
@Override
public void openNautilusInventory(AbstractNautilus nautilus, Container inventory) {
+ // Paper start - Inventory open hook
+ this.nextContainerCounter(); // moved up from below
+ AbstractContainerMenu menu = new NautilusInventoryMenu(this.containerCounter, this.getInventory(), inventory, nautilus, nautilus.getInventoryColumns());
+ menu.setTitle(nautilus.getDisplayName());
+ menu = org.bukkit.craftbukkit.event.CraftEventFactory.callInventoryOpenEvent(this, containerMenu);
+
+ if (menu == null) {
+ inventory.stopOpen(this);
+ return;
+ }
+ // Paper end
if (this.containerMenu != this.inventoryMenu) {
this.closeContainer();
}
- this.nextContainerCounter();
+ // this.nextContainerCounter(); Paper - Move Up
int inventoryColumns = nautilus.getInventoryColumns();
this.connection.send(new ClientboundMountScreenOpenPacket(this.containerCounter, inventoryColumns, nautilus.getId()));
- this.containerMenu = new NautilusInventoryMenu(this.containerCounter, this.getInventory(), inventory, nautilus, inventoryColumns);
+ this.containerMenu = menu; // Paper - Moved up declaration
this.initMenu(this.containerMenu);
}
@@ -1384,10 +_,30 @@
@Override

View File

@ -27,3 +27,12 @@
this.tame(player);
this.navigation.stop();
this.level().broadcastEntityEvent(this, EntityEvent.TAMING_SUCCEEDED);
@@ -481,7 +_,7 @@
protected void createInventory() {
SimpleContainer simpleContainer = this.inventory;
- this.inventory = new SimpleContainer(this.getInventorySize());
+ this.inventory = new SimpleContainer(this.getInventorySize(), (org.bukkit.craftbukkit.entity.CraftAbstractNautilus) getBukkitEntity()); // Paper - add inv owner
if (simpleContainer != null) {
int min = Math.min(simpleContainer.getContainerSize(), this.inventory.getContainerSize());

View File

@ -1,7 +1,10 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.animal.nautilus.AbstractNautilus;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftSaddledInventory;
import org.bukkit.inventory.Inventory;
public class CraftAbstractNautilus extends CraftTameableAnimal implements org.bukkit.entity.AbstractNautilus {
public CraftAbstractNautilus(final CraftServer server, final AbstractNautilus entity) {
@ -12,4 +15,13 @@ public class CraftAbstractNautilus extends CraftTameableAnimal implements org.bu
public AbstractNautilus getHandle() {
return (AbstractNautilus) this.entity;
}
@Override
public Inventory getInventory() {
return new CraftSaddledInventory(
getHandle().inventory,
this.getHandle().createEquipmentSlotContainer(EquipmentSlot.BODY),
this.getHandle().createEquipmentSlotContainer(EquipmentSlot.SADDLE)
);
}
}