0

我正在尝试对 minecraft src 进行一些更改。我正在尝试覆盖类中的方法,因此我不必编辑原始类。

在常规课程中,我想更改此方法:

public void sendChatMessage(String par1Str)
{
    this.sendQueue.addToSendQueue(new Packet3Chat(par1Str));
}

所以在我的子类中我有这个代码:

package cobalt.gui;

import cobalt.hacks.*;
import net.minecraft.client.Minecraft;
import net.minecraft.src.EntityClientPlayerMP;
import net.minecraft.src.NetClientHandler;
import net.minecraft.src.Session;
import net.minecraft.src.World;



public class Console extends EntityClientPlayerMP {

    public Console(Minecraft par1Minecraft, World par2World,
            Session par3Session, NetClientHandler par4NetClientHandler) {
        super(par1Minecraft, par2World, par3Session, par4NetClientHandler);
    }

    @Override
    public void sendChatMessage(String par1Str) {

        if (par1Str.startsWith(".help")) {
                    //Do stuff
            return;
        }
    }
}

据我了解,任何时候调用方法,都应该“重定向”给子类来处理?(如果我错了请告诉我哈)

如果我修改原始类,if 语句确实可以正常工作。

非常感谢你!

4

2 回答 2

2

这只有在我的世界代码的其余部分以某种方式开始使用你的类时才有效,Console,它打算使用的地方EntityClientPlayerMP没有它,您的函数将不会被调用

如果你想改变游戏的行为,最简单的方法就是改变EntityClientPlayerMP它自己。如果您想Console在代码的其他地方使用修改后的类,那么您所做的就可以了。

于 2012-12-27T05:33:46.427 回答
0

这取决于实际的对象类型。如果对象是Consoleeg类型EntityClientPlayerMP obj = new Console(..)obj.sendChatMessage(..)它将起作用。但是如果对象本身是 EntityClientPlayerMP 类型的,new EntityClientPlayerMP(..)它就行不通了

于 2012-12-27T05:36:45.350 回答