Package com.sk89q.craftbook.mechanics.ic.gates.world.miscellaneous

Source Code of com.sk89q.craftbook.mechanics.ic.gates.world.miscellaneous.WirelessTransmitter$Factory

// $Id$
/*
* Copyright (C) 2010, 2011 sk89q <http://www.sk89q.com>
*
* 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 com.sk89q.craftbook.mechanics.ic.gates.world.miscellaneous;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;

import com.sk89q.craftbook.ChangedSign;
import com.sk89q.craftbook.LocalPlayer;
import com.sk89q.craftbook.bukkit.CraftBookPlugin;
import com.sk89q.craftbook.mechanics.ic.AbstractIC;
import com.sk89q.craftbook.mechanics.ic.AbstractICFactory;
import com.sk89q.craftbook.mechanics.ic.ChipState;
import com.sk89q.craftbook.mechanics.ic.CommandIC;
import com.sk89q.craftbook.mechanics.ic.ConfigurableIC;
import com.sk89q.craftbook.mechanics.ic.IC;
import com.sk89q.craftbook.mechanics.ic.ICFactory;
import com.sk89q.craftbook.mechanics.ic.ICMechanic;
import com.sk89q.craftbook.mechanics.ic.ICVerificationException;
import com.sk89q.craftbook.mechanics.ic.PersistentDataIC;
import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.squirrelid.Profile;
import com.sk89q.squirrelid.resolver.HttpRepositoryService;
import com.sk89q.squirrelid.resolver.ProfileService;
import com.sk89q.util.yaml.YAMLProcessor;

public class WirelessTransmitter extends AbstractIC {

    protected static final Set<String> memory = new LinkedHashSet<String>();

    protected String band;

    public WirelessTransmitter(Server server, ChangedSign sign, ICFactory factory) {

        super(server, sign, factory);
    }

    @Override
    public void load() {

        band = getSign().getLine(2);
        if (!getLine(3).trim().isEmpty()) {
            if(CraftBookPlugin.inst().getConfiguration().convertNamesToCBID && CraftBookPlugin.inst().getUUIDMappings().getUUID(getLine(3)) == null) {
                String line3 = getLine(3);
                OfflinePlayer player = Bukkit.getOfflinePlayer(getLine(3));
                if(player.hasPlayedBefore()) {
                    try {
                        ProfileService resolver = HttpRepositoryService.forMinecraft();
                        Profile profile = resolver.findByName(player.getName()); // May be null

                        UUID uuid = profile.getUniqueId();
                        band = CraftBookPlugin.inst().getUUIDMappings().getCBID(uuid);
                        getSign().setLine(3, line3);
                        getSign().update(false);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            band = band + getSign().getLine(3);
        }
    }

    @Override
    public String getTitle() {

        return "Wireless Transmitter";
    }

    @Override
    public String getSignTitle() {

        return "TRANSMITTER";
    }

    @Override
    public void trigger(ChipState chip) {

        setValue(band, chip.getInput(0));
        chip.setOutput(0, chip.getInput(0));
    }

    public static Boolean getValue(String band) {

        return memory.contains(band);
    }

    public static void setValue(String band, boolean val) {

        if(!val) //List preening
            memory.remove(band);
        else
            memory.add(band);
    }

    public static class Factory extends AbstractICFactory implements PersistentDataIC, ConfigurableIC, CommandIC {

        public boolean requirename;

        public Factory(Server server) {

            super(server);
        }

        @Override
        public IC create(ChangedSign sign) {

            return new WirelessTransmitter(getServer(), sign, this);
        }

        @Override
        public String[] getLongDescription() {

            return new String[]{
                    "The '''MC1110''' transmits the input value to a particular named ''band'' or ''network''.",
                    "To receive the value of the transmitter, use [[../MC1111/]].",
                    "",
                    "If there are multiple transmitters for the same band, the last one to transmit to a particular band will have its state apply until the next transmission."
            };
        }

        @Override
        public String getShortDescription() {

            return "Transmits wireless signal to wireless recievers.";
        }

        @Override
        public String[] getPinDescription(ChipState state) {

            return new String[] {
                    "Trigger IC",//Inputs
                    "Same as Input",//Outputs
            };
        }

        @Override
        public String[] getLineHelp() {

            return new String[] {"Wireless Band", "Player's CBID (Automatic)"};
        }

        @Override
        public void checkPlayer(ChangedSign sign, LocalPlayer player) throws ICVerificationException {

            if (requirename && (sign.getLine(3).isEmpty() || !ICMechanic.hasRestrictedPermissions(player, this, "MC1110"))) sign.setLine(3, player.getCraftBookId());
            else if (!sign.getLine(3).isEmpty() && !ICMechanic.hasRestrictedPermissions(player, this, "MC1110")) sign.setLine(3, player.getCraftBookId());
            sign.update(false);
        }

        @Override
        public void addConfiguration(YAMLProcessor config, String path) {

            config.setComment(path + "per-player", "Require a name to be entered on the sign. This allows for 'per-player' wireless bands. This is done automatically.");
            requirename = config.getBoolean(path + "per-player", false);
        }

        @Override
        public void loadPersistentData (DataInputStream stream) throws IOException {

            int length = stream.readInt();
            for(int i = 0; i < length; i++)
                memory.add(stream.readUTF());
            stream.close();
            getStorageFile().delete();
        }

        @Override
        public void savePersistentData (DataOutputStream stream) throws IOException {
        }

        @Override
        public File getStorageFile () {
            return new File(CraftBookPlugin.inst().getDataFolder(), "wireless-bands.dat");
        }

        @SuppressWarnings("unchecked")
        @Override
        public void load() {
            super.load();

            if(ICMechanic.instance.savePersistentData && CraftBookPlugin.inst().hasPersistentStorage() && CraftBookPlugin.inst().getPersistentStorage().has("wireless-ic-states"))
                WirelessTransmitter.memory.addAll((Set<String>) CraftBookPlugin.inst().getPersistentStorage().get("wireless-ic-states"));
        }

        @Override
        public void unload() {
            if(ICMechanic.instance.savePersistentData && CraftBookPlugin.inst().hasPersistentStorage())
                CraftBookPlugin.inst().getPersistentStorage().set("wireless-ic-states", memory);
        }

        @Override
        public void onICCommand (CommandContext args, CommandSender sender) {

            if (args.getString(1).equalsIgnoreCase("get")) {

                if(memory.contains(args.getString(2)))
                    sender.sendMessage("Wireless-Band-State: TRUE");
                else
                    sender.sendMessage("Wireless-Band-State: FALSE");
            } else if (args.getString(1).equalsIgnoreCase("set") && args.argsLength() > 3) {

                if (args.getString(3).equalsIgnoreCase("true"))
                    memory.add(args.getString(2));
                else if (args.getString(3).equalsIgnoreCase("false"))
                    memory.remove(args.getString(2));
                else
                    sender.sendMessage(ChatColor.RED + "Invalid Boolean Argument!");
            } else if (args.getString(1).equalsIgnoreCase("toggle") && args.argsLength() > 2) {

                if(memory.contains(args.getString(2)))
                    memory.remove(args.getString(2));
                else
                    memory.add(args.getString(2));
            } else
                sender.sendMessage(ChatColor.RED + "Usage: /ic ic mc1110 <get/set/toggle> <band> <state>");
        }

        @Override
        public int getMinCommandArgs () {
            return 2;
        }

        @Override
        public String[][] getCommandInformation () {
            return new String[][] {
                    new String[] {
                            "get <band>",
                            "none",
                            "Gets the value of the wireless band."
                    },
                    new String[] {
                            "set <band> <value>",
                            "none",
                            "Sets the value of the wireless band."
                    },
                    new String[] {
                            "toggle <band>",
                            "none",
                            "Toggles the value of the wireless band."
                    }
            };
        }
    }
}
TOP

Related Classes of com.sk89q.craftbook.mechanics.ic.gates.world.miscellaneous.WirelessTransmitter$Factory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.