package me.km.blockprotections; import com.mojang.authlib.GameProfile; import java.util.ArrayList; import java.util.List; import me.km.KajetansMod; import me.km.api.GlobalText; import me.km.api.Module; import me.km.api.ModuleCommand; import me.km.api.Utils; import me.km.permissions.Permissions; import me.km.scheduler.SnuviScheduler; import net.minecraft.block.Block; import net.minecraft.block.BlockDoor; import net.minecraft.block.state.IBlockState; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class CommandBlock extends ModuleCommand { private final BlockProtectionBank bank; private int counter; private int index; private List locs; private final ArrayList blocks; private boolean checker; public CommandBlock(Module m) { super("block", m); super.setDescription("Zeigt alles für die Block-Verwaltung"); super.setUsage("/block für die Hilfe"); super.setPermission(Permissions.BLOCK); super.addAlias("blocks"); super.addAlias("pro"); super.addAlias("protect"); bank = KajetansMod.blocks.getDataBank(BlockProtectionBank.class); locs = new ArrayList<>(); blocks = new ArrayList<>(); } @Override public boolean execute(ICommandSender cs, String[] arg) { if(!(cs instanceof EntityPlayerMP)) { this.getModule().send(cs, GlobalText.onlyPlayer()); return true; } Module m = this.getModule(); EntityPlayerMP p = (EntityPlayerMP) cs; World w = p.getEntityWorld(); if(!KajetansMod.worldManager.getWorldPreferences(w).blockProtection && !KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_BYPASS)) { m.send(cs, "Du darfst hier keine Blöcke schützen."); return true; } if(arg.length > 0) { BlockPos pos = Utils.getTargetBlock(p); IBlockState state = w.getBlockState(pos); Block b = state.getBlock(); if(!Utils.shouldBeProtected(b) && !KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_ALL)) { m.send(cs, "Du kannst diesen Block nicht bearbeiten."); m.send(cs, "Du bist auf folgenden Block gerichtet: " + b.toString()); return true; } if(Utils.getStateValue(state, BlockDoor.HALF) == BlockDoor.EnumDoorHalf.UPPER) { pos = pos.add(0, -1, 0); } switch(arg[0]) { case "protect": { String name = null; if(arg.length >= 2 && KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_OTHER)) { name = arg[1]; } bank.addBlock(pos, w, p, name); if(b != Blocks.CHEST && b != Blocks.TRAPPED_CHEST) { return true; } BlockPos otherChest = Utils.getSameNearbyBlock(w, pos, b); if(otherChest != null) { bank.addBlock(otherChest, w, p, name); } return true; } case "remove": { if(!bank.doesExist(pos, w)) { this.getModule().send(p, "Der Block ist nicht gesichert."); return true; } if(!bank.hasAccess(pos, w, p, false) && !KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_BYPASS)) { m.send(cs, "Du hast keinen Zugriff auf diesen Block."); return true; } bank.removeBlock(pos, w, p); if(b != Blocks.CHEST && b != Blocks.TRAPPED_CHEST) { return true; } BlockPos otherChest = Utils.getSameNearbyBlock(w, pos, b); if(otherChest != null) { bank.removeBlock(otherChest, w, p); } return true; } case "info": { bank.printInfo(pos, w, p); return true; } case "share": { if(arg.length >= 2) { if(!bank.doesExist(pos, w)) { this.getModule().send(p, "Der Block ist nicht gesichert."); return true; } if(!bank.hasAccess(pos, w, p, false) && !KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_BYPASS)) { m.send(cs, "Du hast keinen Zugriff auf diesen Block."); return true; } GameProfile player = KajetansMod.playerbank.getDataBank().getOfflinePlayer(arg[1]); if(player == null) { m.send(cs, GlobalText.cantFindPlayer(arg[1])); return true; } bank.addPlayer(pos, w, player, p); if(b != Blocks.CHEST && b != Blocks.TRAPPED_CHEST) { return true; } BlockPos otherChest = Utils.getSameNearbyBlock(w, pos, b); if(otherChest != null) { bank.addPlayer(otherChest, w, player, p); } return true; } } case "kick": { if(arg.length >= 2) { if(!bank.doesExist(pos, w)) { this.getModule().send(p, "Der Block ist nicht gesichert."); return true; } if(!bank.hasAccess(pos, w, p, true) && !KajetansMod.perms.hasPermission(cs, Permissions.BLOCK_BYPASS)) { m.send(cs, "Du hast keinen Zugriff auf diesen Block."); return true; } GameProfile player = KajetansMod.playerbank.getDataBank().getOfflinePlayer(arg[1]); if(player == null) { m.send(cs, GlobalText.cantFindPlayer(arg[1])); return true; } bank.removePlayer(pos, w, player, p); if(b != Blocks.CHEST && b != Blocks.TRAPPED_CHEST) { return true; } BlockPos otherChest = Utils.getSameNearbyBlock(w, pos, b); if(otherChest != null) { bank.removePlayer(otherChest, w, player, p); } return true; } } } } m.send(cs, "/block ..."); m.sendHelpListElement(cs, "protect [player]", "Erstellt eine Block-Protection"); m.sendHelpListElement(cs, "remove", "Löscht eine Block-Protection"); m.sendHelpListElement(cs, "info", "Gibt Information über den Block"); m.sendHelpListElement(cs, "share ", "Teilt eine Block-Protection mit einem Spieler"); m.sendHelpListElement(cs, "kick ", "Kickt einen Spieler von einer Block-Protection"); return true; } }