{"action":"created","comment":{"url":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/comments/86130590","pull_request_review_id":6803255,"id":86130590,"diff_hunk":"@@ -21,520 +21,550 @@\n import net.minecraftforge.common.IPlantable;\n import org.jetbrains.annotations.NotNull;\n import org.jetbrains.annotations.Nullable;\n-\n-import java.util.List;\n-\n+import static com.minecolonies.entity.ai.citizen.farmer.Field.FieldStage.*;\n import static com.minecolonies.entity.ai.util.AIState.*;\n \n-/**\n- * Farmer AI class.\n+ /**\n+ * Farmer AI class\n  * Created: December 20, 2014\n  */\n public class EntityAIWorkFarmer extends AbstractEntityAIInteract<JobFarmer>\n-{\n-    /**\n-     * The standard delay the farmer should have.\n-     */\n-    private static final int     STANDARD_DELAY      = 20;\n-    /**\n-     * The bonus the farmer gains each update is level/divider.\n-     */\n-    private static final int     DELAY_DIVIDER       = 10;\n-    /**\n-     * The EXP Earned per harvest.\n-     */\n-    private static final double  XP_PER_HARVEST      = 0.5;\n-    /**\n-     * Changed after finished harvesting in order to dump the inventory.\n-     */\n-    private              boolean shouldDumpInventory = false;\n-\n-    /**\n-     * The offset to work at relative to the scarecrow.\n-     */\n-    @Nullable\n-    private BlockPos workingOffset;\n-\n-    /**\n-     * Defines if the farmer should request seeds for the current field.\n-     */\n-    private boolean requestSeeds = true;\n-\n-    /**\n-     * Defines if the farmer should try to get the seeds from his chest.\n-     */\n-    private boolean shouldTryToGetSeed = true;\n-\n-    /**\n-     * Constructor for the Farmer.\n-     * Defines the tasks the Farmer executes.\n-     *\n-     * @param job a farmer job to use.\n-     */\n-    public EntityAIWorkFarmer(@NotNull JobFarmer job)\n-    {\n-        super(job);\n-        super.registerTargets(\n-          new AITarget(IDLE, () -> START_WORKING),\n-          new AITarget(START_WORKING, this::startWorkingAtOwnBuilding),\n-          new AITarget(PREPARING, this::prepareForFarming),\n-          new AITarget(FARMER_WORK, this::cycle)\n-        );\n-        worker.setSkillModifier(2 * worker.getCitizenData().getEndurance() + worker.getCitizenData().getCharisma());\n-        worker.setCanPickUpLoot(true);\n-    }\n-\n-    /**\n-     * Redirects the farmer to his building.\n-     *\n-     * @return the next state.\n-     */\n-    private AIState startWorkingAtOwnBuilding()\n-    {\n-        if (walkToBuilding())\n-        {\n-            return getState();\n-        }\n-        return PREPARING;\n-    }\n-\n-    /**\n-     * Prepares the farmer for farming.\n-     * Also requests the tools and checks if the farmer has sufficient fields.\n-     *\n-     * @return the next AIState\n-     */\n-    @NotNull\n-    private AIState prepareForFarming()\n-    {\n-        @Nullable final BuildingFarmer building = getOwnBuilding();\n-\n-        if (building == null || building.getBuildingLevel() < 1)\n-        {\n-            return AIState.PREPARING;\n-        }\n-\n-        building.syncWithColony(world);\n-\n-        if (building.getFarmerFields().size() < getOwnBuilding().getBuildingLevel() && !building.assignManually())\n-        {\n-            searchAndAddFields();\n-        }\n-\n-        if (building.hasNoFields())\n-        {\n-            chatSpamFilter.talkWithoutSpam(\"entity.farmer.noFreeFields\");\n-            return AIState.PREPARING;\n-        }\n-\n-        //If the farmer has no currentField and there is no field which needs work, check fields.\n-        if (building.getCurrentField() == null && building.getFieldToWorkOn() == null)\n-        {\n-            building.resetFields();\n-            return AIState.IDLE;\n-        }\n-\n-        @Nullable final Field currentField = building.getCurrentField();\n-\n-        if (currentField.needsWork())\n-        {\n-            if (!checkForHoe() && canGoPlanting(currentField, building))\n-            {\n-                return walkToBlock(currentField.getLocation()) ? AIState.PREPARING : AIState.FARMER_WORK;\n-            }\n-        }\n-        else\n-        {\n-            getOwnBuilding().setCurrentField(null);\n-        }\n-        return AIState.PREPARING;\n-    }\n-\n-    /**\n-     * Searches and adds a field that has not been taken yet for the farmer and then adds it to the list.\n-     */\n-    private void searchAndAddFields()\n-    {\n-        final Colony colony = worker.getColony();\n-        if (colony != null)\n-        {\n-            @Nullable final Field newField = colony.getFreeField(worker.getName());\n-\n-            if (newField != null && getOwnBuilding() != null)\n-            {\n-                getOwnBuilding().addFarmerFields(newField);\n-            }\n-        }\n-    }\n-\n-    /**\n-     * Checks if the farmer is ready to plant.\n-     *\n-     * @param currentField the field to plant.\n-     * @return true if he is ready.\n-     */\n-    private boolean canGoPlanting(@NotNull final Field currentField, @NotNull final BuildingFarmer buildingFarmer)\n-    {\n-        if (currentField.getSeed() == null)\n-        {\n-            chatSpamFilter.talkWithoutSpam(\"entity.farmer.noSeedSet\");\n-            buildingFarmer.setCurrentField(null);\n-            return false;\n-        }\n-\n-        if (shouldTryToGetSeed)\n-        {\n-            final int slot = worker.findFirstSlotInInventoryWith(currentField.getSeed());\n-            if (slot != -1)\n-            {\n-                requestSeeds = false;\n-            }\n-            if (!walkToBuilding())\n-            {\n-                if (isInHut(new ItemStack(currentField.getSeed())))\n-                {\n-                    requestSeeds = false;\n-                }\n-                shouldTryToGetSeed = requestSeeds;\n-            }\n-        }\n-\n-        return !shouldTryToGetSeed;\n-    }\n-\n-    /**\n-     * The main work cycle of the Famer.\n-     * This checks each block, harvests, tills, and plants.\n-     */\n-    private AIState cycle()\n-    {\n-        @Nullable final BuildingFarmer buildingFarmer = getOwnBuilding();\n-\n-        if (buildingFarmer == null || checkForHoe())\n-        {\n-            return AIState.PREPARING;\n-        }\n-\n-        @Nullable final Field field = buildingFarmer.getCurrentField();\n-\n-        if (field == null)\n-        {\n-            return AIState.PREPARING;\n-        }\n-\n-        if (workingOffset != null)\n-        {\n-            final BlockPos position = field.getLocation().down().south(workingOffset.getZ()).east(workingOffset.getX());\n-            // Still moving to the block\n-            if (walkToBlock(position.up()))\n-            {\n-                return AIState.FARMER_WORK;\n-            }\n-\n-            // harvest the block if able to.\n-            harvestIfAble(position);\n-\n-            // hoe the block if able to.\n-            hoeIfAble(position, field);\n-\n-            if (shouldPlant(position, field) && !plantCrop(field.getSeed(), position))\n-            {\n-                resetVariables();\n-                buildingFarmer.getCurrentField().setNeedsWork(false);\n-                return terminatePlanting(buildingFarmer, field);\n-            }\n-        }\n-\n-        if (!handleOffset(field))\n-        {\n-            resetVariables();\n-            buildingFarmer.getCurrentField().setNeedsWork(false);\n-            return AIState.IDLE;\n-        }\n-\n-        // Set the delay based off the standard - level / divider. This was workingDelay\n-        setDelay(STANDARD_DELAY - this.worker.getLevel() / DELAY_DIVIDER);\n-        return AIState.FARMER_WORK;\n-    }\n-\n-    /**\n-     * Checks if we can harvest, and does so if we can.\n-     */\n-    private void harvestIfAble(final BlockPos position)\n-    {\n-        if (shouldHarvest(position))\n-        {\n-            worker.addExperience(XP_PER_HARVEST);\n-            harvestCrop(position.up());\n-        }\n-    }\n-\n-    /**\n-     * Checks if we can hoe, and does so if we can.\n-     *\n-     * @param position the position to check\n-     * @param field    the field that we are working with.\n-     */\n-    private void hoeIfAble(final BlockPos position, final Field field)\n-    {\n-        if (shouldHoe(position, field))\n-        {\n-            equipHoe();\n-            worker.swingArm(worker.getActiveHand());\n-            world.setBlockState(position, Blocks.FARMLAND.getDefaultState());\n-            worker.damageItemInHand(1);\n-            mineBlock(position.up());\n-        }\n-    }\n-\n-    /**\n-     * Checks if the ground should be planted.\n-     *\n-     * @param position the position to check.\n-     * @param field    the field close to this position.\n-     * @return true if should be hoed.\n-     */\n-    private boolean shouldPlant(@NotNull final BlockPos position, @NotNull final Field field)\n-    {\n-        @Nullable final ItemStack itemStack = BlockUtils.getItemStackFromBlockState(world.getBlockState(position.up()));\n-\n-        if (itemStack != null && itemStack.getItem() == field.getSeed())\n-        {\n-            requestSeeds = false;\n-        }\n-\n-        return !field.isNoPartOfField(world, position) && !(world.getBlockState(position.up()).getBlock() instanceof BlockCrops)\n-                 && !(world.getBlockState(position).getBlock() instanceof BlockHutField) && world.getBlockState(position).getBlock() == Blocks.FARMLAND;\n-    }\n-\n-    /**\n-     * Plants the crop at a given location.\n-     *\n-     * @param item     the crop.\n-     * @param position the location.\n-     */\n-    private boolean plantCrop(Item item, @NotNull BlockPos position)\n-    {\n-        final int slot = worker.findFirstSlotInInventoryWith(item);\n-        if (slot == -1)\n-        {\n-            return false;\n-        }\n-        else\n-        {\n-            @NotNull final IPlantable seed = (IPlantable) item;\n-            world.setBlockState(position.up(), seed.getPlant(world, position));\n-            getInventory().decrStackSize(slot, 1);\n-            requestSeeds = false;\n-            //Flag 1+2 is needed for updates\n-            return true;\n-        }\n-    }\n-\n-    /**\n-     * Resets the basic variables of the class.\n-     */\n-    private void resetVariables()\n-    {\n-        requestSeeds = true;\n-        shouldDumpInventory = true;\n-        shouldTryToGetSeed = true;\n-    }\n-\n-    /**\n-     * Terminates the planting process and resets the task.\n-     *\n-     * @param buildingFarmer the building of the farmer.\n-     * @param field          the field being planted.\n-     * @return the next state.\n-     */\n-    @NotNull\n-    private AIState terminatePlanting(@NotNull final BuildingFarmer buildingFarmer, @NotNull final Field field)\n-    {\n-        if (requestSeeds)\n-        {\n-            chatSpamFilter.talkWithoutSpam(\"entity.farmer.NeedSeed\", field.getSeed().getItemStackDisplayName(new ItemStack(field.getSeed())));\n-        }\n-        else\n-        {\n-            buildingFarmer.getCurrentField().setNeedsWork(false);\n-        }\n-\n-        resetVariables();\n-        return AIState.PREPARING;\n-    }\n-\n-    /**\n-     * Handles the offset of the field for the farmer.\n-     *\n-     * @param field the field object.\n-     * @return true if successful.\n-     */\n-    private boolean handleOffset(@NotNull final Field field)\n-    {\n-        if (workingOffset == null)\n-        {\n-            workingOffset = new BlockPos(field.getLengthPlusX(), 0, field.getWidthPlusZ());\n-        }\n-        else\n-        {\n-            if (workingOffset.getZ() <= -field.getWidthMinusZ() && workingOffset.getX() <= -field.getLengthMinusX())\n-            {\n-                workingOffset = null;\n-                return false;\n-            }\n-            else if (workingOffset.getX() <= -field.getLengthMinusX())\n-            {\n-                workingOffset = new BlockPos(field.getLengthPlusX(), 0, workingOffset.getZ() - 1);\n-            }\n-            else\n-            {\n-                workingOffset = new BlockPos(workingOffset.getX() - 1, 0, workingOffset.getZ());\n-            }\n-        }\n-        return true;\n-    }\n-\n-    /**\n-     * Checks if the crop should be harvested.\n-     *\n-     * @param position the position to check.\n-     * @return true if should be hoed.\n-     */\n-    private boolean shouldHarvest(@NotNull final BlockPos position)\n-    {\n-        final IBlockState state = world.getBlockState(position.up());\n-\n-        if (state.getBlock() instanceof IGrowable && state.getBlock() instanceof BlockCrops)\n-        {\n-            @NotNull final BlockCrops block = (BlockCrops) state.getBlock();\n-            return !block.canGrow(world, position.up(), state, false);\n-        }\n-\n-        return false;\n-    }\n-\n-    /**\n-     * This method allows us to harvest crops and leave the plant there.\n-     * Credit goes to RightClickHarvest mod\n-     */\n-    private boolean harvestCrop(final BlockPos position)\n-    {\n-        final IBlockState curBlockState = world.getBlockState(position);\n-\n-        if (!(curBlockState.getBlock() instanceof IGrowable) || !(curBlockState.getBlock() instanceof BlockCrops))\n-        {\n-            return false;\n-        }\n-\n-        final BlockCrops crops = (BlockCrops) curBlockState.getBlock();\n-\n-        if (!crops.isMaxAge(curBlockState))\n-        {\n-            return false;\n-        }\n-\n-        final ItemStack tool = worker.getHeldItemMainhand();\n-\n-        //calculate fortune enchantment\n-        final int fortune = Utils.getFortuneOf(tool);\n-\n-        final List<ItemStack> drops = crops.getDrops(world, position, curBlockState, fortune);\n-\n-        world.setBlockState(position, crops.withAge(0));\n-\n-        //add the drops to the citizen\n-        for (final ItemStack item : drops)\n-        {\n-            InventoryUtils.setStack(worker.getInventoryCitizen(), item);\n-        }\n-\n-        this.incrementActionsDone();\n-        return true;\n-    }\n-\n-    /**\n-     * Checks if the ground should be hoed and the block above removed.\n-     *\n-     * @param position the position to check.\n-     * @param field    the field close to this position.\n-     * @return true if should be hoed.\n-     */\n-    private boolean shouldHoe(@NotNull final BlockPos position, @NotNull final Field field)\n-    {\n-        return !field.isNoPartOfField(world, position)\n+ {\n+     /**\n+      * The standard delay the farmer should have.\n+      */\n+     private static final int     STANDARD_DELAY      = 5;\n+     /**\n+      * The bonus the farmer gains each update is level/divider.\n+      */\n+     private static final int     DELAY_DIVIDER       = 10;\n+     /**\n+      * Changed after finished harvesting in order to dump the inventory.\n+      */\n+     private              boolean shouldDumpInventory = false;\n+     /**\n+      * The offset to work at relative to the scarecrow.\n+      */\n+     @Nullable\n+     private BlockPos workingOffset;\n+     /**\n+      * The delay the farmer should have each action: hoeing, planting, harvesting.\n+      */\n+     private int workingDelay = STANDARD_DELAY - this.worker.getLevel() / DELAY_DIVIDER;\n+\n+     /**\n+      * Defines if the farmer should request seeds for the current field.\n+      */\n+     private boolean requestSeeds = true;\n+\n+     /**\n+      * Defines if the farmer should try to get the seeds from his chest.\n+      */\n+     private boolean shouldTryToGetSeed = true;\n+\n+     /**\n+      * Constructor for the Farmer.\n+      * Defines the tasks the Farmer executes.\n+      *\n+      * @param job a farmer job to use.\n+      */\n+     public EntityAIWorkFarmer(@NotNull JobFarmer job)\n+     {\n+         super(job);\n+         super.registerTargets(\n+                 new AITarget(IDLE, () -> START_WORKING),\n+                 new AITarget(START_WORKING, this::startWorkingAtOwnBuilding),\n+                 new AITarget(PREPARING, this::prepareForFarming),\n+                 new AITarget(FARMER_HOE, this::hoe),\n+                 new AITarget(FARMER_PLANT, this::plant),\n+                 new AITarget(FARMER_HARVEST, this::harvest)\n+         );\n+         worker.setSkillModifier(2 * worker.getCitizenData().getEndurance() + worker.getCitizenData().getCharisma());\n+         worker.setCanPickUpLoot(true);\n+     }\n+\n+     /**\n+      * Redirects the fisherman to his building.\n+      *\n+      * @return the next state.\n+      */\n+     private AIState startWorkingAtOwnBuilding()\n+     {\n+         if (walkToBuilding())\n+         {\n+             return getState();\n+         }\n+         return PREPARING;\n+     }\n+\n+     /**\n+      * Prepares the farmer for farming.\n+      * Also requests the tools and checks if the farmer has sufficient fields.\n+      *\n+      * @return the next AIState\n+      */\n+     @NotNull\n+     private AIState prepareForFarming()\n+     {\n+         @Nullable BuildingFarmer building = getOwnBuilding();\n+\n+         if (building == null || building.getBuildingLevel() < 1)\n+         {\n+             return AIState.PREPARING;\n+         }\n+\n+         building.syncWithColony(world);\n+\n+         if (building.getFarmerFields().size() < getOwnBuilding().getBuildingLevel() && !building.assignManually())\n+         {\n+             searchAndAddFields();\n+         }\n+\n+         if (building.hasNoFields())\n+         {\n+             chatSpamFilter.talkWithoutSpam(\"entity.farmer.noFreeFields\");\n+             return AIState.PREPARING;\n+         }\n+\n+         //If the farmer has no currentField and there is no field which needs work, check fields.\n+         if (building.getCurrentField() == null && building.getFieldToWorkOn() == null)\n+         {\n+             building.resetFields();\n+             return AIState.IDLE;\n+         }\n+\n+         @Nullable Field currentField = building.getCurrentField();\n+\n+         if (currentField.needsWork())\n+         {\n+             switch (currentField.getFieldStage())\n+             {\n+                 case EMPTY:\n+                     if (!checkForHoe())\n+                     {\n+                         return walkToBlock(currentField.getLocation()) ? AIState.PREPARING : AIState.FARMER_HOE;\n+                     }\n+                     break;\n+                 case HOED:\n+                     if (canGoPlanting(currentField, building))\n+                     {\n+                         return walkToBlock(currentField.getLocation()) ? AIState.PREPARING : AIState.FARMER_PLANT;\n+                     }\n+                     break;\n+                 case PLANTED:\n+                     return walkToBlock(currentField.getLocation()) ? AIState.PREPARING : AIState.FARMER_HARVEST;\n+                 default:\n+                     break;\n+             }\n+         }\n+         else\n+         {\n+             getOwnBuilding().setCurrentField(null);\n+         }\n+         return AIState.PREPARING;\n+     }\n+\n+     /**\n+      * Searches and adds a field that has not been taken yet for the farmer and then adds it to the list.\n+      */\n+     private void searchAndAddFields()\n+     {\n+         Colony colony = worker.getColony();\n+         if (colony != null)\n+         {\n+             @Nullable Field newField = colony.getFreeField(worker.getName());","path":"src/main/java/com/minecolonies/entity/ai/citizen/farmer/EntityAIWorkFarmer.java","position":592,"original_position":592,"commit_id":"30b2ca9c689f1dc7857552198837439751a74651","original_commit_id":"30b2ca9c689f1dc7857552198837439751a74651","user":{"login":"MinecoloniesSonar","id":19393044,"avatar_url":"https://avatars.githubusercontent.com/u/19393044?v=3","gravatar_id":"","url":"https://api.github.com/users/MinecoloniesSonar","html_url":"https://github.com/MinecoloniesSonar","followers_url":"https://api.github.com/users/MinecoloniesSonar/followers","following_url":"https://api.github.com/users/MinecoloniesSonar/following{/other_user}","gists_url":"https://api.github.com/users/MinecoloniesSonar/gists{/gist_id}","starred_url":"https://api.github.com/users/MinecoloniesSonar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MinecoloniesSonar/subscriptions","organizations_url":"https://api.github.com/users/MinecoloniesSonar/orgs","repos_url":"https://api.github.com/users/MinecoloniesSonar/repos","events_url":"https://api.github.com/users/MinecoloniesSonar/events{/privacy}","received_events_url":"https://api.github.com/users/MinecoloniesSonar/received_events","type":"User","site_admin":false},"body":"![MINOR](https://raw.githubusercontent.com/SonarCommunity/sonar-github/master/images/severity-minor.png) Local variable 'newField' could be declared final [![rule](https://raw.githubusercontent.com/SonarCommunity/sonar-github/master/images/rule.png)](http://home.kk-sc.de:9000/coding_rules#rule_key=pmd%3ALocalVariableCouldBeFinal)\n","created_at":"2016-11-02T12:34:11Z","updated_at":"2016-11-02T12:34:11Z","html_url":"https://github.com/Minecolonies/minecolonies/pull/225#discussion_r86130590","pull_request_url":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/225","_links":{"self":{"href":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/comments/86130590"},"html":{"href":"https://github.com/Minecolonies/minecolonies/pull/225#discussion_r86130590"},"pull_request":{"href":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/225"}}},"pull_request":{"url":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/225","id":91082188,"html_url":"https://github.com/Minecolonies/minecolonies/pull/225","diff_url":"https://github.com/Minecolonies/minecolonies/pull/225.diff","patch_url":"https://github.com/Minecolonies/minecolonies/pull/225.patch","issue_url":"https://api.github.com/repos/Minecolonies/minecolonies/issues/225","number":225,"state":"open","locked":false,"title":"Feature/#99guards","user":{"login":"Raycoms","id":6438347,"avatar_url":"https://avatars.githubusercontent.com/u/6438347?v=3","gravatar_id":"","url":"https://api.github.com/users/Raycoms","html_url":"https://github.com/Raycoms","followers_url":"https://api.github.com/users/Raycoms/followers","following_url":"https://api.github.com/users/Raycoms/following{/other_user}","gists_url":"https://api.github.com/users/Raycoms/gists{/gist_id}","starred_url":"https://api.github.com/users/Raycoms/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Raycoms/subscriptions","organizations_url":"https://api.github.com/users/Raycoms/orgs","repos_url":"https://api.github.com/users/Raycoms/repos","events_url":"https://api.github.com/users/Raycoms/events{/privacy}","received_events_url":"https://api.github.com/users/Raycoms/received_events","type":"User","site_admin":false},"body":"Closes #253 \r\n\r\n# Changes proposed in this pull request:\r\n- Adds melee and range guards\r\n\r\nReview please @Minecolonies/maintainers\r\n","created_at":"2016-10-26T20:30:12Z","updated_at":"2016-11-02T12:34:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"118d050864ff9a211b26b570c9ce03f63a7a744f","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/225/commits","review_comments_url":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/225/comments","review_comment_url":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Minecolonies/minecolonies/issues/225/comments","statuses_url":"https://api.github.com/repos/Minecolonies/minecolonies/statuses/30b2ca9c689f1dc7857552198837439751a74651","head":{"label":"Minecolonies:feature/#99guards","ref":"feature/#99guards","sha":"30b2ca9c689f1dc7857552198837439751a74651","user":{"login":"Minecolonies","id":5167336,"avatar_url":"https://avatars.githubusercontent.com/u/5167336?v=3","gravatar_id":"","url":"https://api.github.com/users/Minecolonies","html_url":"https://github.com/Minecolonies","followers_url":"https://api.github.com/users/Minecolonies/followers","following_url":"https://api.github.com/users/Minecolonies/following{/other_user}","gists_url":"https://api.github.com/users/Minecolonies/gists{/gist_id}","starred_url":"https://api.github.com/users/Minecolonies/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Minecolonies/subscriptions","organizations_url":"https://api.github.com/users/Minecolonies/orgs","repos_url":"https://api.github.com/users/Minecolonies/repos","events_url":"https://api.github.com/users/Minecolonies/events{/privacy}","received_events_url":"https://api.github.com/users/Minecolonies/received_events","type":"Organization","site_admin":false},"repo":{"id":65616760,"name":"minecolonies","full_name":"Minecolonies/minecolonies","owner":{"login":"Minecolonies","id":5167336,"avatar_url":"https://avatars.githubusercontent.com/u/5167336?v=3","gravatar_id":"","url":"https://api.github.com/users/Minecolonies","html_url":"https://github.com/Minecolonies","followers_url":"https://api.github.com/users/Minecolonies/followers","following_url":"https://api.github.com/users/Minecolonies/following{/other_user}","gists_url":"https://api.github.com/users/Minecolonies/gists{/gist_id}","starred_url":"https://api.github.com/users/Minecolonies/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Minecolonies/subscriptions","organizations_url":"https://api.github.com/users/Minecolonies/orgs","repos_url":"https://api.github.com/users/Minecolonies/repos","events_url":"https://api.github.com/users/Minecolonies/events{/privacy}","received_events_url":"https://api.github.com/users/Minecolonies/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Minecolonies/minecolonies","description":"Minecolonies minecraft mod","fork":false,"url":"https://api.github.com/repos/Minecolonies/minecolonies","forks_url":"https://api.github.com/repos/Minecolonies/minecolonies/forks","keys_url":"https://api.github.com/repos/Minecolonies/minecolonies/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Minecolonies/minecolonies/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Minecolonies/minecolonies/teams","hooks_url":"https://api.github.com/repos/Minecolonies/minecolonies/hooks","issue_events_url":"https://api.github.com/repos/Minecolonies/minecolonies/issues/events{/number}","events_url":"https://api.github.com/repos/Minecolonies/minecolonies/events","assignees_url":"https://api.github.com/repos/Minecolonies/minecolonies/assignees{/user}","branches_url":"https://api.github.com/repos/Minecolonies/minecolonies/branches{/branch}","tags_url":"https://api.github.com/repos/Minecolonies/minecolonies/tags","blobs_url":"https://api.github.com/repos/Minecolonies/minecolonies/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Minecolonies/minecolonies/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Minecolonies/minecolonies/git/refs{/sha}","trees_url":"https://api.github.com/repos/Minecolonies/minecolonies/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Minecolonies/minecolonies/statuses/{sha}","languages_url":"https://api.github.com/repos/Minecolonies/minecolonies/languages","stargazers_url":"https://api.github.com/repos/Minecolonies/minecolonies/stargazers","contributors_url":"https://api.github.com/repos/Minecolonies/minecolonies/contributors","subscribers_url":"https://api.github.com/repos/Minecolonies/minecolonies/subscribers","subscription_url":"https://api.github.com/repos/Minecolonies/minecolonies/subscription","commits_url":"https://api.github.com/repos/Minecolonies/minecolonies/commits{/sha}","git_commits_url":"https://api.github.com/repos/Minecolonies/minecolonies/git/commits{/sha}","comments_url":"https://api.github.com/repos/Minecolonies/minecolonies/comments{/number}","issue_comment_url":"https://api.github.com/repos/Minecolonies/minecolonies/issues/comments{/number}","contents_url":"https://api.github.com/repos/Minecolonies/minecolonies/contents/{+path}","compare_url":"https://api.github.com/repos/Minecolonies/minecolonies/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Minecolonies/minecolonies/merges","archive_url":"https://api.github.com/repos/Minecolonies/minecolonies/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Minecolonies/minecolonies/downloads","issues_url":"https://api.github.com/repos/Minecolonies/minecolonies/issues{/number}","pulls_url":"https://api.github.com/repos/Minecolonies/minecolonies/pulls{/number}","milestones_url":"https://api.github.com/repos/Minecolonies/minecolonies/milestones{/number}","notifications_url":"https://api.github.com/repos/Minecolonies/minecolonies/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Minecolonies/minecolonies/labels{/name}","releases_url":"https://api.github.com/repos/Minecolonies/minecolonies/releases{/id}","deployments_url":"https://api.github.com/repos/Minecolonies/minecolonies/deployments","created_at":"2016-08-13T12:45:38Z","updated_at":"2016-11-01T09:14:40Z","pushed_at":"2016-11-02T12:26:56Z","git_url":"git://github.com/Minecolonies/minecolonies.git","ssh_url":"git@github.com:Minecolonies/minecolonies.git","clone_url":"https://github.com/Minecolonies/minecolonies.git","svn_url":"https://github.com/Minecolonies/minecolonies","homepage":"http://minecolonies.com/","size":10671,"stargazers_count":12,"watchers_count":12,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":11,"mirror_url":null,"open_issues_count":63,"forks":11,"open_issues":63,"watchers":12,"default_branch":"develop"}},"base":{"label":"Minecolonies:develop","ref":"develop","sha":"da3c88556a663ca09b05bbdadb28b91a4ba24e27","user":{"login":"Minecolonies","id":5167336,"avatar_url":"https://avatars.githubusercontent.com/u/5167336?v=3","gravatar_id":"","url":"https://api.github.com/users/Minecolonies","html_url":"https://github.com/Minecolonies","followers_url":"https://api.github.com/users/Minecolonies/followers","following_url":"https://api.github.com/users/Minecolonies/following{/other_user}","gists_url":"https://api.github.com/users/Minecolonies/gists{/gist_id}","starred_url":"https://api.github.com/users/Minecolonies/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Minecolonies/subscriptions","organizations_url":"https://api.github.com/users/Minecolonies/orgs","repos_url":"https://api.github.com/users/Minecolonies/repos","events_url":"https://api.github.com/users/Minecolonies/events{/privacy}","received_events_url":"https://api.github.com/users/Minecolonies/received_events","type":"Organization","site_admin":false},"repo":{"id":65616760,"name":"minecolonies","full_name":"Minecolonies/minecolonies","owner":{"login":"Minecolonies","id":5167336,"avatar_url":"https://avatars.githubusercontent.com/u/5167336?v=3","gravatar_id":"","url":"https://api.github.com/users/Minecolonies","html_url":"https://github.com/Minecolonies","followers_url":"https://api.github.com/users/Minecolonies/followers","following_url":"https://api.github.com/users/Minecolonies/following{/other_user}","gists_url":"https://api.github.com/users/Minecolonies/gists{/gist_id}","starred_url":"https://api.github.com/users/Minecolonies/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Minecolonies/subscriptions","organizations_url":"https://api.github.com/users/Minecolonies/orgs","repos_url":"https://api.github.com/users/Minecolonies/repos","events_url":"https://api.github.com/users/Minecolonies/events{/privacy}","received_events_url":"https://api.github.com/users/Minecolonies/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Minecolonies/minecolonies","description":"Minecolonies minecraft mod","fork":false,"url":"https://api.github.com/repos/Minecolonies/minecolonies","forks_url":"https://api.github.com/repos/Minecolonies/minecolonies/forks","keys_url":"https://api.github.com/repos/Minecolonies/minecolonies/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Minecolonies/minecolonies/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Minecolonies/minecolonies/teams","hooks_url":"https://api.github.com/repos/Minecolonies/minecolonies/hooks","issue_events_url":"https://api.github.com/repos/Minecolonies/minecolonies/issues/events{/number}","events_url":"https://api.github.com/repos/Minecolonies/minecolonies/events","assignees_url":"https://api.github.com/repos/Minecolonies/minecolonies/assignees{/user}","branches_url":"https://api.github.com/repos/Minecolonies/minecolonies/branches{/branch}","tags_url":"https://api.github.com/repos/Minecolonies/minecolonies/tags","blobs_url":"https://api.github.com/repos/Minecolonies/minecolonies/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Minecolonies/minecolonies/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Minecolonies/minecolonies/git/refs{/sha}","trees_url":"https://api.github.com/repos/Minecolonies/minecolonies/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Minecolonies/minecolonies/statuses/{sha}","languages_url":"https://api.github.com/repos/Minecolonies/minecolonies/languages","stargazers_url":"https://api.github.com/repos/Minecolonies/minecolonies/stargazers","contributors_url":"https://api.github.com/repos/Minecolonies/minecolonies/contributors","subscribers_url":"https://api.github.com/repos/Minecolonies/minecolonies/subscribers","subscription_url":"https://api.github.com/repos/Minecolonies/minecolonies/subscription","commits_url":"https://api.github.com/repos/Minecolonies/minecolonies/commits{/sha}","git_commits_url":"https://api.github.com/repos/Minecolonies/minecolonies/git/commits{/sha}","comments_url":"https://api.github.com/repos/Minecolonies/minecolonies/comments{/number}","issue_comment_url":"https://api.github.com/repos/Minecolonies/minecolonies/issues/comments{/number}","contents_url":"https://api.github.com/repos/Minecolonies/minecolonies/contents/{+path}","compare_url":"https://api.github.com/repos/Minecolonies/minecolonies/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Minecolonies/minecolonies/merges","archive_url":"https://api.github.com/repos/Minecolonies/minecolonies/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Minecolonies/minecolonies/downloads","issues_url":"https://api.github.com/repos/Minecolonies/minecolonies/issues{/number}","pulls_url":"https://api.github.com/repos/Minecolonies/minecolonies/pulls{/number}","milestones_url":"https://api.github.com/repos/Minecolonies/minecolonies/milestones{/number}","notifications_url":"https://api.github.com/repos/Minecolonies/minecolonies/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Minecolonies/minecolonies/labels{/name}","releases_url":"https://api.github.com/repos/Minecolonies/minecolonies/releases{/id}","deployments_url":"https://api.github.com/repos/Minecolonies/minecolonies/deployments","created_at":"2016-08-13T12:45:38Z","updated_at":"2016-11-01T09:14:40Z","pushed_at":"2016-11-02T12:26:56Z","git_url":"git://github.com/Minecolonies/minecolonies.git","ssh_url":"git@github.com:Minecolonies/minecolonies.git","clone_url":"https://github.com/Minecolonies/minecolonies.git","svn_url":"https://github.com/Minecolonies/minecolonies","homepage":"http://minecolonies.com/","size":10671,"stargazers_count":12,"watchers_count":12,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":11,"mirror_url":null,"open_issues_count":63,"forks":11,"open_issues":63,"watchers":12,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/225"},"html":{"href":"https://github.com/Minecolonies/minecolonies/pull/225"},"issue":{"href":"https://api.github.com/repos/Minecolonies/minecolonies/issues/225"},"comments":{"href":"https://api.github.com/repos/Minecolonies/minecolonies/issues/225/comments"},"review_comments":{"href":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/225/comments"},"review_comment":{"href":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Minecolonies/minecolonies/pulls/225/commits"},"statuses":{"href":"https://api.github.com/repos/Minecolonies/minecolonies/statuses/30b2ca9c689f1dc7857552198837439751a74651"}}}}
{"actor":{"display_login":"MinecoloniesSonar"}}