Luohuayu / CatServer

高性能和高兼容性的1.12.2/1.16.5/1.18.2版本Forge+Bukkit+Spigot服务端 (A high performance and high compatibility 1.12.2/1.16.5/1.18.2 version Forge+Bukkit+Spigot server)
https://catmc.org
GNU Lesser General Public License v3.0
1.98k stars 211 forks source link

railcraft导致的崩溃问题及解决方案 #149

Closed DictXiong closed 4 years ago

DictXiong commented 4 years ago

crash report: https://paste.ubuntu.com/p/BDWXwPhsWf/

原因: railcraft自定义了漏斗矿车类EntityCartHopper (父类CartBaseContainerEntityMinecartContainer继承), 它在org.bukkit.craftbukkit.entity包的CraftEntity.getEntity()方法中无法被正常识别为漏斗矿车 (仅识别为普通矿车), 导致它在net.minecraft.entity.item.EntityMinecartContainer.getOwner()中的cart对象不是InventoryHolder类的实现, 所以返回了空指针, 在net.minecraft.tileentity.TileEntityHopper.java的457行的destination.getOwner().getInventory()抛出空指针异常.

解决方法: net.minecraft.entity.item.EntityMinecartContainer.getOwner() 添加一行, 具体实现如下

\\import catserver.server.inventory.CatCustomInventory;import net.minecraft.inventory.IInventory;
public InventoryHolder getOwner() {
        org.bukkit.entity.Entity cart = getBukkitEntity();
        if(cart instanceof InventoryHolder) return (InventoryHolder) cart; 
        else if (this instanceof IInventory) return new CatCustomInventory((IInventory) this); \\new line here
        return null;
    }
Luohuayu commented 4 years ago

已修复 https://github.com/Luohuayu/CatServer/commit/e0176d5773e7115e40b196cd6704bc96afb54a9e