0

minecraftsrcでいくつかの変更を試みています。クラスのメソッドをオーバーライドしようとしているので、元のクラスを編集する必要はありません。

通常のクラスでは、このメソッドを変更したいと思います。

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

私の理解では、メソッドが呼び出されるたびに、サブクラスが処理するように「リダイレクト」する必要がありますか?(私が間違っているかどうか教えてくださいha)

元のクラスを変更すると、ifステートメントは正しく機能します。

どうもありがとうございます!

4

2 に答える 2

2

これは、Minecraft のコードの残りの部分がクラス を使用し始めた場合にのみ機能ConsoleしますEntityClientPlayerMPそれがなければ、関数は呼び出されません

ゲームの動作を変更したい場合、最も簡単な方法はゲームEntityClientPlayerMP自体を変更することです。変更したクラスConsoleをコードの別の場所で使用する場合は、これで問題ありません。

于 2012-12-27T05:33:46.427 に答える
0

実際のオブジェクト タイプによって異なります。オブジェクトのタイプがConsoleegEntityClientPlayerMP obj = new Console(..)である場合、obj.sendChatMessage(..)それは機能します。ただし、オブジェクト自体が EntityClientPlayerMP のようなタイプの場合は機能しnew EntityClientPlayerMP(..)ません

于 2012-12-27T05:36:45.350 に答える