Esempio n. 1
0
class WarpZoneListener(BaseListener):

	default_config = {
			'warpzones': [
				{
					'area': {
						'min': [0, 0, 0],
						'max': [1, 1, 1],
						'world': 'world'
					},
					'to': {
						'location': [2, 2, 2],
						'world': 'world'
					}
				}
			]
		}

	def __init__(self, plugin):
		self.plugin = plugin

	def onEnable(self):
		self.config_manager = ConfigManager(path.join(self.plugin.getDataFolder().getAbsolutePath(), 'warpzones.yml'), default=self.default_config)
		self.config_manager.load_config()

		self.register_event(self.onPlayerMoveEvent, PlayerMoveEvent)

	def onDisable(self):
		self.config_manager.save_config()

	def onPlayerMoveEvent(self, event):

		if event.getFrom().getBlock() == event.getTo().getBlock():
			return

		to = event.getTo()
		to_arr = [to.getBlockX(), to.getBlockY(), to.getBlockZ()]

		for warp in self.config_manager.config['warpzones']:
			if warp['area']['world'] == event.getPlayer().getLocation().getWorld().getName():
				if self.is_in_range(to_arr, warp['area']['min'], warp['area']['max']): #Should probably do a rtree or something
					to_loc = warp['to']['location']
					event.getPlayer().teleport(Location(self.plugin.getServer().getWorld(warp['to']['world']), to_loc[0], to_loc[1], to_loc[2]))

	def is_in_range(self, loc, mini, maxi):
		return self.arr_gt(loc, mini) and self.arr_lt(loc, maxi)

	def arr_gt(self, arr1, arr2):
		for index in range(0, len(arr1)):
			if not arr1[index] >= arr2[index]:
				return False
		return True

	def arr_lt(self, arr1, arr2):
		for index in range(0, len(arr1)):
			if not arr1[index] <= (arr2[index]):
				return False
		return True
Esempio n. 2
0
class ActionSignListener(BaseListener):

	default_config = {
			'signs': [
				{
					'coordinates': [0, 0, 0],
					'type': 'teleport',
					'destination': [0, 0, 0]
				}
			]
		}

	def __init__(self, plugin):
		self.plugin = plugin

	def onEnable(self):
		self.config_manager = ConfigManager(path.join(self.plugin.getDataFolder().getAbsolutePath(), 'signs.yml'), default=self.default_config)
		self.config_manager.load_config()

		self.register_event(self.onPlayerInteract, PlayerInteractEvent)

		register_command(self.reload_command, 'reload-sign-config', permission="omneity.actionsigns.reload")

	def onDisable(self):
		self.config_manager.save_config()

	def onPlayerInteract(self, event):

		block = event.getClickedBlock()

		if block is None:
			return

		block_state = block.getState()

		if not isinstance(block_state, Sign):
			return

		sign = block_state
		sign_coords = [block.getX(), block.getY(), block.getZ()]

		for sign_instance in self.config_manager.config['signs']:
			if sign_instance['coordinates'] == sign_coords:
				type_handler = sign_types[sign_instance['type']]

				if event.getAction() == Action.LEFT_CLICK_BLOCK:
					type_handler.onLeftClick(sign_instance, self.plugin, event, sign)
				elif event.getAction() == Action.RIGHT_CLICK_BLOCK:
					type_handler.onRightClick(sign_instance, self.plugin, event, sign)
				else:
					return #Something is f****d, should raise a exception

				event.setCancelled(True)
				return

	def reload_command(self, sender, label, args):
		self.config_manager.reload_config()
		sender.sendMessage("Reloaded sign config")
Esempio n. 3
0
class XpListener(BaseListener):

	default_config = {
			'xp_buff': 5
		}

	def __init__(self, plugin):
		self.plugin = plugin

	def onEnable(self):
		self.config_manager = ConfigManager(path.join(self.plugin.getDataFolder().getAbsolutePath(), 'xp.yml'), default=self.default_config)
		self.config_manager.load_config()

		self.register_event(self.onPlayerExpChangeEvent, PlayerExpChangeEvent)

	def onDisable(self):
		self.config_manager.save_config()

	def onPlayerExpChangeEvent(self, event):

		event.setAmount(event.getAmount()*self.config_manager.config['xp_buff'])
Esempio n. 4
0
class Omneity(PythonPlugin):

	default_config = {
			'modules': [
				'aliases',
				'actionsigns'
			]
		}

	def onEnable(self):
		# Config stuffs
		self.getDataFolder().mkdirs()

		self.config_manager = ConfigManager(path.join(self.getDataFolder().getAbsolutePath(), 'config.yml'), default=self.default_config)
		self.config_manager.load_config()

		# Register listeners
		self.listeners = list()

		for module_name in self.config_manager.config['modules']:
			listener = __import__(module_name).listener(self)

			self.listeners.append(listener)
			listener.onEnable()
			
			self.getServer().getPluginManager().registerEvents(listener, self);

		print "Omneity Enabled"

	def onDisable(self):
		for listener in self.listeners:
			listener.onDisable()

		self.config_manager.save_config()

		print "Omneity Disabled"
Esempio n. 5
0
class NetherListener(BaseListener):

	default_config = {

		}

	def __init__(self, plugin):
		self.plugin = plugin

	def onEnable(self):
		self.config_manager = ConfigManager(path.join(self.plugin.getDataFolder().getAbsolutePath(), 'nether.yml'), default=self.default_config)
		self.config_manager.load_config()

		self.register_event(self.onPlayerPortalEvent, PlayerPortalEvent)
		self.register_event(self.onPortalCreateEvent, PortalCreateEvent)

		self.travelagent = OtOTravelAgent(self.plugin.getServer())

	def onDisable(self):
		self.config_manager.save_config()

	def onPortalCreateEvent(self, event):
		pass

	def onPlayerPortalEvent(self, event):

		if event.getCause() != PlayerTeleportEvent.TeleportCause.NETHER_PORTAL:
			print "not a nether portal"
			return

		fr = event.getFrom()
		to = event.getTo()

		to_new = self.find_portal_data(fr)
		to_new.setWorld(to.getWorld())

		event.setTo(to_new)

		event.setPortalTravelAgent(self.travelagent)

	def find_portal_data(self, location):
		world = location.getWorld()

		#Coordinates are not always accurate, sometimes they are a block next to it. Check nearby blocks for portal.
		corner = find_portal_block(location, 2)
		if not corner:
			raise PortalException("Unable to find from portal")

		#Find the bottom of the portal.
		while world.getBlockAt(corner).getType() == Material.PORTAL:
			corner.subtract(0, 1, 0)
		if world.getBlockAt(corner).getType() != Material.OBSIDIAN:
			raise PortalException("Portal wasn't really a portal")

		#Find which way the portal is placed, and do final adjustments to the corner.
		if world.getBlockAt(corner.getBlockX()+1, corner.getBlockY()+1, corner.getBlockZ()).getType() == Material.PORTAL:
			direction = 0
			corner.subtract(1, 0, 0)
		elif world.getBlockAt(corner.getBlockX(), corner.getBlockY()+1, corner.getBlockZ()+1).getType() == Material.PORTAL:
			direction = 1
			corner.subtract(0, 0, 1)
		elif world.getBlockAt(corner.getBlockX()-1, corner.getBlockY()+1, corner.getBlockZ()).getType() == Material.PORTAL:
			direction = 0
			corner.subtract(2, 0, 0)
		elif world.getBlockAt(corner.getBlockX(), corner.getBlockY()+1, corner.getBlockZ()-1).getType() == Material.PORTAL:
			direction = 1
			corner.subtract(0, 0, 2)
		else:
			raise PortalException("Unable to find portal direction")

		return PortalCoordinates(world, location.getBlockX(), location.getBlockY(), location.getBlockZ(), location.getYaw(), location.getPitch(), corner, direction)
Esempio n. 6
0
class WarpZoneListener(BaseListener):

    default_config = {
        "warpzones": [
            {
                "area": {"min": [0, 0, 0], "max": [1, 1, 1], "world": "world"},
                "to": {"location": [2, 2, 2], "orientation": [0, 0], "world": "world"},
            }
        ]
    }

    def __init__(self, plugin):
        self.plugin = plugin

    def onEnable(self):
        self.config_manager = ConfigManager(
            path.join(self.plugin.getDataFolder().getAbsolutePath(), "warpzones.yml"), default=self.default_config
        )
        self.config_manager.load_config()

        self.register_event(self.onPlayerMoveEvent, PlayerMoveEvent)

    def onDisable(self):
        self.config_manager.save_config()

    def onPlayerMoveEvent(self, event):

        if event.getFrom().getBlock() == event.getTo().getBlock():
            return

        to = event.getTo()
        to_arr = [to.getBlockX(), to.getBlockY(), to.getBlockZ()]

        for warp in self.config_manager.config["warpzones"]:
            if warp["area"]["world"] == event.getPlayer().getLocation().getWorld().getName():
                if self.is_in_range(
                    to_arr, warp["area"]["min"], warp["area"]["max"]
                ):  # Should probably do a rtree or something
                    to_loc = warp["to"]["location"]
                    to_py = warp["to"]["orientation"]
                    event.getPlayer().teleport(
                        Location(
                            self.plugin.getServer().getWorld(warp["to"]["world"]),
                            to_loc[0],
                            to_loc[1],
                            to_loc[2],
                            to_py[0],
                            to_py[1],
                        )
                    )

    def is_in_range(self, loc, mini, maxi):
        return self.arr_gt(loc, mini) and self.arr_lt(loc, maxi)

    def arr_gt(self, arr1, arr2):
        for index in range(0, len(arr1)):
            if not arr1[index] >= arr2[index]:
                return False
        return True

    def arr_lt(self, arr1, arr2):
        for index in range(0, len(arr1)):
            if not arr1[index] <= (arr2[index]):
                return False
        return True
Esempio n. 7
0
class SpawnListener(BaseListener):

	default_config = {
			'spawn': {
				'location': [0, 0, 0],
				'orientation': [0, 0],
				'world': 'world'
			},
			'first-join-message': {
				'show': True,
				'message': "%(GOLD)sWelcome %(name)s to the server!"
			},
			'allow-bed-spawn': True
		}

	def __init__(self, plugin):
		self.plugin = plugin

	def onEnable(self):
		self.config_manager = ConfigManager(path.join(self.plugin.getDataFolder().getAbsolutePath(), 'spawn.yml'), default=self.default_config)
		self.config_manager.load_config()

		self.register_event(self.onPlayerJoinEvent, PlayerJoinEvent)
		self.register_event(self.onPlayerPortalEvent, PlayerPortalEvent)
		self.register_event(self.onPlayerRespawnEvent, PlayerRespawnEvent)

		register_command(self.spawnCommand, "spawn", permission="omneity.spawn.tp")

	def onDisable(self):
		self.config_manager.save_config()

	def getSpawnLocation(self):
		spawn_info = self.config_manager.config['spawn']

		return Location(
			self.plugin.getServer().getWorld(spawn_info['world']),
			spawn_info['location'][0], spawn_info['location'][1], spawn_info['location'][2],
			spawn_info['orientation'][0], spawn_info['orientation'][1]
			)

	def onPlayerJoinEvent(self, event):
		player = event.getPlayer()

		if not player.hasPlayedBefore():
			player.teleport(self.getSpawnLocation())

			first_join_message_info = self.config_manager.config['first-join-message']
			if first_join_message_info['show']:
				message = first_join_message_info['message'] % dict({'name': event.getPlayer().getName()}.items() + chatcolor.colors.items())
				self.plugin.getServer().broadcastMessage(message)

	def onPlayerPortalEvent(self, event):
		if event.getFrom().getWorld().getEnvironment() == Environment.THE_END and not self.config_manager.config['allow-bed-spawn']:
			event.setTo(self.getSpawnLocation())

	def onPlayerRespawnEvent(self, event):
		if not event.isBedSpawn() or not self.config_manager.config['allow-bed-spawn']:
			event.setRespawnLocation(self.getSpawnLocation())

	def spawnCommand(self, sender, alias, args):
		if isinstance(sender, Player):
			sender.teleport(self.getSpawnLocation())
			sender.sendMessage("Whoosh!")
Esempio n. 8
0
class WarpListener(BaseListener):

	permission_error = chatcolor.RED + "I'm sorry, but you do not have permission to perform this command. Please contact the server administrators if you believe that this is in error."

	default_config = {
			'warps':{
				'test': {
					'location': [0, 0, 0],
					'orientation': [0, 0],
					'world': 'world'
				}
			}
		}

	def __init__(self, plugin):
		self.plugin = plugin

	def onEnable(self):
		self.config_manager = ConfigManager(path.join(self.plugin.getDataFolder().getAbsolutePath(), 'warps.yml'), default=self.default_config)
		self.config_manager.load_config()

		register_command(self.command_warp, 'warp', description="Warp to places", usage="/<command> <warp> | set <warp> | del <warp> | list", permission="omneity.warp")

	def onDisable(self):
		self.config_manager.save_config()

	def command_warp(self, sender, label, args):
		if len(args) < 1:
			return False

		if args[0] == "set":
			if not sender.hasPermission("omneity.warp.set"):
				sender.sendMessage(self.permission_error)
				return

			if len(args) != 2:
				return False

			location = sender.getLocation()

			self.config_manager.config['warps'][args[1]] = {'location': [location.getX(), location.getY(), location.getZ()], 'orientation': [location.getYaw(), location.getPitch()], 'world': location.getWorld().getName()}
			self.config_manager.mark_dirty()

			sender.sendMessage(chatcolor.GOLD + "Warp set.")

			return True

		if args[0] == "del":
			if not sender.hasPermission("omneity.warp.del"):
				sender.sendMessage(self.permission_error)
				return

			if len(args) != 2:
				return False

			del(self.config_manager.config['warps'][args[1]])
			self.config_manager.mark_dirty()

			sender.sendMessage(chatcolor.GOLD + "Warp deleted.")
			return

		if args[0] == "list":
			sender.sendMessage(chatcolor.GOLD + ', '.join(self.config_manager.config['warps'].keys()))
			return

		if len(args) != 1:
			return False

		try:
			warp_data = self.config_manager.config['warps'][args[0]]
		except KeyError:
			sender.sendMessage(chatcolor.GOLD + "Warp doesn't exist.")
			return

		location = Location(
			self.plugin.getServer().getWorld(warp_data['world']),
			warp_data['location'][0], warp_data['location'][1], warp_data['location'][2],
			warp_data['orientation'][0], warp_data['orientation'][1])

		sender.teleport(location)
		sender.sendMessage(chatcolor.GOLD + "Warped.")
Esempio n. 9
0
class RecipeListener(BaseListener):

	default_config = {
			'furnace': [
				{
					'result': {
						'id': 1,
						'amount': 1,    #default: 1
						'data': -1     #default: -1
					},
					'source': {
						'id': 1,
						'data': -1     #default: -1
					}
				}
			],
			'shape': [
				{
					'result': {
						'id': 1,
						'amount': 1,    #default: 1
						'data': -1     #default: -1
					},
					'shape': [
						"ABA",
						"BAB",
						"ABA"
					],
					'ingredients': {
						'A': {
							'id': 2,
							'data': -1     #default: -1
						}, 
						'B': {
							'id': 3,
							'data': -1     #default: -1
						}
					}
				}
			],
			'shapeless': [
				{
					'result': {
						'id': 1,
						'amount': 1,    #default: 1
						'data': -1     #default: -1
					},
					'ingredients': [
						{
							'id': 1,
							'amount': 1,    #default: 1 max: 9
							'data': -1     #default: 1-
						}
					]
				}
			]
		}

	def __init__(self, plugin):
		self.plugin = plugin

	def onEnable(self):
		self.config_manager = ConfigManager(path.join(self.plugin.getDataFolder().getAbsolutePath(), 'recipes.yml'), default=self.default_config)
		self.config_manager.load_config()

		server = self.plugin.getServer()

		for recipe_data in self.config_manager.config['furnace']:
			recipe = FurnaceRecipe(self.parse_itemstack(recipe_data['result']), self.parse_materialdata(recipe_data['source']))
			server.addRecipe(recipe)

		for recipe_data in self.config_manager.config['shape']:
			recipe = ShapedRecipe(self.parse_itemstack(recipe_data['result']))
			recipe.shape(recipe_data['shape'])
			for key, ingredient in recipe_data['ingredients'].iteritems():
				recipe.setIngredient(key, self.parse_materialdata(ingredient))
			server.addRecipe(recipe)

		for recipe_data in self.config_manager.config['shapeless']:
			recipe = ShapelessRecipe(self.parse_itemstack(recipe_data['result']))
			for ingredient in recipe_data['ingredients']:
				recipe.addIngredient(ingredient.get('amount', 1), self.parse_materialdata(ingredient))
			server.addRecipe(recipe)


	def parse_itemstack(self, data):
		return ItemStack(data['id'], data.get('amount', 1), data.get('data', -1))

	def parse_materialdata(self, data):
		return MaterialData(data['id'], data.get('data', -1))

	def onDisable(self):
		self.config_manager.save_config()