예제 #1
0
  @Override
  public boolean onCommandOption(CommandSender sender, String[] args) {
    try {
      File ticketFile = new File(MyPetApi.getPlugin().getDataFolder(), "ticket.zip");
      ZipOutputStream out = new ZipOutputStream(new FileOutputStream(ticketFile));

      addFileToZip(new File(MyPetApi.getPlugin().getDataFolder(), "config.yml"), out, "");
      addFileToZip(new File(MyPetApi.getPlugin().getDataFolder(), "pet-config.yml"), out, "");
      addFileToZip(new File(MyPetApi.getPlugin().getDataFolder(), "My.Pets.old"), out, "");
      addFileToZip(new File(MyPetApi.getPlugin().getDataFolder(), "pets.db"), out, "");
      addFileToZip(new File(MyPetApi.getPlugin().getDataFolder(), "worldgroups.yml"), out, "");
      addFileToZip(new File(MyPetApi.getPlugin().getDataFolder(), "skilltrees"), out, "");
      addFileToZip(
          new File(MyPetApi.getPlugin().getDataFolder(), "logs" + File.separator + "MyPet.log"),
          out,
          "");
      addFileToZip(
          new File(
              MyPetApi.getPlugin().getDataFolder().getParentFile().getParentFile(),
              "logs" + File.separator + "latest.log"),
          out,
          "");

      out.close();

      sender.sendMessage(ChatColor.RED + "------------------------------------------------");
      sender.sendMessage(
          "Ticket file created. Please upload this file somewhere and add the link to your ticket.");
      sender.sendMessage("  " + ticketFile.getAbsoluteFile());
      sender.sendMessage(ChatColor.RED + "------------------------------------------------");
    } catch (IOException e) {
      e.printStackTrace();
    }
    return true;
  }
예제 #2
0
 @Override
 public boolean comparePlayerWithEntity(MyPetPlayer player, Object obj) {
   EntityHuman entityHuman = (EntityHuman) obj;
   if (MyPetApi.getPlugin().isInOnlineMode()) {
     return player.getPlayerUUID().equals(entityHuman.getUniqueID());
   } else {
     return entityHuman.getName().equals(player.getName());
   }
 }
예제 #3
0
  private static void registerEnderDragonFix() {
    ProtocolLibrary.getProtocolManager()
        .addPacketListener(
            new PacketAdapter(
                MyPetApi.getPlugin(),
                PacketType.Play.Server.ENTITY_LOOK,
                PacketType.Play.Server.ENTITY_MOVE_LOOK,
                PacketType.Play.Server.ENTITY_TELEPORT) {
              @Override
              public void onPacketSending(PacketEvent event) {
                PacketContainer packet = event.getPacket();

                final Entity entity = packet.getEntityModifier(event).readSafely(0);

                // Now - are we dealing with an invisible slime?
                if (entity != null
                    && entity instanceof MyPetBukkitEntity
                    && ((MyPetBukkitEntity) entity).getPetType() == MyPetType.EnderDragon) {

                  if (packet.getType() == PacketType.Play.Server.ENTITY_LOOK) {
                    // MyPetLogger.write("ENTITY_LOOK: " + packet.getBytes().getValues());

                    byte angle = packet.getBytes().read(3);
                    angle += Byte.MAX_VALUE;
                    packet.getBytes().write(3, angle);
                  } else if (packet.getType() == PacketType.Play.Server.ENTITY_MOVE_LOOK) {
                    // MyPetLogger.write("ENTITY_MOVE_LOOK: " + packet.getBytes().getValues());

                    byte angle = packet.getBytes().read(3);
                    angle += Byte.MAX_VALUE;
                    packet.getBytes().write(3, angle);
                  } else if (packet.getType() == PacketType.Play.Server.ENTITY_TELEPORT) {
                    // MyPetLogger.write("ENTITY_TELEPORT: " + packet.getBytes().getValues());

                    byte angle = packet.getBytes().read(1);
                    angle += Byte.MAX_VALUE;
                    packet.getBytes().write(1, angle);
                  }
                }
              }
            });
  }
예제 #4
0
 @Override
 public void onDisable() {
   ProtocolLibrary.getProtocolManager().removePacketListeners(MyPetApi.getPlugin());
 }
예제 #5
0
  private static void registerCompatFix_1_8() {
    ProtocolLibrary.getProtocolManager()
        .addPacketListener(
            new PacketAdapter(
                MyPetApi.getPlugin(),
                ListenerPriority.HIGHEST,
                PacketType.Play.Server.SPAWN_ENTITY_LIVING,
                PacketType.Play.Server.ENTITY_METADATA) {

              Class entityClass =
                  ReflectionUtil.getClass(
                      "org.bukkit.craftbukkit."
                          + MyPetApi.getCompatUtil().getInternalVersion()
                          + ".entity.CraftEntity");
              Method getHandleMethod = ReflectionUtil.getMethod(entityClass, "getHandle");

              private final EnumMap<DyeColor, Integer> convertedDyeColors =
                  new EnumMap<DyeColor, Integer>(DyeColor.class) {
                    {
                      put(DyeColor.WHITE, 15);
                      put(DyeColor.ORANGE, 14);
                      put(DyeColor.MAGENTA, 13);
                      put(DyeColor.LIGHT_BLUE, 12);
                      put(DyeColor.YELLOW, 11);
                      put(DyeColor.LIME, 10);
                      put(DyeColor.PINK, 9);
                      put(DyeColor.GRAY, 8);
                      put(DyeColor.SILVER, 7);
                      put(DyeColor.CYAN, 6);
                      put(DyeColor.PURPLE, 5);
                      put(DyeColor.BLUE, 4);
                      put(DyeColor.BROWN, 3);
                      put(DyeColor.GREEN, 2);
                      put(DyeColor.RED, 1);
                      put(DyeColor.BLACK, 0);
                    }
                  };

              @Override
              public void onPacketSending(PacketEvent event) {
                if (event.isCancelled()) {
                  return;
                }

                Player player = event.getPlayer();
                if (!isPlayerRunningv1_8(player)) {
                  return;
                }

                PacketContainer newPacketContainer = event.getPacket().deepClone();
                event.setPacket(newPacketContainer);

                if (event.getPacketType() == PacketType.Play.Server.SPAWN_ENTITY_LIVING) {

                  Entity entity = newPacketContainer.getEntityModifier(event).readSafely(0);
                  if (entity != null && entity instanceof MyPetBukkitEntity) {
                    MyPetBukkitEntity petEntity = (MyPetBukkitEntity) entity;
                    List<WrappedWatchableObject> wrappedWatchableObjectList =
                        newPacketContainer.getDataWatcherModifier().read(0).getWatchableObjects();
                    newPacketContainer
                        .getDataWatcherModifier()
                        .write(
                            0,
                            new WrappedDataWatcher(
                                fixMetadata(petEntity, wrappedWatchableObjectList)));
                  }
                } else if (event.getPacketType() == PacketType.Play.Server.ENTITY_METADATA) {

                  Entity entity = newPacketContainer.getEntityModifier(event).read(0);
                  if (entity != null && entity instanceof MyPetBukkitEntity) {
                    MyPetBukkitEntity petEntity = (MyPetBukkitEntity) entity;

                    List<WrappedWatchableObject> wrappedWatchableObjectList =
                        newPacketContainer.getWatchableCollectionModifier().read(0);
                    newPacketContainer
                        .getWatchableCollectionModifier()
                        .write(0, fixMetadata(petEntity, wrappedWatchableObjectList));
                  }
                }
              }

              private List<WrappedWatchableObject> fixMetadata(
                  MyPetBukkitEntity petEntity,
                  List<WrappedWatchableObject> wrappedWatchableObjectList) {
                if (petEntity == null || wrappedWatchableObjectList == null) {
                  return wrappedWatchableObjectList;
                }

                if (petEntity.getMyPet() instanceof MyPetBaby
                    && hasKey(12, wrappedWatchableObjectList)) {
                  Object object = getKeyValue(12, wrappedWatchableObjectList);
                  if (object instanceof Integer) {
                    int value = ((Number) object).intValue();
                    removeKey(12, wrappedWatchableObjectList);

                    if (petEntity.getPetType() == MyPetType.Horse) {
                      if (value == -24000) {
                        value = -1;
                      }
                    }
                    wrappedWatchableObjectList.add(new WrappedWatchableObject(12, (byte) value));
                  }
                }
                if (petEntity.getPetType() == MyPetType.Wolf
                    && hasKey(20, wrappedWatchableObjectList)) {
                  Object object = getKeyValue(20, wrappedWatchableObjectList);

                  if (object instanceof Byte) {
                    DyeColor color = DyeColor.getByWoolData((byte) ((Byte) object & 0xF));
                    removeKey(20, wrappedWatchableObjectList);
                    wrappedWatchableObjectList.add(
                        new WrappedWatchableObject(
                            20, (byte) ((this.convertedDyeColors.get(color)) & 0xF)));
                  }
                }
                if (petEntity.getPetType() == MyPetType.Enderman
                    && hasKey(16, wrappedWatchableObjectList)) {
                  Object object = getKeyValue(16, wrappedWatchableObjectList);
                  if (object instanceof Byte) {
                    removeKey(16, wrappedWatchableObjectList);
                    wrappedWatchableObjectList.add(
                        new WrappedWatchableObject(16, Short.valueOf((Byte) object)));
                  }
                }

                return wrappedWatchableObjectList;
              }

              private boolean hasKey(
                  int key, List<WrappedWatchableObject> wrappedWatchableObjectList) {
                for (WrappedWatchableObject next : wrappedWatchableObjectList) {
                  if (next.getIndex() == key) {
                    return true;
                  }
                }
                return false;
              }

              private Object getKeyValue(
                  int key, List<WrappedWatchableObject> wrappedWatchableObjectList) {
                for (WrappedWatchableObject next : wrappedWatchableObjectList) {
                  if (next.getIndex() == key) {
                    return next.getValue();
                  }
                }
                return null;
              }

              private void removeKey(
                  int key, List<WrappedWatchableObject> wrappedWatchableObjectList) {
                for (Iterator<WrappedWatchableObject> wrappedWatchableObjectIterator =
                        wrappedWatchableObjectList.iterator();
                    wrappedWatchableObjectIterator.hasNext(); ) {
                  WrappedWatchableObject next = wrappedWatchableObjectIterator.next();
                  if (next.getIndex() == key) {
                    wrappedWatchableObjectIterator.remove();
                    break;
                  }
                }
              }

              @SuppressWarnings("unchecked")
              private boolean isPlayerRunningv1_8(Player player) {
                try {
                  Object nmsPlayer = getHandleMethod.invoke(player);
                  Object playerConnection =
                      ReflectionUtil.getFieldValue(
                          nmsPlayer.getClass(), nmsPlayer, "playerConnection");
                  Object networkManager =
                      ReflectionUtil.getFieldValue(
                          playerConnection.getClass(), playerConnection, "networkManager");

                  Method getVersionMethod =
                      ReflectionUtil.getMethod(networkManager.getClass(), "getVersion");
                  return (Integer) getVersionMethod.invoke(networkManager) > 5;
                } catch (Exception exception) {
                  return false;
                }
              }
            });
  }