public void loadConfig() { try { File f = new File("plugins/VoxelMimic/mimicconfig.txt"); if (f.exists()) { Scanner snr = new Scanner(f); // int type = 0; //unused voxelGuest = Boolean.parseBoolean(snr.nextLine().split(":")[1]); voxelGuestMimic = Boolean.parseBoolean(snr.nextLine().split(":")[1]); RADIUS = Integer.parseInt(snr.nextLine().split(":")[1]); String[] i = snr.nextLine().split(":")[1].split(","); for (String str : i) { if (str != null) { unmimicable.add(Integer.parseInt(str)); } } usePerms = Boolean.parseBoolean(snr.nextLine().split(":")[1]); canSphere = Boolean.parseBoolean(snr.nextLine().split(":")[1]); snr.close(); log.info("[VoxelMimic] Config loaded"); } else { saveConfig(); } } catch (Exception e) { log.warning("[VoxelMimic] Error while loading mimicconfig.txt"); e.printStackTrace(); } }
@Override public void saveConfig() { // This... seems... fishy... try { File f = new File("plugins/VoxelMimic/mimicconfig.txt"); if (!f.exists()) { f.getParentFile().mkdirs(); f.createNewFile(); PrintWriter pw = new PrintWriter(f); pw.write("voxelGuest:" + voxelGuest.toString() + "\r\n"); pw.write("voxelGuestMimic:" + voxelGuestMimic.toString() + "\r\n"); pw.write("RADIUS:" + RADIUS + "\r\n"); unmimicable.add(0); unmimicable.add(1); unmimicable.add(2); unmimicable.add(3); unmimicable.add(12); unmimicable.add(13); unmimicable.add(7); unmimicable.add(8); unmimicable.add(9); unmimicable.add(10); unmimicable.add(11); unmimicable.add(46); unmimicable.add(51); unmimicable.add(66); unmimicable.add(79); unmimicable.add(59); unmimicable.add(62); unmimicable.add(75); pw.write("unmimicable:"); for (int id : unmimicable) { pw.write(id + ","); } pw.write("\r\nusePermissions:" + usePerms); pw.write("\r\nallowSphere:" + canSphere); pw.close(); log.info("[VoxelMimic] Config saved"); } } catch (Exception e) { log.warning("[VoxelMimic] Error while saving mimicconfig.txt"); e.printStackTrace(); } }
PerformResult perform() throws WorldEditorException { if (dontRollback.contains(replaced)) return PerformResult.BLACKLISTED; final Block block = loc.getBlock(); if (replaced == 0 && block.getTypeId() == 0) return PerformResult.NO_ACTION; final BlockState state = block.getState(); if (!world.isChunkLoaded(block.getChunk())) world.loadChunk(block.getChunk()); if (type == replaced) { if (type == 0) { if (!block.setTypeId(0)) throw new WorldEditorException(block.getTypeId(), 0, block.getLocation()); } else if (ca != null && (type == 23 || type == 54 || type == 61 || type == 62)) { int leftover = 0; try { leftover = modifyContainer( state, new ItemStack(ca.itemType, -ca.itemAmount, (short) 0, ca.itemData)); if (leftover > 0) for (final BlockFace face : new BlockFace[] { BlockFace.NORTH, BlockFace.SOUTH, BlockFace.EAST, BlockFace.WEST }) if (block.getRelative(face).getTypeId() == 54) leftover = modifyContainer( block.getRelative(face).getState(), new ItemStack( ca.itemType, ca.itemAmount < 0 ? leftover : -leftover, (short) 0, ca.itemData)); } catch (final Exception ex) { throw new WorldEditorException(ex.getMessage(), block.getLocation()); } if (!state.update()) throw new WorldEditorException( "Failed to update inventory of " + materialName(block.getTypeId()), block.getLocation()); if (leftover > 0 && ca.itemAmount < 0) throw new WorldEditorException( "Not enough space left in " + materialName(block.getTypeId()), block.getLocation()); } else return PerformResult.NO_ACTION; return PerformResult.SUCCESS; } if (!(equalTypes(block.getTypeId(), type) || replaceAnyway.contains(block.getTypeId()))) return PerformResult.NO_ACTION; if (state instanceof InventoryHolder) { ((InventoryHolder) state).getInventory().clear(); state.update(); } if (block.getTypeId() == replaced) { if (block.getData() != (type == 0 ? data : (byte) 0)) block.setData(type == 0 ? data : (byte) 0, true); else return PerformResult.NO_ACTION; } else if (!block.setTypeIdAndData(replaced, type == 0 ? data : (byte) 0, true)) throw new WorldEditorException(block.getTypeId(), replaced, block.getLocation()); final int curtype = block.getTypeId(); if (signtext != null && (curtype == 63 || curtype == 68)) { final Sign sign = (Sign) block.getState(); final String[] lines = signtext.split("\0", 4); if (lines.length < 4) return PerformResult.NO_ACTION; for (int i = 0; i < 4; i++) sign.setLine(i, lines[i]); if (!sign.update()) throw new WorldEditorException( "Failed to update signtext of " + materialName(block.getTypeId()), block.getLocation()); } else if (curtype == 26) { final Bed bed = (Bed) block.getState().getData(); final Block secBlock = bed.isHeadOfBed() ? block.getRelative(bed.getFacing().getOppositeFace()) : block.getRelative(bed.getFacing()); if (secBlock.getTypeId() == 0 && !secBlock.setTypeIdAndData(26, (byte) (bed.getData() | 8), true)) throw new WorldEditorException(secBlock.getTypeId(), 26, secBlock.getLocation()); } else if (curtype == 64 || curtype == 71) { final byte blockData = block.getData(); final Block secBlock = (blockData & 8) == 8 ? block.getRelative(BlockFace.DOWN) : block.getRelative(BlockFace.UP); if (secBlock.getTypeId() == 0 && !secBlock.setTypeIdAndData(curtype, (byte) (blockData | 8), true)) throw new WorldEditorException(secBlock.getTypeId(), curtype, secBlock.getLocation()); } else if ((curtype == 29 || curtype == 33) && (block.getData() & 8) > 0) { final PistonBaseMaterial piston = (PistonBaseMaterial) block.getState().getData(); final Block secBlock = block.getRelative(piston.getFacing()); if (secBlock.getTypeId() == 0 && !secBlock.setTypeIdAndData( 34, curtype == 29 ? (byte) (block.getData() | 8) : (byte) (block.getData() & ~8), true)) throw new WorldEditorException(secBlock.getTypeId(), 34, secBlock.getLocation()); } else if (curtype == 34) { final PistonExtensionMaterial piston = (PistonExtensionMaterial) block.getState().getData(); final Block secBlock = block.getRelative(piston.getFacing().getOppositeFace()); if (secBlock.getTypeId() == 0 && !secBlock.setTypeIdAndData( piston.isSticky() ? 29 : 33, (byte) (block.getData() | 8), true)) throw new WorldEditorException( secBlock.getTypeId(), piston.isSticky() ? 29 : 33, secBlock.getLocation()); } else if (curtype == 18 && (block.getData() & 8) > 0) block.setData((byte) (block.getData() & 0xF7)); return PerformResult.SUCCESS; }