eu.matejkormuth.rpgdavid.starving.listeners.HiddenCommandsListener.java Source code

Java tutorial

Introduction

Here is the source code for eu.matejkormuth.rpgdavid.starving.listeners.HiddenCommandsListener.java

Source

/*
 *  Starving is a open source bukkit/spigot mmo game.
 *  Copyright (C) 2014-2015 Matej Kormuth
 *  This file is a part of Starving. <http://www.starving.eu>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *  
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package eu.matejkormuth.rpgdavid.starving.listeners;

import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.regex.Pattern;

import net.minecraft.server.v1_8_R2.PacketPlayOutGameStateChange;

import org.apache.commons.lang.math.RandomUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.Recipe;
import org.bukkit.util.Vector;

import com.darkblade12.particleeffect.ParticleEffect;

import eu.matejkormuth.bukkit.ItemDrops;
import eu.matejkormuth.bukkit.Items;
import eu.matejkormuth.bukkit.Worlds;
import eu.matejkormuth.rpgdavid.starving.Data;
import eu.matejkormuth.rpgdavid.starving.Starving;
import eu.matejkormuth.rpgdavid.starving.chemistry.Chemical;
import eu.matejkormuth.rpgdavid.starving.chemistry.ChemicalCompound;
import eu.matejkormuth.rpgdavid.starving.chemistry.Chemicals;
import eu.matejkormuth.rpgdavid.starving.items.ItemManager;
import eu.matejkormuth.rpgdavid.starving.items.base.ChemicalItem;
import eu.matejkormuth.rpgdavid.starving.items.base.Item;
import eu.matejkormuth.rpgdavid.starving.items.comparators.ItemNameComparator;
import eu.matejkormuth.rpgdavid.starving.npc.NPC;
import eu.matejkormuth.rpgdavid.starving.particles.ParticleEmitter;
import eu.matejkormuth.rpgdavid.starving.tasks.TimeUpdater;
import eu.matejkormuth.rpgdavid.starving.zombie.ZombieWithDog;

public class HiddenCommandsListener implements Listener {
    @EventHandler
    private void onCommand(final PlayerCommandPreprocessEvent event) {
        // Command for listing all items.
        if (event.getMessage().equalsIgnoreCase("/items")) {
            List<Item> items = Starving.getInstance().getItemManager().getItems();
            for (int j = 0; j < items.size(); j++) {
                Item i = items.get(j);
                event.getPlayer().sendMessage(j + " - " + i.getName());
            }
        }
        // Command for giving custom items.
        else if (event.getMessage().contains("/itemsgive")) {
            List<Item> items = Starving.getInstance().getItemManager().getItems();
            for (int j = 0; j < items.size(); j++) {
                Item i = items.get(j);
                if (j == Integer.valueOf(event.getMessage().split(Pattern.quote(" "))[1])) {
                    event.getPlayer().getInventory().addItem(i.toItemStack());
                }

            }
        }
        // Command for giving custom chemicals.
        else if (event.getMessage().contains("/chemical")) {
            if (!event.getMessage().contains(" ")) {
                event.getPlayer().sendMessage("args missing!");
            }

            String args = event.getMessage().split(Pattern.quote(" "))[1];
            String[] chemicals = args.split(Pattern.quote(","));

            ChemicalItem ci = new ChemicalItem("spawnedChemicalItem", new ChemicalCompound()) {
                @Override
                public Recipe getRecipe() {
                    return null;
                }

                @Override
                protected void onConsume0(Player player) {
                }
            };

            for (String chemical : chemicals) {
                String[] parts = chemical.split(Pattern.quote(":"));
                String name = parts[0];
                String amount = parts[1];
                for (Chemical ch : Chemicals.all()) {
                    if (ch.getName().equalsIgnoreCase(name)) {
                        ci.getContents().add(ch, Float.valueOf(amount));
                    }
                }
            }

            event.getPlayer().getInventory().addItem(ci.toItemStack());
        }
        // Command for setting entities target.
        else if (event.getMessage().contains("/settarget")) {
            String[] parts = event.getMessage().split(" ");
            int entity = Integer.valueOf(parts[1]);
            int target = Integer.valueOf(parts[2]);
            for (Entity e : Worlds.first().getEntities()) {
                if (e.getEntityId() == target) {
                    Starving.getInstance().getZombieManager().get(entity).setFollowTarget(e);
                }
            }
        }
        // Command for spawning zombie walking the dog.
        else if (event.getMessage().contains("/zombieeaster")) {
            ZombieWithDog.spawn(event.getPlayer().getLocation());
        }
        // Command for settings time.
        else if (event.getMessage().contains("/time set")) {
            String[] parts = event.getMessage().split(" ");
            int time = Integer.valueOf(parts[2]);
            event.getPlayer().sendMessage(ChatColor.YELLOW + "[Starving] Shifting time...");
            Starving.getInstance().getRegistered(TimeUpdater.class).vanllaSetMoveTime(time);
            event.getPlayer().sendMessage(ChatColor.GREEN + "[Starving] Time set!");
        }
        // Command for spawning zombie.
        else if (event.getMessage().contains("/zombie")) {
            String[] parts = event.getMessage().split(" ");
            if (parts.length == 2) {
                int count = Integer.valueOf(parts[1]);

                for (int i = 0; i < count; i++) {
                    Starving.getInstance().getZombieManager().spawnAt(event.getPlayer().getLocation()
                            .add((Math.random() - 0.5) * count / 4, 0, (Math.random() - 0.5) * count / 4));
                }
            } else {
                Starving.getInstance().getZombieManager().spawnAt(event.getPlayer().getLocation());
            }
        }
        // Command for testing some random things.
        else if (event.getMessage().contains("/darkness")) {
            ((CraftPlayer) event.getPlayer()).getHandle().playerConnection
                    .sendPacket(new PacketPlayOutGameStateChange(7, 0.001f));
            ((CraftPlayer) event.getPlayer()).getHandle().playerConnection
                    .sendPacket(new PacketPlayOutGameStateChange(8, 160));
        }
        // Command for testing some random things.
        else if (event.getMessage().contains("/npctest")) {
            String name = "debilko" + (int) Math.floor(Math.random() * 1000000);
            NPC npc = Starving.getInstance().getNPCManager().getMainRegistry().createPlayer()
                    .withProfile(UUID.nameUUIDFromBytes(name.getBytes()), name)
                    .withSpawnLocation(event.getPlayer().getLocation()).spawn();

            event.getPlayer().teleport(npc.getLocation());
        }
        // Command for generating access key.
        else if (event.getMessage().contains("/genkey")) {
            char[] VALID_CHARS = "0123456789abcdefghijklmnopqrstuvwxyz".toCharArray();
            int keyLength = 32;
            char[] key = new char[keyLength];
            for (int i = 0; i < keyLength; i++) {
                key[i] = VALID_CHARS[RandomUtils.nextInt(VALID_CHARS.length - 1)];
            }
            event.getPlayer().sendMessage("Your new accesskey is: " + new String(key));
            Data.of(event.getPlayer()).setRemoteAccesKey(new String(key));
            event.getPlayer().sendMessage("http://starving.eu/key.php?key=" + new String(key));
        }
        // Command for opening custom items inventory.
        else if (event.getMessage().contains("/itemsinv")) {
            ItemManager im = Starving.getInstance().getItemManager();
            int size = (im.getItems().size() / 9);
            Inventory inv = Bukkit.createInventory(null, 9 * (size + 1), ChatColor.GOLD + "Custom items: ");
            List<Item> sorted = im.getItems();
            Collections.sort(sorted, new ItemNameComparator());
            for (Item i : sorted) {
                inv.addItem(i.toItemStack());
            }
            event.getPlayer().openInventory(inv);
        }
        // Command for testing some random things.
        else if (event.getMessage().contains("/itemdropvehicle")) {
            org.bukkit.entity.Item i = ItemDrops.drop(event.getPlayer().getLocation(), Items.of(Material.APPLE));
            i.setVelocity(event.getPlayer().getEyeLocation().getDirection().multiply(3));
            i.setPassenger(event.getPlayer());
            i.setPickupDelay(20 * 15);
        }
        // Command for testing some random things.
        else if (event.getMessage().contains("/peadd")) {
            // FIXME: Please, remove this soon. Only for testing.
            ParticleEmitter pe = new ParticleEmitter(new Location(Bukkit.getWorld("Beta"), 571.5, 68, -235.5), 1f,
                    40, ParticleEffect.SMOKE_LARGE);
            pe.setOffsets(0.5f, 0.1f, 0.5f);
            pe.setDirection(new Vector(0.1f, 0, 0.15f));
            Starving.getInstance().getParticleEmmiters().add(pe);
            ParticleEmitter pe2 = new ParticleEmitter(new Location(Bukkit.getWorld("Beta"), 571.5, 68, -235.5), 1f,
                    80, ParticleEffect.REDSTONE);
            pe2.setOffsets(0.5f, 0.1f, 0.5f);
            pe2.setColor(new ParticleEffect.OrdinaryColor(255, 0, 255));
            //pe2.setDirection(new Vector(0.1f, 0, 0.15f));
            Starving.getInstance().getParticleEmmiters().add(pe2);
        }
        // Command for testing some random things.
        else if (event.getMessage().contains("/peclear")) {
            Starving.getInstance().getParticleEmmiters().clear();
        }
        // Command for testing some random things.
        else if (event.getMessage().contains("/ason")) {
            Starving.getInstance().getAmbientSoundManager().addPlayer(event.getPlayer());
        }
        // Command for testing some random things.
        else if (event.getMessage().contains("/asoff")) {
            Starving.getInstance().getAmbientSoundManager().removePlayer(event.getPlayer());
        }
    }
}