Werewolf

Werewolf

Beware of the full moon!


Rules

To become a Werewolf, you have to get bitten (attacked) by a wolf or Werewolf at night and contract the Werewolf infection. This infection will turn the player into a Werewolf every night, starting the next night, if the player is under a open sky. To prevent turning, the player can stay inside during night.

  • When in wolf-form, character skin changes to a Werewolf skin (Only visible to other players)
  • When in wolf-form, players will become identifiable only as "Werewolf" in the playerlist and chat (Adding a element of mystery)
  • When in wolf-form, werewolves speak in a language which appears as growling noises to normal players.
  • A Werewolf automatically turns into his Wolf-form during a full moon, when under a open sky.
  • A Werewolf automatically turns into his Human-form at dawn.
  • A Werewolf only eats meat!
  • A Werewolf gains health from killing mobs! (Hunting)
  • A Werewolf does high unarmed damage!
  • A Werewolf moves faster!
  • A Werewolf pounces instead of merely jumping!
  • A Werewolf has night vision.
  • A Werewolf cannot wield Armor while in Wolf-form, but has a high natural defense!
  • A Werewolf can growl with /growl
  • A Werewolf can growl with /howl
  • Vampires cannot be infected with the Werewolf infection
  • When a Werewolf gets killed, the player re-spawns in human form.
  • Werewolves are very vulnerable to “Silver” (Gold) weapons.
  • Werewolves are the natural leaders of wild wolves
  • The Werewolf infection can be cured by consuming the Cure: The werewolf cure potion

The Werewolf Clans

There are 3 Werewolf clans, each with their own skin and ability.
A werewolf will spread the infection from his own clan.
Any other infection method will result in a random clan.

Clan NameAppearanceClan Skill
The SilvermanesGrey wolfSpeed 2, Damage 3
The BloodmoonsBlack wolfSpeed 2, Regeneration 3
The WitherfangsComic WolfSpeed 4, Jump 4


  • Clan members cannot damage eachother.
  • A clan member can view the ranked clan member list with the /ww list command.
  • The three werewolf clans get points for hunting other creatures while in Werewolf form.
  • Slaying werewolves from another clan, and especially the another clan's alpha, earns bonus points for the clan.

  • Periodically, the total score of each clan is calculated and the leading clan is announced.

Clan Alpha

The Clan alpha is the natural leader of the clan.
The Clan alpha is selected as the most "senior" of the werewolves in the clan, when the clan has lost its old Alpha.
Ways of losing the alpha are:

  • The alpha werewolf was slain by another clan member
  • The alpha werewolf has not transformed for some days and is therefore auto-cured (See the auto-cure setting)
  • The alpha werewolf has cured himself by drinking the cure potion

Alpha abilities are:

  • /howl ability has a stunning effect on all living creatures nearby
  • Double amount of damage
  • Half the amount of damage taken

Werewolf Maturity

As a werewolf, you gradually mature and gain more control over your condition depending on how many full moon transformations you have experienced:

Number of tranformationsMaturity
3You no longer drop clothes and items when transforming
5You can now transform at will with the /werewolf transform command
10Gold items no longer causes extra damage on you


Hunting werewolves

At any time, a bounty is being kept for the killing of a Werewolf.

Players can check the current bounty with /werewolf bounty and add to this bounty themselves by using /werewolf addbounty <amount>. A player can put himself into "werewolf hunting mode" by using /werewolf hunt. This helps him find the nearest werewolf simply using the compass. The player can disable "werewolf hunting mode" by using /werewolf hunt again.

The Werewolf bounty will be paid out to the first player to slay a Werewolf. Players can check the top 10 werewolf hunters with /werewolf top

NOTE: Werewolf hunting requires Vault to be installed.

Werewolf Potions

A player can drink the Werewolf potion to infect himself with the Werewolf infection.
Note that drinking the infection potion must be drunk during a full moon!

Admins can use the /werewolf potion command to hand out infection potions to players

Curing werewolves

A Werewolf player can drink the Werewolf cure potion to cure himself from being a Werewolf. Note that the player can only drink the cure while in HUMAN form. (Werewolves paws do not play well with bottles).

Selling potions using signs

Admins or players with the correct permission nodes can place signs for selling Werewolf infection potions and Werewolf cure potions.
Players can use these signs by simply click the sign to get a potion.

NOTE: When using Vault, the selling prices from the config.yml is used. Without vault, all these signs will give away potions for free.

To use signs, first make sure signs are enabled in the config and place signs with the following lines:

Werewolf cure potion sign

  1. Werewolf
  2. Infection

Werewolf cure potion sign

  1. Werewolf
  2. Cure

Werewolf trophies

Slaying a werewolf is quite an accomplishment.
After successfully slaying a werewolf with a any type of sword, the werewolf head is cut off and can be kept by the player as a trophy!

Languages

Werewolf currently supports:

LanguageAuthorConfig setting
EnglishDogOnFireenglish
GermanRasCasgerman
Frenchlucaspart7french
ChinesePiggy Nightmarechinese
PolishShabyPederastianpolish
DanishDogOnFiredanish
Portuguesegabrieljamhportuguese
SpanishDavid_204spanish
ItalianTecnarcaitalian
Koreanwoojung3korean

Simply set the "language" setting in the config.yml to any of these config settings (lower case) and the plugin will download the language file from my server at www.doggycraft.dk.

NOTE: Is there a language missing and are you are native speaker of it? Then please help by translating the language file and I will upload it for everyone to use!


Installation

Put the Werewolf.jar file in your /plugins folder and you are ready to go!

There is an additional way of infecting with the /werewolf infect <playername> to infect a specific player with the infection.
Using commands will place the Werewolf in a random clan.


Commands

NOTE: /ww can be used as instead of /werewolf

CommandDescription
werewolfShow the basic info
werewolf listViews the top 10 members in your clan
werewolf transformTransforms instantly into werewolf form
werewolf untransformTransforms back into human form
werewolf clanView the clan status
werewolf check <playername>Checks whether player is a Werewolf
werewolf bounty <playername>Checks current bounty for slaying a Werewolf
werewolf addbounty <amount>Adds to the Werewolf bounty
werewolf huntToggles Werewolf hunt mode
werewolf topViews the top 10 Werewolf hunters
werewolf infectInfects yourself with the Werewolf infection
werewolf infect <playername>Infects a player with the Werewolf infection
werewolf toggleToggles Werewolf infection for yourself
werewolf toggle <playername>Toggles Werewolf infection for a player
werewolf potionSpawns 1 Werewolf infection potion
werewolf reloadReloads configuration from disk


Permission Nodes

  • werewolf.* - Player can do everything below
  • werewolf.growl - Player can growl when in Werewolf form
  • werewolf.howl - Player can howl when in Werewolf form
  • werewolf.infect - Player can infect a player with the Werewolf infection
  • werewolf.infectself - Player can infect himself with the Werewolf infection
  • werewolf.transform - Player can use the transform command
  • werewolf.untransform - Player can use the untransform command
  • werewolf.clan - Player can check his clan status
  • werewolf.list - Player can view the top 10 members within his clan
  • werewolf.togglewerewolf - Player can toggle Werewolf status for others
  • werewolf.togglewerewolfself - Player can toggle Werewolf status for themselves
  • werewolf.infectother - Player can infect others with the Werewolf infection by biting (attacking) them
  • werewolf.becomeinfected - Player can become infected with the Werewolf infection
  • werewolf.bounty - Player can view the current Werewolf bounty
  • werewolf.addbounty - Player add to the current Werewolf bounty
  • werewolf.top - Player can view the top 10 Werewolf hunters
  • werewolf.hunt - Player toggle Werewolf hunting mode for himself
  • werewolf.listener - Player can understand the Werewolf language
  • werewolf.seer - Player can see a players original skin for a Werewolf player
  • werewolf.check - Player can check whether a player is infected with the Werewolf infection
  • werewolf.potion.infection.create - Player can create a Werewolf infection potion
  • werewolf.potion.infection.drink - Player can drink a Werewolf infection potion
  • werewolf.potion.cure.create - Player can create a Werewolf cure potion
  • werewolf.potion.cure.drink - Player can drink a Werewolf cure potion
  • werewolf.sign.infection.place - Player can place a sign selling infection potions
  • werewolf.sign.cure.place - Player can place a sign selling cure potions
  • werewolf.sign.infection.use - Player can use a sign selling infection potions
  • werewolf.sign.cure.use - Player can use a sign selling cure potions
  • werewolf.updates - Player will see update notifications



Configuration

SettingDescriptionDefault Value
Modifiers.Wolf.HandDamageThe multiplier for unarmed Werewolf damage8
Modifiers.Wolf.ItemDamageThe multiplier for itembased Werewolf damage3
Infection.WerewolfBiteRiskThe risk of getting the Werewolf infection pr. Werewolf attack0.05
Infection.WildWolfBiteRiskThe risk of getting the Werewolf infection pr. Wild wolf attack0.75
Infection.CureChanceThe change of being cured when drinking the Werewolf cure potion1.00
Infection.AutoCureDaysNumber of real days without transformation, after which a player will be auto-cured. Generally used to purge inactive players from the werewolf files. Set this to 0 to disable.14
Modifiers.ArmorMultiplierThe amount of damage that a Werewolf takes compared to a normal player0.8
Night.StartTime of day when Werewolves will start turning into Werewolf form13000
Night.EndTime of day when Werewolves will start turning into human form23000
WerewolfGroup.EnableWhen a player transform into a Werewolf, put the player into a permission groupfalse
WerewolfGroup.NameWhen a player transform into a Werewolf, put the player into this permission group. Player will be put back into his original permission group when returning to human form."Werewolf"
AllowedWorldsList of names of worlds in which werewolves can exist<Name of the servers main world>
Settings.DisplayUpdateNotificationsShow notifications about updates to Werewolftrue
Settings.MetricsOptOutDo not send metrics to mcstats.orgfalse
Settings.AutoBountyServer will automatically add to the Werewolf bountyfalse
Settings.AutoBountyMaximumServer will automatically add to the Werewolf bounty until this limit1000
Settings.ServerNameName of the server"Your Server"
Settings.LanguageLanguage for this plugin"english"
Settings.DropArmorOnTransformPlayer will drop all worn armor items to the ground when transformingtrue
Settings.OnlyTransformDuringFullMoonIf false, players will transform every night instead of only during a fullmoontrue
Settings.WolfChatWerewolves will chat in the Werewolf languagetrue
Settings.CureWerewolfWhenSlainWerewolves are cured when slainfalse
Trophies.EnabledSlaying a werewolf with a sword will drop the head of the werewolffalse
Pounce.EnabledWhether a werewolf will pounce instead of normal jumpingfalse
Pounce.PlaneSpeedThe horisontal speed of a werewolf pounce2.25
Pounce.HeightSpeedThe vertical speed of a werewolf pounce1.10
Maturity.NoDropItemsNumber of transforms for not dropping clothes on transform4
Maturity.FullMoonImmunityNumber of transforms for immunity to full moons6
Maturity.ControlledTransformationNumber of transforms for controlled transformation8
Maturity.GoldImmunityNumber of transforms for gold immunity10
Clans.EnabledWhether werewolf clans are enabledtrue
Signs.EnabledWhether werwolf potion signs are enabledfalse
Signs.InfectionPriceThe price for buying a infection potion use a sign (when Vault is installed)1000
Signs.CurePriceThe price for buying a cure potion use a sign (when Vault is installed)500


Upcoming features

  • Config setting for rewarding items as bounty instead of money
  • Config setting for bounty payouts
  • Chat formatting in config
  • Crafting recipe for silver swords
  • Crafting recipe for werewolf infection potion
  • Crafting recipe for werewolf cure potion
  • Werewolf generations (Alpha, Beta)
  • Werewolf names


Disclaimers

This plugin contacts curse.com and checks for newer versions by using the Curse ServerMOD API.
Opting out of this service can be done by editing config.yml and changing DisplayUpdateNotifications to false.

This plugin utilises Hidendra's plugin metrics system, which means that the following information is collected and sent to mcstats.org:

A unique identifier
The server's version of Java
Whether the server is in offline or online mode
The plugin's version
The server's version
The OS version/name and architecture
The core count for the CPU
The number of players online
The Metrics version

Opting out of this service can be done by editing config.yml and changing MetricsOptOut to true.


Changelog

The Werewolf Changelog is here


Do you want to support this Plugin?

Buy the developer a beer! Beer makes coding faster

WikiCreole Logo

You must login to post a comment. Don't have an account? Register to get one!

  • Avatar of snowball2993 snowball2993 May 23, 2015 at 01:23 UTC - 0 likes

    Do you taste that? It tastes like.... salt, tons and tons of salt.

  • Avatar of merlinshaw merlinshaw May 22, 2015 at 19:33 UTC - 0 likes

    Sorry if im showing off some of your Code DoggyOnFire Heres a little bit of code from both plugins Only difference really on just one of the .class files is the renaming of the imports

    Shzam20 & harlleyquin101 Can you tell who's is who's?

    Code 1

    package com.dogonfire.werewolf.listeners;
    
    import com.dogonfire.werewolf.ClanManager;
    import com.dogonfire.werewolf.ClanManager.ClanType;
    import com.dogonfire.werewolf.DamageHack;
    import com.dogonfire.werewolf.LanguageManager;
    import com.dogonfire.werewolf.LanguageManager.LANGUAGESTRING;
    import com.dogonfire.werewolf.PermissionsManager;
    import com.dogonfire.werewolf.SkinManager;
    import com.dogonfire.werewolf.TrophyManager;
    import com.dogonfire.werewolf.UpdateNotifier;
    import com.dogonfire.werewolf.Werewolf;
    import com.dogonfire.werewolf.WerewolfManager;
    import com.dogonfire.werewolf.WerewolfSkin;
    import java.util.List;
    import java.util.Random;
    import net.minecraft.server.v1_7_R1.Packet;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.Server;
    import org.bukkit.World;
    import org.bukkit.block.Block;
    import org.bukkit.craftbukkit.v1_7_R1.entity.CraftWolf;
    import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftItemStack;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Item;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerAnimationEvent;
    import org.bukkit.event.player.PlayerAnimationType;
    import org.bukkit.event.player.PlayerChangedWorldEvent;
    import org.bukkit.event.player.PlayerItemHeldEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.event.player.PlayerPickupItemEvent;
    import org.bukkit.event.player.PlayerPortalEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.event.player.PlayerRespawnEvent;
    import org.bukkit.event.player.PlayerToggleFlightEvent;
    import org.bukkit.event.player.PlayerToggleSneakEvent;
    import org.bukkit.inventory.PlayerInventory;
    import org.bukkit.scheduler.BukkitScheduler;
    import org.bukkit.util.Vector;
    
    public class PlayerListener
      implements Listener
    {
      private Werewolf plugin = null;
      private Random random = new Random();
      
      public PlayerListener(Werewolf plugin)
      {
        this.plugin = plugin;
      }
      
      @EventHandler(priority=EventPriority.LOW)
      public void onPlayerJoin(PlayerJoinEvent event)
      {
        if (!Werewolf.pluginEnabled) {
          return;
        }
        Werewolf.getWerewolfManager().unsetWerewolfSkin(event.getPlayer().getName(), true);
        
        this.plugin.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new CheckTransformationTask(event.getPlayer()), 20L);
        
        Werewolf.getSkinManager().showWorldDisguises(event.getPlayer());
        if ((this.plugin.useUpdateNotifications) && ((event.getPlayer().isOp()) || (Werewolf.getPermissionsManager().hasPermission(event.getPlayer(), "werewolf.updates")))) {
          this.plugin.getServer().getScheduler().runTaskAsynchronously(this.plugin, new UpdateNotifier(this.plugin, event.getPlayer()));
        }
      }
      
      @EventHandler
      public void onPlayerQuit(PlayerQuitEvent event)
      {
        Werewolf.getSkinManager().removeSkinFromWorld(event.getPlayer().getWorld(), event.getPlayer().getName());
      }
      
      @EventHandler
      public void onPlayerPortal(PlayerPortalEvent event)
      {
        if (!Werewolf.pluginEnabled) {
          return;
        }
        Werewolf.getSkinManager().removeSkinFromWorld(event.getFrom().getWorld(), event.getPlayer().getName());
        
    
    
        Werewolf.getSkinManager().showWorldDisguises(event.getPlayer());
        
        Werewolf.getSkinManager().visibleToWorld(event.getPlayer());
      }
      
      @EventHandler
      public void onPlayerRespawn(PlayerRespawnEvent event)
      {
        if (!Werewolf.pluginEnabled) {
          return;
        }
        Werewolf.getSkinManager().visibleToWorld(event.getPlayer());
        
    
        final Player player = event.getPlayer();
        
        this.plugin.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, 
          new Runnable()
          {
            public void run()
            {
              Werewolf.getSkinManager().showWorldDisguises(player);
            }
          }, 20L);
      }
      
      @EventHandler
      public void onPlayerWorldChange(PlayerChangedWorldEvent event)
      {
        Werewolf.getSkinManager().removeSkinFromWorld(event.getFrom(), event.getPlayer().getName());
        
        Werewolf.getWerewolfManager().unsetWerewolfSkin(event.getPlayer().getName(), true);
        
    
        final Player player = event.getPlayer();
        
        this.plugin.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, 
          new Runnable()
          {
            public void run()
            {
              Werewolf.getSkinManager().showWorldDisguises(player);
            }
          }, 20L);
        
        Werewolf.getSkinManager().visibleToWorld(event.getPlayer());
      }
      
      @EventHandler
      public void onPlayerAnimation(PlayerAnimationEvent event)
      {
        if (!Werewolf.pluginEnabled) {
          return;
        }
        if (!event.isCancelled())
        {
          if (event.getAnimationType() != PlayerAnimationType.ARM_SWING) {
            return;
          }
          if (Werewolf.getWerewolfManager().hasWerewolfSkin(event.getPlayer().getName()))
          {
            WerewolfSkin skin = Werewolf.getSkinManager().getSkin(event.getPlayer());
            
    
            Werewolf.getSkinManager().sendPacketsToWorld(event.getPlayer().getWorld(), new Packet[] { skin.getAnimationPacket(0) });
          }
          Player nearestWerewolf = Werewolf.getWerewolfManager().getNearestWerewolf(event.getPlayer().getName());
          if ((nearestWerewolf != null) && (DamageHack.canPlayerHit(event.getPlayer(), nearestWerewolf.getLocation())))
          {
            int damage = DamageHack.getDamageFromItemInHand(event.getPlayer());
            
    
            nearestWerewolf.damage(damage, event.getPlayer());
          }
        }
      }
      
      @EventHandler
      public void onPlayerToggleSneak(PlayerToggleSneakEvent event)
      {
        if (!Werewolf.pluginEnabled) {
          return;
        }
        if (!Werewolf.getWerewolfManager().hasWerewolfSkin(event.getPlayer().getName())) {
          return;
        }
        WerewolfSkin skin = Werewolf.getSkinManager().getSkin(event.getPlayer());
        
        skin.setCrouch(event.isSneaking());
        Werewolf.getSkinManager().sendPacketsToWorld(event.getPlayer().getWorld(), new Packet[] { skin.getMetadataPacket() });
      }
      
      @EventHandler
      public void onHeldItemChange(PlayerItemHeldEvent event)
      {
        Player player = event.getPlayer();
        if (Werewolf.getWerewolfManager().hasWerewolfSkin(player.getName()))
        {
          WerewolfSkin skin = Werewolf.getSkinManager().getSkin(player);
          if (skin != null)
          {
            org.bukkit.inventory.ItemStack heldItem = event.getPlayer().getInventory().getItem(event.getNewSlot());
            
            net.minecraft.server.v1_7_R1.ItemStack craftItem = CraftItemStack.asNMSCopy(heldItem);
            
            Werewolf.getSkinManager().sendPacketsToWorld(event.getPlayer().getWorld(), new Packet[] { skin.getEquipmentChangePacket(0, craftItem) });
          }
        }
      }
      
      @EventHandler
      public void onFlightAttempt(PlayerToggleFlightEvent event)
      {
        Player player = event.getPlayer();
        if (!Werewolf.getWerewolfManager().hasWerewolfSkin(player.getName())) {
          return;
        }
        event.setCancelled(true);
      }
      
      @EventHandler
      public void onPlayerMove(PlayerMoveEvent event)
      {
        if (!Werewolf.pluginEnabled) {
          return;
        }
        if (!Werewolf.getWerewolfManager().hasWerewolfSkin(event.getPlayer().getName())) {
          return;
        }
        Player player = event.getPlayer();
        Vector newDirection;
        if (this.plugin.usePounce)
        {
          double diff = event.getTo().getY() - event.getFrom().getY();
          if (diff <= 0.0D) {
            Werewolf.getWerewolfManager().removePouncing(player.getName());
          } else if (!Werewolf.getWerewolfManager().isPouncing(player.getName())) {
            if (event.getTo().getWorld().getBlockAt(event.getTo()).getType() == Material.AIR)
            {
              newDirection = event.getTo().toVector();
              newDirection.subtract(event.getFrom().toVector());
              
              newDirection.setY(0);
              newDirection.normalize();
              newDirection.multiply(this.plugin.pouncePlaneSpeed);
              newDirection.setY(this.plugin.pounceHeightSpeed);
              
              newDirection = event.getPlayer().getVelocity().add(newDirection);
              
              event.getPlayer().setVelocity(event.getPlayer().getVelocity().add(newDirection));
              
              Werewolf.getWerewolfManager().setPouncing(player.getName());
            }
          }
        }
        Werewolf.getSkinManager().sendMovement(event.getPlayer(), event.getPlayer().getVelocity(), event.getTo());
        if (Math.random() < 0.05D)
        {
          int wolfsOwned = 0;
          for (Entity entity : player.getNearbyEntities(this.plugin.wolfdistance, this.plugin.wolfdistance, this.plugin.wolfdistance)) {
            if ((entity instanceof CraftWolf))
            {
              CraftWolf wolf = (CraftWolf)entity;
              if ((!wolf.isTamed()) || (wolf.getOwner() == null))
              {
                player.sendMessage(ChatColor.LIGHT_PURPLE + "A wild wolf joins your pack!");
                
                wolf.setMaxHealth(wolf.getMaxHealth());
                wolf.setHealth(wolf.getMaxHealth());
                wolf.setOwner(player);
                wolf.setTamed(true);
                
    
                wolfsOwned++;
                
                Werewolf.getWerewolfManager().addPackWolf(player.getName());
              }
            }
          }
        }
      }
      
      @EventHandler
      public void onPlayerDeath(PlayerDeathEvent event)
      {
        if ((event.getEntity().getKiller() == null) || (event.getEntity().getKiller().getName() == null))
        {
          if (this.plugin.renameWerewolves) {
            if (Werewolf.getWerewolfManager().hasWerewolfSkin(event.getEntity().getName())) {
              switch (this.random.nextInt(3))
              {
              case 0: 
                event.setDeathMessage("Werewolf died"); break;
              case 1: 
                event.setDeathMessage("Werewolf was killed"); break;
              case 2: 
                event.setDeathMessage("Werewolf died");
              }
            }
          }
          return;
        }
        String killerName = event.getEntity().getKiller().getName();
        String victimName = event.getEntity().getName();
        if (this.plugin.renameWerewolves)
        {
          Player player = event.getEntity();
          if (Werewolf.getWerewolfManager().hasWerewolfSkin(killerName)) {
            switch (this.random.nextInt(3))
            {
            case 0: 
              event.setDeathMessage(victimName + " was slaughtered by a Werewolf"); break;
            case 1: 
              event.setDeathMessage(victimName + " was ripped apart by a Werewolf"); break;
            case 2: 
              event.setDeathMessage(victimName + " was torn to pieces by a Werewolf");
            }
          } else if (Werewolf.getWerewolfManager().hasWerewolfSkin(victimName)) {
            event.setDeathMessage("Werewolf was slain by " + killerName);
          }
        }
        if (this.plugin.useTrophies)
        {
          Player killer = this.plugin.getServer().getPlayer(killerName);
          if (killer != null) {
            if ((killer.getItemInHand().getType() == Material.DIAMOND_SWORD) || (killer.getItemInHand().getType() == Material.GOLD_SWORD) || (killer.getItemInHand().getType() == Material.IRON_SWORD) || (killer.getItemInHand().getType() == Material.STONE_SWORD))
            {
              org.bukkit.inventory.ItemStack trophy = Werewolf.getTrophyManager().getTrophyFromWerewolfPlayer(killerName);
              event.getDrops().add(trophy);
            }
          }
        }
        if (this.plugin.useClans)
        {
          ClanManager.ClanType killerClan = Werewolf.getWerewolfManager().getWerewolfClan(killerName);
          ClanManager.ClanType victimClan = Werewolf.getWerewolfManager().getWerewolfClan(victimName);
          if (killerClan == victimClan) {
            if (Werewolf.getClanManager().isAlpha(killerClan, victimName))
            {
              Werewolf.getClanManager().assignAlphaInClan(killerClan, killerName);
              
              Werewolf.getLanguageManager().setPlayerName(killerName);
              Werewolf.getClanManager().sendMessageToClan(killerClan, ChatColor.LIGHT_PURPLE + Werewolf.getLanguageManager().getLanguageString(LanguageManager.LANGUAGESTRING.NewClanAlpha));
            }
          }
        }
        if (this.plugin.cureWerewolfWhenSlain)
        {
          Werewolf.getWerewolfManager().unmakeWerewolf(victimName);
        }
        else
        {
          Werewolf.getWerewolfManager().unsetWerewolfSkin(victimName, false);
          
    
    
    
          Werewolf.getWerewolfManager().setInfectedThisNight(victimName, true);
        }
      }
      
      @EventHandler
      public void onPlayerPickupItem(PlayerPickupItemEvent event)
      {
        Player player = event.getPlayer();
        if (!Werewolf.getWerewolfManager().hasWerewolfSkin(player.getName())) {
          return;
        }
        if (this.plugin.keepWerewolfHandsFree) {
          if (player.getItemInHand().getType() == Material.AIR) {
            event.setCancelled(true);
          }
        }
        Material material = event.getItem().getItemStack().getType();
        switch (material)
        {
        case NOTE_BLOCK: 
        case OBSIDIAN: 
        case PACKED_ICE: 
        case PAINTING: 
        case PAPER: 
        case PISTON_BASE: 
        case PISTON_EXTENSION: 
        case PISTON_MOVING_PIECE: 
        case PISTON_STICKY_BASE: 
        case POISONOUS_POTATO: 
        case PORK: 
        case PORTAL: 
        case POTATO: 
        case POTATO_ITEM: 
        case POTION: 
        case POWERED_MINECART: 
        case POWERED_RAIL: 
        case PUMPKIN: 
        case PUMPKIN_PIE: 
        case PUMPKIN_SEEDS: 
          event.setCancelled(true); break;
        }
      }
      
      public class CheckTransformationTask
        implements Runnable
      {
        private Player player;
        
        public CheckTransformationTask(Player p)
        {
          this.player = p;
        }
        
        public void run()
        {
          if (Werewolf.getWerewolfManager().canTransform(this.player)) {
            PlayerListener.this.plugin.transform(this.player);
          } else if (Werewolf.getWerewolfManager().canUntransform(this.player)) {
            PlayerListener.this.plugin.untransform(this.player);
          }
        }
      }
    }
    

    Code2

    package a.a.b;
    
    import a.a.c.a.g;
    import a.a.c.b;
    import a.a.d.a;
    import a.a.d.c;
    import a.a.d.h;
    import a.a.d.i;
    import java.util.List;
    import java.util.Random;
    import net.minecraft.server.v1_8_R2.Packet;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.GameMode;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.OfflinePlayer;
    import org.bukkit.Server;
    import org.bukkit.World;
    import org.bukkit.block.Block;
    import org.bukkit.craftbukkit.v1_8_R2.entity.CraftWolf;
    import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftItemStack;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Item;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerAnimationEvent;
    import org.bukkit.event.player.PlayerAnimationType;
    import org.bukkit.event.player.PlayerChangedWorldEvent;
    import org.bukkit.event.player.PlayerGameModeChangeEvent;
    import org.bukkit.event.player.PlayerItemHeldEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.event.player.PlayerPickupItemEvent;
    import org.bukkit.event.player.PlayerPortalEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.event.player.PlayerRespawnEvent;
    import org.bukkit.event.player.PlayerTeleportEvent;
    import org.bukkit.event.player.PlayerToggleFlightEvent;
    import org.bukkit.event.player.PlayerToggleSneakEvent;
    import org.bukkit.inventory.PlayerInventory;
    import org.bukkit.scheduler.BukkitScheduler;
    import org.bukkit.util.Vector;
    
    public class e
      implements Listener
    {
      private a.a.c.f a = null;
      private Random b = new Random();
      
      public e(a.a.c.f plugin)
      {
        this.a = plugin;
      }
      
      @EventHandler
      public void a(PlayerTeleportEvent event)
      {
        if (!a.a.c.f.a) {
          return;
        }
        if (!event.isCancelled())
        {
          Player player = event.getPlayer();
          if (a.a.c.f.d().o(player))
          {
            a.a.a.e skin = a.a.c.f.g().a(
              player);
            if (skin != null) {
              Bukkit.getScheduler().runTask(this.a, new g(player.getUniqueId()));
            } else {
              this.a.c("onEntityDamage: Skin is null for " + 
                player.getName());
            }
          }
        }
      }
      
      @EventHandler(priority=EventPriority.LOW)
      public void a(PlayerJoinEvent event)
      {
        if (!a.a.c.f.a) {
          return;
        }
        int end = event.getJoinMessage().indexOf("(");
        if (end != -1) {
          event.setJoinMessage(event.getJoinMessage().substring(0, end) + "joined the game.");
        }
        a.a.c.f.d().a(event.getPlayer(), true);
        
        this.a.getServer().getScheduler().scheduleSyncDelayedTask(this.a, new a(event.getPlayer()), 20L);
        
        a.a.c.f.g().d(event.getPlayer());
      }
      
      @EventHandler
      public void a(PlayerQuitEvent event)
      {
        a.a.c.f.g().a(event.getPlayer().getWorld(), event.getPlayer());
      }
      
      @EventHandler
      public void a(PlayerPortalEvent event)
      {
        if (!a.a.c.f.a) {
          return;
        }
        a.a.c.f.g().a(event.getFrom().getWorld(), event.getPlayer());
        
        a.a.c.f.g().d(event.getPlayer());
        
        a.a.c.f.g().e(event.getPlayer());
      }
      
      @EventHandler
      public void a(PlayerRespawnEvent event) {}
      
      @EventHandler
      public void a(PlayerChangedWorldEvent event)
      {
        a.a.c.f.g().a(event.getFrom(), event.getPlayer());
        
        a.a.c.f.d().a(event.getPlayer(), true);
        
        final Player player = event.getPlayer();
        
        this.a.getServer().getScheduler().scheduleSyncDelayedTask(this.a, new Runnable()
        {
          public void run()
          {
            a.a.c.f.g().d(player);
          }
        }, 20L);
        
        a.a.c.f.g().e(event.getPlayer());
      }
      
      @EventHandler(priority=EventPriority.HIGHEST)
      public void a(PlayerGameModeChangeEvent e)
      {
        if (e.getNewGameMode() == GameMode.CREATIVE) {
          if (a.a.c.f.d().h(e.getPlayer()))
          {
            e.getPlayer().sendMessage("Nah..");
            e.setCancelled(true);
          }
        }
      }
      
      @EventHandler
      public void a(PlayerAnimationEvent event)
      {
        if (!a.a.c.f.a) {
          return;
        }
        if (!event.isCancelled())
        {
          if (event.getAnimationType() != PlayerAnimationType.ARM_SWING) {
            return;
          }
          if (a.a.c.f.d().o(event.getPlayer()))
          {
            a.a.a.e skin = a.a.c.f.g().a(event.getPlayer());
            
            a.a.c.f.g().a(event.getPlayer().getWorld(), new Packet[] { skin.a(10) });
          }
          Player nearestWerewolf = a.a.c.f.d().a(event.getPlayer());
          if ((nearestWerewolf != null) && (b.a(event.getPlayer(), nearestWerewolf.getLocation())))
          {
            int damage = b.a(event.getPlayer());
            
            nearestWerewolf.damage(damage, event.getPlayer());
          }
        }
      }
      
      @EventHandler
      public void a(PlayerToggleSneakEvent event)
      {
        if (!a.a.c.f.a) {
          return;
        }
        if (!a.a.c.f.d().o(event.getPlayer())) {
          return;
        }
        a.a.a.e skin = a.a.c.f.g().a(event.getPlayer());
        
        skin.a(event.isSneaking());
        a.a.c.f.g().a(event.getPlayer().getWorld(), new Packet[] { skin.b() });
      }
      
      @EventHandler
      public void a(PlayerItemHeldEvent event)
      {
        Player player = event.getPlayer();
        if (a.a.c.f.d().o(player))
        {
          a.a.a.e skin = a.a.c.f.g().a(player);
          if (skin != null)
          {
            org.bukkit.inventory.ItemStack heldItem = event.getPlayer().getInventory().getItem(event.getNewSlot());
            
            net.minecraft.server.v1_8_R2.ItemStack craftItem = CraftItemStack.asNMSCopy(heldItem);
            
            a.a.c.f.g().a(event.getPlayer().getWorld(), new Packet[] { skin.a(0, craftItem) });
          }
        }
      }
      
      @EventHandler
      public void a(PlayerToggleFlightEvent event)
      {
        Player player = event.getPlayer();
        if (!a.a.c.f.d().o(player)) {
          return;
        }
        event.setCancelled(true);
      }
      
      @EventHandler
      public void a(PlayerMoveEvent event)
      {
        if (!a.a.c.f.a) {
          return;
        }
        if (!a.a.c.f.d().o(event.getPlayer())) {
          return;
        }
        Player player = event.getPlayer();
        if (this.a.V)
        {
          double diff = event.getTo().getY() - event.getFrom().getY();
          if (diff <= 0.0D)
          {
            a.a.c.f.d().t(player);
          }
          else if ((!a.a.c.f.d().s(player)) && 
            (event.getTo().getWorld().getBlockAt(event.getTo()).getType() == Material.AIR))
          {
            Vector newDirection = event.getTo().toVector();
            newDirection.subtract(event.getFrom().toVector());
            
            newDirection.setY(0);
            newDirection.normalize();
            newDirection.multiply(this.a.W);
            newDirection.setY(this.a.X);
            
            newDirection = event.getPlayer().getVelocity().add(newDirection);
            
            event.getPlayer().setVelocity(event.getPlayer().getVelocity().add(newDirection));
            
            a.a.c.f.d().r(player);
          }
        }
        a.a.c.f.g().a(event.getPlayer(), event.getPlayer().getVelocity(), event.getTo());
        if (Math.random() < 0.05D) {
          for (Entity entity : player.getNearbyEntities(this.a.k, this.a.k, this.a.k)) {
            if ((entity instanceof CraftWolf))
            {
              CraftWolf wolf = (CraftWolf)entity;
              if ((!wolf.isTamed()) || (wolf.getOwner() == null))
              {
                player.sendMessage(ChatColor.LIGHT_PURPLE + "A wild wolf joins your pack!");
                
                wolf.setMaxHealth(wolf.getMaxHealth());
                wolf.setHealth(wolf.getMaxHealth());
                wolf.setOwner(player);
                wolf.setTamed(true);
                
                a.a.c.f.d().u(player);
              }
            }
          }
        }
      }
      
      @EventHandler
      public void a(PlayerDeathEvent event)
      {
        if ((event.getEntity().getKiller() == null) || (event.getEntity().getKiller().getName() == null))
        {
          if ((this.a.v) && 
            (a.a.c.f.d().o(event.getEntity())))
          {
            a.a.c.f.d().a(event.getEntity(), true);
            switch (this.b.nextInt(3))
            {
            case 0: 
              event.setDeathMessage("Werewolf died");
              break;
            case 1: 
              event.setDeathMessage("Werewolf was killed");
              break;
            case 2: 
              event.setDeathMessage("Werewolf died");
            }
          }
          return;
        }
        OfflinePlayer killer = event.getEntity().getKiller();
        OfflinePlayer victim = event.getEntity();
        if (this.a.v) {
          if (a.a.c.f.d().o(killer))
          {
            switch (this.b.nextInt(3))
            {
            case 0: 
              event.setDeathMessage(victim.getName() + " was eatten by a " + ChatColor.GRAY + "Werewolf");
              break;
            case 1: 
              event.setDeathMessage(victim.getName() + " couldn't stop the " + ChatColor.GRAY + "Werewolf");
              break;
            case 2: 
              event.setDeathMessage(victim.getName() + " was torn to pieces by a " + ChatColor.GRAY + "Werewolf");
            }
          }
          else if (a.a.c.f.d().o(victim))
          {
            if (this.a.I) {
              a.a.c.f.h().a((Player)victim, 3);
            }
            switch (this.b.nextInt(3))
            {
            case 0: 
              event.setDeathMessage("Werewolf was slained by " + ChatColor.GOLD + killer.getName());
              break;
            case 1: 
              event.setDeathMessage(ChatColor.GOLD + killer.getName() + 
                ChatColor.WHITE + " slaughtered the Werewolf");
              break;
            case 2: 
              event.setDeathMessage(ChatColor.GOLD + killer.getName() + 
                ChatColor.WHITE + " chopped up the head of Werewolf");
            }
          }
        }
        if ((this.a.B) && 
          (killer.isOnline()) && (
          (((Player)killer).getItemInHand().getType() == Material.DIAMOND_SWORD) || (((Player)killer).getItemInHand().getType() == Material.GOLD_SWORD) || (((Player)killer).getItemInHand().getType() == Material.IRON_SWORD) || (((Player)killer).getItemInHand().getType() == Material.STONE_SWORD)))
        {
          org.bukkit.inventory.ItemStack trophy = a.a.c.f.f().a(killer);
          event.getDrops().add(trophy);
        }
        if (this.a.F)
        {
          a.a.c.f.d().d(victim);
        }
        else
        {
          a.a.c.f.d().b(victim, true);
          if (victim.isOnline()) {
            this.a.getServer().getScheduler().scheduleSyncDelayedTask(this.a, 
              new a.a.c.a.f(this.a, ((Player)victim).getWorld(), 
              victim.getUniqueId(), ((Player)victim).getEntityId(), true, false), 20L);
          }
        }
      }
      
      @EventHandler
      public void a(PlayerPickupItemEvent event)
      {
        Player player = event.getPlayer();
        if (!a.a.c.f.d().o(player)) {
          return;
        }
        if ((this.a.E) && 
          (player.getItemInHand().getType() == Material.AIR)) {
          event.setCancelled(true);
        }
        Material material = event.getItem().getItemStack().getType();
        switch (a()[material.ordinal()])
        {
        case 26: 
        case 28: 
        case 30: 
        case 34: 
        case 35: 
        case 37: 
        case 50: 
        case 87: 
        case 91: 
        case 143: 
        case 175: 
        case 262: 
        case 264: 
        case 282: 
        case 286: 
        case 304: 
        case 316: 
        case 335: 
        case 337: 
        case 343: 
          event.setCancelled(true);
        }
      }
      
      public class a
        implements Runnable
      {
        private Player b;
        
        public a(Player p)
        {
          this.b = p;
        }
        
        public void run()
        {
          if (a.a.c.f.d().c(this.b)) {
            e.a(e.this).e(this.b);
          } else if (a.a.c.f.d().d(this.b)) {
            e.a(e.this).f(this.b);
          }
        }
      }
    }
    
  • Avatar of harlleyquinn101 harlleyquinn101 May 22, 2015 at 19:31 UTC - 0 likes

    DogOnFire, u should be proud to be the creator of the base of something bigger, u were the inspiration for the guys to make such a bigger plugin with so much things added, its not a violation of your porperty when we get the base of something to inspire to something else, instead of deleting u should see that this is your plugin too and let the plugin grow where u cant go further, most of the great masterpieces were not made by one person, but enhanced by a lot of ppl, its selfish to claim all to you when the whole idea of a werewolf is a worldwild tale that was told and inspired by so many ppl, pls let us have the new plugin, i played and i liked and i want for me, its not stolen, its based on you, you should be proud, not be bitter about this.

  • Avatar of Shzam20 Shzam20 May 22, 2015 at 18:40 UTC - 0 likes

    To DoggyOnFire speak with spigot staff and get the plugin undeleted, please we all loved it so mutch... Why did you kill our Dream DoggyOnFire?

  • Avatar of merlinshaw merlinshaw May 22, 2015 at 18:09 UTC - 0 likes

    <<reply 2566838>>

    Shzam20 I under stand your upset but your not the only one who as bought the plugin. :)
    Instead of ranting just remember there two sides of the story. I don't mind that i paid for the other werewolf plugin and am extremely happy with it! I will be happy to test DoggysOnFire version of it when he releases it as well.

    But what I think would be awesome to see is if both devs worked together and made a nice paid version of this plugin to help support for future updates. Doing a team project would not only help to keep things updated But might encourage people to buy seeing that theirs more then one active developer. And continue to pay for it :)

    Looking forward to the update.

    Last edited May 22, 2015 by merlinshaw
  • Avatar of Shzam20 Shzam20 May 22, 2015 at 17:27 UTC - 0 likes

    DoggyOnFire can never compete with the spigot devs alone. The best we will see here is a old plugin beeing updated for 1.8.X. As the spigot dev boys added tons of new stuff to this plugin. DoggyOnFire will not be able to keep up. The only achivment he did was to get the 2015 Werewolves plugin deleted from spigot. Hope you feel proud over that DoggyOnFire.

    For us werewolf lovers that new plugin was awesome and you alone got it deleted. It was gonna have a update every weekend and it was clean and looked good and it was working 100% WHY DID U GET IT DELETED?

    Last edited May 22, 2015 by Shzam20
  • Avatar of DoggyOnFire DoggyOnFire May 22, 2015 at 15:34 UTC - 1 like

    @cricketcricketcricket: Go

    I agree.

    So rest assured that Werewolf, free edition, will return in a very short time (Testing it right now).

    Brewing unusual plugins for the Minecraft community since 2012 : Gods Werewolf Exams MyHorse

  • Avatar of cricketcricketcricket cricketcricketcricket May 22, 2015 at 14:49 UTC - 0 likes

    I havent used werewolf in over a year because it has never been updated - I would and many others would love and need a werewolf plugin.. . vampires by themselves are un-ruley.

    Last edited May 22, 2015 by cricketcricketcricket
  • Avatar of Shzam20 Shzam20 May 22, 2015 at 12:22 UTC - 0 likes

    I did decompile it now. And its obfuscated. But i see that they spent a great deal of time to do that plugin different than yours. From a professional view i see a lot of differences in code and in file structure. And they did the skin packets VERY well. And they did add UUID support. And alot more that your old plugin does not have.

    I can speak for both sides in this matter. "Yes they used some of your code."

    But i would not call this a direct copy of your plugin. They added a GUI dependency to the plugin for a GUI shop. And they fixed all the new 1.8 issues that are hard to solve. They also changed most strings to new ones to not offend you i guess.

    So my conclusion of this is that they made a old plugin better and with support for the latest scene standard. Alot is different when coding 1.8+ plugin compared to the old 1.7+ plugins and you know that aswell. I say they made a good job. Only thing they forgot was to add u a credit in the description. And i guess its not to late for that.

    The plugin works and all listed features work. And this is nothing you do over one night. They spent weeks on this. And no its not a direct copy of your plugin. As mentioned Before they used parts of the old code. But they changed most of its structure.

    So if i was you i would Contact the devs and talk about it. As they fixed all your issues. And you say yourself that its not a walk in the park to accomplish the changes they made.

    They also dont use Clans or signs and they removed the Compass tracker and let everyone hunt werewolfs without having to use a commad.

    And they changed the styling of the whole plugin. Its Clean and looks good.

    I dont Think its fair to say they they ripped this plugin straight off. Believe me i've seen ripped plugins over the years and this is not even close to those.

    The devs behind Werewolves did spent a great deal of time to change and to add new features to the code.

    So please contact them and get the credits added and all of us will be happy. Let them continue the work and the planned updates ok? I guess they will easy do that for you. Dont shut them down on this as they seemes dedicated, and from my perspective they are excellent coders.

    Last edited May 22, 2015 by Shzam20
  • Avatar of DoggyOnFire DoggyOnFire May 22, 2015 at 07:46 UTC - 1 like

    @Shzam20: Go

    I am sorry that you feel that way :)

    Instead of words, if you really want to get some insight into how much work who did, take some time to decompile the code of the two plugins and see how much is a direct copy & paste.

    Again, i would be happy to work with anyone on doing werewolf coding but directly selling off my work without even asking is not acceptable behaviour.

Facts

Date created
Apr 26, 2012
Categories
Last update
Mar 18, 2014
Development stage
Beta
Language
  • deDE
  • enUS
  • esES
  • frFR
  • itIT
  • koKR
  • plPL
  • zhCN
License
All Rights Reserved
Curse link
Werewolf
Downloads
88,919
Recent files

Authors