@CyborgBeta ich kann leider blos erstmal den alten posten,jeddoch hier ist er:
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Sign;
import org.bukkit.plugin.java.JavaPlugin;
import de.Blackbird.MinigameAPI.MinigameAPI;
import de.Blackbird.MinigameAPI.Database.Operators.DataTypes;
import de.Blackbird.MinigameAPI.Database.Table;
import de.Blackbird.MinigameAPI.Player.MinigamePlayer;
import de.Blackbird.MinigameAPI.Util.LocationSerialiser;
import de.Blackbird.WirlessRedstone.Listeners.BlockPlaceListener;
import de.Blackbird.WirlessRedstone.Listeners.BlockRedstoneListener;
import de.Blackbird.WirlessRedstone.Technique.Receiver;
import de.Blackbird.WirlessRedstone.Technique.Sender;
public class WirlessRedstone extends JavaPlugin {
private static WirlessRedstone instance;
private Map<Integer,Sender> senderMap;
private Map<Integer,Receiver> receiverMap;
private Map<Sender,Receiver> connectedMap;
private Table wrTable;
@Override
public void onEnable() {
System.out.println("Loading WirlessRedstone");
instance = this;
senderMap = new HashMap<Integer,Sender>();
receiverMap = new HashMap<Integer,Receiver>();
connectedMap = new HashMap<Sender,Receiver>();
wrTable = MinigameAPI.getInstance().getDatabaseAPI().getTable("WirlessRedstone");
Bukkit.getPluginManager().registerEvents(new BlockPlaceListener(), this);
Bukkit.getPluginManager().registerEvents(new BlockRedstoneListener(), this);
try {
MinigameAPI.getInstance().getLanguageAPI().addLangString("WR_ID_NOT_AVIABLE");
MinigameAPI.getInstance().getLanguageAPI().reloadLocale();
} catch (Exception e1) {
this.getLogger().severe("Konnte WirlessRedstone nicht starten(Language)");
}
try {
checkTable();
} catch (SQLException e) {
this.getLogger().severe("Konnte WirlessRedstone nicht starten(DB)");
}
executeSignUpdate();
System.out.println("WirlessRedstone Loaded!");
}
@Override
public void onDisable() {
System.out.println("Disabling WirlessRedstone");
try {
saveDatabase();
} catch (SQLException e) {
this.getLogger().severe("Konnte WirlessRedstone nicht stoppen(DB)");
}
System.out.println("WirlessRedstone Disabled!");
}
private void checkTable() throws SQLException {
if(!wrTable.exists()) {
wrTable.create(new String[] {
"Server",
"Type",
"LocString",
"ID",
"isEnabled"
}, new DataTypes[] {
DataTypes.Text,
DataTypes.Text,
DataTypes.Text,
DataTypes.Int,
DataTypes.Text
});
}
}
private void saveDatabase() throws SQLException {
connectedMap.clear();
for(Entry<Integer, Sender> entry : senderMap.entrySet()) {
wrTable.deleteEntry("ID", entry.getKey(),"Server",MinigameAPI.getInstance().getServerName(),"Type","Sender");
if(!wrTable.contains("ID", entry.getKey(), "Type", "Sender","Server",MinigameAPI.getInstance().getServerName())) {
wrTable.insertEntry(new String[] {
"Server",
"Type",
"LocString",
"ID",
"isEnabled"
}, new Object[] {
MinigameAPI.getInstance().getServerName(),
"Sender",
entry.getValue().getLocationString(),
entry.getValue().getID(),
String.valueOf(entry.getValue().isEnabled())
});
return;
}
}
senderMap.clear();
for(Entry<Integer, Receiver> entry : receiverMap.entrySet()) {
wrTable.deleteEntry("ID", entry.getKey(),"Server",MinigameAPI.getInstance().getServerName(),"Type","Receiver");
if(!wrTable.contains("ID", entry.getKey(), "Type", "Receiver","Server",MinigameAPI.getInstance().getServerName())) {
wrTable.insertEntry(new String[] {
"Server",
"Type",
"LocString",
"ID",
"isEnabled"
}, new Object[] {
MinigameAPI.getInstance().getServerName(),
"Receiver",
entry.getValue().getLocationString(),
entry.getValue().getID(),
String.valueOf(entry.getValue().isEnabled())
});
return;
}
}
receiverMap.clear();
}
public static Sender getSender(int id) {
return instance.senderMap.get(id);
}
public static Receiver getReceiver(int id) {
return instance.receiverMap.get(id);
}
public static Map<Sender,Receiver> getConnectedMap() {
return instance.connectedMap;
}
public static Table getDatabaseTable() {
return instance.wrTable;
}
public static void addSender(Sender sender) {
instance.senderMap.put(sender.getID(), sender);
}
public static void removeSender(int id) {
instance.senderMap.remove(id);
}
public static void addReceiver(Receiver receiver) {
instance.receiverMap.put(receiver.getID(), receiver);
}
public static void removeReceiver(int id) {
instance.receiverMap.remove(id);
}
public static int getFreeSenderID() {
int id = 1;
boolean hasFound = false;
while(!hasFound) {
if(!containsSenderID(id)) {
hasFound = true;
break;
}
id++;
}
return id;
}
public static int getFreeReceiverID() {
int id = 1;
boolean hasFound = false;
while(!hasFound) {
if(!containsReceiverID(id)) {
hasFound = true;
break;
}
id++;
}
return id;
}
public static boolean containsSenderID(int id) {
Set<Integer> allIds = instance.senderMap.keySet();
return allIds.contains(id);
}
public static boolean containsReceiverID(int id) {
Set<Integer> allIds = instance.receiverMap.keySet();
return allIds.contains(id);
}
public static void registerNewSign(Sign s,MinigamePlayer p) {
if(s.getLine(0).equals("[Receiver]") && p.hasPermission("Admin")) {
instance.registerReceiver(s,p);
}
if(s.getLine(0).equals("[Sender]") && p.hasPermission("Admin")) {
instance.registerSender(s,p);
}
}
public void registerReceiver(Sign s , MinigamePlayer p) {
int id = 1;
try {
id = Integer.valueOf(s.getLine(1));
}
catch(NumberFormatException e) {
id = getFreeReceiverID();
}
s.setLine(1, String.valueOf(id));
receiverMap.put(id, new Receiver(LocationSerialiser.locationEntityToString(s.getLocation()), id));
executeSignUpdate();
}
public static int getHighestSenderID() {
Set<Integer> senderSet = instance.senderMap.keySet();
int highest = 1;
while(senderSet.iterator().hasNext()) {
int puff = senderSet.iterator().next();
if(puff > highest) {
highest = puff;
}
}
return highest;
}
public static int getHighestReceiverID() {
Set<Integer> receiverSet = instance.receiverMap.keySet();
int highest = 1;
while(receiverSet.iterator().hasNext()) {
int puff = receiverSet.iterator().next();
if(puff > highest) {
highest = puff;
}
}
return highest;
}
public void registerSender(Sign s, MinigamePlayer p) {
int id = 1;
try {
id = Integer.valueOf(s.getLine(1));
if(containsSenderID(id)) {
p.sendTranslatedMessage("WR_ID_NOT_AVIABLE");
return;
}
}
catch(NumberFormatException e) {
id = getFreeSenderID();
}
s.setLine(1, String.valueOf(id));
senderMap.put(id, new Sender(id, LocationSerialiser.locationEntityToString(s.getLocation())));
executeSignUpdate();
}
public static void executeSignUpdate() {
instance.checkConnectedMap();
}
private void checkConnectedMap() {
int highestSenderID = getHighestSenderID();
int highestReceiverID = getHighestReceiverID();
connectedMap.clear();
for(int i=1; i < highestSenderID;i++) {
if(i > highestReceiverID) break;
if(containsReceiverID(i) && containsSenderID(i)) {
Sender sender = getSender(i);
Receiver receiver = getReceiver(i);
sender.setReceiver(receiver);
receiver.setReceiver(sender);
sender.setEnabled(true);
receiver.setEnabled(true);
connectedMap.put(sender, receiver);
}
}
}
@SuppressWarnings("deprecation")
public static void setSenderPowerd(Sender s,boolean powered) {
if(s.hasReceiver() && s.isEnabled() && powered) {
Block receiver = s.getReceiver().getLocation().getBlock();
Block south = receiver.getRelative(BlockFace.SOUTH);
Block north = receiver.getRelative(BlockFace.NORTH);
Block east = receiver.getRelative(BlockFace.EAST);
Block west = receiver.getRelative(BlockFace.WEST);
if(south.getType() == Material.REDSTONE_WIRE) {
south.setData((byte)15, true);
}
if(north.getType() == Material.REDSTONE_WIRE) {
north.setData((byte)15, true);
}
if(east.getType() == Material.REDSTONE_WIRE) {
east.setData((byte)15, true);
}
if(west.getType() == Material.REDSTONE_WIRE) {
west.setData((byte)15, true);
}
}
if(s.hasReceiver() && s.isEnabled() && !powered) {
Block receiver = s.getReceiver().getLocation().getBlock();
Block south = receiver.getRelative(BlockFace.SOUTH);
Block north = receiver.getRelative(BlockFace.NORTH);
Block east = receiver.getRelative(BlockFace.EAST);
Block west = receiver.getRelative(BlockFace.WEST);
if(south.getType() == Material.REDSTONE_WIRE) {
south.setData((byte)15, false);
}
if(north.getType() == Material.REDSTONE_WIRE) {
north.setData((byte)15, false);
}
if(east.getType() == Material.REDSTONE_WIRE) {
east.setData((byte)15, false);
}
if(west.getType() == Material.REDSTONE_WIRE) {
west.setData((byte)15, false);
}
}
}
}