Update Permission #220

Zusammengeführt
YoyoNow hat 35 Commits von PermissionUpdate nach master 2024-02-17 08:53:31 +01:00 zusammengeführt
106 geänderte Dateien mit 945 neuen und 578 gelöschten Zeilen

Datei anzeigen

@ -27,6 +27,10 @@ PAGE_LIST=§e Page ({0}/{1}) »»
LIST_PREVIOUS_PAGE=§ePrevious page LIST_PREVIOUS_PAGE=§ePrevious page
LIST_NEXT_PAGE=§eNext page LIST_NEXT_PAGE=§eNext page
# Permissions
NO_PERMISSION = You are not allowed to use that here
SPECTATOR = §fSpectator
# Scoreboard # Scoreboard
SCOREBOARD_TIME = Time SCOREBOARD_TIME = Time
SCOREBOARD_REGION = Region SCOREBOARD_REGION = Region
@ -121,7 +125,6 @@ BACKUP_HELP_LOAD=§8/§ebackup load §8[§7BackupName§8] §8- §7Load a region
BACKUP_HELP_LIST=§8/§ebackup list §8- §7List all region backups BACKUP_HELP_LIST=§8/§ebackup list §8- §7List all region backups
BACKUP_HELP_GUI=§8/§ebackup gui §8- §7Open the backup GUI BACKUP_HELP_GUI=§8/§ebackup gui §8- §7Open the backup GUI
BACKUP_REGION_NO_REGION=§cYou are not inside any region BACKUP_REGION_NO_REGION=§cYou are not inside any region
BACKUP_NO_PERMS=§You do not have permission to use the backup system
BACKUP_CREATE_SUCCESS=§7Backup created BACKUP_CREATE_SUCCESS=§7Backup created
BACKUP_CREATE_FAILURE=§cBackup failed BACKUP_CREATE_FAILURE=§cBackup failed
BACKUP_CREATE_NO_CHANGE=§7No changes to save BACKUP_CREATE_NO_CHANGE=§7No changes to save
@ -135,11 +138,6 @@ BACKUP_LORE=§eClick to load
# Bau # Bau
BAU_COMMAND_HELP_INFO = §8/§ebau info §8- §7Alias for §8/§ebauinfo BAU_COMMAND_HELP_INFO = §8/§ebau info §8- §7Alias for §8/§ebauinfo
BAU_COMMAND_HELP_TOGGLEWE = §8/§ebau togglewe §8[§7Player§8] §8- §7Edit the WorldEdit permissions of a player
BAU_COMMAND_HELP_TOGGLEWORLD = §8/§ebau toggleworld §8[§7Player§8] §8- §7Edit the World permissions of a player
BAU_UNKNOWN_PLAYER = §cUnknown Player
BAU_NO_PLAYER = §cThe player is no member of your world!
BAU_NO_WORLD = §cThis is not your world!
BAU_INFO_ITEM_NAME = §eBau-Management BAU_INFO_ITEM_NAME = §eBau-Management
## This is used in BauInfoBauGuiItem.java ## This is used in BauInfoBauGuiItem.java
@ -153,11 +151,6 @@ BAU_INFO_ITEM_LORE_ITEMS = §7Items§8: §e{0}
BAU_INFO_COMMAND_HELP = §8/§ebauinfo §8- §7Information regarding this build server BAU_INFO_COMMAND_HELP = §8/§ebauinfo §8- §7Information regarding this build server
BAU_INFO_COMMAND_OWNER = §7Owner§8: §e{0} BAU_INFO_COMMAND_OWNER = §7Owner§8: §e{0}
BAU_INFO_COMMAND_MEMBER = §7Member §8[§7{0}§8]§8: §e BAU_INFO_COMMAND_MEMBER = §7Member §8[§7{0}§8]§8: §e
BAU_INFO_MEMBER_INFO = §e{0}§8[{1}§8,{2}§8] §8
BAU_INFO_MEMBER_WE_ALLOW = §aWE
BAU_INFO_MEMBER_WE_DISALLOW = §cWE
BAU_INFO_MEMBER_WORLD_ALLOW = §aW
BAU_INFO_MEMBER_WORLD_DISALLOW = §cW
BAU_INFO_COMMAND_FLAG = §7{0}§8: §7{1} BAU_INFO_COMMAND_FLAG = §7{0}§8: §7{1}
BAU_INFO_COMMAND_TPS = §7TPS§8:§e BAU_INFO_COMMAND_TPS = §7TPS§8:§e
@ -216,11 +209,6 @@ HOTBAR_INVENTORY=Standard hotbar
# GUI # GUI
GUI_EDITOR_ITEM_NAME=§eGui editor GUI_EDITOR_ITEM_NAME=§eGui editor
GUI_NAME=Bau GUI GUI_NAME=Bau GUI
GUI_NO_PERMISSION=§cYou do not have enough permissions for this
GUI_NO_OWNER=§cYou are not the owner of this World
GUI_NO_WORLD=§cYou do not have permissions to change the World
GUI_NO_WORLDEDIT=§cYou do not have permissions to use WorldEdit
GUI_NO_MEMBER=§cYou need to be a member of this World
GUI_ITEM_LORE1=§7Use this item to open the bau gui GUI_ITEM_LORE1=§7Use this item to open the bau gui
GUI_ITEM_LORE2=§7or press swap hands twice. GUI_ITEM_LORE2=§7or press swap hands twice.
GUI_EDITOR_TITLE=Bau GUI Editor GUI_EDITOR_TITLE=Bau GUI Editor
@ -271,7 +259,6 @@ SHIELD_PRINTING_HELP_STEP_7 = §87. §7Apply the shield printing with §8/§eshi
SHIELD_PRINTING_NO_REGION = §cYou are not in a region. SHIELD_PRINTING_NO_REGION = §cYou are not in a region.
SHIELD_PRINTING_NOT_RUNNING = §cThe shield printing is not running. SHIELD_PRINTING_NOT_RUNNING = §cThe shield printing is not running.
SHIELD_PRINTING_DISALLOWED = §cYou are not allowed to use shield printing here.
SHIELD_PRINTING_BOSSBAR = §fMovements: {0} SHIELD_PRINTING_BOSSBAR = §fMovements: {0}
SHIELD_PRINTING_BOSSBAR_COPIED = §fMovements: {0} Copied: {1} SHIELD_PRINTING_BOSSBAR_COPIED = §fMovements: {0} Copied: {1}
@ -308,7 +295,6 @@ SIMULATOR_CHANGE_HELP = §8/§esimulator change §8-§7 Change your simulator wa
SIMULATOR_DELETE_HELP = §8/§esimulator delete §8[§7name§8] §8-§7 Deletes the simulator SIMULATOR_DELETE_HELP = §8/§esimulator delete §8[§7name§8] §8-§7 Deletes the simulator
SIMULATOR_START_HELP = §8/§esimulator start §8[§7name§8] §8-§7 Starts the simulator SIMULATOR_START_HELP = §8/§esimulator start §8[§7name§8] §8-§7 Starts the simulator
SIMULATOR_COPY_HELP = §8/§esimulator copy §8[§7to-copy§8] §8[§7name§8] §8-§7 Copy the simulator SIMULATOR_COPY_HELP = §8/§esimulator copy §8[§7to-copy§8] §8[§7name§8] §8-§7 Copy the simulator
SIMULATOR_NO_PERMS = §cYou are not allowed to use the simulator here
SIMULATOR_GUI_ITEM_NAME = §eTNT Simulator SIMULATOR_GUI_ITEM_NAME = §eTNT Simulator
@ -487,7 +473,6 @@ TPSLIMIT_GUI_ITEM_NAME = §eTPS limiter
TPSLIMIT_GUI_ITEM_LORE = §7Currently: §e{0} TPSLIMIT_GUI_ITEM_LORE = §7Currently: §e{0}
TPSLIMIT_ANVIL_GUI = New TPS limit TPSLIMIT_ANVIL_GUI = New TPS limit
TPSLIMIT_CURRENT = §7Current TPS limit§8: §e{0} TPSLIMIT_CURRENT = §7Current TPS limit§8: §e{0}
TPSLIMIT_NO_PERMS = §cYou are not allowed to use the TPS-Limiter here
TPSLIMIT_SET = §eSet TPS limit to {0} TPSLIMIT_SET = §eSet TPS limit to {0}
TPSLIMIT_FROZEN = §eTPS frozen TPSLIMIT_FROZEN = §eTPS frozen
@ -513,7 +498,6 @@ TRACE_MESSAGE_DELETE = §cAll TNT-positions deleted
TRACE_MESSAGE_SHOW = §aAll TNT-positions shown TRACE_MESSAGE_SHOW = §aAll TNT-positions shown
TRACE_MESSAGE_HIDE = §cAll TNT-positions hidden TRACE_MESSAGE_HIDE = §cAll TNT-positions hidden
TRACE_MESSAGE_CLICK_ISOLATE = §eClick to §aisolate§8/§cunisolate TRACE_MESSAGE_CLICK_ISOLATE = §eClick to §aisolate§8/§cunisolate
TRACE_MESSAGE_DISALLOWED = §cYou are not allowed to use the TNT-Tracer here
TRACE_MESSAGE_SHOW_AT = §aTNT-positions shown with {0} at {1} TRACE_MESSAGE_SHOW_AT = §aTNT-positions shown with {0} at {1}
TRACE_MESSAGE_SHOW_FROM = §aAll TNT-positions shown with {0} from {1} TRACE_MESSAGE_SHOW_FROM = §aAll TNT-positions shown with {0} from {1}
TRACE_MESSAGE_SHOW_FROM_TO = §aAll TNT-positions shown with {0} from {1} to {2} TRACE_MESSAGE_SHOW_FROM_TO = §aAll TNT-positions shown with {0} from {1} to {2}
@ -702,7 +686,6 @@ OTHER_CLEAR_HELP_PLAYER=§8/§eclear §8[§7Player§8] §8- §7Clears a player i
OTHER_CLEAR_CLEARED=Your inventory was cleared. OTHER_CLEAR_CLEARED=Your inventory was cleared.
OTHER_CLEAR_FROM=Your invetnory was cleared by {0}. OTHER_CLEAR_FROM=Your invetnory was cleared by {0}.
OTHER_CLEAR_TO=The inventory of {0} §7was cleared. OTHER_CLEAR_TO=The inventory of {0} §7was cleared.
OTHER_CLEAR_NO_PERMS=§cYou are not allowed to clear other's inventory here.
OTHER_DECLUTTER_HELP=§8/§edeclutter §8- §7Organise your inventory OTHER_DECLUTTER_HELP=§8/§edeclutter §8- §7Organise your inventory
OTHER_DECLUTTER_DONE=§aYour inventory was organised. OTHER_DECLUTTER_DONE=§aYour inventory was organised.
OTHER_GAMEMODE_UNKNOWN=§cUnknown gamemode. OTHER_GAMEMODE_UNKNOWN=§cUnknown gamemode.
@ -718,7 +701,6 @@ OTHER_TELEPORT_SELF_2=§cBlocks left to travel: 0; ETA: 0:00
OTHER_TELEPORT_SELF_3=§cA little Movement is important. OTHER_TELEPORT_SELF_3=§cA little Movement is important.
OTHER_TELEPORT_SELF_4=§cFor such a distance? OTHER_TELEPORT_SELF_4=§cFor such a distance?
OTHER_TIME_HELP=§8/§etime §8<§7Time 0=Morining§8, §76000=Midday§8, §718000=Midnight§8> - §7Sets the time on the Build OTHER_TIME_HELP=§8/§etime §8<§7Time 0=Morining§8, §76000=Midday§8, §718000=Midnight§8> - §7Sets the time on the Build
OTHER_TIME_NO_PERM=§cYou are not allowed to change the time here
OTHER_TIME_INVALID=§cPlease input a time between 0 and 24000 OTHER_TIME_INVALID=§cPlease input a time between 0 and 24000
OTHER_TIME_RESULT=§7§oWhooosh OTHER_TIME_RESULT=§7§oWhooosh
OTHER_TPS_HEAD = §7TPS: 1s 10s 1m 5m 10m OTHER_TPS_HEAD = §7TPS: 1s 10s 1m 5m 10m
@ -784,17 +766,6 @@ MATERIAL_FLAMMABLE=§8- §eFlammable block
MATERIAL_BURNABLE=§8- §eBurnable block MATERIAL_BURNABLE=§8- §eBurnable block
MATERIAL_WATERLOGGABLE=§8- §eWaterloggable block MATERIAL_WATERLOGGABLE=§8- §eWaterloggable block
MATERIAL_UNMOVABLE=§8- §eUnmovable block MATERIAL_UNMOVABLE=§8- §eUnmovable block
# Redstonetester
RT_HELP=§8/§eredstonetester §8-§7 Gives you the redstone tester
RT_GIVEN=§7Measure the time between activation of components
RT_ITEM_NAME=§eRedstonetester
RT_ITEM_LORE_1=§eLeftclick block §8-§7 Sets the 1. Position
RT_ITEM_LORE_2=§eRightclick block §8-§7 Sets the 2. Position
RT_ITEM_LORE_3=§eShift-rightclick in air §8-§7 Reset
RT_LOC=§8: §e{0} {1} {2}
RT_INVALID_LOC=§cUnknown Position
RT_RESULT=§7Difference§8: §e{0}§7 Ticks §8,§7 R-Ticks §e{1}
RT_ACTIVATE=§7Positions deleted§8.
# Region Items # Region Items
REGION_ITEM_COLOR=§7Color: §e{0} REGION_ITEM_COLOR=§7Color: §e{0}
REGION_ITEM_COLOR_CHOOSE=Choose color REGION_ITEM_COLOR_CHOOSE=Choose color
@ -820,24 +791,18 @@ REGION_COLOR_HELP_COLOR=§8/§ecolor §8[§7Color§8] §8- §7Sets the color of
REGION_COLOR_HELP_COLOR_TYPE=§8/§ecolor §8[§7Color§8] §8[§7Type§8] §8- §7Sets the color of the region or globally REGION_COLOR_HELP_COLOR_TYPE=§8/§ecolor §8[§7Color§8] §8[§7Type§8] §8- §7Sets the color of the region or globally
REGION_COLOR_GLOBAL=§7All regions color set to §e{0} REGION_COLOR_GLOBAL=§7All regions color set to §e{0}
REGION_COLOR_NO_REGION=§cYou are currently not in any region REGION_COLOR_NO_REGION=§cYou are currently not in any region
REGION_COLOR_NO_PERMS=§cThis is not your world!
REGION_FIRE_HELP=§8/§efire §8- §7Toggle fire damage REGION_FIRE_HELP=§8/§efire §8- §7Toggle fire damage
REGION_FIRE_NO_PERMS=§cYou are not allowed to toggle fire damage here
REGION_FIRE_ENABLED=§cFire damage deactivated in this region REGION_FIRE_ENABLED=§cFire damage deactivated in this region
REGION_FIRE_DISABLED=§aFire damage activated in this region REGION_FIRE_DISABLED=§aFire damage activated in this region
REGION_FREEZE_HELP=§8/§efreeze §8- §7Toggle Freeze REGION_FREEZE_HELP=§8/§efreeze §8- §7Toggle Freeze
REGION_FREEZE_NO_PERMS=§cYou are not allowed to freeze this world
REGION_FREEZE_ENABLED=§cRegion frozen REGION_FREEZE_ENABLED=§cRegion frozen
REGION_FREEZE_DISABLED=§aRegion thawed REGION_FREEZE_DISABLED=§aRegion thawed
REGION_ITEMS_HELP=§8/§eitems §8- §7Toggle Items REGION_ITEMS_HELP=§8/§eitems §8- §7Toggle Items
REGION_ITEMS_NO_PERMS=§cYou are not allowed to toggle items in this world
REGION_ITEMS_ENABLED=§aItems enabled in this region REGION_ITEMS_ENABLED=§aItems enabled in this region
REGION_ITEMS_DISABLED_GLOBAL=§cItems disabled in this world
REGION_ITEMS_DISABLED=§cItems disabled in this region REGION_ITEMS_DISABLED=§cItems disabled in this region
REGION_PROTECT_HELP=§8/§eprotect §8- §7Protect the region REGION_PROTECT_HELP=§8/§eprotect §8- §7Protect the region
REGION_PROTECT_DISABLE=§cProtection disabled REGION_PROTECT_DISABLE=§cProtection disabled
REGION_PROTECT_ENABLE=§aProtection enabled REGION_PROTECT_ENABLE=§aProtection enabled
REGION_PROTECT_NO_PERMS=§cYou are not allowed to protect the floor here
REGION_PROTECT_FALSE_REGION=§cYou are not currently in a (M)WG-region REGION_PROTECT_FALSE_REGION=§cYou are not currently in a (M)WG-region
REGION_REGION_HELP_UNDO=§8/§eregion undo §8- §7undo the last 20 /testblock or /reset REGION_REGION_HELP_UNDO=§8/§eregion undo §8- §7undo the last 20 /testblock or /reset
REGION_REGION_HELP_REDO=§8/§eregion redo §8- §7redo the last 20 §8/§7rg undo REGION_REGION_HELP_REDO=§8/§eregion redo §8- §7redo the last 20 §8/§7rg undo
@ -845,8 +810,6 @@ REGION_REGION_HELP_RESTORE=§8/§eregion restore §8- §7Resets the region, with
REGION_REGION_HELP_RESTORE_SCHEMATIC=§8/§eregion restore §8[§7Schematic§8] §8- §7Resets the region, withoout removing your builds REGION_REGION_HELP_RESTORE_SCHEMATIC=§8/§eregion restore §8[§7Schematic§8] §8- §7Resets the region, withoout removing your builds
REGION_REGION_HELP_COPYPOINT=§8/§eregion copypoint §8- §7Teleport to the regions copy point REGION_REGION_HELP_COPYPOINT=§8/§eregion copypoint §8- §7Teleport to the regions copy point
REGION_REGION_HELP_TESTBLOCKPOINT=§8/§eregion testblockpoint §8- §7Teleport to the regions dummy point REGION_REGION_HELP_TESTBLOCKPOINT=§8/§eregion testblockpoint §8- §7Teleport to the regions dummy point
REGION_REGION_HELP_CHANGETYPE_INFO=§8/§eregion changetype §8- §7Returns the region type
REGION_REGION_HELP_CHANGETYPE=§8/§eregion changetype §8[§7Type§8] §8- §8Sets the region type
REGION_REGION_HELP_CHANGESKIN_INFO=§8/§eregion changeskin §8- §7Returns the region skin REGION_REGION_HELP_CHANGESKIN_INFO=§8/§eregion changeskin §8- §7Returns the region skin
REGION_REGION_HELP_CHANGESKIN=§8/§eregion changeskin §8[§7Skin§8] §8- §8Sets the region skin REGION_REGION_HELP_CHANGESKIN=§8/§eregion changeskin §8[§7Skin§8] §8- §8Sets the region skin
REGION_REGION_NOTHING_UNDO=§cNothing left to undo REGION_REGION_NOTHING_UNDO=§cNothing left to undo
@ -862,13 +825,6 @@ REGION_REGION_TP_COPY=§7Teleported to the copy point
REGION_REGION_TP_TEST_BLOCK=§7Teleported to the tesblock REGION_REGION_TP_TEST_BLOCK=§7Teleported to the tesblock
REGION_REGION_TP_UNKNOWN=§cUndefined teleport point REGION_REGION_TP_UNKNOWN=§cUndefined teleport point
REGION_REGION_NO_REGION=§cYou are not inside any region REGION_REGION_NO_REGION=§cYou are not inside any region
REGION_REGION_NO_PERMS=§cYou are not allowed to change the region
REGION_REGION_CHANGETYPE_INFO=§7RRegion type is §e{0}
REGION_REGION_CHANGETYPE_UNKNOWN=§cRegion type is invalid
REGION_REGION_CHANGETYPE_INVALID=§cRegion type is not allowed here
REGION_REGION_CHANGETYPE_CHANGE=§7Region type changed to §e{0}
REGION_REGION_CHANGETYPE_CHANGE_UPDATE=§7Click §e§lHERE §7to change the region type
REGION_REGION_CHANGETYPE_CHANGE_UPDATE_HOVER=§8/§ereset
REGION_REGION_CHANGESKIN_INFO=§7Region skin is §e{0} REGION_REGION_CHANGESKIN_INFO=§7Region skin is §e{0}
REGION_REGION_CHANGESKIN_INFO_CREATOR=§7Skin created by §e{0} REGION_REGION_CHANGESKIN_INFO_CREATOR=§7Skin created by §e{0}
REGION_REGION_CHANGESKIN_UNKNOWN=§cRegion skin is invalid REGION_REGION_CHANGESKIN_UNKNOWN=§cRegion skin is invalid
@ -880,7 +836,6 @@ REGION_RESET_HELP_RESET=§8/§ereset §8- §7Resets the region
REGION_RESET_HELP_SCHEMATIC=§8/§ereset §8[§7Schematic§8] §8- §7Resets the region using a schematic REGION_RESET_HELP_SCHEMATIC=§8/§ereset §8[§7Schematic§8] §8- §7Resets the region using a schematic
REGION_RESET_RESETED=§7Region reset REGION_RESET_RESETED=§7Region reset
REGION_RESET_ERROR=§cError reseting the region REGION_RESET_ERROR=§cError reseting the region
REGION_RESET_NO_PERMS=§cYou are not allowed to reset the region here
REGION_RESET_NO_REGION=§cYou are currently not in any region REGION_RESET_NO_REGION=§cYou are currently not in any region
REGION_TB_HELP_RESET=§8/§etestblock §8- §7Reset the dummy REGION_TB_HELP_RESET=§8/§etestblock §8- §7Reset the dummy
REGION_TB_HELP_RESET_EXTENSION=§8/§etestblock §8[§7ExtensionType§8] §8- §7Reset the dummy REGION_TB_HELP_RESET_EXTENSION=§8/§etestblock §8[§7ExtensionType§8] §8- §7Reset the dummy
@ -888,7 +843,6 @@ REGION_TB_HELP_SCHEMATIC=§8/§etestblock §8[§7Schematic§8] §8- §7Reset the
REGION_TB_HELP_SCHEMATIC_EXTENSION=§8/§etestblock §8[§7Schematic§8] §8[§7ExtensionType§8] §8- §7Reset the dummy using a schematic REGION_TB_HELP_SCHEMATIC_EXTENSION=§8/§etestblock §8[§7Schematic§8] §8[§7ExtensionType§8] §8- §7Reset the dummy using a schematic
REGION_TB_DONE=§7Dummy reset REGION_TB_DONE=§7Dummy reset
REGION_TB_ERROR=§cError resetting the dummy REGION_TB_ERROR=§cError resetting the dummy
REGION_TB_NO_PERMS=§cYou are not allowed to reset the dummy here
REGION_TB_NO_REGION=§cYou are currently not in any region REGION_TB_NO_REGION=§cYou are currently not in any region
REGION_TB_NO_SCHEMSHARING=§cYou currently cannot share schematics until {0}. REGION_TB_NO_SCHEMSHARING=§cYou currently cannot share schematics until {0}.
REGION_TB_NO_SCHEMRECEIVING=§cThe Owner of this build server cannot receive any schematics until {0}. REGION_TB_NO_SCHEMRECEIVING=§cThe Owner of this build server cannot receive any schematics until {0}.
@ -898,7 +852,6 @@ REGION_TNT_ON=§aTNT-Damage activated
REGION_TNT_OFF=§cTNT-Damage deactivated REGION_TNT_OFF=§cTNT-Damage deactivated
REGION_TNT_TB=§aTNT-Damage activated outside the building area REGION_TNT_TB=§aTNT-Damage activated outside the building area
REGION_TNT_BUILD=§aTNT-Damage activated outside the testblok area REGION_TNT_BUILD=§aTNT-Damage activated outside the testblok area
REGION_TNT_NO_PERMS=§cYou are not allowed to toggle tnt damage here
REGION_TNT_BUILD_DESTROY=§cAn explosion would have destroyed blocks in the building area REGION_TNT_BUILD_DESTROY=§cAn explosion would have destroyed blocks in the building area
REGION_TNT_TB_DESTROY=§cAn explosion would have destroyed blocks in the testblock area REGION_TNT_TB_DESTROY=§cAn explosion would have destroyed blocks in the testblock area
@ -917,7 +870,6 @@ PANZERN_PREPARE1 = §71. Check, if barrels reach until border of armor.
PANZERN_PREPARE2 = §72. Carpet on the floor in walkways helps with armoring. PANZERN_PREPARE2 = §72. Carpet on the floor in walkways helps with armoring.
PANZERN_PREPARE3 = §73. Shieldtechnology should be encased. PANZERN_PREPARE3 = §73. Shieldtechnology should be encased.
PANZERN_PREPARE4 = §74. Standing in the region that is being armored can improve armoring. PANZERN_PREPARE4 = §74. Standing in the region that is being armored can improve armoring.
PANZERN_NO_PERM = §cYou are not allowed to use the armoring system here
PANZERN_NO_WORLDEDIT = §cYou have no WorldEdit selcetion PANZERN_NO_WORLDEDIT = §cYou have no WorldEdit selcetion
PANZERN_PROGRESS = §e{0} §7Blocks left, §e{1} §7Blocks per second, §e{2} §7block delta PANZERN_PROGRESS = §e{0} §7Blocks left, §e{1} §7Blocks per second, §e{2} §7block delta
PANZERN_DONE = §aDone PANZERN_DONE = §aDone
@ -927,7 +879,6 @@ LAUFBAU_HELP = §8/§elaufbau §8[§7smallest§8|§7blastresistant§8] §8- §7B
LAUFBAU_HELP_SETTINGS = §8/§elaufbau settings §8- §7Opens the settings GUI LAUFBAU_HELP_SETTINGS = §8/§elaufbau settings §8- §7Opens the settings GUI
LAUFBAU_PREPARE1 = §71. Trace the cannons as often as necessary, in all modes. LAUFBAU_PREPARE1 = §71. Trace the cannons as often as necessary, in all modes.
LAUFBAU_PREPARE2 = §72. Try to delete all fails from the traces. LAUFBAU_PREPARE2 = §72. Try to delete all fails from the traces.
LAUFBAU_NO_PERM = §cYou are not allowed to use the barrel building system here
LAUFBAU_NO_WORLDEDIT = §cYou don't have a WorldEdit selection LAUFBAU_NO_WORLDEDIT = §cYou don't have a WorldEdit selection
LAUFBAU_STATE_FILTERING_TRACES = Filtering traces LAUFBAU_STATE_FILTERING_TRACES = Filtering traces
LAUFBAU_STATE_PROCESSING_TRACES = Connnecting traces LAUFBAU_STATE_PROCESSING_TRACES = Connnecting traces
@ -1039,7 +990,6 @@ LAUFBAU_TILT_PARTIAL = §8-§7 Tilt partial
# UTILS # UTILS
SELECT_HELP = §8/§eselect §8[§7RegionsTyp§8] §8- §7Select a region type SELECT_HELP = §8/§eselect §8[§7RegionsTyp§8] §8- §7Select a region type
SELECT_EXTENSION_HELP = §8/§eselect §8[§7RegionsTyp§8] §8[§7Extension§8] §8- §7Select a region type with or without extension SELECT_EXTENSION_HELP = §8/§eselect §8[§7RegionsTyp§8] §8[§7Extension§8] §8- §7Select a region type with or without extension
SELECT_NO_PERMS = §cYou are not allowed to use the slection tool here
SELECT_GLOBAL_REGION = §cThe global region cannot be selected SELECT_GLOBAL_REGION = §cThe global region cannot be selected
SELECT_NO_TYPE = §cThis region has no {0} SELECT_NO_TYPE = §cThis region has no {0}
SELECT_NO_EXTENSION = §cThis region has no extension SELECT_NO_EXTENSION = §cThis region has no extension
@ -1093,7 +1043,6 @@ PISTON_HELP_3 = §7Count is yellow, if too many blocks are present.
PISTON_INFO = §7Moved Blocks {0}{1}§8/§712 PISTON_INFO = §7Moved Blocks {0}{1}§8/§712
# Warp # Warp
WARP_DISALLOWED = §cYou are not allowed to use the warp here
WARP_LOC_X = §7X§8: §e{0} WARP_LOC_X = §7X§8: §e{0}
WARP_LOC_Y = §7Y§8: §e{0} WARP_LOC_Y = §7Y§8: §e{0}
WARP_LOC_Z = §7Z§8: §e{0} WARP_LOC_Z = §7Z§8: §e{0}
@ -1119,12 +1068,9 @@ WARP_HELP_LIST=§8/§ewarp list §8- §7List all warps
# WORLD # WORLD
STOP_HELP = §8/§estop §8- §7Stops the server STOP_HELP = §8/§estop §8- §7Stops the server
STOP_NO_PERMS = §cYou do not have the permission to stop the server
STOP_MESSAGE = §eServer is stopping STOP_MESSAGE = §eServer is stopping
WORLD_EDIT_NO_PERMS = §cYou do not have the permission to use WorldEdit
KICKALL_HELP = §8/§ekickall §8- §7Kick all players from the server except the owner KICKALL_HELP = §8/§ekickall §8- §7Kick all players from the server except the owner
KICKALL_NO_PERM = §cThis is not your world!
# Techhider # Techhider
TECHHIDER_HELP = §8/§etechhider §8- §7Toggle Techhider TECHHIDER_HELP = §8/§etechhider §8- §7Toggle Techhider

Datei anzeigen

@ -27,6 +27,10 @@ PAGE_LIST=§e Seite ({0}/{1}) »»
LIST_PREVIOUS_PAGE=§eVorherige Seite LIST_PREVIOUS_PAGE=§eVorherige Seite
LIST_NEXT_PAGE=§eNächste Seite LIST_NEXT_PAGE=§eNächste Seite
# Permission
NO_PERMISSION = Du darfst dies hier nicht nutzen
SPECTATOR = §fZuschauer
# Scoreboard # Scoreboard
SCOREBOARD_TIME = Uhrzeit SCOREBOARD_TIME = Uhrzeit
SCOREBOARD_REGION = Region SCOREBOARD_REGION = Region
@ -120,7 +124,6 @@ BACKUP_HELP_LOAD=§8/§ebackup load §8[§7BackupName§8] §8- §7 Lade ein Back
BACKUP_HELP_LIST=§8/§ebackup list §8- §7Liste alle Backups der Region auf BACKUP_HELP_LIST=§8/§ebackup list §8- §7Liste alle Backups der Region auf
BACKUP_HELP_GUI=§8/§ebackup gui §8- §7Öffne die Backups in einer GUI BACKUP_HELP_GUI=§8/§ebackup gui §8- §7Öffne die Backups in einer GUI
BACKUP_REGION_NO_REGION=§cDu bist in keiner Region BACKUP_REGION_NO_REGION=§cDu bist in keiner Region
BACKUP_NO_PERMS=§cDu darfst hier nicht das Backup System verwenden
BACKUP_CREATE_SUCCESS=§7Das Backup wurde erstellt BACKUP_CREATE_SUCCESS=§7Das Backup wurde erstellt
BACKUP_CREATE_FAILURE=§cDas Backup erstellen ist schiefgegangen BACKUP_CREATE_FAILURE=§cDas Backup erstellen ist schiefgegangen
BACKUP_CREATE_NO_CHANGE=§7Die Region hat keine Veränderung BACKUP_CREATE_NO_CHANGE=§7Die Region hat keine Veränderung
@ -134,11 +137,6 @@ BACKUP_LORE=§eKlicken zum Laden
# Bau # Bau
BAU_COMMAND_HELP_INFO = §8/§ebau info §8- §7Alias für §8/§ebauinfo BAU_COMMAND_HELP_INFO = §8/§ebau info §8- §7Alias für §8/§ebauinfo
BAU_COMMAND_HELP_TOGGLEWE = §8/§ebau togglewe §8[§7Player§8] §8- §7Editiere die WorldEdit Rechte eines Spielers
BAU_COMMAND_HELP_TOGGLEWORLD = §8/§ebau toggleworld §8[§7Player§8] §8- §7Editiere die Welt Rechte eines Spielers
BAU_UNKNOWN_PLAYER = §cUnbekannter Spieler
BAU_NO_PLAYER = §cDer Spieler ist kein Mitglied deiner Welt!
BAU_NO_WORLD = §cDies ist nicht deine Welt!
BAU_INFO_ITEM_NAME = §eBau-Management BAU_INFO_ITEM_NAME = §eBau-Management
## This is used in BauInfoBauGuiItem.java ## This is used in BauInfoBauGuiItem.java
@ -152,11 +150,6 @@ BAU_INFO_ITEM_LORE_PROTECT = §7Protect§8: §e{0}
BAU_INFO_COMMAND_HELP = §8/§ebauinfo §8- §7Gibt Informationen über den Bau BAU_INFO_COMMAND_HELP = §8/§ebauinfo §8- §7Gibt Informationen über den Bau
BAU_INFO_COMMAND_OWNER = §7Besitzer§8: §e{0} BAU_INFO_COMMAND_OWNER = §7Besitzer§8: §e{0}
BAU_INFO_COMMAND_MEMBER = §7Mitglieder §8[§7{0}§8]§8: §e BAU_INFO_COMMAND_MEMBER = §7Mitglieder §8[§7{0}§8]§8: §e
BAU_INFO_MEMBER_INFO = §e{0}§8[{1}§8,{2}§8] §8
BAU_INFO_MEMBER_WE_ALLOW = §aWE
BAU_INFO_MEMBER_WE_DISALLOW = §cWE
BAU_INFO_MEMBER_WORLD_ALLOW = §aW
BAU_INFO_MEMBER_WORLD_DISALLOW = §cW
BAU_INFO_COMMAND_FLAG = §7{0}§8: §7{1} BAU_INFO_COMMAND_FLAG = §7{0}§8: §7{1}
BAU_INFO_COMMAND_TPS = §7TPS§8:§e BAU_INFO_COMMAND_TPS = §7TPS§8:§e
@ -215,11 +208,6 @@ HOTBAR_INVENTORY=Standard Hotbar
# GUI # GUI
GUI_EDITOR_ITEM_NAME=§eGui Editor GUI_EDITOR_ITEM_NAME=§eGui Editor
GUI_NAME=Bau GUI GUI_NAME=Bau GUI
GUI_NO_PERMISSION=§cDu hast nicht genug Rechte um dies zu tun
GUI_NO_OWNER=§cDas ist nicht deine Bauwelt
GUI_NO_WORLD=§cDu darfst hier die Welt nicht einstellen
GUI_NO_WORLDEDIT=§cDu darfst hier kein Worldedit benutzen
GUI_NO_MEMBER=§cDu musst ein Member der Bauwelt sein
GUI_ITEM_LORE1=§7Du kannst dieses Item zum Öffnen der BauGUI nutzen GUI_ITEM_LORE1=§7Du kannst dieses Item zum Öffnen der BauGUI nutzen
GUI_ITEM_LORE2=§7oder Doppel F (Swap hands) drücken. GUI_ITEM_LORE2=§7oder Doppel F (Swap hands) drücken.
GUI_EDITOR_TITLE=Bau GUI Editor GUI_EDITOR_TITLE=Bau GUI Editor
@ -263,7 +251,6 @@ SHIELD_PRINTING_HELP_STEP_7 = §87. §7Wende das gedruckte mit §8/§eshieldprin
SHIELD_PRINTING_NO_REGION = §cDu bist in keiner Region. SHIELD_PRINTING_NO_REGION = §cDu bist in keiner Region.
SHIELD_PRINTING_NOT_RUNNING = §cShield printing ist nicht aktiv. SHIELD_PRINTING_NOT_RUNNING = §cShield printing ist nicht aktiv.
SHIELD_PRINTING_DISALLOWED = §cDu darfst Shield printing nicht benutzen.
SHIELD_PRINTING_BOSSBAR = §fBewegungen: {0} SHIELD_PRINTING_BOSSBAR = §fBewegungen: {0}
SHIELD_PRINTING_BOSSBAR_COPIED = §fBewegungen: {0} Kopiert: {1} SHIELD_PRINTING_BOSSBAR_COPIED = §fBewegungen: {0} Kopiert: {1}
@ -300,7 +287,6 @@ SIMULATOR_CHANGE_HELP = §8/§esimulator change §8-§7 Wechsel zu einem anderen
SIMULATOR_DELETE_HELP = §8/§esimulator delete §8[§7name§8] §8-§7 Löscht den Simulator SIMULATOR_DELETE_HELP = §8/§esimulator delete §8[§7name§8] §8-§7 Löscht den Simulator
SIMULATOR_START_HELP = §8/§esimulator start §8[§7name§8] §8-§7 Startet die Simulation SIMULATOR_START_HELP = §8/§esimulator start §8[§7name§8] §8-§7 Startet die Simulation
SIMULATOR_COPY_HELP = §8/§esimulator copy §8[§7to-copy§8] §8[§7name§8] §8-§7 Kopiert einen Simulator SIMULATOR_COPY_HELP = §8/§esimulator copy §8[§7to-copy§8] §8[§7name§8] §8-§7 Kopiert einen Simulator
SIMULATOR_NO_PERMS = §cDu darfst hier nicht den Simulator nutzen
SIMULATOR_GUI_ITEM_NAME = §eTNT Simulator SIMULATOR_GUI_ITEM_NAME = §eTNT Simulator
@ -456,7 +442,6 @@ TPSLIMIT_GUI_ITEM_NAME = §eTPS Limiter
TPSLIMIT_GUI_ITEM_LORE = §7Aktuell: §e{0} TPSLIMIT_GUI_ITEM_LORE = §7Aktuell: §e{0}
TPSLIMIT_ANVIL_GUI = Neues TPS Limit TPSLIMIT_ANVIL_GUI = Neues TPS Limit
TPSLIMIT_CURRENT = §7Jetziges TPS limit§8: §e{0} TPSLIMIT_CURRENT = §7Jetziges TPS limit§8: §e{0}
TPSLIMIT_NO_PERMS = §cDu darfst hier nicht den TPS-Limiter nutzen
TPSLIMIT_SET = §eTPS limit auf {0} gesetzt. TPSLIMIT_SET = §eTPS limit auf {0} gesetzt.
TPSLIMIT_FROZEN = §eTPS eingefroren. TPSLIMIT_FROZEN = §eTPS eingefroren.
@ -482,7 +467,6 @@ TRACE_MESSAGE_DELETE = §cAlle TNT-Positionen gelöscht
TRACE_MESSAGE_SHOW = §aAlle TNT-Positionen angezeigt TRACE_MESSAGE_SHOW = §aAlle TNT-Positionen angezeigt
TRACE_MESSAGE_HIDE = §cAlle TNT-Positionen ausgeblendet TRACE_MESSAGE_HIDE = §cAlle TNT-Positionen ausgeblendet
TRACE_MESSAGE_CLICK_ISOLATE = §eKlicken zum §aisolieren§8/§causblenden TRACE_MESSAGE_CLICK_ISOLATE = §eKlicken zum §aisolieren§8/§causblenden
TRACE_MESSAGE_DISALLOWED = §cDu darfst hier nicht den TNT-Tracer nutzen
TRACE_MESSAGE_SHOW_AT = §aTNT-positions angezeigt mit {0} bei {1} TRACE_MESSAGE_SHOW_AT = §aTNT-positions angezeigt mit {0} bei {1}
TRACE_MESSAGE_SHOW_FROM = §aAll TNT-positions angezeigt mit {0} von {1} TRACE_MESSAGE_SHOW_FROM = §aAll TNT-positions angezeigt mit {0} von {1}
TRACE_MESSAGE_SHOW_FROM_TO = §aAll TNT-positions angezeigt mit {0} von {1} bis {2} TRACE_MESSAGE_SHOW_FROM_TO = §aAll TNT-positions angezeigt mit {0} von {1} bis {2}
@ -669,7 +653,6 @@ OTHER_CLEAR_HELP_PLAYER=§8/§eclear §8[§7Player§8] §8- §7Leere ein Spieler
OTHER_CLEAR_CLEARED=Dein Inventar wurde geleert. OTHER_CLEAR_CLEARED=Dein Inventar wurde geleert.
OTHER_CLEAR_FROM=Dein Inventar wurde von {0} §7geleert. OTHER_CLEAR_FROM=Dein Inventar wurde von {0} §7geleert.
OTHER_CLEAR_TO=Das Inventar von {0} §7wurde geleert. OTHER_CLEAR_TO=Das Inventar von {0} §7wurde geleert.
OTHER_CLEAR_NO_PERMS=§cDu darfst hier keine fremden Inventare leeren.
OTHER_DECLUTTER_HELP=§8/§edeclutter §8- §7Räume dein Inventar auf OTHER_DECLUTTER_HELP=§8/§edeclutter §8- §7Räume dein Inventar auf
OTHER_DECLUTTER_DONE=§aDein Inventar wurde aufgeräumt. OTHER_DECLUTTER_DONE=§aDein Inventar wurde aufgeräumt.
OTHER_GAMEMODE_UNKNOWN=§cUnbekannter Spielmodus. OTHER_GAMEMODE_UNKNOWN=§cUnbekannter Spielmodus.
@ -685,7 +668,6 @@ OTHER_TELEPORT_SELF_2=§cNoch zu reisende Blöcke: 0; ETA: 0:00
OTHER_TELEPORT_SELF_3=§cEin wenig bewegung muss ein. OTHER_TELEPORT_SELF_3=§cEin wenig bewegung muss ein.
OTHER_TELEPORT_SELF_4=§cFür eine solche Distanz? OTHER_TELEPORT_SELF_4=§cFür eine solche Distanz?
OTHER_TIME_HELP=§8/§etime §8<§7Zeit 0=Morgen§8, §76000=Mittag§8, §718000=Mitternacht§8> - §7Setzt die Zeit auf dem Bau OTHER_TIME_HELP=§8/§etime §8<§7Zeit 0=Morgen§8, §76000=Mittag§8, §718000=Mitternacht§8> - §7Setzt die Zeit auf dem Bau
OTHER_TIME_NO_PERM=§cDu darfst hier nicht die Zeit ändern
OTHER_TIME_INVALID=§cBitte gib eine Zahl zwischen 0 und 24000 an OTHER_TIME_INVALID=§cBitte gib eine Zahl zwischen 0 und 24000 an
OTHER_TIME_RESULT=§7§oWhooosh OTHER_TIME_RESULT=§7§oWhooosh
OTHER_TPS_HEAD = §7TPS: 1s 10s 1m 5m 10m OTHER_TPS_HEAD = §7TPS: 1s 10s 1m 5m 10m
@ -747,17 +729,6 @@ MATERIAL_INTERACTABLE=§8- §eInterargierbarer Block
MATERIAL_FLAMMABLE=§8- §eFlammbarer Block MATERIAL_FLAMMABLE=§8- §eFlammbarer Block
MATERIAL_BURNABLE=§8- §eBrennbarer Block MATERIAL_BURNABLE=§8- §eBrennbarer Block
MATERIAL_WATERLOGGABLE=§8- §eWasserspeicherbarer Block MATERIAL_WATERLOGGABLE=§8- §eWasserspeicherbarer Block
# Redstonetester
RT_HELP=§8/§eredstonetester §8-§7 Gibt den RedstoneTester
RT_GIVEN=§7Messe die Zeit zwischen der Aktivierung zweier Redstone Komponenten
RT_ITEM_NAME=§eRedstonetester
RT_ITEM_LORE_1=§eLinksklick Block §8-§7 Setzt die 1. Position
RT_ITEM_LORE_2=§eRechtsklick Block §8-§7 Setzt die 2. Position
RT_ITEM_LORE_3=§eShift-Rechtsklick Luft §8-§7 Zurücksetzten
RT_LOC=§8: §e{0} {1} {2}
RT_INVALID_LOC=§cUnbekannte Position
RT_RESULT=§7Differenz§8: §e{0}§7 Ticks §8,§7 R-Ticks §e{1}
RT_ACTIVATE=§7Positionen gelöscht§8.
# Region Items # Region Items
REGION_ITEM_COLOR=§7Color: §e{0} REGION_ITEM_COLOR=§7Color: §e{0}
REGION_ITEM_COLOR_CHOOSE=Farbe Wählen REGION_ITEM_COLOR_CHOOSE=Farbe Wählen
@ -783,24 +754,18 @@ REGION_COLOR_HELP_COLOR=§8/§ecolor §8[§7Color§8] §8- §7Setze die Farbe de
REGION_COLOR_HELP_COLOR_TYPE=§8/§ecolor §8[§7Color§8] §8[§7Type§8] §8- §7Setze die Farbe der Region oder Global REGION_COLOR_HELP_COLOR_TYPE=§8/§ecolor §8[§7Color§8] §8[§7Type§8] §8- §7Setze die Farbe der Region oder Global
REGION_COLOR_GLOBAL=§7Alle Regions farben auf §e{0}§7 gesetzt REGION_COLOR_GLOBAL=§7Alle Regions farben auf §e{0}§7 gesetzt
REGION_COLOR_NO_REGION=§cDu befindest dich derzeit in keiner Region REGION_COLOR_NO_REGION=§cDu befindest dich derzeit in keiner Region
REGION_COLOR_NO_PERMS=§cDies ist nicht deine Welt!
REGION_FIRE_HELP=§8/§efire §8- §7Toggle Feuerschaden REGION_FIRE_HELP=§8/§efire §8- §7Toggle Feuerschaden
REGION_FIRE_NO_PERMS=§cDu darfst hier nicht Feuerschaden (de-)aktivieren
REGION_FIRE_ENABLED=§cRegions Feuerschaden deaktiviert REGION_FIRE_ENABLED=§cRegions Feuerschaden deaktiviert
REGION_FIRE_DISABLED=§aRegions Feuerschaden aktiviert REGION_FIRE_DISABLED=§aRegions Feuerschaden aktiviert
REGION_FREEZE_HELP=§8/§efreeze §8- §7Toggle Freeze REGION_FREEZE_HELP=§8/§efreeze §8- §7Toggle Freeze
REGION_FREEZE_NO_PERMS=§cDu darfst diese Welt nicht einfrieren
REGION_FREEZE_ENABLED=§cRegion eingefroren REGION_FREEZE_ENABLED=§cRegion eingefroren
REGION_FREEZE_DISABLED=§aRegion aufgetaut REGION_FREEZE_DISABLED=§aRegion aufgetaut
REGION_ITEMS_HELP=§8/§eitems §8- §7Toggle Items REGION_ITEMS_HELP=§8/§eitems §8- §7Toggle Items
REGION_ITEMS_NO_PERMS=§cDu darfst hier nicht Items (de-)aktivieren
REGION_ITEMS_ENABLED=§aItems aktiviert in dieser Region REGION_ITEMS_ENABLED=§aItems aktiviert in dieser Region
REGION_ITEMS_DISABLED=§cItems deaktiviert in dieser Region REGION_ITEMS_DISABLED=§cItems deaktiviert in dieser Region
REGION_ITEMS_DISABLED_GLOBAL=§cItems sind auf dem Server deaktiviert.
REGION_PROTECT_HELP=§8/§eprotect §8- §7Schütze die Region REGION_PROTECT_HELP=§8/§eprotect §8- §7Schütze die Region
REGION_PROTECT_DISABLE=§cBoden Schutz aufgehoben REGION_PROTECT_DISABLE=§cBoden Schutz aufgehoben
REGION_PROTECT_ENABLE=§aBoden geschützt REGION_PROTECT_ENABLE=§aBoden geschützt
REGION_PROTECT_NO_PERMS=§cDu darfst hier nicht den Boden schützen
REGION_PROTECT_FALSE_REGION=§cDu befindest dich derzeit in keiner (M)WG-Region REGION_PROTECT_FALSE_REGION=§cDu befindest dich derzeit in keiner (M)WG-Region
REGION_REGION_HELP_UNDO=§8/§eregion undo §8- §7Mache die letzten 20 /testblock oder /reset rückgängig REGION_REGION_HELP_UNDO=§8/§eregion undo §8- §7Mache die letzten 20 /testblock oder /reset rückgängig
REGION_REGION_HELP_REDO=§8/§eregion redo §8- §7Wiederhole die letzten 20 §8/§7rg undo REGION_REGION_HELP_REDO=§8/§eregion redo §8- §7Wiederhole die letzten 20 §8/§7rg undo
@ -808,8 +773,6 @@ REGION_REGION_HELP_RESTORE=§8/§eregion restore §8- §7Setzte die Region zurü
REGION_REGION_HELP_RESTORE_SCHEMATIC=§8/§eregion restore §8[§7Schematic§8] §8- §7Setzte die Region zurück, ohne das Gebaute zu löschen REGION_REGION_HELP_RESTORE_SCHEMATIC=§8/§eregion restore §8[§7Schematic§8] §8- §7Setzte die Region zurück, ohne das Gebaute zu löschen
REGION_REGION_HELP_COPYPOINT=§8/§eregion copypoint §8- §7Teleportiere dich zum Regions Kopierpunkt REGION_REGION_HELP_COPYPOINT=§8/§eregion copypoint §8- §7Teleportiere dich zum Regions Kopierpunkt
REGION_REGION_HELP_TESTBLOCKPOINT=§8/§eregion testblockpoint §8- §7Teleportiere dich zum Regions Testblockpunkt REGION_REGION_HELP_TESTBLOCKPOINT=§8/§eregion testblockpoint §8- §7Teleportiere dich zum Regions Testblockpunkt
REGION_REGION_HELP_CHANGETYPE_INFO=§8/§eregion changetype §8- §7Gebe den Regions Type aus
REGION_REGION_HELP_CHANGETYPE=§8/§eregion changetype §8[§7Type§8] §8- §8Setzte den Regions Type
REGION_REGION_HELP_CHANGESKIN_INFO=§8/§eregion changeskin §8- §7Gebe den Regions Skin aus REGION_REGION_HELP_CHANGESKIN_INFO=§8/§eregion changeskin §8- §7Gebe den Regions Skin aus
REGION_REGION_HELP_CHANGESKIN=§8/§eregion changeskin §8[§7Skin§8] §8- §8Setzte den Regions Skin REGION_REGION_HELP_CHANGESKIN=§8/§eregion changeskin §8[§7Skin§8] §8- §8Setzte den Regions Skin
REGION_REGION_NOTHING_UNDO=§cNichts zum rückgängig machen REGION_REGION_NOTHING_UNDO=§cNichts zum rückgängig machen
@ -825,13 +788,6 @@ REGION_REGION_TP_COPY=§7Zum Kopierpunkt teleportiert
REGION_REGION_TP_TEST_BLOCK=§7Zum Testblock teleportiert REGION_REGION_TP_TEST_BLOCK=§7Zum Testblock teleportiert
REGION_REGION_TP_UNKNOWN=§cNicht definierter Teleportierpunkt REGION_REGION_TP_UNKNOWN=§cNicht definierter Teleportierpunkt
REGION_REGION_NO_REGION=§cDu bist in keiner Region REGION_REGION_NO_REGION=§cDu bist in keiner Region
REGION_REGION_NO_PERMS=§cDu darfst hier nicht die Region verändern
REGION_REGION_CHANGETYPE_INFO=§7Regions Type ist §e{0}
REGION_REGION_CHANGETYPE_UNKNOWN=§cRegions Type ist nicht valide
REGION_REGION_CHANGETYPE_INVALID=§cRegions Type ist nicht erlaubt hier
REGION_REGION_CHANGETYPE_CHANGE=§7Regions Type ist auf §e{0}§7 geändert
REGION_REGION_CHANGETYPE_CHANGE_UPDATE=§7Klicke §e§lHIER §7um den Type anzuwenden
REGION_REGION_CHANGETYPE_CHANGE_UPDATE_HOVER=§8/§ereset
REGION_REGION_CHANGESKIN_INFO=§7Regions Skin ist §e{0} REGION_REGION_CHANGESKIN_INFO=§7Regions Skin ist §e{0}
REGION_REGION_CHANGESKIN_INFO_CREATOR=§7Skin erstellt von §e{0} REGION_REGION_CHANGESKIN_INFO_CREATOR=§7Skin erstellt von §e{0}
REGION_REGION_CHANGESKIN_UNKNOWN=§cRegions Skin ist nicht valide REGION_REGION_CHANGESKIN_UNKNOWN=§cRegions Skin ist nicht valide
@ -843,7 +799,6 @@ REGION_RESET_HELP_RESET=§8/§ereset §8- §7Setzte die Region zurück
REGION_RESET_HELP_SCHEMATIC=§8/§ereset §8[§7Schematic§8] §8- §7Setzte die Region mit einer Schematic zurück REGION_RESET_HELP_SCHEMATIC=§8/§ereset §8[§7Schematic§8] §8- §7Setzte die Region mit einer Schematic zurück
REGION_RESET_RESETED=§7Region zurückgesetzt REGION_RESET_RESETED=§7Region zurückgesetzt
REGION_RESET_ERROR=§cFehler beim Zurücksetzen der Region REGION_RESET_ERROR=§cFehler beim Zurücksetzen der Region
REGION_RESET_NO_PERMS=§cDu darfst hier nicht die Region zurücksetzen
REGION_RESET_NO_REGION=§cDu befindest dich derzeit in keiner Region REGION_RESET_NO_REGION=§cDu befindest dich derzeit in keiner Region
REGION_TB_HELP_RESET=§8/§etestblock §8- §7Setzte den Testblock zurück REGION_TB_HELP_RESET=§8/§etestblock §8- §7Setzte den Testblock zurück
REGION_TB_HELP_RESET_EXTENSION=§8/§etestblock §8[§7ExtensionType§8] §8- §7Setzte den Testblock zurück REGION_TB_HELP_RESET_EXTENSION=§8/§etestblock §8[§7ExtensionType§8] §8- §7Setzte den Testblock zurück
@ -851,7 +806,6 @@ REGION_TB_HELP_SCHEMATIC=§8/§etestblock §8[§7Schematic§8] §8- §7Setzte de
REGION_TB_HELP_SCHEMATIC_EXTENSION=§8/§etestblock §8[§7Schematic§8] §8[§7ExtensionType§8] §8- §7Setzte den Testblock mit einer Schematic zurück REGION_TB_HELP_SCHEMATIC_EXTENSION=§8/§etestblock §8[§7Schematic§8] §8[§7ExtensionType§8] §8- §7Setzte den Testblock mit einer Schematic zurück
REGION_TB_DONE=§7Testblock zurückgesetzt REGION_TB_DONE=§7Testblock zurückgesetzt
REGION_TB_ERROR=§cFehler beim Zurücksetzen des Testblocks REGION_TB_ERROR=§cFehler beim Zurücksetzen des Testblocks
REGION_TB_NO_PERMS=§cDu darfst hier nicht den Testblock zurücksetzen
REGION_TB_NO_REGION=§cDu befindest dich derzeit in keiner Region REGION_TB_NO_REGION=§cDu befindest dich derzeit in keiner Region
REGION_TB_NO_SCHEMSHARING=§cDu kannst aktuell keine Schematics teilen bis {0}. REGION_TB_NO_SCHEMSHARING=§cDu kannst aktuell keine Schematics teilen bis {0}.
REGION_TB_NO_SCHEMRECEIVING=§cDer Besitzer dieses Bauservers kann keine Schematics erhalten bis {0}. REGION_TB_NO_SCHEMRECEIVING=§cDer Besitzer dieses Bauservers kann keine Schematics erhalten bis {0}.
@ -860,7 +814,6 @@ REGION_TNT_HELP_MODE=§8/§etnt §8[§7Mode§8] §8- §7Setzte das TNT verhalten
REGION_TNT_ON=§aTNT-Schaden aktiviert REGION_TNT_ON=§aTNT-Schaden aktiviert
REGION_TNT_OFF=§cTNT-Schaden deaktiviert REGION_TNT_OFF=§cTNT-Schaden deaktiviert
REGION_TNT_TB=§aTNT-Schaden außerhalb Baurahmen aktiviert REGION_TNT_TB=§aTNT-Schaden außerhalb Baurahmen aktiviert
REGION_TNT_NO_PERMS=§cDu darfst hier nicht TNT-Schaden (de-)aktivieren
REGION_TNT_BUILD_DESTROY=§cEine Explosion hätte Blöcke im Baubereich zerstört REGION_TNT_BUILD_DESTROY=§cEine Explosion hätte Blöcke im Baubereich zerstört
REGION_TNT_TB_DESTROY=§cEine Explosion hätte Blöcke im Testblockbereich zerstört REGION_TNT_TB_DESTROY=§cEine Explosion hätte Blöcke im Testblockbereich zerstört
AFK_KICK_MESSAGE=§cAuf diesem Server ist seit 15 Minuten nichts passiert. AFK_KICK_MESSAGE=§cAuf diesem Server ist seit 15 Minuten nichts passiert.
@ -878,7 +831,6 @@ PANZERN_PREPARE1 = §71. Gucke nochmal nach, ob Läufe auch bis zur Panzergrenze
PANZERN_PREPARE2 = §72. Teppich in Gänge auf dem Boden vereinfacht das panzern. PANZERN_PREPARE2 = §72. Teppich in Gänge auf dem Boden vereinfacht das panzern.
PANZERN_PREPARE3 = §73. Schildtechnik sollte explizit eingeschlossen sein. PANZERN_PREPARE3 = §73. Schildtechnik sollte explizit eingeschlossen sein.
PANZERN_PREPARE4 = §74. Innerhalb der zu panzernden Region zu stehen, beim Befehlausführen kann das Panzern verbessern. PANZERN_PREPARE4 = §74. Innerhalb der zu panzernden Region zu stehen, beim Befehlausführen kann das Panzern verbessern.
PANZERN_NO_PERM = §cDu darfst hier nicht das Panzern System verwenden
PANZERN_NO_WORLDEDIT = §cDu hast keine WorldEdit Selection PANZERN_NO_WORLDEDIT = §cDu hast keine WorldEdit Selection
PANZERN_PROGRESS = §e{0} §7Blöcke übrig, §e{1} §7Blöcke pro Sekunde, §e{2} §7Block Delta PANZERN_PROGRESS = §e{0} §7Blöcke übrig, §e{1} §7Blöcke pro Sekunde, §e{2} §7Block Delta
PANZERN_DONE = §aZuende gepanzert PANZERN_DONE = §aZuende gepanzert
@ -888,7 +840,6 @@ LAUFBAU_HELP = §8/§elaufbau §8[§7smallest§8|§7blastresistant§8] §8- §7B
LAUFBAU_HELP_SETTINGS = §8/§elaufbau settings §8- §7Öffnet die Settings GUI LAUFBAU_HELP_SETTINGS = §8/§elaufbau settings §8- §7Öffnet die Settings GUI
LAUFBAU_PREPARE1 = §71. Trace die Kanonen so oft wie nötig, in allen Modi. LAUFBAU_PREPARE1 = §71. Trace die Kanonen so oft wie nötig, in allen Modi.
LAUFBAU_PREPARE2 = §72. Versuche alle Fails aus dem Trace zu löschen. LAUFBAU_PREPARE2 = §72. Versuche alle Fails aus dem Trace zu löschen.
LAUFBAU_NO_PERM = §cDu darfst hier nicht das Laufbau System verwenden
LAUFBAU_NO_WORLDEDIT = §cDu hast keine WorldEdit Selection LAUFBAU_NO_WORLDEDIT = §cDu hast keine WorldEdit Selection
LAUFBAU_STATE_FILTERING_TRACES = Traces filtern LAUFBAU_STATE_FILTERING_TRACES = Traces filtern
LAUFBAU_STATE_PROCESSING_TRACES = Traces verbinden LAUFBAU_STATE_PROCESSING_TRACES = Traces verbinden
@ -996,7 +947,6 @@ LAUFBAU_TILT_PARTIAL = §8-§7 Neigung teilweise
# UTILS # UTILS
SELECT_HELP = §8/§eselect §8[§7RegionsTyp§8] §8- §7Wähle einen RegionsTyp aus SELECT_HELP = §8/§eselect §8[§7RegionsTyp§8] §8- §7Wähle einen RegionsTyp aus
SELECT_EXTENSION_HELP = §8/§eselect §8[§7RegionsTyp§8] §8[§7Extension§8] §8- §7Wähle einen RegionsTyp aus mit oder ohne Extension SELECT_EXTENSION_HELP = §8/§eselect §8[§7RegionsTyp§8] §8[§7Extension§8] §8- §7Wähle einen RegionsTyp aus mit oder ohne Extension
SELECT_NO_PERMS = §cDu darfst hier nicht den Select Befehl verwenden
SELECT_GLOBAL_REGION = §cDie globale Region kannst du nicht auswählen SELECT_GLOBAL_REGION = §cDie globale Region kannst du nicht auswählen
SELECT_NO_TYPE = §cDiese Region hat keinen {0} SELECT_NO_TYPE = §cDiese Region hat keinen {0}
SELECT_NO_EXTENSION = §cDiese Region hat keine Ausfahrmaße SELECT_NO_EXTENSION = §cDiese Region hat keine Ausfahrmaße
@ -1048,7 +998,6 @@ PISTON_HELP_3 = §7Die Anzahl ist Gelb, wenn zu viele Blöcke vorhanden sind.
PISTON_INFO = §7Bewegte Blöcke {0}{1}§8/§712 PISTON_INFO = §7Bewegte Blöcke {0}{1}§8/§712
# Warp # Warp
WARP_DISALLOWED = §cDu darfst hier nicht das Warp System nutzen
WARP_LOC_X = §7X§8: §e{0} WARP_LOC_X = §7X§8: §e{0}
WARP_LOC_Y = §7Y§8: §e{0} WARP_LOC_Y = §7Y§8: §e{0}
WARP_LOC_Z = §7Z§8: §e{0} WARP_LOC_Z = §7Z§8: §e{0}
@ -1074,12 +1023,9 @@ WARP_HELP_LIST=§8/§ewarp list §8- §7Liste alle Warp-Punkt auf
# WORLD # WORLD
STOP_HELP = §8/§estop §8- §7Stoppt den Server STOP_HELP = §8/§estop §8- §7Stoppt den Server
STOP_NO_PERMS = §cDu hast keine Rechte den Server zu stoppen
STOP_MESSAGE = §eDer Server wird gestoppt STOP_MESSAGE = §eDer Server wird gestoppt
WORLD_EDIT_NO_PERMS = §cDu darfst hier kein WorldEdit benutzen
KICKALL_HELP = §8/§ekickall §8- §7Kickt alle Spieler vom Server außer den Owner KICKALL_HELP = §8/§ekickall §8- §7Kickt alle Spieler vom Server außer den Owner
KICKALL_NO_PERM = §cDies ist nicht deine Welt!
# Techhider # Techhider
TECHHIDER_HELP = §8/§etechhider §8- §7Techhider umschalten TECHHIDER_HELP = §8/§etechhider §8- §7Techhider umschalten

Datei anzeigen

@ -28,9 +28,13 @@ import de.steamwar.bausystem.region.loader.RegionLoader;
import de.steamwar.bausystem.region.loader.Updater; import de.steamwar.bausystem.region.loader.Updater;
import de.steamwar.bausystem.utils.TickListener; import de.steamwar.bausystem.utils.TickListener;
import de.steamwar.bausystem.worlddata.WorldData; import de.steamwar.bausystem.worlddata.WorldData;
import de.steamwar.command.AbstractValidator;
import de.steamwar.command.SWCommandUtils;
import de.steamwar.message.Message; import de.steamwar.message.Message;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -74,10 +78,27 @@ public class BauSystem extends JavaPlugin implements Listener {
new Updater(PrototypeLoader.file, PrototypeLoader::load); new Updater(PrototypeLoader.file, PrototypeLoader::load);
new Updater(RegionLoader.file, RegionLoader::load); new Updater(RegionLoader.file, RegionLoader::load);
SWCommandUtils.addValidator(Player.class, validator(Permission.BUILD));
SWCommandUtils.addValidator(CommandSender.class, validator(Permission.BUILD));
SWCommandUtils.addValidator("supervisor", validator(Permission.SUPERVISOR));
LinkageUtils.link(); LinkageUtils.link();
TickListener.impl.init(); TickListener.impl.init();
} }
private <T extends CommandSender> AbstractValidator<T, ?> validator(Permission permission) {
return (commandSender, object, messageSender) -> {
if (commandSender instanceof Player) {
if (permission.hasPermission((Player) commandSender)) {
return true;
}
messageSender.send("NO_PERMISSION");
return false;
}
return true;
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Die 3 Validator sind sehr gleich von der Codestruktur, evtl. Eine Extra-Methode daraus machen, mit Input CommandSender und Parameter, welche Permission.

Die 3 Validator sind sehr gleich von der Codestruktur, evtl. Eine Extra-Methode daraus machen, mit Input CommandSender und Parameter, welche Permission.
};
}
@Override @Override
public void onDisable() { public void onDisable() {
LinkageUtils.unlink(); LinkageUtils.unlink();

Datei anzeigen

@ -20,43 +20,77 @@
package de.steamwar.bausystem; package de.steamwar.bausystem;
import de.steamwar.bausystem.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.command.CommandMetaData; import de.steamwar.bausystem.features.world.BauMemberUpdate;
import de.steamwar.command.TypeValidator; import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.sql.BauweltMember; import de.steamwar.sql.BauweltMember;
import de.steamwar.sql.SteamwarUser;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.bukkit.command.CommandSender; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.lang.annotation.ElementType; import java.util.HashSet;
import java.lang.annotation.Retention; import java.util.Set;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.function.Predicate; import java.util.function.Predicate;
@AllArgsConstructor @AllArgsConstructor
public enum Permission { public enum Permission {
WORLD(BauweltMember::isWorld), OWNER(bauweltMember -> false),
WORLDEDIT(BauweltMember::isWorldEdit), SUPERVISOR(bauweltMember -> {
MEMBER(bauweltMember -> true), return bauweltMember.isSupervisor();
OWNER(bauweltMember -> false); }),
BUILD(bauweltMember -> {
if (isTempOnlySpectator(bauweltMember)) return false;
return bauweltMember.isBuild() || SUPERVISOR.permissionPredicate.test(bauweltMember);
}),
/**
* Only used for {@link BauMemberUpdate}
*/
REAL_SPECTATOR(bauweltMember -> {
return !bauweltMember.isBuild() && !bauweltMember.isSupervisor();
}),
/**
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Die Spectator-Permissions fallen etwas aus dem Muster, da es sich hier um die einzigen negativen Permissions handelt. Das macht auch die Permissonchecks unten sehr merkwürdig. Man sollte alle Anwendungen davon auf !BUILD ändern.

Die Spectator-Permissions fallen etwas aus dem Muster, da es sich hier um die einzigen negativen Permissions handelt. Das macht auch die Permissonchecks unten sehr merkwürdig. Man sollte alle Anwendungen davon auf `!BUILD` ändern.
* Primarily used for {@link de.steamwar.bausystem.linkage.specific.GuiItem}
*/
MEMBER(bauweltMember -> {
YoyoNow markierte diese Unterhaltung als gelöst
Review

Wird das überhaupt noch benötigt? Jeder auf dem Server ist ja mindestens Member.

Wird das überhaupt noch benötigt? Jeder auf dem Server ist ja mindestens Member.
return true;
});
private static final Set<Integer> TEMP_ONLY_SPECTATOR = new HashSet<>();
private static boolean isTempOnlySpectator(BauweltMember bauweltMember) {
return TEMP_ONLY_SPECTATOR.contains(bauweltMember.getMemberID());
}
public static boolean isTempOnlySpectator(Player player) {
return TEMP_ONLY_SPECTATOR.contains(SteamwarUser.get(player.getUniqueId()).getId());
}
public static void forceOnlySpectator(Player player) {
TEMP_ONLY_SPECTATOR.add(SteamwarUser.get(player.getUniqueId()).getId());
BauMemberUpdate.baumemberUpdate();
}
/**
* Only used by {@link BauMemberUpdate}
*/
public static void removeForceOnlySpectator(Player player) {
TEMP_ONLY_SPECTATOR.remove(SteamwarUser.get(player.getUniqueId()).getId());
}
private final Predicate<BauweltMember> permissionPredicate; private final Predicate<BauweltMember> permissionPredicate;
public boolean hasPermission(Player member) { public boolean hasPermission(BauweltMember bauweltMember) {
if (member.getUniqueId().equals(BauServer.getInstance().getOwner())) { if (bauweltMember == null) return false;
return true; return permissionPredicate.test(bauweltMember);
}
BauweltMember bauMember = BauweltMember.getBauMember(BauServer.getInstance().getOwner(), member.getUniqueId());
if (bauMember == null) {
return false;
}
return permissionPredicate.test(bauMember);
} }
public static boolean hasPermission(Player member, Permission permission) { public boolean hasPermission(Player member) {
return permission.hasPermission(member); if (SteamwarUser.get(member.getUniqueId()).getId() == BauServer.getInstance().getOwnerID()) {
return this != REAL_SPECTATOR;
}
BauweltMember bauweltMember = BauweltMember.getBauMember(BauServer.getInstance().getOwner(), member.getUniqueId());
if (bauweltMember == null) return this == REAL_SPECTATOR;
return permissionPredicate.test(bauweltMember);
} }
} }

Datei anzeigen

@ -44,7 +44,7 @@ public class AttributeRemoveCommand extends SWCommand {
@Register({"all"}) @Register({"all"})
@Register({"*"}) @Register({"*"})
public void genericCommand(Player player) { public void genericCommand(@Validator Player player) {
ItemStack itemStack = player.getInventory().getItemInMainHand(); ItemStack itemStack = player.getInventory().getItemInMainHand();
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setLore(new ArrayList<>()); itemMeta.setLore(new ArrayList<>());
@ -53,7 +53,7 @@ public class AttributeRemoveCommand extends SWCommand {
} }
@Register(description = "ATTRIBUTE_REMOVE_COMMAND_HELP") @Register(description = "ATTRIBUTE_REMOVE_COMMAND_HELP")
public void genericCommand(Player player, @Mapper("attribute") String attribute) { public void genericCommand(@Validator Player player, @Mapper("attribute") String attribute) {
ItemStack itemStack = player.getInventory().getItemInMainHand(); ItemStack itemStack = player.getInventory().getItemInMainHand();
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta == null) { if (itemMeta == null) {

Datei anzeigen

@ -41,7 +41,7 @@ public class AttributesCopyCommand extends SWCommand {
} }
@Register @Register
public void genericCommand(Player player) { public void genericCommand(@Validator Player player) {
Block block = player.getTargetBlockExact(8, FluidCollisionMode.ALWAYS); Block block = player.getTargetBlockExact(8, FluidCollisionMode.ALWAYS);
if (block == null) return; if (block == null) return;
ItemStack mainHand = player.getInventory().getItemInMainHand(); ItemStack mainHand = player.getInventory().getItemInMainHand();

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.attributescopy; package de.steamwar.bausystem.features.attributescopy;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -40,6 +41,7 @@ public class AttributesPlaceListener implements Listener {
@EventHandler @EventHandler
public void onBlockPlace(BlockPlaceEvent event) { public void onBlockPlace(BlockPlaceEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
ItemStack itemStack = event.getItemInHand(); ItemStack itemStack = event.getItemInHand();
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta == null) return; if (itemMeta == null) return;

Datei anzeigen

@ -32,7 +32,7 @@ public class AutoStartCommand extends SWCommand {
} }
@Register(description = "AUTOSTART_COMMAND_HELP") @Register(description = "AUTOSTART_COMMAND_HELP")
public void genericCommand(Player p) { public void genericCommand(@Validator Player p) {
SWUtils.giveItemToPlayer(p, AutostartListener.getWandItem(p)); SWUtils.giveItemToPlayer(p, AutostartListener.getWandItem(p));
} }
} }

Datei anzeigen

@ -50,6 +50,6 @@ public class AutoStartGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.MEMBER; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.autostart; package de.steamwar.bausystem.features.autostart;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.features.tpslimit.TPSUtils;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
@ -66,6 +67,7 @@ public class AutostartListener implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!ItemUtils.isItem(event.getItem(), "autostart")) { if (!ItemUtils.isItem(event.getItem(), "autostart")) {
return; return;
} }
@ -83,6 +85,7 @@ public class AutostartListener implements Listener {
if (!(event.getPlayer() instanceof Player)) { if (!(event.getPlayer() instanceof Player)) {
return; return;
} }
if(!Permission.BUILD.hasPermission((Player) event.getPlayer())) return;
if (!ItemUtils.isItem(event.getPlayer().getInventory().getItemInMainHand(), "autostart")) { if (!ItemUtils.isItem(event.getPlayer().getInventory().getItemInMainHand(), "autostart")) {
return; return;
} }

Datei anzeigen

@ -62,7 +62,7 @@ public class BackupCommand extends SWCommand {
} }
@Register(value = "create", description = "BACKUP_HELP_CREATE") @Register(value = "create", description = "BACKUP_HELP_CREATE")
public void backupCreate(@Validator Player p) { public void backupCreate(@Validator("supervisor") Player p) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
@ -79,7 +79,7 @@ public class BackupCommand extends SWCommand {
} }
@Register(value = "load", description = "BACKUP_HELP_LOAD") @Register(value = "load", description = "BACKUP_HELP_LOAD")
public void backupLoad(@Validator Player p, @Mapper("backupName") String backupName) { public void backupLoad(@Validator("supervisor") Player p, @Mapper("backupName") String backupName) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
@ -130,7 +130,7 @@ public class BackupCommand extends SWCommand {
} }
SWListInv<String> swListInv = new SWListInv<>(p, BauSystem.MESSAGE.parse("BACKUP_INV_NAME", p), swListEntries, (clickType, s) -> { SWListInv<String> swListInv = new SWListInv<>(p, BauSystem.MESSAGE.parse("BACKUP_INV_NAME", p), swListEntries, (clickType, s) -> {
p.getOpenInventory().close(); p.getOpenInventory().close();
backupLoad(p, s); p.performCommand("backup load " + s);
}); });
swListInv.open(); swListInv.open();
} }
@ -140,13 +140,6 @@ public class BackupCommand extends SWCommand {
return SWCommandUtils.createMapper(s -> s, (commandSender, s) -> listBackup((Player) commandSender)); return SWCommandUtils.createMapper(s -> s, (commandSender, s) -> listBackup((Player) commandSender));
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> backupValidator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLDEDIT), "BACKUP_NO_PERMS");
};
}
private List<String> listBackup(Player p) { private List<String> listBackup(Player p) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {

Datei anzeigen

@ -1,41 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.features.bau;
import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance;
import org.bukkit.entity.Player;
@Linked
public class BauCommand extends SWCommand {
@LinkedInstance
public InfoCommand infoCommand;
public BauCommand() {
super("bau", "b", "gs");
}
@Register(value = "info", description = "BAU_COMMAND_HELP_INFO")
public void infoCommand(Player p) {
infoCommand.sendBauInfo(p);
}
}

Datei anzeigen

@ -0,0 +1,73 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.features.bau;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper;
import de.steamwar.linkage.Linked;
import de.steamwar.techhider.TechHider;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Collection;
import java.util.stream.Collectors;
@Linked
public class ForceSpectatorCommand extends SWCommand {
public ForceSpectatorCommand() {
super("forcespectator");
}
@Register
public void forceSpectator(@Validator("supervisor") Player player, @Mapper("builder") Player other) {
Permission.forceOnlySpectator(other);
}
@Mapper("builder")
public TypeMapper<Player> spectatorMapper() {
return new TypeMapper<>() {
@Override
public Player map(CommandSender commandSender, String[] previousArguments, String s) {
Player player = Bukkit.getPlayer(s);
if (player == null) {
return null;
}
if (Permission.BUILD.hasPermission(player) && !Permission.SUPERVISOR.hasPermission(player)) {
return player;
}
return null;
}
@Override
public Collection<String> tabCompletes(CommandSender sender, PreviousArguments previousArguments, String s) {
return Bukkit.getOnlinePlayers().stream()
.filter(Permission.BUILD::hasPermission)
.filter(player -> !Permission.SUPERVISOR.hasPermission(player))
.map(Player::getName)
.collect(Collectors.toList());
}
};
}
}

Datei anzeigen

@ -1,6 +1,7 @@
package de.steamwar.bausystem.features.bau; package de.steamwar.bausystem.features.bau;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
@ -24,17 +25,8 @@ public class InfoCommand extends SWCommand {
super("bauinfo"); super("bauinfo");
} }
@Register(help = true) @Register(description = "BAU_INFO_COMMAND_HELP")
public void genericHelp(Player p, String... args) {
BauSystem.MESSAGE.send("BAU_INFO_COMMAND_HELP", p);
}
@Register
public void genericCommand(Player p) { public void genericCommand(Player p) {
sendBauInfo(p);
}
public void sendBauInfo(Player p) {
BauSystem.MESSAGE.send("BAU_INFO_COMMAND_OWNER", p, SteamwarUser.get(bauServer.getOwnerID()).getUserName()); BauSystem.MESSAGE.send("BAU_INFO_COMMAND_OWNER", p, SteamwarUser.get(bauServer.getOwnerID()).getUserName());
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
for (Flag flag : Flag.getFlags()) { for (Flag flag : Flag.getFlags()) {
@ -47,18 +39,27 @@ public class InfoCommand extends SWCommand {
} }
} }
List<BauweltMember> members = BauweltMember.getMembers(bauServer.getOwnerID()); if (Permission.BUILD.hasPermission(p)) {
StringBuilder membermessage = new StringBuilder(); List<BauweltMember> members = BauweltMember.getMembers(bauServer.getOwnerID());
membermessage.append(BauSystem.MESSAGE.parsePrefixed("BAU_INFO_COMMAND_MEMBER", p, members.size())); StringBuilder membermessage = new StringBuilder();
membermessage.append(BauSystem.MESSAGE.parsePrefixed("BAU_INFO_COMMAND_MEMBER", p, members.size()));
for (BauweltMember member : members) { for (int i = 0; i < members.size(); i++) {
membermessage.append(BauSystem.MESSAGE.parse("BAU_INFO_MEMBER_INFO", p, if (i != 0) {
SteamwarUser.get(member.getMemberID()).getUserName(), membermessage.append("§8, ");
member.isWorldEdit() ? BauSystem.MESSAGE.parse("BAU_INFO_MEMBER_WE_ALLOW", p) : BauSystem.MESSAGE.parse("BAU_INFO_MEMBER_WE_DISALLOW", p), }
member.isWorld() ? BauSystem.MESSAGE.parse("BAU_INFO_MEMBER_WORLD_ALLOW", p) : BauSystem.MESSAGE.parse("BAU_INFO_MEMBER_WORLD_DISALLOW", p) BauweltMember member = members.get(i);
)); if (Permission.SUPERVISOR.hasPermission(member)) {
membermessage.append("§e");
} else if (Permission.BUILD.hasPermission(member)) {
membermessage.append("§6");
} else {
membermessage.append("§7");
}
membermessage.append(SteamwarUser.get(member.getMemberID()).getUserName());
}
p.sendMessage(membermessage.toString());
} }
p.sendMessage(membermessage.toString());
StringBuilder tpsMessage = new StringBuilder(); StringBuilder tpsMessage = new StringBuilder();
tpsMessage.append(BauSystem.MESSAGE.parsePrefixed("BAU_INFO_COMMAND_TPS", p)); tpsMessage.append(BauSystem.MESSAGE.parsePrefixed("BAU_INFO_COMMAND_TPS", p));

Datei anzeigen

@ -48,6 +48,6 @@ public class CountingwandGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLDEDIT; return Permission.MEMBER;
} }
} }

Datei anzeigen

@ -44,7 +44,6 @@ public class DesignEndStone {
private REntityServer entityServer = new REntityServer(); private REntityServer entityServer = new REntityServer();
private List<REntity> entities = new ArrayList<>(); private List<REntity> entities = new ArrayList<>();
private Set<Location> locations = new HashSet<>(); private Set<Location> locations = new HashSet<>();
private List<Player> players = new ArrayList<>();
Veraltet
Review

Die Änderungen in dieser Datei sehen mir nach einem unrelated Bugfix aus.

Die Änderungen in dieser Datei sehen mir nach einem unrelated Bugfix aus.
Veraltet
Review

Die Änderungen in dieser Datei sehen mir nach einem unrelated Bugfix aus.

Die Änderungen in dieser Datei sehen mir nach einem unrelated Bugfix aus.
public DesignEndStone(Region region) { public DesignEndStone(Region region) {
this.minX = region.getMinPointBuild().getX(); this.minX = region.getMinPointBuild().getX();
@ -95,12 +94,10 @@ public class DesignEndStone {
} }
public void toggle(Player player) { public void toggle(Player player) {
if (players.contains(player)) { if (entityServer.getPlayers().contains(player)) {
players.remove(player);
entityServer.removePlayer(player); entityServer.removePlayer(player);
BauSystem.MESSAGE.sendPrefixless("DESIGN_ENDSTONE_DISABLE", player, ChatMessageType.ACTION_BAR); BauSystem.MESSAGE.sendPrefixless("DESIGN_ENDSTONE_DISABLE", player, ChatMessageType.ACTION_BAR);
} else { } else {
players.add(player);
entityServer.addPlayer(player); entityServer.addPlayer(player);
calc(); calc();
BauSystem.MESSAGE.sendPrefixless("DESIGN_ENDSTONE_ENABLE", player, ChatMessageType.ACTION_BAR); BauSystem.MESSAGE.sendPrefixless("DESIGN_ENDSTONE_ENABLE", player, ChatMessageType.ACTION_BAR);
@ -108,7 +105,7 @@ public class DesignEndStone {
} }
public boolean removePlayer(Player player) { public boolean removePlayer(Player player) {
players.remove(player); entityServer.removePlayer(player);
return players.isEmpty(); return entityServer.getPlayers().isEmpty();
} }
} }

Datei anzeigen

@ -22,6 +22,7 @@ package de.steamwar.bausystem.features.design.endstone;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Location; import org.bukkit.Location;
@ -33,6 +34,7 @@ import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.Map; import java.util.Map;
@Linked @Linked
@ -45,7 +47,7 @@ public class DesignEndStoneCommand extends SWCommand implements Listener {
private Map<Region, DesignEndStone> designEndStoneMap = new HashMap<>(); private Map<Region, DesignEndStone> designEndStoneMap = new HashMap<>();
@Register(description = "DESIGN_ENDSTONE_COMMAND_HELP") @Register(description = "DESIGN_ENDSTONE_COMMAND_HELP")
public void genericCommand(Player player) { public void genericCommand(@Validator Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (!region.hasType(RegionType.BUILD)) { if (!region.hasType(RegionType.BUILD)) {
BauSystem.MESSAGE.send("DESIGN_ENDSTONE_REGION_ERROR", player); BauSystem.MESSAGE.send("DESIGN_ENDSTONE_REGION_ERROR", player);
@ -56,14 +58,20 @@ public class DesignEndStoneCommand extends SWCommand implements Listener {
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
Region region = Region.getRegion(event.getPlayer().getLocation()); disableDesignEndStone(event.getPlayer());
Veraltet
Review

Auch diese Änderung wirkt unrelated.

Auch diese Änderung wirkt unrelated.
DesignEndStone designEndStone = designEndStoneMap.get(region); }
if (designEndStone == null) {
return; @EventHandler
} public void onBauMemberUpdate(BauMemberUpdateEvent event) {
if (designEndStone.removePlayer(event.getPlayer())) { event.getNewSpectator().forEach(this::disableDesignEndStone);
designEndStoneMap.remove(region); }
}
private void disableDesignEndStone(Player player) {
new HashSet<>(designEndStoneMap.entrySet()).forEach(regionDesignEndStoneEntry -> {
if (regionDesignEndStoneEntry.getValue().removePlayer(player)) {
designEndStoneMap.remove(regionDesignEndStoneEntry.getKey());
}
});
} }
@EventHandler @EventHandler

Datei anzeigen

@ -47,6 +47,6 @@ public class DetonatorBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.MEMBER; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -58,12 +58,12 @@ public class DetonatorCommand extends SWCommand {
} }
@Register(value = "wand", description = "DETONATOR_HELP_WAND") @Register(value = "wand", description = "DETONATOR_HELP_WAND")
public void giveWand(Player p) { public void giveWand(@Validator Player p) {
SWUtils.giveItemToPlayer(p, getWAND(p)); SWUtils.giveItemToPlayer(p, getWAND(p));
} }
@Register(value = "click", description = "DETONATOR_HELP_CLICK") @Register(value = "click", description = "DETONATOR_HELP_CLICK")
public void clickDetonator(Player p) { public void clickDetonator(@Validator Player p) {
Detonator.activateDetonator(new ItemStorage(p)); Detonator.activateDetonator(new ItemStorage(p));
} }

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.detonator; package de.steamwar.bausystem.features.detonator;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.features.detonator.storage.DetonatorStorage; import de.steamwar.bausystem.features.detonator.storage.DetonatorStorage;
import de.steamwar.bausystem.features.detonator.storage.ItemStorage; import de.steamwar.bausystem.features.detonator.storage.ItemStorage;
@ -65,6 +66,7 @@ public class DetonatorListener implements Listener {
@EventHandler @EventHandler
public void onBlockBreak(BlockBreakEvent event) { public void onBlockBreak(BlockBreakEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
Player p = event.getPlayer(); Player p = event.getPlayer();
if (Detonator.isDetonator(p.getInventory().getItemInMainHand())) { if (Detonator.isDetonator(p.getInventory().getItemInMainHand())) {
event.setCancelled(true); event.setCancelled(true);
@ -75,6 +77,7 @@ public class DetonatorListener implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!Detonator.isDetonator(event.getItem())) { if (!Detonator.isDetonator(event.getItem())) {
return; return;
} }
@ -89,7 +92,7 @@ public class DetonatorListener implements Listener {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onPlayerMove(PlayerMoveEvent event) { public void onPlayerMove(PlayerMoveEvent event) {
if (!Detonator.isDetonator(event.getPlayer().getInventory().getItemInMainHand())) { if (!Permission.BUILD.hasPermission(event.getPlayer()) ||!Detonator.isDetonator(event.getPlayer().getInventory().getItemInMainHand())) {
if (Detonator.hasActiveDetonatorShow(event.getPlayer())) { if (Detonator.hasActiveDetonatorShow(event.getPlayer())) {
Detonator.hideDetonator(event.getPlayer()); Detonator.hideDetonator(event.getPlayer());
} }
@ -110,6 +113,7 @@ public class DetonatorListener implements Listener {
@EventHandler @EventHandler
public void onPlayerItemHeld(PlayerItemHeldEvent event) { public void onPlayerItemHeld(PlayerItemHeldEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (Detonator.isDetonator(event.getPlayer().getInventory().getItemInMainHand())) { if (Detonator.isDetonator(event.getPlayer().getInventory().getItemInMainHand())) {
HAS_UPDATED.add(event.getPlayer()); HAS_UPDATED.add(event.getPlayer());
} }
@ -117,6 +121,7 @@ public class DetonatorListener implements Listener {
@EventHandler @EventHandler
public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (Detonator.isDetonator(event.getMainHandItem()) || Detonator.isDetonator(event.getOffHandItem())) { if (Detonator.isDetonator(event.getMainHandItem()) || Detonator.isDetonator(event.getOffHandItem())) {
HAS_UPDATED.add(event.getPlayer()); HAS_UPDATED.add(event.getPlayer());
} }

Datei anzeigen

@ -81,7 +81,7 @@ public class BauGUI {
} }
} else { } else {
p.closeInventory(); p.closeInventory();
BauSystem.MESSAGE.send("GUI_NO_PERMISSION", p); BauSystem.MESSAGE.send("NO_PERMISSION", p);
} }
}); });
}); });
@ -108,26 +108,13 @@ public class BauGUI {
if (!permission.hasPermission(p)) { if (!permission.hasPermission(p)) {
List<String> lore = meta.getLore(); List<String> lore = meta.getLore();
if (lore == null) { if (lore == null) {
lore = Collections.singletonList(BauSystem.MESSAGE.parse(permissionString(permission), p)); lore = Collections.singletonList(BauSystem.MESSAGE.parse("NO_PERMISSION", p));
} else { } else {
lore.add(BauSystem.MESSAGE.parse(permissionString(permission), p)); lore.add(BauSystem.MESSAGE.parse("NO_PERMISSION", p));
} }
meta.setLore(lore); meta.setLore(lore);
} }
itemStack.setItemMeta(meta); itemStack.setItemMeta(meta);
return itemStack; return itemStack;
} }
private static String permissionString(Permission permission) {
switch (permission) {
case OWNER:
return "GUI_NO_OWNER";
case WORLD:
return "GUI_NO_WORLD";
case WORLDEDIT:
return "GUI_NO_WORLDEDIT";
default:
return "GUI_NO_MEMBER";
}
}
} }

Datei anzeigen

@ -35,7 +35,7 @@ public class HotbarCommand extends SWCommand {
} }
@Register(value = "load", description = "HOTBAR_HELP_LOAD") @Register(value = "load", description = "HOTBAR_HELP_LOAD")
public void loadHotbar(Player p) { public void loadHotbar(@Validator Player p) {
DefaultHotbar.setHotbar(p); DefaultHotbar.setHotbar(p);
BauSystem.MESSAGE.send("HOTBAR_LOADED", p); BauSystem.MESSAGE.send("HOTBAR_LOADED", p);
} }

Datei anzeigen

@ -19,6 +19,7 @@
package de.steamwar.bausystem.features.hotbar; package de.steamwar.bausystem.features.hotbar;
import de.steamwar.bausystem.Permission;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -30,6 +31,7 @@ public class HotbarListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (allNull(event.getPlayer().getInventory().getContents()) && allNull(event.getPlayer().getInventory().getArmorContents())) { if (allNull(event.getPlayer().getInventory().getContents()) && allNull(event.getPlayer().getInventory().getArmorContents())) {
DefaultHotbar.setHotbar(event.getPlayer()); DefaultHotbar.setHotbar(event.getPlayer());
} }

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.inventoryfiller; package de.steamwar.bausystem.features.inventoryfiller;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.configplayer.Config; import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.ChatMessageType;
@ -38,6 +39,7 @@ public class InventoryFiller implements Listener {
@EventHandler @EventHandler
public void onPlayerDropItem(PlayerDropItemEvent event) { public void onPlayerDropItem(PlayerDropItemEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("inventoryfill", false)) return; if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("inventoryfill", false)) return;
if (!event.getPlayer().isSneaking()) return; if (!event.getPlayer().isSneaking()) return;
Block block = event.getPlayer().getTargetBlockExact(5); Block block = event.getPlayer().getTargetBlockExact(5);
@ -59,6 +61,7 @@ public class InventoryFiller implements Listener {
*/ */
@EventHandler @EventHandler
public void onPlayerItemHeld(PlayerItemHeldEvent event) { public void onPlayerItemHeld(PlayerItemHeldEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("inventoryfill", false)) return; if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("inventoryfill", false)) return;
if (!event.getPlayer().isSneaking()) return; if (!event.getPlayer().isSneaking()) return;
ItemStack itemStack = event.getPlayer().getInventory().getItemInMainHand(); ItemStack itemStack = event.getPlayer().getInventory().getItemInMainHand();

Datei anzeigen

@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.killchecker;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.bausystem.utils.bossbar.BossBarService; import de.steamwar.bausystem.utils.bossbar.BossBarService;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
@ -54,7 +55,7 @@ public class KillcheckerCommand extends SWCommand implements Listener {
} }
@Register(value = "enable", description = "KILLCHECKER_HELP_ENABLE") @Register(value = "enable", description = "KILLCHECKER_HELP_ENABLE")
public void genericCommand(Player player, @OptionalValue("-outline") @StaticValue(value = {"-area", "-outline"}, allowISE = true) boolean onlyOutline) { public void genericCommand(@Validator Player player, @OptionalValue("-outline") @StaticValue(value = {"-area", "-outline"}, allowISE = true) boolean onlyOutline) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
KillcheckerVisualizer killcheckerVisualizer = visualizers.computeIfAbsent(region, region1 -> new KillcheckerVisualizer(region1, bossBarService)); KillcheckerVisualizer killcheckerVisualizer = visualizers.computeIfAbsent(region, region1 -> new KillcheckerVisualizer(region1, bossBarService));
killcheckerVisualizer.recalc(); killcheckerVisualizer.recalc();
@ -74,16 +75,22 @@ public class KillcheckerCommand extends SWCommand implements Listener {
BauSystem.MESSAGE.send("KILLCHECKER_DISABLE", player); BauSystem.MESSAGE.send("KILLCHECKER_DISABLE", player);
} }
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
event.getNewSpectator().forEach(this::hide);
}
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer(); hide(event.getPlayer());
Set<Region> regions = new HashSet<>(); }
visualizers.forEach((region, visualizer) -> {
if (visualizer.disconnect(player)) { private void hide(Player player) {
regions.add(region); new HashSet<>(visualizers.entrySet()).forEach(regionKillcheckerVisualizerEntry -> {
if (regionKillcheckerVisualizerEntry.getValue().hide(player)) {
visualizers.remove(regionKillcheckerVisualizerEntry.getKey());
} }
}); });
regions.forEach(visualizers::remove);
} }
private void recalc(Block block) { private void recalc(Block block) {

Datei anzeigen

@ -57,9 +57,6 @@ public class KillcheckerVisualizer {
private final int zArea; private final int zArea;
private final int xArea; private final int xArea;
private final Set<Player> players = new HashSet<>();
Veraltet
Review

Auch diese Datei: Unrelated Bugfixes?

Auch diese Datei: Unrelated Bugfixes?
private final Set<Player> areaPlayers = new HashSet<>();
private final Region region; private final Region region;
private final BossBarService bossBarService; private final BossBarService bossBarService;
@ -261,7 +258,7 @@ public class KillcheckerVisualizer {
double zPercent = xCount / (double) zArea; double zPercent = xCount / (double) zArea;
percent = (xPercent + yPercent + zPercent) / 3; percent = (xPercent + yPercent + zPercent) / 3;
kills = zKills + yKills + xKills; kills = zKills + yKills + xKills;
players.forEach(this::updateBossBar); outline.getPlayers().forEach(this::updateBossBar);
Set<Point> pointSet = new HashSet<>(killCount.keySet()); Set<Point> pointSet = new HashSet<>(killCount.keySet());
Set<Point> outlinePointsCacheLast = new HashSet<>(outlinePointsCache); Set<Point> outlinePointsCacheLast = new HashSet<>(outlinePointsCache);
@ -356,40 +353,21 @@ public class KillcheckerVisualizer {
return new Cuboid(minX, minY, minZ, maxX, maxY, maxZ); return new Cuboid(minX, minY, minZ, maxX, maxY, maxZ);
} }
public boolean show(Player player, boolean onlyOutline) { public void show(Player player, boolean onlyOutline) {
outline.addPlayer(player); outline.addPlayer(player);
if (!onlyOutline) { if (!onlyOutline) {
inner.addPlayer(player); inner.addPlayer(player);
areaPlayers.add(player); } else {
} else if (areaPlayers.contains(player)) {
inner.removePlayer(player); inner.removePlayer(player);
areaPlayers.remove(player);
} }
updateBossBar(player); updateBossBar(player);
return players.add(player);
} }
public boolean hide(Player player) { public boolean hide(Player player) {
outline.removePlayer(player); outline.removePlayer(player);
if (areaPlayers.contains(player)) { inner.removePlayer(player);
inner.removePlayer(player);
}
players.remove(player);
areaPlayers.remove(player);
bossBarService.remove(player, region, "killchecker"); bossBarService.remove(player, region, "killchecker");
if (players.isEmpty()) { if (outline.getPlayers().isEmpty() && inner.getPlayers().isEmpty()) {
outline.close();
inner.close();
return true;
}
return false;
}
public boolean disconnect(Player player) {
players.remove(player);
areaPlayers.remove(player);
bossBarService.remove(player, region, "killchecker");
if (players.isEmpty()) {
outline.close(); outline.close();
inner.close(); inner.close();
return true; return true;

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.loader; package de.steamwar.bausystem.features.loader;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.loader.elements.LoaderElement; import de.steamwar.bausystem.features.loader.elements.LoaderElement;
import de.steamwar.bausystem.features.loader.elements.LoaderInteractionElement; import de.steamwar.bausystem.features.loader.elements.LoaderInteractionElement;
import de.steamwar.bausystem.features.loader.elements.impl.LoaderTNT; import de.steamwar.bausystem.features.loader.elements.impl.LoaderTNT;
@ -70,6 +71,7 @@ public class Loader implements Listener {
BauSystem.runTaskTimer(BauSystem.getInstance(), () -> { BauSystem.runTaskTimer(BauSystem.getInstance(), () -> {
if (stage != Stage.RUNNING) return; if (stage != Stage.RUNNING) return;
if(!Permission.BUILD.hasPermission(p)) return;
if (waitTime > 0) { if (waitTime > 0) {
waitTime--; waitTime--;
return; return;

Datei anzeigen

@ -21,13 +21,16 @@ package de.steamwar.bausystem.features.loader;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeValidator; import de.steamwar.command.TypeValidator;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@Linked @Linked
public class LoaderCommand extends SWCommand { public class LoaderCommand extends SWCommand implements Listener {
public LoaderCommand() { public LoaderCommand() {
super("loader"); super("loader");
@ -102,10 +105,12 @@ public class LoaderCommand extends SWCommand {
loader.setTicksBetweenBlocks(delay); loader.setTicksBetweenBlocks(delay);
} }
@ClassValidator(value = Player.class, local = true) @EventHandler
public TypeValidator<Player> loaderValidator() { public void onBauMemberUpdate(BauMemberUpdateEvent event) {
return (commandSender, player, messageSender) -> { event.getNewSpectator().forEach(player -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), "LOADER_PERMS"); Loader loader = Loader.getLoader(player);
}; if (loader == null) return;
loader.stop();
});
} }
} }

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.loader; package de.steamwar.bausystem.features.loader;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
@ -40,6 +41,7 @@ public class LoaderScoreboardElement implements ScoreboardElement {
@Override @Override
public String get(Region region, Player p) { public String get(Region region, Player p) {
if(!Permission.BUILD.hasPermission(p)) return null;
Loader loader = Loader.getLoader(p); Loader loader = Loader.getLoader(p);
if (loader == null) return null; if (loader == null) return null;
if (loader.getStage() == Loader.Stage.RUNNING) { if (loader.getStage() == Loader.Stage.RUNNING) {

Datei anzeigen

@ -32,12 +32,12 @@ public class LoadtimerCommand extends SWCommand {
} }
@Register(value = "start", description = "LOADTIMER_HELP_START_1") @Register(value = "start", description = "LOADTIMER_HELP_START_1")
public void start(Player p) { public void start(@Validator Player p) {
start(p, TimerMode.HALF); start(p, TimerMode.HALF);
} }
@Register(value = "start", description = {"LOADTIMER_HELP_START_2", "LOADTIMER_HELP_START_3"}) @Register(value = "start", description = {"LOADTIMER_HELP_START_2", "LOADTIMER_HELP_START_3"})
public void start(Player p, TimerMode mode) { public void start(@Validator Player p, TimerMode mode) {
Region r = Region.getRegion(p.getLocation()); Region r = Region.getRegion(p.getLocation());
if (r.isGlobal()) return; if (r.isGlobal()) return;
if (!Loadtimer.hasTimer(r)) if (!Loadtimer.hasTimer(r))
@ -45,7 +45,7 @@ public class LoadtimerCommand extends SWCommand {
} }
@Register(value = "stop", description = "LOADTIMER_HELP_STOP") @Register(value = "stop", description = "LOADTIMER_HELP_STOP")
public void stop(Player p) { public void stop(@Validator Player p) {
Region r = Region.getRegion(p.getLocation()); Region r = Region.getRegion(p.getLocation());
if (r.isGlobal()) return; if (r.isGlobal()) return;
if (Loadtimer.hasTimer(r)) if (Loadtimer.hasTimer(r))

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.observer; package de.steamwar.bausystem.features.observer;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -46,13 +47,13 @@ public class ObserverTracerCommand extends SWCommand {
} }
@Register(value = "delete", description = "OBSERVER_HELP_DELETE") @Register(value = "delete", description = "OBSERVER_HELP_DELETE")
public void delete(Player p) { public void delete(@Validator Player p) {
ObserverTracerListener.observerTracerMap.remove(p); ObserverTracerListener.observerTracerMap.remove(p);
BauSystem.MESSAGE.send("OBSERVER_DELETE", p); BauSystem.MESSAGE.send("OBSERVER_DELETE", p);
} }
@Register(value = "retrace", description = "OBSERVER_HELP_RETRACE") @Register(value = "retrace", description = "OBSERVER_HELP_RETRACE")
public void retrace(Player p) { public void retrace(@Validator Player p) {
if (ObserverTracerListener.observerTracerMap.containsKey(p)) { if (ObserverTracerListener.observerTracerMap.containsKey(p)) {
BauSystem.MESSAGE.send("OBSERVER_RETRACE_NO_TRACE", p); BauSystem.MESSAGE.send("OBSERVER_RETRACE_NO_TRACE", p);
return; return;

Datei anzeigen

@ -20,6 +20,8 @@
package de.steamwar.bausystem.features.observer; package de.steamwar.bausystem.features.observer;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameMode; import org.bukkit.GameMode;
@ -55,6 +57,7 @@ public class ObserverTracerListener implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!enabled.contains(event.getPlayer())) { if (!enabled.contains(event.getPlayer())) {
return; return;
} }
@ -87,6 +90,11 @@ public class ObserverTracerListener implements Listener {
} }
} }
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
event.getNewSpectator().forEach(observerTracerMap::remove);
}
@EventHandler @EventHandler
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
enabled.add(event.getPlayer()); enabled.add(event.getPlayer());

Datei anzeigen

@ -85,7 +85,7 @@ public class ColorCommand extends SWCommand {
@ClassValidator(value = Player.class, local = true) @ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() { public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> { return (commandSender, player, messageSender) -> {
return !messageSender.send(!bauServer.getOwner().equals(player.getUniqueId()), "REGION_COLOR_NO_PERMS"); return !messageSender.send(!bauServer.getOwner().equals(player.getUniqueId()), "NO_PERMISSION");
}; };
} }

Datei anzeigen

@ -46,10 +46,6 @@ public class FireCommand extends SWCommand {
} }
} }
private String getNoPermMessage() {
return "REGION_FIRE_NO_PERMS";
}
private String getEnableMessage() { private String getEnableMessage() {
return "REGION_FIRE_ENABLED"; return "REGION_FIRE_ENABLED";
} }
@ -69,11 +65,4 @@ public class FireCommand extends SWCommand {
return false; return false;
} }
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), getNoPermMessage());
};
}
} }

Datei anzeigen

@ -46,10 +46,6 @@ public class FreezeCommand extends SWCommand {
} }
} }
private String getNoPermMessage() {
return "REGION_FREEZE_NO_PERMS";
}
private String getEnableMessage(){ private String getEnableMessage(){
return "REGION_FREEZE_ENABLED"; return "REGION_FREEZE_ENABLED";
} }
@ -69,11 +65,4 @@ public class FreezeCommand extends SWCommand {
return true; return true;
} }
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), getNoPermMessage());
};
}
} }

Datei anzeigen

@ -49,10 +49,6 @@ public class ItemsCommand extends SWCommand {
} }
} }
private String getNoPermMessage() {
return "REGION_ITEMS_NO_PERMS";
}
private String getEnableMessage(){ private String getEnableMessage(){
return "REGION_ITEMS_ENABLED"; return "REGION_ITEMS_ENABLED";
} }
@ -72,11 +68,4 @@ public class ItemsCommand extends SWCommand {
return true; return true;
} }
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), getNoPermMessage());
};
}
} }

Datei anzeigen

@ -54,13 +54,6 @@ public class ProtectCommand extends SWCommand {
} }
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLDEDIT), "REGION_PROTECT_NO_PERMS");
};
}
private Region regionCheck(Player player) { private Region regionCheck(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.getFloorLevel() == 0) { if (region.getFloorLevel() == 0) {

Datei anzeigen

@ -71,7 +71,7 @@ public class RegionCommand extends SWCommand {
} }
@Register(value = "undo", description = "REGION_REGION_HELP_UNDO") @Register(value = "undo", description = "REGION_REGION_HELP_UNDO")
public void undoCommand(@Validator("WORLD_EDIT") Player p) { public void undoCommand(@Validator Player p) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) return; if (checkGlobalRegion(region, p)) return;
@ -83,7 +83,7 @@ public class RegionCommand extends SWCommand {
} }
@Register(value = "redo", description = "REGION_REGION_HELP_REDO") @Register(value = "redo", description = "REGION_REGION_HELP_REDO")
public void redoCommand(@Validator("WORLD_EDIT") Player p) { public void redoCommand(@Validator Player p) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
@ -97,7 +97,7 @@ public class RegionCommand extends SWCommand {
} }
@Register(value = "restore", description = "REGION_REGION_HELP_RESTORE") @Register(value = "restore", description = "REGION_REGION_HELP_RESTORE")
public void genericRestoreCommand(@Validator("WORLD_EDIT") Player p) { public void genericRestoreCommand(@Validator Player p) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if(checkGlobalRegion(region, p)) return; if(checkGlobalRegion(region, p)) return;
@ -114,7 +114,7 @@ public class RegionCommand extends SWCommand {
} }
@Register(value = "restore", description = "REGION_REGION_HELP_RESTORE_SCHEMATIC") @Register(value = "restore", description = "REGION_REGION_HELP_RESTORE_SCHEMATIC")
public void schematicRestoreCommand(@Validator("WORLD_EDIT") Player p, SchematicNode node) { public void schematicRestoreCommand(@Validator Player p, SchematicNode node) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) return; if (checkGlobalRegion(region, p)) return;
@ -164,36 +164,6 @@ public class RegionCommand extends SWCommand {
BauSystem.MESSAGE.send("REGION_REGION_TP_TEST_BLOCK", p); BauSystem.MESSAGE.send("REGION_REGION_TP_TEST_BLOCK", p);
} }
@Register(value = "changetype", description = "REGION_REGION_HELP_CHANGETYPE_INFO")
@Register("type")
public void changeTypeCommand(Player p) {
Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) {
return;
}
BauSystem.MESSAGE.send("REGION_REGION_CHANGETYPE_INFO", p, region.getPrototype().getDisplayName());
}
@Register(value = "changetype", description = "REGION_REGION_HELP_CHANGETYPE")
@Register("type")
public void changeTypeCommand(@Validator("WORLD") Player p, @Mapper("regionTypeMapper") String s) {
Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) {
return;
}
Prototype prototype = Prototype.getByDisplayName(s);
if (prototype == null) {
BauSystem.MESSAGE.send("REGION_REGION_CHANGETYPE_UNKNOWN", p);
} else {
if (region.setPrototype(prototype)) {
BauSystem.MESSAGE.send("REGION_REGION_CHANGETYPE_CHANGE", p, s);
BauSystem.MESSAGE.send("REGION_REGION_CHANGETYPE_CHANGE_UPDATE", p, BauSystem.MESSAGE.parse("REGION_REGION_CHANGETYPE_CHANGE_UPDATE_HOVER", p), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/reset"));
} else {
BauSystem.MESSAGE.send("REGION_REGION_CHANGETYPE_INVALID", p);
}
}
}
@Register(value = "changeskin", description = "REGION_REGION_HELP_CHANGESKIN_INFO") @Register(value = "changeskin", description = "REGION_REGION_HELP_CHANGESKIN_INFO")
@Register("skin") @Register("skin")
public void changeSkinCommand(Player p) { public void changeSkinCommand(Player p) {
@ -210,7 +180,7 @@ public class RegionCommand extends SWCommand {
@Register(value = "changeskin", description = "REGION_REGION_HELP_CHANGESKIN") @Register(value = "changeskin", description = "REGION_REGION_HELP_CHANGESKIN")
@Register("skin") @Register("skin")
public void changeSkinCommand(@Validator("WORLD") Player p, @Mapper("skinTypeMapper") String s) { public void changeSkinCommand(@Validator Player p, @Mapper("skinTypeMapper") String s) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
@ -227,26 +197,6 @@ public class RegionCommand extends SWCommand {
} }
} }
@Mapper(value = "regionTypeMapper", local = true)
private TypeMapper<String> regionTypeMapper() {
return new TypeMapper<String>() {
@Override
public List<String> tabCompletes(CommandSender commandSender, PreviousArguments previousArguments, String s) {
Player p = (Player) commandSender;
Region region = Region.getRegion(p.getLocation());
if (region.isGlobal()) {
return Collections.emptyList();
}
return region.getPrototypes().stream().map(Prototype::getByName).map(Prototype::getDisplayName).map(c -> c.replace(' ', '_')).collect(Collectors.toList());
}
@Override
public String map(CommandSender commandSender, PreviousArguments previousArguments, String s) {
return s.replace('_', ' ');
}
};
}
@Mapper(value = "skinTypeMapper", local = true) @Mapper(value = "skinTypeMapper", local = true)
private TypeMapper<String> skinTypeMapper() { private TypeMapper<String> skinTypeMapper() {
return new TypeMapper<String>() { return new TypeMapper<String>() {
@ -266,18 +216,4 @@ public class RegionCommand extends SWCommand {
} }
}; };
} }
@Validator(value = "WORLD", local = true)
public TypeValidator<Player> worldValidator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), "REGION_REGION_NO_PERMS");
};
}
@Validator(value = "WORLD_EDIT", local = true)
public TypeValidator<Player> worldEditValidator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLDEDIT), "REGION_REGION_NO_PERMS");
};
}
} }

Datei anzeigen

@ -97,13 +97,6 @@ public class ResetCommand extends SWCommand {
} }
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), "REGION_RESET_NO_PERMS");
};
}
private Region regionCheck(Player player) { private Region regionCheck(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region == GlobalRegion.getInstance()) { if (region == GlobalRegion.getInstance()) {

Datei anzeigen

@ -157,11 +157,4 @@ public class TNTCommand extends SWCommand {
break; break;
} }
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), "REGION_TNT_NO_PERMS");
};
}
} }

Datei anzeigen

@ -157,11 +157,6 @@ public class TestblockCommand extends SWCommand {
}; };
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> !messageSender.send(!Permission.hasPermission(player, Permission.WORLDEDIT), "REGION_TB_NO_PERMS");
}
private Region regionCheck(Player player) { private Region regionCheck(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (!region.hasType(RegionType.TESTBLOCK)) { if (!region.hasType(RegionType.TESTBLOCK)) {

Datei anzeigen

@ -57,6 +57,6 @@ public class FireBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLD; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -57,6 +57,6 @@ public class FreezeBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLD; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -58,6 +58,6 @@ public class ProtectBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLDEDIT; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -65,6 +65,6 @@ public class ResetBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLDEDIT; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -64,6 +64,6 @@ public class TestblockBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLDEDIT; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -116,6 +116,6 @@ public class TntBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLD; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -31,7 +31,7 @@ public class ScriptCommand extends SWCommand {
} }
@Register @Register
public void genericCommand(Player player) { public void genericCommand(@Validator Player player) {
ScriptGUI.open(player); ScriptGUI.open(player);
} }
} }

Datei anzeigen

@ -19,6 +19,8 @@
package de.steamwar.bausystem.features.script; package de.steamwar.bausystem.features.script;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.bausystem.utils.FlatteningWrapper; import de.steamwar.bausystem.utils.FlatteningWrapper;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -42,6 +44,8 @@ public class ScriptListener implements Listener {
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onLeftClick(PlayerInteractEvent event) { public void onLeftClick(PlayerInteractEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
ItemStack item = event.getItem(); ItemStack item = event.getItem();
if (item == null || FlatteningWrapper.impl.isNoBook(item) || item.getItemMeta() == null) { if (item == null || FlatteningWrapper.impl.isNoBook(item) || item.getItemMeta() == null) {
return; return;
@ -68,6 +72,13 @@ public class ScriptListener implements Listener {
@EventHandler @EventHandler
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
ScriptRunner.updateGlobalScript(event.getPlayer()); ScriptRunner.updateGlobalScript(event.getPlayer());
} }
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
event.getNewSpectator().forEach(ScriptRunner::remove);
event.getNewBuilder().forEach(ScriptRunner::updateGlobalScript);
}
} }

Datei anzeigen

@ -19,6 +19,7 @@
package de.steamwar.bausystem.features.script.event; package de.steamwar.bausystem.features.script.event;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.script.ScriptRunner; import de.steamwar.bausystem.features.script.ScriptRunner;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -41,6 +42,7 @@ public class CommandListener implements Listener {
@EventHandler @EventHandler
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
String[] split = event.getMessage().split(" "); String[] split = event.getMessage().split(" ");
if (calledCommands.getOrDefault(event.getPlayer(), new HashSet<>()).contains(split[0])) { if (calledCommands.getOrDefault(event.getPlayer(), new HashSet<>()).contains(split[0])) {
return; return;

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.script.event; package de.steamwar.bausystem.features.script.event;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.script.ScriptRunner; import de.steamwar.bausystem.features.script.ScriptRunner;
import de.steamwar.bausystem.features.script.lua.SteamWarGlobalLuaPlugin; import de.steamwar.bausystem.features.script.lua.SteamWarGlobalLuaPlugin;
import de.steamwar.bausystem.features.script.lua.libs.StorageLib; import de.steamwar.bausystem.features.script.lua.libs.StorageLib;
@ -64,17 +65,20 @@ public class EventListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfJoin, LuaValue.NIL, event); ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfJoin, LuaValue.NIL, event);
} }
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
StorageLib.removePlayer(event.getPlayer()); StorageLib.removePlayer(event.getPlayer());
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfLeave, LuaValue.NIL, event); ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfLeave, LuaValue.NIL, event);
} }
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (LAST_FS.containsKey(event.getPlayer())) { if (LAST_FS.containsKey(event.getPlayer())) {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.DoubleSwap, LuaValue.NIL, event); ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.DoubleSwap, LuaValue.NIL, event);
@ -86,6 +90,7 @@ public class EventListener implements Listener {
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onBlockPlace(BlockPlaceEvent event) { public void onBlockPlace(BlockPlaceEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
LuaTable table = new LuaTable(); LuaTable table = new LuaTable();
table.set("x", event.getBlock().getX()); table.set("x", event.getBlock().getX());
table.set("y", event.getBlock().getY()); table.set("y", event.getBlock().getY());
@ -96,6 +101,7 @@ public class EventListener implements Listener {
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onBlockBreak(BlockBreakEvent event) { public void onBlockBreak(BlockBreakEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
LuaTable table = new LuaTable(); LuaTable table = new LuaTable();
table.set("x", event.getBlock().getX()); table.set("x", event.getBlock().getX());
table.set("y", event.getBlock().getY()); table.set("y", event.getBlock().getY());
@ -108,6 +114,7 @@ public class EventListener implements Listener {
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (ignore.remove(event.getPlayer())) { if (ignore.remove(event.getPlayer())) {
return; return;
} }
@ -144,6 +151,7 @@ public class EventListener implements Listener {
Region tntRegion = Region.getRegion(event.getLocation()); Region tntRegion = Region.getRegion(event.getLocation());
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
if(!Permission.BUILD.hasPermission(player)) continue;
if (tntRegion.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)) { if (tntRegion.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)) {
ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTSpawn, LuaValue.NIL, event); ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTSpawn, LuaValue.NIL, event);
} }
@ -165,6 +173,7 @@ public class EventListener implements Listener {
boolean inBuild = event.blockList().stream().anyMatch(block -> tntRegion.inRegion(block.getLocation(), RegionType.BUILD, RegionExtensionType.EXTENSION)); boolean inBuild = event.blockList().stream().anyMatch(block -> tntRegion.inRegion(block.getLocation(), RegionType.BUILD, RegionExtensionType.EXTENSION));
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
if(!Permission.BUILD.hasPermission(player)) continue;
if (tntRegion.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)) { if (tntRegion.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)) {
ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTExplode, table, event); ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTExplode, table, event);
if (inBuild) { if (inBuild) {
@ -176,6 +185,7 @@ public class EventListener implements Listener {
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onPlayerDropItem(PlayerDropItemEvent event) { public void onPlayerDropItem(PlayerDropItemEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
ignore.add(event.getPlayer()); ignore.add(event.getPlayer());
LuaTable table = new LuaTable(); LuaTable table = new LuaTable();
table.set("type", event.getItemDrop().getItemStack().getType().name()); table.set("type", event.getItemDrop().getItemStack().getType().name());
@ -185,6 +195,7 @@ public class EventListener implements Listener {
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onEntityDeath(EntityDeathEvent event) { public void onEntityDeath(EntityDeathEvent event) {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
if(!Permission.BUILD.hasPermission(player)) continue;
LuaTable table = new LuaTable(); LuaTable table = new LuaTable();
table.set("type", event.getEntityType().name()); table.set("type", event.getEntityType().name());
ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.EntityDeath, table, event); ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.EntityDeath, table, event);

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.script.event; package de.steamwar.bausystem.features.script.event;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.script.ScriptRunner; import de.steamwar.bausystem.features.script.ScriptRunner;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.api.Plain; import de.steamwar.linkage.api.Plain;
@ -36,6 +37,7 @@ public class HotkeyListener implements PluginMessageListener, Plain {
@Override @Override
public void onPluginMessageReceived(String channel, Player player, byte[] message) { public void onPluginMessageReceived(String channel, Player player, byte[] message) {
if(!Permission.BUILD.hasPermission(player)) return;
if (!channel.equals("sw:hotkeys")) return; if (!channel.equals("sw:hotkeys")) return;
if (message.length < 5) return; if (message.length < 5) return;
int action = message[4] & 0xFF; int action = message[4] & 0xFF;

Datei anzeigen

@ -124,12 +124,10 @@ public class SteamWarLuaPlugin extends TwoArgFunction {
return LuaValue.NIL; return LuaValue.NIL;
} }
Veraltet
Review

Unrelated Bugfix?

Unrelated Bugfix?
command = preprocessEvent.getMessage().substring(1);
Bukkit.getLogger().log(Level.INFO, player.getName() + " dispatched command: " + command); Bukkit.getLogger().log(Level.INFO, player.getName() + " dispatched command: " + command);
String[] commandSplit = command.split(" "); String[] commandSplit = command.split(" ");
if (!commandSplit[0].equals("select") && hasFAWE && WorldEditListener.isWorldEditCommand("/" + commandSplit[0])) { if (!commandSplit[0].equals("select") && hasFAWE && WorldEditListener.isWorldEditCommand("/" + commandSplit[0])) {
if (!Permission.WORLDEDIT.hasPermission(player)) {
return NIL;
}
EditSession editSession = WorldEditUtils.getEditSession(player); EditSession editSession = WorldEditUtils.getEditSession(player);
Actor actor = BukkitAdapter.adapt(player); Actor actor = BukkitAdapter.adapt(player);
WorldEdit.getInstance().getPlatformManager().getPlatformCommandManager().handleCommandOnCurrentThread(new CommandEvent(actor, command, editSession)); WorldEdit.getInstance().getPlatformManager().getPlatformCommandManager().handleCommandOnCurrentThread(new CommandEvent(actor, command, editSession));

Datei anzeigen

@ -20,7 +20,7 @@
package de.steamwar.bausystem.features.script.lua.libs; package de.steamwar.bausystem.features.script.lua.libs;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.tpslimit.TPSLimitUtils; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.tpslimit.TPSSystem; import de.steamwar.bausystem.features.tpslimit.TPSSystem;
import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.features.tpslimit.TPSUtils;
import de.steamwar.core.TPSWatcher; import de.steamwar.core.TPSWatcher;
@ -52,6 +52,9 @@ public class ServerLib implements LuaLib {
serverLib.set("getBlockAt", new OneArgFunction() { serverLib.set("getBlockAt", new OneArgFunction() {
@Override @Override
public LuaValue call(LuaValue arg1) { public LuaValue call(LuaValue arg1) {
if (!Permission.SUPERVISOR.hasPermission(player)) {
return LuaValue.NIL;
}
LuaTable pos = arg1.checktable(); LuaTable pos = arg1.checktable();
return valueOf(player.getWorld().getBlockAt(pos.get("x").checkint(), pos.get("y").checkint(), pos.get("z").checkint()).getType().name()); return valueOf(player.getWorld().getBlockAt(pos.get("x").checkint(), pos.get("y").checkint(), pos.get("z").checkint()).getType().name());
} }
@ -59,6 +62,9 @@ public class ServerLib implements LuaLib {
serverLib.set("setBlockAt", new TwoArgFunction() { serverLib.set("setBlockAt", new TwoArgFunction() {
@Override @Override
public LuaValue call(LuaValue arg1, LuaValue arg2) { public LuaValue call(LuaValue arg1, LuaValue arg2) {
if (!Permission.SUPERVISOR.hasPermission(player)) {
return LuaValue.NIL;
}
LuaTable pos = arg1.checktable(); LuaTable pos = arg1.checktable();
LuaString material = arg2.checkstring(); LuaString material = arg2.checkstring();
Material mat = SWItem.getMaterial(material.tojstring()); Material mat = SWItem.getMaterial(material.tojstring());

Datei anzeigen

@ -22,6 +22,7 @@ package de.steamwar.bausystem.features.shieldprinting;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.shieldprinting.impl.*; import de.steamwar.bausystem.features.shieldprinting.impl.*;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar; import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar;
import de.steamwar.bausystem.utils.bossbar.BossBarService; import de.steamwar.bausystem.utils.bossbar.BossBarService;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
@ -273,6 +274,12 @@ public class ShieldPrinting implements Listener {
updateBossbar(event.getPlayer()); updateBossbar(event.getPlayer());
} }
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
event.getNewSpectator().forEach(player -> BossBarService.instance.remove(player, region, "shieldprinting"));
event.getNewBuilder().forEach(this::updateBossbar);
}
private void updateBossbars() { private void updateBossbars() {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
updateBossbar(player); updateBossbar(player);

Datei anzeigen

@ -108,8 +108,8 @@ public class ShieldPrintingCommand extends SWCommand implements Listener {
@ClassValidator(value = Player.class, local = true) @ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() { public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> { return (commandSender, player, messageSender) -> {
if (!Permission.hasPermission(player, Permission.WORLD)) { if (!Permission.BUILD.hasPermission(player)) {
messageSender.send("SHIELD_PRINTING_DISALLOWED", player); messageSender.send("NO_PERMISSION", player);
return false; return false;
} }
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
@ -123,6 +123,7 @@ public class ShieldPrintingCommand extends SWCommand implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (event.getClickedBlock() == null) { if (event.getClickedBlock() == null) {
return; return;
} }

Datei anzeigen

@ -55,6 +55,6 @@ public class SimulatorBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLD; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -102,11 +102,4 @@ public class SimulatorCommand extends SWCommand {
} }
}; };
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), "SIMULATOR_NO_PERMS");
};
}
} }

Datei anzeigen

@ -22,6 +22,7 @@ package de.steamwar.bausystem.features.simulator;
import com.comphenix.tinyprotocol.Reflection; import com.comphenix.tinyprotocol.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.features.simulator.data.Simulator; import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.bausystem.features.simulator.data.SimulatorElement; import de.steamwar.bausystem.features.simulator.data.SimulatorElement;
@ -36,6 +37,7 @@ import de.steamwar.bausystem.features.simulator.execute.SimulatorExecutor;
import de.steamwar.bausystem.features.simulator.gui.SimulatorGroupGui; import de.steamwar.bausystem.features.simulator.gui.SimulatorGroupGui;
import de.steamwar.bausystem.features.simulator.gui.SimulatorGui; import de.steamwar.bausystem.features.simulator.gui.SimulatorGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.bausystem.utils.ItemUtils; import de.steamwar.bausystem.utils.ItemUtils;
import de.steamwar.bausystem.utils.RayTraceUtils; import de.steamwar.bausystem.utils.RayTraceUtils;
import de.steamwar.entity.REntity; import de.steamwar.entity.REntity;
@ -94,6 +96,7 @@ public class SimulatorCursor implements Listener {
@EventHandler @EventHandler
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
calcCursor(event.getPlayer()); calcCursor(event.getPlayer());
}, 0); }, 0);
@ -101,16 +104,23 @@ public class SimulatorCursor implements Listener {
@EventHandler @EventHandler
public void onPlayerDropItem(PlayerDropItemEvent event) { public void onPlayerDropItem(PlayerDropItemEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
calcCursor(event.getPlayer()); calcCursor(event.getPlayer());
} }
@EventHandler @EventHandler
public void onPlayerItemHeld(PlayerItemHeldEvent event) { public void onPlayerItemHeld(PlayerItemHeldEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
calcCursor(event.getPlayer()); calcCursor(event.getPlayer());
}, 1); }, 1);
} }
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
event.getChanged().forEach(this::calcCursor);
}
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
cursorType.remove(event.getPlayer()); cursorType.remove(event.getPlayer());
@ -149,7 +159,7 @@ public class SimulatorCursor implements Listener {
if (calculating.contains(player)) return; if (calculating.contains(player)) return;
calculating.add(player); calculating.add(player);
} }
if (!isSimulatorItem(player.getInventory().getItemInMainHand()) && !isSimulatorItem(player.getInventory().getItemInOffHand())) { if (!Permission.BUILD.hasPermission(player) || (!isSimulatorItem(player.getInventory().getItemInMainHand()) && !isSimulatorItem(player.getInventory().getItemInOffHand()))) {
if (removeCursor(player) || SimulatorWatcher.show(null, player)) { if (removeCursor(player) || SimulatorWatcher.show(null, player)) {
SWUtils.sendToActionbar(player, ""); SWUtils.sendToActionbar(player, "");
} }
@ -334,6 +344,7 @@ public class SimulatorCursor implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!ItemUtils.isItem(event.getItem(), "simulator")) { if (!ItemUtils.isItem(event.getItem(), "simulator")) {
return; return;
} }

Datei anzeigen

@ -24,7 +24,6 @@ import de.steamwar.bausystem.features.simulator.execute.SimulatorAction;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode; import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode;
import de.steamwar.bausystem.region.tags.Tag;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;

Datei anzeigen

@ -78,11 +78,4 @@ public class LaufbauCommand extends SWCommand {
public void laufbauSettings(@Validator Player player) { public void laufbauSettings(@Validator Player player) {
new LaufbauSettings(player); new LaufbauSettings(player);
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLDEDIT), "LAUFBAU_NO_PERM");
};
}
} }

Datei anzeigen

@ -91,13 +91,6 @@ public class PanzernCommand extends SWCommand {
}.runTaskTimer(BauSystem.getInstance(), 1, 1); }.runTaskTimer(BauSystem.getInstance(), 1, 1);
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLDEDIT), "PANZERN_NO_PERM");
};
}
@Mapper(value = "block", local = true) @Mapper(value = "block", local = true)
private TypeMapper<Material> blockMapper() { private TypeMapper<Material> blockMapper() {
Set<String> strings = new HashSet<>(); Set<String> strings = new HashSet<>();

Datei anzeigen

@ -22,6 +22,7 @@ package de.steamwar.bausystem.features.smartplace;
import com.comphenix.tinyprotocol.Reflection; import com.comphenix.tinyprotocol.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.configplayer.Config; import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
@ -94,6 +95,7 @@ public class SmartPlaceListener implements Plain, Listener {
public SmartPlaceListener() { public SmartPlaceListener() {
TinyProtocol.instance.addFilter(useItem, (player, packet) -> { TinyProtocol.instance.addFilter(useItem, (player, packet) -> {
if(!Permission.BUILD.hasPermission(player)) return packet;
if (!Config.getInstance().get(player).getPlainValueOrDefault("smartPlace", false)) return packet; if (!Config.getInstance().get(player).getPlainValueOrDefault("smartPlace", false)) return packet;
Block block = player.getTargetBlockExact(6); Block block = player.getTargetBlockExact(6);
boolean shouldSneak = false; boolean shouldSneak = false;
@ -128,6 +130,7 @@ public class SmartPlaceListener implements Plain, Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("smartPlace", false)) return; if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("smartPlace", false)) return;
WAS_EXECUTED.add(event.getPlayer()); WAS_EXECUTED.add(event.getPlayer());
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return;
@ -146,6 +149,7 @@ public class SmartPlaceListener implements Plain, Listener {
@EventHandler @EventHandler
public void onBlockPlace(BlockPlaceEvent event) { public void onBlockPlace(BlockPlaceEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("smartPlace", false)) return; if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("smartPlace", false)) return;
if (!SMART_PLACING.contains(event.getPlayer())) { if (!SMART_PLACING.contains(event.getPlayer())) {
if (CONTAINERS.contains(event.getBlockAgainst().getType())) { if (CONTAINERS.contains(event.getBlockAgainst().getType())) {

Datei anzeigen

@ -20,16 +20,22 @@
package de.steamwar.bausystem.features.techhider; package de.steamwar.bausystem.features.techhider;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.world.SpectatorListener;
import de.steamwar.bausystem.features.xray.XrayCommand; import de.steamwar.bausystem.features.xray.XrayCommand;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper;
import de.steamwar.core.CraftbukkitWrapper; import de.steamwar.core.CraftbukkitWrapper;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance; import de.steamwar.linkage.LinkedInstance;
import de.steamwar.techhider.TechHider; import de.steamwar.techhider.TechHider;
import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.ChatMessageType;
import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -55,7 +61,7 @@ public class TechHiderCommand extends SWCommand implements Listener, ScoreboardE
public XrayCommand xrayCommand; public XrayCommand xrayCommand;
@Register(description = "TECHHIDER_HELP") @Register(description = "TECHHIDER_HELP")
public void toggleHider(Player player) { public void toggleHider(@Validator Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.isGlobal()) { if (region.isGlobal()) {
BauSystem.MESSAGE.send("TECHHIDER_GLOBAL", player); BauSystem.MESSAGE.send("TECHHIDER_GLOBAL", player);
@ -104,6 +110,33 @@ public class TechHiderCommand extends SWCommand implements Listener, ScoreboardE
}); });
} }
@Register
public void toggleHider(@Validator("supervisor") Player player, @Mapper("spectator") Player other) {
SpectatorListener.toggleNoTechHider(other);
}
@Mapper("spectator")
public TypeMapper<Player> spectatorMapper() {
return new TypeMapper<>() {
@Override
public Player map(CommandSender commandSender, String[] previousArguments, String s) {
Player player = Bukkit.getPlayer(s);
if (player != null && Permission.REAL_SPECTATOR.hasPermission(player)) {
return player;
}
return null;
}
@Override
public Collection<String> tabCompletes(CommandSender sender, PreviousArguments previousArguments, String s) {
return Bukkit.getOnlinePlayers().stream()
.filter(Permission.REAL_SPECTATOR::hasPermission)
.map(Player::getName)
.collect(Collectors.toList());
}
};
}
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
hidden.values().forEach(set -> set.remove(event.getPlayer())); hidden.values().forEach(set -> set.remove(event.getPlayer()));

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.testblock.blockcounter; package de.steamwar.bausystem.features.testblock.blockcounter;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.configplayer.Config; import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
@ -49,6 +50,8 @@ public class BlockCounter {
} }
public String getMessage(Player player, int count, int tntCount, long tick, long lastTick) { public String getMessage(Player player, int count, int tntCount, long tick, long lastTick) {
if(!Permission.BUILD.hasPermission(player)) return null;
double countPerTNT = (double) count / tntCount; double countPerTNT = (double) count / tntCount;
double countPerTick = (double) count / Math.max((lastTick - tick), 1); double countPerTick = (double) count / Math.max((lastTick - tick), 1);
if (isActive(player)) { if (isActive(player)) {

Datei anzeigen

@ -146,16 +146,6 @@ public class TPSSystem implements Listener {
} }
} }
public TypeValidator<Player> player() {
return (commandSender, player, messageSender) -> {
if (!Permission.hasPermission(player, Permission.WORLD)) {
messageSender.send("TPSLIMIT_NO_PERMS");
return false;
}
return true;
};
}
private class TPSBaseCommand extends SWCommand { private class TPSBaseCommand extends SWCommand {
private TPSBaseCommand() { private TPSBaseCommand() {
@ -163,11 +153,6 @@ public class TPSSystem implements Listener {
setMessage(BauSystem.MESSAGE); setMessage(BauSystem.MESSAGE);
addDefaultHelpMessage("TPSLIMIT_HELP"); addDefaultHelpMessage("TPSLIMIT_HELP");
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> player() {
return TPSSystem.this.player();
}
} }
@AbstractSWCommand.PartOf(TPSBaseCommand.class) @AbstractSWCommand.PartOf(TPSBaseCommand.class)
@ -233,11 +218,6 @@ public class TPSSystem implements Listener {
super("tick"); super("tick");
setMessage(BauSystem.MESSAGE); setMessage(BauSystem.MESSAGE);
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> player() {
return TPSSystem.this.player();
}
} }
@AbstractSWCommand.PartOf(TickBaseCommand.class) @AbstractSWCommand.PartOf(TickBaseCommand.class)
@ -406,7 +386,7 @@ public class TPSSystem implements Listener {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLD; return Permission.BUILD;
} }
} }
} }

Datei anzeigen

@ -243,15 +243,4 @@ public class TraceCommand extends SWCommand {
} }
}; };
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
if (!Permission.hasPermission(player, Permission.WORLD)) {
messageSender.send("TRACE_MESSAGE_DISALLOWED", player);
return false;
}
return true;
};
}
} }

Datei anzeigen

@ -96,6 +96,6 @@ public class TracerBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLD; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -23,6 +23,7 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.tracer.TNTPosition; import de.steamwar.bausystem.features.tracer.TNTPosition;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.shared.ShowMode; import de.steamwar.bausystem.shared.ShowMode;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -131,12 +132,21 @@ public class TraceShowManager implements Listener {
@EventHandler @EventHandler
public void onLeave(PlayerQuitEvent event) { public void onLeave(PlayerQuitEvent event) {
hideComplete(event.getPlayer());
}
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
event.getNewSpectator().forEach(this::hideComplete);
}
private void hideComplete(Player player) {
showModes.forEach((region, playerShowModeMap) -> { showModes.forEach((region, playerShowModeMap) -> {
ShowMode<TNTPosition> showMode = playerShowModeMap.remove(event.getPlayer()); ShowMode<TNTPosition> showMode = playerShowModeMap.remove(player);
if (showMode != null) showMode.hide(); if (showMode != null) showMode.hide();
}); });
showFilters.forEach((region, playerPredicateMap) -> { showFilters.forEach((region, playerPredicateMap) -> {
playerPredicateMap.remove(event.getPlayer()); playerPredicateMap.remove(player);
}); });
} }
} }

Datei anzeigen

@ -74,7 +74,7 @@ public class BindCommand extends SWCommand implements Listener {
} }
@Register(description = "OTHER_BIND_HELP") @Register(description = "OTHER_BIND_HELP")
public void bind(Player player, @Mapper("command") @ErrorMessage("OTHER_BIND_ERROR") String... command) { public void bind(@Validator Player player, @Mapper("command") @ErrorMessage("OTHER_BIND_ERROR") String... command) {
bindInternal(player, command); bindInternal(player, command);
} }
@ -103,6 +103,7 @@ public class BindCommand extends SWCommand implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if (!event.hasItem()) return; if (!event.hasItem()) return;
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
ItemStack itemStack = event.getItem(); ItemStack itemStack = event.getItem();
ItemMeta meta = itemStack.getItemMeta(); ItemMeta meta = itemStack.getItemMeta();
if (meta == null) { if (meta == null) {
@ -116,23 +117,21 @@ public class BindCommand extends SWCommand implements Listener {
event.setCancelled(true); event.setCancelled(true);
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
PlayerCommandPreprocessEvent playerCommandPreprocessEvent = new PlayerCommandPreprocessEvent(event.getPlayer(), "/" + command); PlayerCommandPreprocessEvent preprocessEvent = new PlayerCommandPreprocessEvent(event.getPlayer(), "/" + command);
Bukkit.getPluginManager().callEvent(playerCommandPreprocessEvent); Bukkit.getPluginManager().callEvent(preprocessEvent);
if (playerCommandPreprocessEvent.isCancelled()) return; if (preprocessEvent.isCancelled()) return;
Bukkit.getLogger().log(Level.INFO, event.getPlayer().getName() + " dispatched command: " + command); String processedCommand = preprocessEvent.getMessage().substring(1);
String[] commandSplit = command.split(" "); Bukkit.getLogger().log(Level.INFO, event.getPlayer().getName() + " dispatched command: " + processedCommand);
String[] commandSplit = processedCommand.split(" ");
if (!commandSplit[0].equals("select") && hasFAWE && WorldEditListener.isWorldEditCommand("/" + commandSplit[0])) { if (!commandSplit[0].equals("select") && hasFAWE && WorldEditListener.isWorldEditCommand("/" + commandSplit[0])) {
if (!Permission.WORLDEDIT.hasPermission(event.getPlayer())) {
return;
}
EditSession editSession = WorldEditUtils.getEditSession(event.getPlayer()); EditSession editSession = WorldEditUtils.getEditSession(event.getPlayer());
Actor actor = BukkitAdapter.adapt(event.getPlayer()); Actor actor = BukkitAdapter.adapt(event.getPlayer());
WorldEdit.getInstance().getPlatformManager().getPlatformCommandManager().handleCommandOnCurrentThread(new CommandEvent(actor, command, editSession)); WorldEdit.getInstance().getPlatformManager().getPlatformCommandManager().handleCommandOnCurrentThread(new CommandEvent(actor, processedCommand, editSession));
editSession.flushSession(); editSession.flushSession();
WorldEditUtils.addToPlayer(event.getPlayer(), editSession); WorldEditUtils.addToPlayer(event.getPlayer(), editSession);
} else { } else {
Bukkit.getServer().dispatchCommand(event.getPlayer(), command); Bukkit.getServer().dispatchCommand(event.getPlayer(), processedCommand);
} }
}, 1); }, 1);
} }

Datei anzeigen

@ -17,7 +17,7 @@ public class BookReplaceCommand extends SWCommand {
} }
@Register("color") @Register("color")
public void color(Player player) { public void color(@Validator Player player) {
ItemStack itemStack = player.getInventory().getItemInMainHand(); ItemStack itemStack = player.getInventory().getItemInMainHand();
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta instanceof BookMeta) { if (itemMeta instanceof BookMeta) {
@ -29,7 +29,7 @@ public class BookReplaceCommand extends SWCommand {
} }
@Register("uncolor") @Register("uncolor")
public void uncolor(Player player) { public void uncolor(@Validator Player player) {
ItemStack itemStack = player.getInventory().getItemInMainHand(); ItemStack itemStack = player.getInventory().getItemInMainHand();
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta instanceof BookMeta) { if (itemMeta instanceof BookMeta) {

Datei anzeigen

@ -48,13 +48,6 @@ public class ClearCommand extends SWCommand {
BauSystem.MESSAGE.send("OTHER_CLEAR_TO", p, target.getName()); BauSystem.MESSAGE.send("OTHER_CLEAR_TO", p, target.getName());
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), "OTHER_CLEAR_NO_PERMS");
};
}
private void clear(Player player) { private void clear(Player player) {
player.getInventory().clear(); player.getInventory().clear();
player.getInventory().setHelmet(new ItemStack(Material.AIR)); player.getInventory().setHelmet(new ItemStack(Material.AIR));

Datei anzeigen

@ -34,7 +34,7 @@ public class DebugStickCommand extends SWCommand {
} }
@Register(description = "DEBUG_STICK_COMMAND_HELP") @Register(description = "DEBUG_STICK_COMMAND_HELP")
public void genericCommand(Player p) { public void genericCommand(@Validator Player p) {
SWUtils.giveItemToPlayer(p, new ItemStack(Material.DEBUG_STICK)); SWUtils.giveItemToPlayer(p, new ItemStack(Material.DEBUG_STICK));
} }
} }

Datei anzeigen

@ -45,12 +45,12 @@ public class KillAllCommand extends SWCommand {
} }
@Register(description = "OTHER_KILLALL_HELP_SELF") @Register(description = "OTHER_KILLALL_HELP_SELF")
public void genericCommand(Player player) { public void genericCommand(@Validator Player player) {
genericCommand(player, RegionSelectionType.LOCAL); genericCommand(player, RegionSelectionType.LOCAL);
} }
@Register(description = "OTHER_KILLALL_HELP_ALL") @Register(description = "OTHER_KILLALL_HELP_ALL")
public void genericCommand(Player player, RegionSelectionType regionSelectionType) { public void genericCommand(@Validator Player player, RegionSelectionType regionSelectionType) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
AtomicLong count = new AtomicLong(0); AtomicLong count = new AtomicLong(0);
if (regionSelectionType == RegionSelectionType.GLOBAL || GlobalRegion.getInstance() == region) { if (regionSelectionType == RegionSelectionType.GLOBAL || GlobalRegion.getInstance() == region) {

Datei anzeigen

@ -24,6 +24,7 @@ import com.comphenix.tinyprotocol.TinyProtocol;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.features.tpslimit.TPSUtils;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.bausystem.utils.NMSWrapper; import de.steamwar.bausystem.utils.NMSWrapper;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.core.ProtocolWrapper; import de.steamwar.core.ProtocolWrapper;
@ -97,7 +98,7 @@ public class NoClipCommand extends SWCommand implements Listener {
} }
@Register(help = true) @Register(help = true)
public void genericCommand(Player player, String... args) { public void genericCommand(@Validator Player player) {
if (NOCLIPS.contains(player)) { if (NOCLIPS.contains(player)) {
NOCLIPS.remove(player); NOCLIPS.remove(player);
player.setGameMode(GameMode.CREATIVE); player.setGameMode(GameMode.CREATIVE);
@ -116,6 +117,16 @@ public class NoClipCommand extends SWCommand implements Listener {
} }
} }
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
event.getNewSpectator().forEach(player -> {
if (NOCLIPS.contains(player)) {
NOCLIPS.remove(player);
player.setGameMode(GameMode.CREATIVE);
}
});
}
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) { public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) {
if (NOCLIPS.contains(event.getPlayer())) { if (NOCLIPS.contains(event.getPlayer())) {

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.util; package de.steamwar.bausystem.features.util;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.entity.REntityServer; import de.steamwar.entity.REntityServer;
import de.steamwar.entity.RFallingBlockEntity; import de.steamwar.entity.RFallingBlockEntity;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
@ -49,6 +50,7 @@ public class PistonCalculator implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return;
if (!event.hasItem() || event.getItem().getType() != Material.SLIME_BALL) return; if (!event.hasItem() || event.getItem().getType() != Material.SLIME_BALL) return;
if (event.getClickedBlock() == null) return; if (event.getClickedBlock() == null) return;

Datei anzeigen

@ -32,7 +32,7 @@ public class PistonCalculatorCommand extends SWCommand {
} }
@Register @Register
public void help(Player player) { public void help(@Validator Player player) {
BauSystem.MESSAGE.send("PISTON_HELP_1", player); BauSystem.MESSAGE.send("PISTON_HELP_1", player);
BauSystem.MESSAGE.send("PISTON_HELP_2", player); BauSystem.MESSAGE.send("PISTON_HELP_2", player);
BauSystem.MESSAGE.send("PISTON_HELP_3", player); BauSystem.MESSAGE.send("PISTON_HELP_3", player);

Datei anzeigen

@ -45,13 +45,6 @@ public class SelectCommand extends SWCommand {
baurahmenCommand(p, RegionType.TESTBLOCK, regionExtensionType); baurahmenCommand(p, RegionType.TESTBLOCK, regionExtensionType);
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLDEDIT), "SELECT_NO_PERMS");
};
}
private void setSelection(RegionType regionType, RegionExtensionType regionExtensionType, Region region, Player p) { private void setSelection(RegionType regionType, RegionExtensionType regionExtensionType, Region region, Player p) {
Point minPoint = region.getMinPoint(regionType, regionExtensionType); Point minPoint = region.getMinPoint(regionType, regionExtensionType);
Point maxPoint = region.getMaxPoint(regionType, regionExtensionType); Point maxPoint = region.getMaxPoint(regionType, regionExtensionType);

Datei anzeigen

@ -43,7 +43,7 @@ public class SkullCommand extends SWCommand {
} }
@Register(description = "SKULL_HELP") @Register(description = "SKULL_HELP")
public void giveCommand(Player p, @Mapper("player") @ErrorMessage("SKULL_INVALID") String skull) { public void giveCommand(@Validator Player p, @Mapper("player") @ErrorMessage("SKULL_INVALID") String skull) {
ItemStack is = SWItem.getPlayerSkull(skull).getItemStack(); ItemStack is = SWItem.getPlayerSkull(skull).getItemStack();
SkullMeta sm = (SkullMeta) is.getItemMeta(); SkullMeta sm = (SkullMeta) is.getItemMeta();
assert sm != null; assert sm != null;

Datei anzeigen

@ -41,7 +41,7 @@ public class SlotCommand extends SWCommand {
} }
@Register @Register
public void slotCommand(Player player, Integer slot) { public void slotCommand(@Validator Player player, Integer slot) {
if (slot < 1 || slot > 9) { if (slot < 1 || slot > 9) {
BauSystem.MESSAGE.send("OTHER_SLOT_INVALID_SLOT", player); BauSystem.MESSAGE.send("OTHER_SLOT_INVALID_SLOT", player);
return; return;
@ -50,7 +50,7 @@ public class SlotCommand extends SWCommand {
} }
@Register(value = "pick", description = "OTHER_NOCLIP_SLOT_HELP_PICK") @Register(value = "pick", description = "OTHER_NOCLIP_SLOT_HELP_PICK")
public void eyedropBlock(Player player) { public void eyedropBlock(@Validator Player player) {
Block block = player.getTargetBlockExact(6); Block block = player.getTargetBlockExact(6);
ItemStack itemStack; ItemStack itemStack;
if (block == null) { if (block == null) {
@ -61,7 +61,7 @@ public class SlotCommand extends SWCommand {
} }
@Register(value = "drop", description = "OTHER_NOCLIP_SLOT_HELP_DROP") @Register(value = "drop", description = "OTHER_NOCLIP_SLOT_HELP_DROP")
public void dropBlock(Player player) { public void dropBlock(@Validator Player player) {
player.getInventory().setItemInMainHand(new ItemStack(Material.AIR)); player.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
} }

Datei anzeigen

@ -34,7 +34,7 @@ public class StructureVoidCommand extends SWCommand {
} }
@Register(description = "STRUCTURE_VOID_COMMAND_HELP") @Register(description = "STRUCTURE_VOID_COMMAND_HELP")
public void genericCommand(Player p) { public void genericCommand(@Validator Player p) {
SWUtils.giveItemToPlayer(p, new ItemStack(Material.STRUCTURE_VOID, 1)); SWUtils.giveItemToPlayer(p, new ItemStack(Material.STRUCTURE_VOID, 1));
} }
} }

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.util; package de.steamwar.bausystem.features.util;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@ -34,9 +35,9 @@ public class TNTClickListener implements Listener {
@EventHandler @EventHandler
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
if (event.getHand() != EquipmentSlot.HAND) { if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
return; if (event.getHand() != EquipmentSlot.HAND) return;
}
Entity entity = event.getRightClicked(); Entity entity = event.getRightClicked();
if (event.getRightClicked() instanceof TNTPrimed) { if (event.getRightClicked() instanceof TNTPrimed) {
TNTPrimed tntPrimed = (TNTPrimed) entity; TNTPrimed tntPrimed = (TNTPrimed) entity;

Datei anzeigen

@ -66,13 +66,6 @@ public class TimeCommand extends SWCommand {
}, s -> tabCompletions); }, s -> tabCompletions);
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), "OTHER_TIME_NO_PERM");
};
}
public enum Time { public enum Time {
NIGHT(18000), NIGHT(18000),
DAY(6000), DAY(6000),

Datei anzeigen

@ -50,6 +50,6 @@ public class DebugstickBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.MEMBER; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -62,6 +62,6 @@ public class KillAllBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.MEMBER; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -39,7 +39,7 @@ public class NavWandBauGuiItem extends BauGuiItem {
} }
@Override public Permission permission() { @Override public Permission permission() {
return Permission.WORLDEDIT; return Permission.MEMBER;
} }
@Override public ItemStack getItem(Player player) { @Override public ItemStack getItem(Player player) {

Datei anzeigen

@ -18,7 +18,7 @@ public class SchemBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLDEDIT; return Permission.BUILD;
} }
@Override @Override

Datei anzeigen

@ -88,7 +88,7 @@ public class SelectBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLDEDIT; return Permission.BUILD;
} }
@AllArgsConstructor @AllArgsConstructor

Datei anzeigen

@ -54,6 +54,6 @@ public class SkullBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.MEMBER; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -40,7 +40,7 @@ public class WorldEditBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLDEDIT; return Permission.BUILD;
} }
@Override @Override

Datei anzeigen

@ -122,13 +122,6 @@ public class WarpCommand extends SWCommand implements Disable, Enable {
BauSystem.MESSAGE.sendPrefixless("WARP_GUI_DISTANCE", player, warp.getLocation().distance(player.getLocation())); BauSystem.MESSAGE.sendPrefixless("WARP_GUI_DISTANCE", player, warp.getLocation().distance(player.getLocation()));
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!Permission.hasPermission(player, Permission.WORLD), "WARP_DISALLOWED");
};
}
@Linked @Linked
public static class WarpsLink extends SWCommand { public static class WarpsLink extends SWCommand {

Datei anzeigen

@ -55,7 +55,7 @@ public class WarpGui {
), warp))); ), warp)));
SWListInv<Warp> inv = new SWListInv<>(player, BauSystem.MESSAGE.parse("WARP_GUI_NAME", player), false, entries, (clickType, warp) -> { SWListInv<Warp> inv = new SWListInv<>(player, BauSystem.MESSAGE.parse("WARP_GUI_NAME", player), false, entries, (clickType, warp) -> {
if (clickType.isRightClick() && Permission.hasPermission(player, Permission.WORLD)) { if (clickType.isRightClick() && Permission.BUILD.hasPermission(player)) {
openWarpGui(player, warp); openWarpGui(player, warp);
} else { } else {
warp.teleport(player); warp.teleport(player);

Datei anzeigen

@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.world;
import com.moulberry.axiom.event.AxiomHandshakeEvent; import com.moulberry.axiom.event.AxiomHandshakeEvent;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.BauServer;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.PluginCheck; import de.steamwar.linkage.PluginCheck;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -32,7 +33,7 @@ public class AxiomPermissionCheck implements Listener {
@EventHandler @EventHandler
public void onAxiomHandshake(AxiomHandshakeEvent event) { public void onAxiomHandshake(AxiomHandshakeEvent event) {
if (Permission.WORLDEDIT.hasPermission(event.getPlayer())) { if (Permission.SUPERVISOR.hasPermission(event.getPlayer()) || BauServer.getInstance().getOwner().equals(event.getPlayer().getUniqueId())) {
event.setMaxBufferSize(Short.MAX_VALUE); event.setMaxBufferSize(Short.MAX_VALUE);
return; return;
} }

Datei anzeigen

@ -0,0 +1,148 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.features.world;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.region.GlobalRegion;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar;
import de.steamwar.bausystem.utils.bossbar.BossBarService;
import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import de.steamwar.network.packets.PacketHandler;
import de.steamwar.network.packets.server.BaumemberUpdatePacket;
import org.bukkit.Bukkit;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import java.util.HashSet;
import java.util.Set;
@Linked
public class BauMemberUpdate extends PacketHandler implements Listener {
private static final Set<Player> SPECTATORS = new HashSet<>();
@Handler
public void baumemberUpdate(BaumemberUpdatePacket baumemberUpdatePacket) {
baumemberUpdate();
}
public static void baumemberUpdate() {
Set<Player> newSpectator = new HashSet<>();
Set<Player> newBuilder = new HashSet<>();
Bukkit.getOnlinePlayers().forEach(player -> {
if (Permission.REAL_SPECTATOR.hasPermission(player)) {
if (!SPECTATORS.contains(player)) {
SPECTATORS.add(player);
Permission.removeForceOnlySpectator(player);
newSpectator.add(player);
player.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, -1, 1, false,false, false));
showSpectatorNotice(player);
}
} else {
if (Permission.SUPERVISOR.hasPermission(player)) {
Permission.removeForceOnlySpectator(player);
}
if (SPECTATORS.contains(player)) {
SPECTATORS.remove(player);
newBuilder.add(player);
player.removePotionEffect(PotionEffectType.GLOWING);
BossBarService.instance.remove(player, GlobalRegion.getInstance(), "spectator");
}
}
});
Bukkit.getPluginManager().callEvent(new BauMemberUpdateEvent(newSpectator, newBuilder));
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) {
SPECTATORS.add(event.getPlayer());
event.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, -1, 1, false,false, false));
showSpectatorNotice(event.getPlayer());
} else {
event.getPlayer().removePotionEffect(PotionEffectType.GLOWING);
}
}
private static void showSpectatorNotice(Player player) {
BauSystemBossbar bossbar = BossBarService.instance.get(player, GlobalRegion.getInstance(), "spectator");
bossbar.setTitle(BauSystem.MESSAGE.parse("SPECTATOR", player));
bossbar.setColor(BarColor.WHITE);
bossbar.setStyle(BarStyle.SOLID);
bossbar.setProgress(1.0);
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
SPECTATORS.remove(event.getPlayer());
}
@EventHandler
public void onPlayerDeath(PlayerDeathEvent event) {
event.setDeathMessage(null);
if (SPECTATORS.contains(event.getEntity())) {
event.getDrops().clear();
}
}
@EventHandler
public void onPlayerRespawn(PlayerRespawnEvent event) {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
if (SPECTATORS.contains(event.getPlayer())) {
event.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, -1, 1, false, false, false));
}
}, 1);
}
@EventHandler
public void onPlayerItemConsume(PlayerItemConsumeEvent event) {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
if (SPECTATORS.contains(event.getPlayer())) {
event.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, -1, 1, false,false, false));
}
}, 1);
}
@Linked
public static class TestCommand extends SWCommand { // TODO: Remove before merge
public TestCommand() {
super("test");
}
@Register
public void test(Player player) {
PacketHandler.handlePacket(new BaumemberUpdatePacket());
}
}
}

Datei anzeigen

@ -19,6 +19,7 @@
package de.steamwar.bausystem.features.world; package de.steamwar.bausystem.features.world;
import de.steamwar.bausystem.Permission;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.sql.SchematicData; import de.steamwar.sql.SchematicData;
import de.steamwar.sql.SchematicNode; import de.steamwar.sql.SchematicNode;
@ -35,6 +36,8 @@ public class ClipboardListener implements Listener {
@EventHandler @EventHandler
public void onLogin(PlayerJoinEvent e) { public void onLogin(PlayerJoinEvent e) {
if(!Permission.BUILD.hasPermission(e.getPlayer())) return;
try { try {
SchematicNode schematic = SchematicNode.getSchematicNode(SteamwarUser.get(e.getPlayer().getUniqueId()).getId(), CLIPBOARD_SCHEMNAME, (Integer) null); SchematicNode schematic = SchematicNode.getSchematicNode(SteamwarUser.get(e.getPlayer().getUniqueId()).getId(), CLIPBOARD_SCHEMNAME, (Integer) null);
if (schematic != null) { if (schematic != null) {
@ -47,6 +50,8 @@ public class ClipboardListener implements Listener {
@EventHandler @EventHandler
public void onLogout(PlayerQuitEvent e) { public void onLogout(PlayerQuitEvent e) {
if(!Permission.SUPERVISOR.hasPermission(e.getPlayer())) return;
SchematicNode schematic = SchematicNode.getSchematicNode(SteamwarUser.get(e.getPlayer().getUniqueId()).getId(), CLIPBOARD_SCHEMNAME, (Integer) null); SchematicNode schematic = SchematicNode.getSchematicNode(SteamwarUser.get(e.getPlayer().getUniqueId()).getId(), CLIPBOARD_SCHEMNAME, (Integer) null);
boolean newSchem = false; boolean newSchem = false;
if (schematic == null) { if (schematic == null) {

Datei anzeigen

@ -19,6 +19,7 @@
package de.steamwar.bausystem.features.world; package de.steamwar.bausystem.features.world;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.SWUtils;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Material; import org.bukkit.Material;
@ -40,6 +41,9 @@ public class ItemFrameListener implements Listener {
if (!(event.getEntity() instanceof ItemFrame)) { if (!(event.getEntity() instanceof ItemFrame)) {
return; return;
} }
if(!Permission.BUILD.hasPermission((Player) event.getDamager())) return;
event.setCancelled(true); event.setCancelled(true);
ItemFrame itemFrame = (ItemFrame) event.getEntity(); ItemFrame itemFrame = (ItemFrame) event.getEntity();
ItemStack itemStack = itemFrame.getItem(); ItemStack itemStack = itemFrame.getItem();

Datei anzeigen

@ -19,6 +19,7 @@
package de.steamwar.bausystem.features.world; package de.steamwar.bausystem.features.world;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeValidator; import de.steamwar.command.TypeValidator;
@ -38,16 +39,11 @@ public class KickallCommand extends SWCommand {
} }
@Register(description = "KICKALL_HELP") @Register(description = "KICKALL_HELP")
public void genericCommand(@Validator Player player) { public void genericCommand(Player player) {
if(!Permission.OWNER.hasPermission(player)) return;
Bukkit.getOnlinePlayers().forEach(p -> { Bukkit.getOnlinePlayers().forEach(p -> {
if (!bauServer.getOwner().equals(p.getUniqueId())) p.kickPlayer(""); if (!bauServer.getOwner().equals(p.getUniqueId())) p.kickPlayer("");
}); });
} }
@ClassValidator(value = Player.class, local = true)
public TypeValidator<Player> validator() {
return (commandSender, player, messageSender) -> {
return !messageSender.send(!bauServer.getOwner().equals(player.getUniqueId()), "KICKALL_NO_PERM");
};
}
} }

Datei anzeigen

@ -22,6 +22,7 @@ package de.steamwar.bausystem.features.world;
import com.comphenix.tinyprotocol.Reflection; import com.comphenix.tinyprotocol.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.utils.PlaceItemUtils; import de.steamwar.bausystem.utils.PlaceItemUtils;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.MinVersion; import de.steamwar.linkage.MinVersion;
@ -81,6 +82,7 @@ public class SignEditFrom20 implements Listener {
} }
private void edit(Player player, Block block) { private void edit(Player player, Block block) {
if (!Permission.BUILD.hasPermission(player)) return;
Sign sign = (Sign) block.getState(); Sign sign = (Sign) block.getState();
Side side = signSide(player, block); Side side = signSide(player, block);
SignSide signSide = sign.getSide(side); SignSide signSide = sign.getSide(side);

Datei anzeigen

@ -22,6 +22,7 @@ package de.steamwar.bausystem.features.world;
import com.comphenix.tinyprotocol.Reflection; import com.comphenix.tinyprotocol.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.MaxVersion; import de.steamwar.linkage.MaxVersion;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -68,6 +69,7 @@ public class SignEditUntil19 implements Listener {
} }
private void edit(Player player, Block block) { private void edit(Player player, Block block) {
if (!Permission.BUILD.hasPermission(player)) return;
Sign sign = (org.bukkit.block.Sign) block.getState(); Sign sign = (org.bukkit.block.Sign) block.getState();
String[] lines = sign.getLines(); String[] lines = sign.getLines();
for (int i = 0; i < lines.length; i++) { for (int i = 0; i < lines.length; i++) {

Datei anzeigen

@ -0,0 +1,258 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.features.world;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.core.CraftbukkitWrapper;
import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked;
import de.steamwar.sql.BauweltMember;
import de.steamwar.techhider.TechHider;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockCanBuildEvent;
import org.bukkit.event.block.BlockMultiPlaceEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.player.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
@Linked
public class SpectatorListener implements Listener {
private static final Set<Player> NO_TECHHIDER = new HashSet<>();
static {
Set<Material> materials = new HashSet<>();
materials.add(Material.REDSTONE_WIRE);
materials.add(Material.REDSTONE_TORCH);
materials.add(Material.REDSTONE_BLOCK);
materials.add(Material.REPEATER);
materials.add(Material.COMPARATOR);
materials.add(Material.LEVER);
for (Material value : Material.values()) {
if (value.name().endsWith("_BUTTON")) {
materials.add(value);
}
if (value.name().endsWith("_PRESSURE_PLATE")) {
materials.add(value);
}
if (value.name().endsWith("_SIGN")) {
materials.add(value);
}
}
materials.add(SWItem.getMaterial("SCULK_SENSOR"));
materials.add(SWItem.getMaterial("CALIBRATED_SCULK_SENSOR"));
materials.add(SWItem.getMaterial("SCULK_SHRIEKER"));
materials.add(SWItem.getMaterial("AMETHYST_BLOCK"));
materials.add(SWItem.getMaterial("AMETHYST_CLUSTER"));
materials.add(SWItem.getMaterial("SMALL_AMETHYST_BUG"));
materials.add(SWItem.getMaterial("MEDIUM_AMETHYST_BUG"));
materials.add(SWItem.getMaterial("LARGE_AMETHYST_BUG"));
materials.add(Material.TRIPWIRE_HOOK);
materials.add(Material.TRIPWIRE);
materials.add(Material.DAYLIGHT_DETECTOR);
materials.add(SWItem.getMaterial("LIGHTNING_ROD"));
materials.add(Material.PISTON);
materials.add(Material.PISTON_HEAD);
materials.add(Material.MOVING_PISTON);
materials.add(Material.STICKY_PISTON);
materials.add(Material.SLIME_BLOCK);
materials.add(Material.HONEY_BLOCK);
materials.add(Material.OBSERVER);
materials.add(Material.RAIL);
materials.add(Material.POWERED_RAIL);
materials.add(Material.DETECTOR_RAIL);
materials.add(Material.ACTIVATOR_RAIL);
materials.add(Material.TNT);
materials.add(Material.REDSTONE_ORE);
materials.add(SWItem.getMaterial("SCAFFOLDING"));
materials.add(Material.WATER);
materials.remove(Material.BARRIER);
materials.remove(Material.STONE);
TechHider techHider = new TechHider((player, i, i1) -> {
return Permission.BUILD.hasPermission(player) || Permission.isTempOnlySpectator(player) || NO_TECHHIDER.contains(player);
}, Material.END_STONE, materials, new HashSet<>());
techHider.enable();
}
public static void toggleNoTechHider(Player player) {
if (NO_TECHHIDER.contains(player)) {
NO_TECHHIDER.remove(player);
} else {
NO_TECHHIDER.add(player);
}
resendChunks(player);
}
private static void resendChunks(Player player) {
int distance = player.getClientViewDistance();
Location location = player.getLocation();
for (int x = (int) Math.floor(location.getX() / 16.0) - distance; x <= (int) Math.ceil(location.getX() / 16.0) + distance; x++) {
for (int z = (int) Math.floor(location.getZ() / 16.0) - distance; z <= (int) Math.ceil(location.getZ() / 16.0) + distance; z++) {
CraftbukkitWrapper.impl.sendChunk(player, x, z);
}
}
}
private boolean anySupervisorOnline(Player player) {
return Bukkit.getOnlinePlayers().stream().filter(p -> p != player).anyMatch(Permission.SUPERVISOR::hasPermission);
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
if (event.getPlayer().getUniqueId().equals(BauServer.getInstance().getOwner())) {
return;
}
BauweltMember bauweltMember = BauweltMember.getBauMember(BauServer.getInstance().getOwner(), event.getPlayer().getUniqueId());
if (bauweltMember == null) {
event.getPlayer().kickPlayer("");
return;
}
if (Permission.SUPERVISOR.hasPermission(event.getPlayer())) {
return;
}
if (!anySupervisorOnline(null)) {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
event.getPlayer().kickPlayer("");
}, 1);
}
}
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
if (!anySupervisorOnline(null)) {
Bukkit.getOnlinePlayers().forEach(player -> {
player.kickPlayer("");
});
return;
}
event.getChanged().forEach(player -> {
NO_TECHHIDER.remove(player);
if (Permission.isTempOnlySpectator(player)) return;
resendChunks(player);
});
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
NO_TECHHIDER.remove(event.getPlayer());
if (!anySupervisorOnline(event.getPlayer())) {
Bukkit.getOnlinePlayers().forEach(player -> {
player.kickPlayer("");
});
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
if (event.getMessage().startsWith("/schem save") || event.getMessage().startsWith("//schem save") || event.getMessage().startsWith("/schematic save") || event.getMessage().startsWith("//schematic save")) {
if (!Permission.SUPERVISOR.hasPermission(event.getPlayer())) {
event.setCancelled(true);
event.setMessage("/");
}
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockMultiPlace(BlockMultiPlaceEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockCanBuild(BlockCanBuildEvent event) {
if (event.getPlayer() == null) return;
if (!Permission.BUILD.hasPermission(event.getPlayer())) {
event.setBuildable(false);
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerInteract(PlayerInteractEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerBucketEntity(PlayerBucketEntityEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerDropItem(PlayerDropItemEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onEntityPickupItem(EntityPickupItemEvent event) {
if (!(event.getEntity() instanceof Player)) return;
if (!Permission.BUILD.hasPermission((Player) event.getEntity())) {
event.setCancelled(true);
}
}
}

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden Mehr anzeigen