我正在尝试对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语句可以正常工作。
非常感谢!
答案 0 :(得分:2)
如果其余的Minecraft代码开始使用您的类,Console
,那么它只能用于,这意味着使用EntityClientPlayerMP
。 没有,您的功能将不会被调用。
如果你想改变游戏的行为,最简单的方法就是改变EntityClientPlayerMP
本身。如果你想在代码中的其他地方使用修改后的类Console
,那么你做的很好。
答案 1 :(得分:0)
这取决于实际的对象类型。如果对象属于Console
类型,例如EntityClientPlayerMP obj = new Console(..)
和obj.sendChatMessage(..)
它会起作用。但是如果对象本身是类型为EntityClientPlayerMP的new EntityClientPlayerMP(..)
它将不起作用