packet names in replaceblockpackets

This commit is contained in:
sirjonasxx 2021-04-25 20:05:25 +02:00
parent 60992d9e38
commit 71496b8a30
3 changed files with 45 additions and 5 deletions

View File

@ -183,4 +183,7 @@ public class PacketInfoManager {
hPacket.appendBoolean(packetInfo.getDestination() == HMessage.Direction.TOSERVER); hPacket.appendBoolean(packetInfo.getDestination() == HMessage.Direction.TOSERVER);
} }
} }
public static PacketInfoManager EMPTY = new PacketInfoManager(new ArrayList<>());
} }

View File

@ -3,8 +3,12 @@ package gearth.services.internal_extensions.blockreplacepackets;
import gearth.Main; import gearth.Main;
import gearth.extensions.ExtensionForm; import gearth.extensions.ExtensionForm;
import gearth.extensions.ExtensionInfo; import gearth.extensions.ExtensionInfo;
import gearth.extensions.OnConnectionListener;
import gearth.misc.packet_info.PacketInfo;
import gearth.misc.packet_info.PacketInfoManager;
import gearth.protocol.HMessage; import gearth.protocol.HMessage;
import gearth.protocol.HPacket; import gearth.protocol.HPacket;
import gearth.protocol.connection.HClient;
import gearth.services.internal_extensions.blockreplacepackets.rules.BlockReplaceRule; import gearth.services.internal_extensions.blockreplacepackets.rules.BlockReplaceRule;
import gearth.services.internal_extensions.blockreplacepackets.rules.RuleFactory; import gearth.services.internal_extensions.blockreplacepackets.rules.RuleFactory;
import gearth.ui.GEarthController; import gearth.ui.GEarthController;
@ -49,6 +53,8 @@ public class BlockAndReplacePackets extends ExtensionForm {
List<BlockReplaceRule> rules = new ArrayList<>(); List<BlockReplaceRule> rules = new ArrayList<>();
private PacketInfoManager packetInfoManager = PacketInfoManager.EMPTY;
// public static void main(String[] args) { // public static void main(String[] args) {
// runExtensionForm(args, BlockAndReplacePackets.class); // runExtensionForm(args, BlockAndReplacePackets.class);
// } // }
@ -71,6 +77,26 @@ public class BlockAndReplacePackets extends ExtensionForm {
} }
private String getVal() {
String val = txt_value.getText();
String type = cmb_type.getSelectionModel().getSelectedItem();
String side = cmb_side.getSelectionModel().getSelectedItem();
if (type.endsWith("packet")) {
HMessage.Direction dir = side.equals("Outgoing") ? HMessage.Direction.TOSERVER : HMessage.Direction.TOCLIENT;
PacketInfo fromName = packetInfoManager.getPacketInfoFromName(dir, val);
PacketInfo fromHash = packetInfoManager.getPacketInfoFromHash(dir, val);
if (fromName != null) {
val = fromName.getHeaderId() +"";
}
else if (fromHash != null) {
val = fromHash.getHeaderId() +"";
}
}
return val;
}
private void refreshOptions() { private void refreshOptions() {
txt_replacement.setDisable(cmb_type.getSelectionModel().getSelectedItem().startsWith("Block")); txt_replacement.setDisable(cmb_type.getSelectionModel().getSelectedItem().startsWith("Block"));
if (cmb_side.getItems().size() == 2 && !cmb_type.getSelectionModel().getSelectedItem().endsWith("packet")) { if (cmb_side.getItems().size() == 2 && !cmb_type.getSelectionModel().getSelectedItem().endsWith("packet")) {
@ -84,7 +110,7 @@ public class BlockAndReplacePackets extends ExtensionForm {
} }
boolean isValid = false; boolean isValid = false;
String val = txt_value.getText(); String val = getVal();
String repl = txt_replacement.getText(); String repl = txt_replacement.getText();
String type = cmb_type.getSelectionModel().getSelectedItem(); String type = cmb_type.getSelectionModel().getSelectedItem();
String side = cmb_side.getSelectionModel().getSelectedItem(); String side = cmb_side.getSelectionModel().getSelectedItem();
@ -155,7 +181,7 @@ public class BlockAndReplacePackets extends ExtensionForm {
if (val.equals("")) { if (val.equals("")) {
if (spl[1].equals("packet")) { if (spl[1].equals("packet")) {
txt_value.setPromptText("Enter the headerID"); txt_value.setPromptText("Enter headerID/name");
} }
else if (spl[1].equals("integer")) { else if (spl[1].equals("integer")) {
txt_value.setPromptText("Enter an integer"); txt_value.setPromptText("Enter an integer");
@ -186,6 +212,10 @@ public class BlockAndReplacePackets extends ExtensionForm {
intercept(HMessage.Direction.TOSERVER, messageListener); intercept(HMessage.Direction.TOSERVER, messageListener);
intercept(HMessage.Direction.TOCLIENT, messageListener); intercept(HMessage.Direction.TOCLIENT, messageListener);
onConnect((host, port, hotelversion, clientIdentifier, clientType, packetInfoManager) -> {
this.packetInfoManager = packetInfoManager;
});
} }
@Override @Override
@ -208,7 +238,8 @@ public class BlockAndReplacePackets extends ExtensionForm {
} }
public void click_btnAddRule(ActionEvent actionEvent) { public void click_btnAddRule(ActionEvent actionEvent) {
BlockReplaceRule rule = RuleFactory.getRule(cmb_type.getSelectionModel().getSelectedItem(), cmb_side.getSelectionModel().getSelectedItem(), txt_value.getText(), txt_replacement.getText()); BlockReplaceRule rule = RuleFactory.getRule(cmb_type.getSelectionModel().getSelectedItem(),
cmb_side.getSelectionModel().getSelectedItem(), getVal(), txt_replacement.getText(), packetInfoManager);
rules.add(rule); rules.add(rule);
rule.onDelete(observable -> rules.remove(rule)); rule.onDelete(observable -> rules.remove(rule));
new RuleContainer(rule, vbox); new RuleContainer(rule, vbox);

View File

@ -1,5 +1,7 @@
package gearth.services.internal_extensions.blockreplacepackets.rules; package gearth.services.internal_extensions.blockreplacepackets.rules;
import gearth.misc.packet_info.PacketInfoManager;
import gearth.protocol.HMessage;
import gearth.protocol.HPacket; import gearth.protocol.HPacket;
/** /**
@ -7,7 +9,7 @@ import gearth.protocol.HPacket;
*/ */
public class RuleFactory { public class RuleFactory {
public static BlockReplaceRule getRule(String type, String side, String value, String replacement) { public static BlockReplaceRule getRule(String type, String side, String value, String replacement, PacketInfoManager packetInfoManager) {
BlockReplaceRule.Option rOption = BlockReplaceRule.Option.valueOf(type.split(" ")[0].toUpperCase()); BlockReplaceRule.Option rOption = BlockReplaceRule.Option.valueOf(type.split(" ")[0].toUpperCase());
BlockReplaceRule.Type rType = BlockReplaceRule.Type.valueOf(type.split(" ")[1].toUpperCase()); BlockReplaceRule.Type rType = BlockReplaceRule.Type.valueOf(type.split(" ")[1].toUpperCase());
BlockReplaceRule.Side rSide = BlockReplaceRule.Side.valueOf(side.toUpperCase()); BlockReplaceRule.Side rSide = BlockReplaceRule.Side.valueOf(side.toUpperCase());
@ -24,7 +26,11 @@ public class RuleFactory {
return new ReplaceIntegerRule(rSide, Integer.parseInt(value), Integer.parseInt(replacement)); return new ReplaceIntegerRule(rSide, Integer.parseInt(value), Integer.parseInt(replacement));
} }
if (rType == BlockReplaceRule.Type.PACKET) { if (rType == BlockReplaceRule.Type.PACKET) {
return new ReplacePacketRule(rSide, Integer.parseInt(value), new HPacket(replacement)); HPacket packet = new HPacket(replacement);
if (!packet.isPacketComplete()) {
packet.completePacket(rSide == BlockReplaceRule.Side.INCOMING ? HMessage.Direction.TOCLIENT : HMessage.Direction.TOSERVER, packetInfoManager);
}
return new ReplacePacketRule(rSide, Integer.parseInt(value), packet);
} }
if (rType == BlockReplaceRule.Type.STRING) { if (rType == BlockReplaceRule.Type.STRING) {
return new ReplaceStringRule(rSide, value, replacement); return new ReplaceStringRule(rSide, value, replacement);