From 60a705ecf32b53c5595032668cba1556c2bf34c3 Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Fri, 6 Nov 2015 02:10:56 +0100 Subject: [PATCH] MassiveCore - More type. More editor. --- README.md | 4 +- plugin.yml | 4 +- .../massivecraft/massivecore/MassiveCore.java | 10 +- .../MassiveCoreEngineCommandRegistration.java | 4 +- .../MassiveCoreEngineDestination.java | 6 +- .../massivecore/MassivePlugin.java | 2 +- .../massivecraft/massivecore/Multiverse.java | 2 +- src/com/massivecraft/massivecore/Named.java | 6 + .../massivecraft/massivecore/SoundEffect.java | 26 -- .../massivecore/cmd/req/ReqAnd.java | 65 ---- .../massivecore/cmd/type/Type.java | 34 -- .../massivecore/cmd/type/TypeAll.java | 117 ------ .../massivecore/cmd/type/TypeBiome.java | 94 ----- .../massivecore/cmd/type/TypeBoolean.java | 79 ---- .../massivecore/cmd/type/TypeChatColor.java | 90 ----- .../massivecore/cmd/type/TypeColl.java | 46 --- .../massivecore/cmd/type/TypeCollection.java | 38 -- .../massivecore/cmd/type/TypeCombined.java | 83 ---- .../massivecore/cmd/type/TypeDifficulty.java | 75 ---- .../massivecore/cmd/type/TypeEntityType.java | 82 ---- .../massivecore/cmd/type/TypeEnum.java | 124 ------ .../massivecore/cmd/type/TypeEnvironment.java | 99 ----- .../massivecore/cmd/type/TypeGameMode.java | 83 ---- .../massivecore/cmd/type/TypeList.java | 61 --- .../massivecore/cmd/type/TypeMaterial.java | 59 --- .../massivecore/cmd/type/TypePermission.java | 56 --- .../cmd/type/TypePotionEffectType.java | 91 ----- .../massivecore/cmd/type/TypeSet.java | 86 ----- .../massivecore/cmd/type/TypeSound.java | 89 ----- .../massivecore/cmd/type/TypeSoundEffect.java | 49 --- .../massivecore/cmd/type/TypeUniverse.java | 73 ---- .../massivecore/cmd/type/TypeWorld.java | 45 --- .../massivecore/cmd/type/TypeWorldId.java | 79 ---- .../massivecore/cmd/type/TypeWorldType.java | 91 ----- .../massivecore/cmd/type/TypeWrapper.java | 43 --- .../{cmd => command}/DeprecatedCommand.java | 6 +- .../{cmd => command}/HelpCommand.java | 2 +- .../{cmd => command}/MassiveCommand.java | 28 +- .../MassiveCoreBukkitCommand.java | 2 +- .../{cmd => command}/Parameter.java | 6 +- .../{cmd => command}/VersionCommand.java | 8 +- .../{cmd => command}/Visibility.java | 2 +- .../command/editor/CommandEditAbstract.java | 252 +++++++++++++ .../command/editor/CommandEditCollection.java | 30 ++ .../editor/CommandEditCollectionAbstract.java | 85 +++++ .../editor/CommandEditCollectionAdd.java | 40 ++ .../editor/CommandEditCollectionClear.java | 34 ++ .../editor/CommandEditCollectionInsert.java | 43 +++ .../editor/CommandEditCollectionMove.java | 44 +++ .../editor/CommandEditCollectionRemove.java | 41 ++ .../editor/CommandEditCollectionSet.java | 43 +++ .../editor/CommandEditCollectionSwap.java | 46 +++ .../command/editor/CommandEditCreate.java | 39 ++ .../command/editor/CommandEditDelete.java | 38 ++ .../command/editor/CommandEditItemStacks.java | 25 ++ .../editor/CommandEditItemStacksAbstract.java | 31 ++ .../editor/CommandEditItemStacksOpen.java | 161 ++++++++ .../command/editor/CommandEditShow.java | 36 ++ .../command/editor/CommandEditSimple.java | 46 +++ .../command/editor/CommandEditUsed.java | 23 ++ .../command/editor/EditSettings.java | 105 ++++++ .../massivecore/command/editor/Property.java | 184 +++++++++ .../command/editor/PropertyThis.java | 32 ++ .../command/editor/PropertyUsed.java | 18 + .../massivecore/CmdMassiveCore.java | 10 +- .../massivecore/CmdMassiveCoreBuffer.java | 8 +- .../massivecore/CmdMassiveCoreBufferAdd.java | 10 +- .../CmdMassiveCoreBufferClear.java | 8 +- .../CmdMassiveCoreBufferPrint.java | 8 +- .../massivecore/CmdMassiveCoreBufferSet.java | 10 +- .../CmdMassiveCoreBufferWhitespace.java | 10 +- .../massivecore/CmdMassiveCoreCmdurl.java | 14 +- .../massivecore/CmdMassiveCoreHearsound.java | 16 +- .../massivecore/CmdMassiveCoreId.java | 8 +- .../massivecore/CmdMassiveCoreStore.java | 8 +- .../CmdMassiveCoreStoreCopydb.java | 10 +- .../CmdMassiveCoreStoreListcolls.java | 10 +- .../massivecore/CmdMassiveCoreStoreStats.java | 10 +- .../massivecore/CmdMassiveCoreTest.java | 4 +- .../massivecore/CmdMassiveCoreUsys.java | 8 +- .../massivecore/CmdMassiveCoreUsysAspect.java | 8 +- .../CmdMassiveCoreUsysAspectList.java | 10 +- .../CmdMassiveCoreUsysAspectShow.java | 10 +- .../CmdMassiveCoreUsysAspectUse.java | 12 +- .../CmdMassiveCoreUsysMultiverse.java | 8 +- .../CmdMassiveCoreUsysMultiverseDel.java | 10 +- .../CmdMassiveCoreUsysMultiverseList.java | 10 +- .../CmdMassiveCoreUsysMultiverseNew.java | 10 +- .../CmdMassiveCoreUsysMultiverseShow.java | 10 +- .../CmdMassiveCoreUsysUniverse.java | 8 +- .../CmdMassiveCoreUsysUniverseClear.java | 12 +- .../CmdMassiveCoreUsysUniverseDel.java | 12 +- .../CmdMassiveCoreUsysUniverseNew.java | 12 +- .../massivecore/CmdMassiveCoreUsysWorld.java | 12 +- .../requirement/Requirement.java} | 6 +- .../requirement/RequirementAbstract.java} | 6 +- .../command/requirement/RequirementAnd.java | 65 ++++ .../RequirementEditorPropertyCreated.java | 70 ++++ .../requirement/RequirementEditorUse.java | 43 +++ .../requirement/RequirementHasPerm.java} | 10 +- .../requirement/RequirementIsPlayer.java} | 10 +- .../RequirementIsntCertainSender.java} | 10 +- .../requirement/RequirementIsntPlayer.java} | 10 +- .../RequirementTitlesAvailable.java} | 10 +- .../massivecore/command/type/Type.java | 116 ++++++ .../{cmd => command}/type/TypeAbstract.java | 267 ++++++++++--- .../command/type/TypeAbstractChoice.java | 354 ++++++++++++++++++ .../type/TypeAbstractException.java | 2 +- .../type/TypeAbstractSelect.java | 18 +- .../type/TypeAbstractSimple.java} | 4 +- .../{cmd => command}/type/TypeDate.java | 12 +- .../type/TypeDestination.java | 8 +- .../command/type/TypeItemStack.java | 59 +++ .../{cmd => command}/type/TypeMillisDiff.java | 15 +- .../{cmd => command}/type/TypeNullable.java | 43 +-- .../{cmd => command}/type/TypePS.java | 13 +- .../command/type/TypePermission.java | 32 ++ .../command/type/TypePotionEffectType.java | 39 ++ .../type/TypeStringCommand.java | 8 +- .../command/type/TypeTransformer.java | 332 ++++++++++++++++ .../command/type/TypeUniverse.java | 43 +++ .../massivecore/command/type/TypeWorld.java | 54 +++ .../massivecore/command/type/TypeWorldId.java | 58 +++ .../massivecore/command/type/TypeWrapper.java | 69 ++++ .../type/collection/AllAble.java} | 4 +- .../type/collection/TypeCollection.java | 179 +++++++++ .../type/collection/TypeItemStacks.java | 50 +++ .../command/type/collection/TypeList.java | 40 ++ .../command/type/collection/TypeSet.java | 40 ++ .../command/type/combined/TypeCombined.java | 194 ++++++++++ .../type/combined}/TypePotionEffectWrap.java | 62 +-- .../type/combined/TypeSoundEffect.java | 72 ++++ .../command/type/enumeration/TypeBiome.java | 18 + .../type/enumeration/TypeChatColor.java | 29 ++ .../type/enumeration/TypeDifficulty.java | 18 + .../type/enumeration/TypeDyeColor.java | 33 ++ .../type/enumeration/TypeEntityType.java | 40 ++ .../command/type/enumeration/TypeEnum.java | 71 ++++ .../type/enumeration/TypeEnvironment.java | 49 +++ .../type/enumeration/TypeGameMode.java | 18 + .../type/enumeration/TypeHorseColor.java | 18 + .../type/enumeration/TypeHorseStyle.java | 18 + .../type/enumeration/TypeHorseVariant.java | 18 + .../type/enumeration/TypeMaterial.java | 23 ++ .../type/enumeration/TypeOcelotType.java | 18 + .../type/enumeration/TypeParticleEffect.java | 18 + .../type/enumeration/TypeRabbitType.java | 18 + .../type/enumeration/TypeSkeletonType.java | 18 + .../command/type/enumeration/TypeSound.java | 23 ++ .../enumeration/TypeVillagerProfession.java | 18 + .../type/enumeration/TypeWorldType.java | 42 +++ .../type/primitive}/TypeAbstractNumber.java | 11 +- .../command/type/primitive/TypeBoolean.java | 115 ++++++ .../type/primitive}/TypeByte.java | 2 +- .../type/primitive}/TypeDouble.java | 2 +- .../type/primitive}/TypeFloat.java | 2 +- .../type/primitive}/TypeInteger.java | 2 +- .../type/primitive}/TypeLong.java | 2 +- .../type/primitive}/TypeString.java | 4 +- .../command/type/primitive/TypeStringId.java | 28 ++ .../type/sender}/TypePlayer.java | 2 +- .../type/sender}/TypeSender.java | 2 +- .../type/sender}/TypeSenderEntity.java | 6 +- .../type/sender}/TypeSenderId.java | 2 +- .../type/sender}/TypeSenderIdAbstract.java | 24 +- .../type/store}/TypeAspect.java | 28 +- .../command/type/store/TypeColl.java | 27 ++ .../command/type/store/TypeEntity.java | 43 +++ .../command/type/store/TypeEntityId.java | 37 ++ .../type/store}/TypeMultiverse.java | 28 +- .../massivecraft/massivecore/mson/Mson.java | 2 +- .../massivecore/mson/MsonEvent.java | 2 +- .../massivecraft/massivecore/pager/Pager.java | 2 +- .../massivecore/store/CollInterface.java | 3 +- .../massivecore/store/SenderColl.java | 4 +- .../massivecore/store/SenderEntity.java | 5 +- .../massivecraft/massivecore/util/Txt.java | 77 +++- 177 files changed, 4763 insertions(+), 2375 deletions(-) create mode 100644 src/com/massivecraft/massivecore/Named.java delete mode 100644 src/com/massivecraft/massivecore/cmd/req/ReqAnd.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/Type.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeAll.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeBiome.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeBoolean.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeChatColor.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeColl.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeCollection.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeCombined.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeDifficulty.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeEntityType.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeEnum.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeEnvironment.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeGameMode.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeList.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeMaterial.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypePermission.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypePotionEffectType.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeSet.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeSound.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeSoundEffect.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeUniverse.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeWorld.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeWorldId.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeWorldType.java delete mode 100644 src/com/massivecraft/massivecore/cmd/type/TypeWrapper.java rename src/com/massivecraft/massivecore/{cmd => command}/DeprecatedCommand.java (83%) rename src/com/massivecraft/massivecore/{cmd => command}/HelpCommand.java (93%) rename src/com/massivecraft/massivecore/{cmd => command}/MassiveCommand.java (94%) rename src/com/massivecraft/massivecore/{cmd => command}/MassiveCoreBukkitCommand.java (96%) rename src/com/massivecraft/massivecore/{cmd => command}/Parameter.java (97%) rename src/com/massivecraft/massivecore/{cmd => command}/VersionCommand.java (87%) rename src/com/massivecraft/massivecore/{cmd => command}/Visibility.java (87%) create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditAbstract.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditCollection.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditCollectionAbstract.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditCollectionAdd.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditCollectionClear.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditCollectionInsert.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditCollectionMove.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditCollectionRemove.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditCollectionSet.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditCollectionSwap.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditCreate.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditDelete.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditItemStacks.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditItemStacksAbstract.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditItemStacksOpen.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditShow.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditSimple.java create mode 100644 src/com/massivecraft/massivecore/command/editor/CommandEditUsed.java create mode 100644 src/com/massivecraft/massivecore/command/editor/EditSettings.java create mode 100644 src/com/massivecraft/massivecore/command/editor/Property.java create mode 100644 src/com/massivecraft/massivecore/command/editor/PropertyThis.java create mode 100644 src/com/massivecraft/massivecore/command/editor/PropertyUsed.java rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCore.java (81%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreBuffer.java (81%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreBufferAdd.java (73%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreBufferClear.java (70%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreBufferPrint.java (74%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreBufferSet.java (71%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreBufferWhitespace.java (75%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreCmdurl.java (81%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreHearsound.java (60%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreId.java (67%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreStore.java (77%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreStoreCopydb.java (88%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreStoreListcolls.java (84%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreStoreStats.java (88%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreTest.java (90%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsys.java (79%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysAspect.java (77%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysAspectList.java (80%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysAspectShow.java (74%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysAspectUse.java (72%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysMultiverse.java (80%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysMultiverseDel.java (75%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysMultiverseList.java (80%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysMultiverseNew.java (73%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysMultiverseShow.java (84%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysUniverse.java (77%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysUniverseClear.java (77%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysUniverseDel.java (77%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysUniverseNew.java (74%) rename src/com/massivecraft/massivecore/{cmd => command}/massivecore/CmdMassiveCoreUsysWorld.java (80%) rename src/com/massivecraft/massivecore/{cmd/req/Req.java => command/requirement/Requirement.java} (66%) rename src/com/massivecraft/massivecore/{cmd/req/ReqAbstract.java => command/requirement/RequirementAbstract.java} (67%) create mode 100644 src/com/massivecraft/massivecore/command/requirement/RequirementAnd.java create mode 100644 src/com/massivecraft/massivecore/command/requirement/RequirementEditorPropertyCreated.java create mode 100644 src/com/massivecraft/massivecore/command/requirement/RequirementEditorUse.java rename src/com/massivecraft/massivecore/{cmd/req/ReqHasPerm.java => command/requirement/RequirementHasPerm.java} (69%) rename src/com/massivecraft/massivecore/{cmd/req/ReqIsPlayer.java => command/requirement/RequirementIsPlayer.java} (68%) rename src/com/massivecraft/massivecore/{cmd/req/ReqIsntCertainSender.java => command/requirement/RequirementIsntCertainSender.java} (69%) rename src/com/massivecraft/massivecore/{cmd/req/ReqIsntPlayer.java => command/requirement/RequirementIsntPlayer.java} (68%) rename src/com/massivecraft/massivecore/{cmd/req/ReqTitlesAvailable.java => command/requirement/RequirementTitlesAvailable.java} (70%) create mode 100644 src/com/massivecraft/massivecore/command/type/Type.java rename src/com/massivecraft/massivecore/{cmd => command}/type/TypeAbstract.java (52%) create mode 100644 src/com/massivecraft/massivecore/command/type/TypeAbstractChoice.java rename src/com/massivecraft/massivecore/{cmd => command}/type/TypeAbstractException.java (95%) rename src/com/massivecraft/massivecore/{cmd => command}/type/TypeAbstractSelect.java (87%) rename src/com/massivecraft/massivecore/{cmd/type/TypeAbstractPrimitive.java => command/type/TypeAbstractSimple.java} (72%) rename src/com/massivecraft/massivecore/{cmd => command}/type/TypeDate.java (80%) rename src/com/massivecraft/massivecore/{cmd => command}/type/TypeDestination.java (89%) create mode 100644 src/com/massivecraft/massivecore/command/type/TypeItemStack.java rename src/com/massivecraft/massivecore/{cmd => command}/type/TypeMillisDiff.java (63%) rename src/com/massivecraft/massivecore/{cmd => command}/type/TypeNullable.java (64%) rename src/com/massivecraft/massivecore/{cmd => command}/type/TypePS.java (92%) create mode 100644 src/com/massivecraft/massivecore/command/type/TypePermission.java create mode 100644 src/com/massivecraft/massivecore/command/type/TypePotionEffectType.java rename src/com/massivecraft/massivecore/{cmd => command}/type/TypeStringCommand.java (96%) create mode 100644 src/com/massivecraft/massivecore/command/type/TypeTransformer.java create mode 100644 src/com/massivecraft/massivecore/command/type/TypeUniverse.java create mode 100644 src/com/massivecraft/massivecore/command/type/TypeWorld.java create mode 100644 src/com/massivecraft/massivecore/command/type/TypeWorldId.java create mode 100644 src/com/massivecraft/massivecore/command/type/TypeWrapper.java rename src/com/massivecraft/massivecore/{cmd/type/TypeAllAble.java => command/type/collection/AllAble.java} (57%) create mode 100644 src/com/massivecraft/massivecore/command/type/collection/TypeCollection.java create mode 100644 src/com/massivecraft/massivecore/command/type/collection/TypeItemStacks.java create mode 100644 src/com/massivecraft/massivecore/command/type/collection/TypeList.java create mode 100644 src/com/massivecraft/massivecore/command/type/collection/TypeSet.java create mode 100644 src/com/massivecraft/massivecore/command/type/combined/TypeCombined.java rename src/com/massivecraft/massivecore/{cmd/type => command/type/combined}/TypePotionEffectWrap.java (58%) create mode 100644 src/com/massivecraft/massivecore/command/type/combined/TypeSoundEffect.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeBiome.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeChatColor.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeDifficulty.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeDyeColor.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeEntityType.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeEnum.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeEnvironment.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeGameMode.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeHorseColor.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeHorseStyle.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeHorseVariant.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeMaterial.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeOcelotType.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeParticleEffect.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeRabbitType.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeSkeletonType.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeSound.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeVillagerProfession.java create mode 100644 src/com/massivecraft/massivecore/command/type/enumeration/TypeWorldType.java rename src/com/massivecraft/massivecore/{cmd/type => command/type/primitive}/TypeAbstractNumber.java (73%) create mode 100644 src/com/massivecraft/massivecore/command/type/primitive/TypeBoolean.java rename src/com/massivecraft/massivecore/{cmd/type => command/type/primitive}/TypeByte.java (87%) rename src/com/massivecraft/massivecore/{cmd/type => command/type/primitive}/TypeDouble.java (87%) rename src/com/massivecraft/massivecore/{cmd/type => command/type/primitive}/TypeFloat.java (87%) rename src/com/massivecraft/massivecore/{cmd/type => command/type/primitive}/TypeInteger.java (87%) rename src/com/massivecraft/massivecore/{cmd/type => command/type/primitive}/TypeLong.java (87%) rename src/com/massivecraft/massivecore/{cmd/type => command/type/primitive}/TypeString.java (82%) create mode 100644 src/com/massivecraft/massivecore/command/type/primitive/TypeStringId.java rename src/com/massivecraft/massivecore/{cmd/type => command/type/sender}/TypePlayer.java (91%) rename src/com/massivecraft/massivecore/{cmd/type => command/type/sender}/TypeSender.java (91%) rename src/com/massivecraft/massivecore/{cmd/type => command/type/sender}/TypeSenderEntity.java (88%) rename src/com/massivecraft/massivecore/{cmd/type => command/type/sender}/TypeSenderId.java (93%) rename src/com/massivecraft/massivecore/{cmd/type => command/type/sender}/TypeSenderIdAbstract.java (88%) rename src/com/massivecraft/massivecore/{cmd/type => command/type/store}/TypeAspect.java (56%) create mode 100644 src/com/massivecraft/massivecore/command/type/store/TypeColl.java create mode 100644 src/com/massivecraft/massivecore/command/type/store/TypeEntity.java create mode 100644 src/com/massivecraft/massivecore/command/type/store/TypeEntityId.java rename src/com/massivecraft/massivecore/{cmd/type => command/type/store}/TypeMultiverse.java (56%) diff --git a/README.md b/README.md index ead50ce2..0b1f8bd1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ - + ![MassiveCore Logotype](https://raw.github.com/MassiveCraft/MassiveCore/master/media/logo300.png)
-http://massivecraft.com/massivecore
+https://www.massivecraft.com/massivecore diff --git a/plugin.yml b/plugin.yml index 4fabbb30..006b52e9 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,9 +1,9 @@ main: com.massivecraft.massivecore.MassiveCore name: MassiveCore version: 2.8.2 -website: http://massivecraft.com/massivecore +website: https://www.massivecraft.com/massivecore authors: [Cayorion] -description: §eMassiveCore is a plugin that contains libraries and features that other plugins make use of. §aCayorion §efrom the minecraft server §aMassiveCraft §eis the lead programmer. Feel free to visit us at §bhttp://massivecraft.com +description: §eMassiveCore is a plugin that contains libraries and features that other plugins make use of. §aCayorion §efrom the minecraft server §aMassiveCraft §eis the lead programmer. Feel free to visit us at §bhttps://www.massivecraft.com load: startup permissions: # -------------------------------------------- # diff --git a/src/com/massivecraft/massivecore/MassiveCore.java b/src/com/massivecraft/massivecore/MassiveCore.java index 3c52cc00..48ee5006 100644 --- a/src/com/massivecraft/massivecore/MassiveCore.java +++ b/src/com/massivecraft/massivecore/MassiveCore.java @@ -28,11 +28,6 @@ import com.massivecraft.massivecore.adapter.MsonEventAdapter; import com.massivecraft.massivecore.adapter.PlayerInventoryAdapter; import com.massivecraft.massivecore.adapter.UUIDAdapter; import com.massivecraft.massivecore.chestgui.EngineChestGui; -import com.massivecraft.massivecore.cmd.massivecore.CmdMassiveCore; -import com.massivecraft.massivecore.cmd.massivecore.CmdMassiveCoreBuffer; -import com.massivecraft.massivecore.cmd.massivecore.CmdMassiveCoreCmdurl; -import com.massivecraft.massivecore.cmd.massivecore.CmdMassiveCoreStore; -import com.massivecraft.massivecore.cmd.massivecore.CmdMassiveCoreUsys; import com.massivecraft.massivecore.collections.BackstringEnumSet; import com.massivecraft.massivecore.collections.MassiveList; import com.massivecraft.massivecore.collections.MassiveListDef; @@ -44,6 +39,11 @@ import com.massivecraft.massivecore.collections.MassiveTreeMap; import com.massivecraft.massivecore.collections.MassiveTreeMapDef; import com.massivecraft.massivecore.collections.MassiveTreeSet; import com.massivecraft.massivecore.collections.MassiveTreeSetDef; +import com.massivecraft.massivecore.command.massivecore.CmdMassiveCore; +import com.massivecraft.massivecore.command.massivecore.CmdMassiveCoreBuffer; +import com.massivecraft.massivecore.command.massivecore.CmdMassiveCoreCmdurl; +import com.massivecraft.massivecore.command.massivecore.CmdMassiveCoreStore; +import com.massivecraft.massivecore.command.massivecore.CmdMassiveCoreUsys; import com.massivecraft.massivecore.integration.vault.IntegrationVault; import com.massivecraft.massivecore.mixin.EngineTeleportMixinCause; import com.massivecraft.massivecore.mson.Mson; diff --git a/src/com/massivecraft/massivecore/MassiveCoreEngineCommandRegistration.java b/src/com/massivecraft/massivecore/MassiveCoreEngineCommandRegistration.java index ee3a7fe5..08e570dd 100644 --- a/src/com/massivecraft/massivecore/MassiveCoreEngineCommandRegistration.java +++ b/src/com/massivecraft/massivecore/MassiveCoreEngineCommandRegistration.java @@ -12,8 +12,8 @@ import org.bukkit.command.Command; import org.bukkit.command.SimpleCommandMap; import org.bukkit.plugin.Plugin; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.MassiveCoreBukkitCommand; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.MassiveCoreBukkitCommand; import com.massivecraft.massivecore.util.ReflectionUtil; public class MassiveCoreEngineCommandRegistration extends EngineAbstract diff --git a/src/com/massivecraft/massivecore/MassiveCoreEngineDestination.java b/src/com/massivecraft/massivecore/MassiveCoreEngineDestination.java index 543c1fb0..646f9bcc 100644 --- a/src/com/massivecraft/massivecore/MassiveCoreEngineDestination.java +++ b/src/com/massivecraft/massivecore/MassiveCoreEngineDestination.java @@ -11,10 +11,10 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.plugin.Plugin; -import com.massivecraft.massivecore.cmd.type.TypePS; -import com.massivecraft.massivecore.cmd.type.TypeSenderId; -import com.massivecraft.massivecore.cmd.type.TypeWorldId; import com.massivecraft.massivecore.collections.MassiveSet; +import com.massivecraft.massivecore.command.type.TypePS; +import com.massivecraft.massivecore.command.type.TypeWorldId; +import com.massivecraft.massivecore.command.type.sender.TypeSenderId; import com.massivecraft.massivecore.event.EventMassiveCoreDestination; import com.massivecraft.massivecore.ps.PS; import com.massivecraft.massivecore.teleport.Destination; diff --git a/src/com/massivecraft/massivecore/MassivePlugin.java b/src/com/massivecraft/massivecore/MassivePlugin.java index a1c72968..3a8ab37b 100644 --- a/src/com/massivecraft/massivecore/MassivePlugin.java +++ b/src/com/massivecraft/massivecore/MassivePlugin.java @@ -10,7 +10,7 @@ import org.bukkit.command.ConsoleCommandSender; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; -import com.massivecraft.massivecore.cmd.MassiveCommand; +import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.integration.IntegrationGlue; import com.massivecraft.massivecore.integration.Integration; import com.massivecraft.massivecore.store.Coll; diff --git a/src/com/massivecraft/massivecore/Multiverse.java b/src/com/massivecraft/massivecore/Multiverse.java index 1fcd6c61..e85afe96 100644 --- a/src/com/massivecraft/massivecore/Multiverse.java +++ b/src/com/massivecraft/massivecore/Multiverse.java @@ -8,7 +8,7 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeSet; -import com.massivecraft.massivecore.cmd.type.TypeUniverse; +import com.massivecraft.massivecore.command.type.TypeUniverse; import com.massivecraft.massivecore.store.Entity; import com.massivecraft.massivecore.util.MUtil; diff --git a/src/com/massivecraft/massivecore/Named.java b/src/com/massivecraft/massivecore/Named.java new file mode 100644 index 00000000..cd635eab --- /dev/null +++ b/src/com/massivecraft/massivecore/Named.java @@ -0,0 +1,6 @@ +package com.massivecraft.massivecore; + +public interface Named +{ + public String getName(); +} diff --git a/src/com/massivecraft/massivecore/SoundEffect.java b/src/com/massivecraft/massivecore/SoundEffect.java index 833dae6c..d24716ec 100644 --- a/src/com/massivecraft/massivecore/SoundEffect.java +++ b/src/com/massivecraft/massivecore/SoundEffect.java @@ -7,9 +7,6 @@ import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.entity.Player; -import com.massivecraft.massivecore.cmd.type.TypeFloat; -import com.massivecraft.massivecore.cmd.type.TypeSound; - public final class SoundEffect implements Cloneable, Serializable { private static final transient long serialVersionUID = 1L; @@ -61,29 +58,6 @@ public final class SoundEffect implements Cloneable, Serializable return new SoundEffect(sound, volume, pitch); } - public static SoundEffect valueOf(String soundString) throws Exception - { - if (soundString == null) throw new NullPointerException("soundString was null"); - soundString = soundString.trim(); - - String[] parts = soundString.split("[^a-zA-Z0-9_.]+"); - Sound sound = TypeSound.get().read(parts[0]); - - float volume = 1.0f; - if (parts.length >= 2) - { - volume = TypeFloat.get().read(parts[1]); - } - - float pitch = 1.0f; - if (parts.length >= 3) - { - pitch = TypeFloat.get().read(parts[2]); - } - - return SoundEffect.valueOf(sound, volume, pitch); - } - // -------------------------------------------- // // RUN // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/req/ReqAnd.java b/src/com/massivecraft/massivecore/cmd/req/ReqAnd.java deleted file mode 100644 index c9ceadc6..00000000 --- a/src/com/massivecraft/massivecore/cmd/req/ReqAnd.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.massivecraft.massivecore.cmd.req; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.cmd.MassiveCommand; - -public class ReqAnd extends ReqAbstract -{ - private static final long serialVersionUID = 1L; - - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - public static ReqAnd get(Req... reqs) { return new ReqAnd(reqs); } - public ReqAnd(Req... reqs) - { - this(Arrays.asList(reqs)); - } - - public static ReqAnd get(Collection reqs) { return new ReqAnd(reqs); } - public ReqAnd(Collection reqs) - { - this.reqs = Collections.unmodifiableList(new ArrayList(reqs)); - } - - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - private final List reqs; - public List getReqs() { return this.reqs; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public boolean apply(CommandSender sender, MassiveCommand command) - { - return this.getFirstFailedSubreq(sender, command) == null; - } - - @Override - public String createErrorMessage(CommandSender sender, MassiveCommand command) - { - return this.getFirstFailedSubreq(sender, command).createErrorMessage(sender, command); - } - - public Req getFirstFailedSubreq(CommandSender sender, MassiveCommand command) - { - for (Req req : this.getReqs()) - { - if (!req.apply(sender, command)) return req; - } - return null; - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/Type.java b/src/com/massivecraft/massivecore/cmd/type/Type.java deleted file mode 100644 index 02b03c9d..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/Type.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Collection; -import java.util.List; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.MassiveException; - -public interface Type -{ - // Human friendly name - public String getTypeName(); - - // Read - public T read(String arg, CommandSender sender) throws MassiveException; - public T read(CommandSender sender) throws MassiveException; - public T read(String arg) throws MassiveException; - public T read() throws MassiveException; - - // Valid (used for arbitary argument order) - public boolean isValid(String arg, CommandSender sender); - - // Tab list - // The sender is the one that tried to tab complete. - // The arg is beginning the word they are trying to tab complete. - public Collection getTabList(CommandSender sender, String arg); - public List getTabListFiltered(CommandSender sender, String arg); - - // Sometimes we put a space after a tab completion. - // That would however not make sense with all Types. - // Default is true; - public boolean allowSpaceAfterTab(); -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeAll.java b/src/com/massivecraft/massivecore/cmd/type/TypeAll.java deleted file mode 100644 index d56fd5b2..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeAll.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Collection; -import java.util.Collections; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.MassiveException; - -public final class TypeAll -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - @SuppressWarnings("unchecked") - public static Type> get(Type inner) - { - if (inner instanceof TypeCollection) return new TypeAllCollection((TypeCollection>) inner); - if (inner instanceof TypeAllAble) return new TypeAllDefault((TypeAllAble) inner); - throw new IllegalArgumentException("innerType must be an instance of either TypeCollection or TypeAllAble"); - } - - // -------------------------------------------- // - // AR ALL DEFAULT - // -------------------------------------------- // - - private static class TypeAllDefault extends TypeWrapper> - { - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - protected TypeAllAble innerType; - @Override public TypeAllAble getInnerType() { return this.innerType; } - - // -------------------------------------------- // - // CONSTRUCT - // -------------------------------------------- // - - public TypeAllDefault(TypeAllAble inner) - { - if (inner == null) throw new IllegalArgumentException("innerType musn't be null"); - this.innerType = inner; - } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Collection read(String arg, CommandSender sender) throws MassiveException - { - if ("all".equalsIgnoreCase(arg)) return getInnerType().getAll(sender); - - T innerRet = getInnerType().read(arg, sender); - return Collections.singletonList(innerRet); - } - - @Override - public boolean isValid(String arg, CommandSender sender) - { - return "all".equalsIgnoreCase(arg) || this.getInnerType().isValid(arg, sender); - } - - } - - // -------------------------------------------- // - // AR ALL COLLECTION - // -------------------------------------------- // - - private static class TypeAllCollection extends TypeWrapper> - { - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - protected TypeCollection> innerType; - @Override public TypeCollection> getInnerType() { return this.innerType; } - - // -------------------------------------------- // - // CONSTRUCT - // -------------------------------------------- // - - public TypeAllCollection(TypeCollection> inner) - { - if (inner == null) throw new IllegalArgumentException("innerType musn't be null"); - if ( !(inner.getInnerType() instanceof TypeAllAble)) throw new IllegalArgumentException("innerType must implement ARAllAble"); - this.innerType = inner; - } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Collection read(String arg, CommandSender sender) throws MassiveException - { - if ("all".equalsIgnoreCase(arg)) - { - @SuppressWarnings("unchecked") - TypeAllAble innersInner = (TypeAllAble) getInnerType().getInnerType(); - return innersInner.getAll(sender); - } - - return getInnerType().read(arg, sender); - } - - @Override - public boolean isValid(String arg, CommandSender sender) - { - return "all".equalsIgnoreCase(arg) || this.getInnerType().isValid(arg, sender); - } - - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeBiome.java b/src/com/massivecraft/massivecore/cmd/type/TypeBiome.java deleted file mode 100644 index b5612d82..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeBiome.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.bukkit.block.Biome; -import org.bukkit.command.CommandSender; - -public class TypeBiome extends TypeAbstractSelect implements TypeAllAble -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeBiome i = new TypeBiome(); - public static TypeBiome get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Biome select(String arg, CommandSender sender) - { - arg = getComparable(arg); - - for (Biome biome : Biome.values()) - { - String biomestr = getComparable(biome); - if (biomestr.equals(arg)) return biome; - - biomestr = String.valueOf(biome.ordinal()); - if (biomestr.equals(arg)) return biome; - } - - return null; - } - - @Override - public Collection altNames(CommandSender sender) - { - List ret = new ArrayList(); - - for (Biome biome : Biome.values()) - { - ret.add(String.valueOf(biome.ordinal())); - ret.add(biome.toString()); - } - - return ret; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - List ret = new ArrayList(); - - for (Biome biome : Biome.values()) - { - ret.add(getComparable(biome.name())); - } - - return ret; - } - - - @Override - public Collection getAll(CommandSender sender) - { - return Arrays.asList(Biome.values()); - } - - // -------------------------------------------- // - // UTIL - // -------------------------------------------- // - - public static String getComparable(Biome biome) - { - if (biome == null) return null; - return getComparable(biome.name()); - } - - public static String getComparable(String string) - { - if (string == null) return null; - string = string.toLowerCase(); - string = string.replace("_", ""); - string = string.replace(" ", ""); - return string; - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeBoolean.java b/src/com/massivecraft/massivecore/cmd/type/TypeBoolean.java deleted file mode 100644 index 8d7644ec..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeBoolean.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Set; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.util.MUtil; - -public class TypeBoolean extends TypeAbstractPrimitive -{ - // -------------------------------------------- // - // CONSTANTS - // -------------------------------------------- // - - public static final Set TRUE_OPTIONS = MUtil.set( - "y", "ye", "yes", - "on", - "t", "tr", "tru", "true"); - - public static final Set FALSE_OPTIONS = MUtil.set( - "n", "no", - "of", "off", - "f", "fa", "fal", "fals", "false"); - - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeBoolean i = new TypeBoolean(); - public static TypeBoolean get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public String getTypeName() - { - return "toggle"; - } - - @Override - public Boolean valueOf(String arg, CommandSender sender) throws Exception - { - arg = arg.toLowerCase(); - - if (TRUE_OPTIONS.contains(arg)) return Boolean.TRUE; - if (FALSE_OPTIONS.contains(arg)) return Boolean.FALSE; - - throw new Exception(); - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - List ret = new ArrayList(); - - // Default yes and no. - ret.add("yes"); - ret.add("no"); - - // If it is empty we just want to show yes and no - // else we might want to show other things. - // We can safely add them because it is filtered. - if ( ! arg.isEmpty()) - { - ret.add("true"); - ret.add("false"); - ret.add("on"); - ret.add("off"); - } - - return ret; - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeChatColor.java b/src/com/massivecraft/massivecore/cmd/type/TypeChatColor.java deleted file mode 100644 index e7f5aa6e..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeChatColor.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; - -public class TypeChatColor extends TypeAbstractSelect implements TypeAllAble -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeChatColor i = new TypeChatColor(); - public static TypeChatColor get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public ChatColor select(String arg, CommandSender sender) - { - arg = getComparable(arg); - - for (ChatColor cc : ChatColor.values()) - { - String ccstr = getComparable(cc); - if (ccstr.equals(arg)) return cc; - } - - return null; - } - - @Override - public Collection altNames(CommandSender sender) - { - List ret = new ArrayList(); - - for (ChatColor cc : ChatColor.values()) - { - ret.add(cc.toString() + getComparable(cc)); - } - - return ret; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - List ret = new ArrayList(); - - for (ChatColor cc : ChatColor.values()) - { - ret.add(getComparable(cc)); - } - - return ret; - } - - @Override - public Collection getAll(CommandSender sender) - { - return Arrays.asList(ChatColor.values()); - } - - // -------------------------------------------- // - // UTIL - // -------------------------------------------- // - - public static String getComparable(ChatColor color) - { - if (color == null) return null; - return getComparable(color.name()); - } - - // "DARK_RED" --> "darkred" - // "DARK RED" --> "darkred" - public static String getComparable(String string) - { - string = string.toLowerCase(); - string = string.replace("_", ""); - string = string.replace(" ", ""); - return string; - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeColl.java b/src/com/massivecraft/massivecore/cmd/type/TypeColl.java deleted file mode 100644 index 288970a8..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeColl.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Collection; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.store.Coll; - -public class TypeColl extends TypeAbstractSelect> implements TypeAllAble> -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeColl i = new TypeColl(); - public static TypeColl get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Coll select(String arg, CommandSender sender) - { - return Coll.getMap().get(arg); - } - - @Override - public Collection altNames(CommandSender sender) - { - return Coll.getNames(); - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return this.altNames(sender); - } - - @Override - public Collection> getAll(CommandSender sender) - { - return Coll.getMap().values(); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeCollection.java b/src/com/massivecraft/massivecore/cmd/type/TypeCollection.java deleted file mode 100644 index 2510c121..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeCollection.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Collection; -import java.util.List; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.util.Txt; - -public abstract class TypeCollection> extends TypeWrapper -{ - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - // Because we accept multiple arguments of the same type. - // The passed arg might be more than one. We only want the latest. - return this.getInnerType().getTabList(sender, getLastArg(arg)); - } - - @Override - public List getTabListFiltered(CommandSender sender, String arg) - { - // Because we accept multiple arguments of the same type. - // The passed arg might be more than one. We only want the latest. - return this.getInnerType().getTabListFiltered(sender, getLastArg(arg)); - } - - public static String getLastArg(String str) - { - String[] innerArgs = Txt.REGEX_WHITESPACE.split(str, -1); - return innerArgs[innerArgs.length - 1]; - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeCombined.java b/src/com/massivecraft/massivecore/cmd/type/TypeCombined.java deleted file mode 100644 index 189b2d94..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeCombined.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.collections.MassiveList; - -public class TypeCombined extends TypeAbstract> -{ - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - protected List> inners; - public List> getInners() { return this.inners; } - - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - public static TypeCombined get(Collection> inners) { return new TypeCombined(inners); } - public static TypeCombined get(Type... inners) { return new TypeCombined(inners); } - - public TypeCombined(Collection> inners) - { - this.inners = new MassiveList>(inners); - } - public TypeCombined(Type... inners) - { - this(Arrays.asList(inners)); - } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - - //TODO: How to do this? - /*@Override - public String getTypeName() - { - - }*/ - - @Override - public List read(String arg, CommandSender sender) throws MassiveException - { - // Create Ret - List ret = new MassiveList(); - - // Fill Ret - List parts = Arrays.asList(arg.split(",")); - if (parts.size() > this.getInners().size()) - { - throw new MassiveException().addMsg("Too many parts!"); - } - - for (int i = 0; i < parts.size(); i++) - { - String part = parts.get(i); - Type type = this.getInners().get(i); - - Object asdf = type.read(part, sender); - - ret.add(asdf); - } - - // Return Ret - return ret; - } - - //TODO: How to do this? - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return null; // ??? - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeDifficulty.java b/src/com/massivecraft/massivecore/cmd/type/TypeDifficulty.java deleted file mode 100644 index 6b06c53a..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeDifficulty.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import org.bukkit.Difficulty; -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.util.MUtil; - -public class TypeDifficulty extends TypeAbstractSelect implements TypeAllAble -{ - // -------------------------------------------- // - // CONSTANTS - // -------------------------------------------- // - - public static final List ALT_NAMES = Collections.unmodifiableList(MUtil.list("peaceful", "easy", "normal", "hard")); - - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeDifficulty i = new TypeDifficulty(); - public static TypeDifficulty get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Difficulty select(String arg, CommandSender sender) - { - arg = arg.toLowerCase(); - - if (arg.startsWith("p")) - { - return Difficulty.PEACEFUL; - } - else if (arg.startsWith("e")) - { - return Difficulty.EASY; - } - else if (arg.startsWith("n")) - { - return Difficulty.NORMAL; - } - else if (arg.startsWith("h")) - { - return Difficulty.HARD; - } - - return null; - } - - @Override - public Collection altNames(CommandSender sender) - { - return ALT_NAMES; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return this.altNames(sender); - } - - @Override - public Collection getAll(CommandSender sender) - { - return Arrays.asList(Difficulty.values()); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeEntityType.java b/src/com/massivecraft/massivecore/cmd/type/TypeEntityType.java deleted file mode 100644 index 144a8ca1..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeEntityType.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.EntityType; - -public class TypeEntityType extends TypeAbstractSelect implements TypeAllAble -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeEntityType i = new TypeEntityType(); - public static TypeEntityType get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public EntityType select(String arg, CommandSender sender) - { - arg = getComparable(arg); - - // Custom Detection - if (arg.contains("pig") && ((arg.contains("man") || arg.contains("zombie")))) return EntityType.PIG_ZOMBIE; - - // Algorithmic General Detection - for (EntityType entityType : EntityType.values()) - { - String compare = getComparable(entityType); - if (compare.equals(arg)) return entityType; - } - - // Nothing found - return null; - } - - @Override - public Collection altNames(CommandSender sender) - { - List ret = new ArrayList(); - for (EntityType entityType : EntityType.values()) - { - ret.add(getComparable(entityType)); - } - return ret; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return this.altNames(sender); - } - - @Override - public Collection getAll(CommandSender sender) - { - return Arrays.asList(EntityType.values()); - } - - // -------------------------------------------- // - // UTIL - // -------------------------------------------- // - - public static String getComparable(EntityType entityType) - { - if (entityType == null) return null; - return getComparable(entityType.toString()); - } - - public static String getComparable(String string) - { - if (string == null) return null; - return string.toLowerCase().replaceAll("[_\\-\\s]+", ""); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeEnum.java b/src/com/massivecraft/massivecore/cmd/type/TypeEnum.java deleted file mode 100644 index f0dd21a0..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeEnum.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.util.Txt; - -public class TypeEnum extends TypeAbstractSelect implements TypeAllAble -{ - // -------------------------------------------- // - // FIELD - // -------------------------------------------- // - - private final Class clazz; - - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - public static TypeEnum get(Class clazz) - { - return new TypeEnum(clazz); - } - - public TypeEnum(Class clazz) - { - if ( ! clazz.isEnum()) throw new IllegalArgumentException("passed clazz param must be an enum"); - this.clazz = clazz; - } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public String getTypeName() - { - return Txt.getNicedEnumString(clazz.getSimpleName()); - } - - @Override - public T select(String arg, CommandSender sender) - { - if (arg == null) return null; - - arg = getComparable(arg); - - // Algorithmic General Detection - - T startsWith = null; - for (T value : getEnumValues(clazz)) - { - String comparable = getComparable(value); - if (comparable.equals(arg)) return value; - if (comparable.startsWith(arg)) - { - // If there already were a result - // we have multiple results and stop. - if (startsWith != null) return null; - - // Else we set the result. - startsWith = value; - } - } - - // Nothing found - return startsWith; - } - - @Override - public Collection altNames(CommandSender sender) - { - List ret = new ArrayList(); - for (T value : getEnumValues(clazz)) - { - ret.add(getComparable(value)); - } - return ret; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return this.altNames(sender); - } - - @Override - public Collection getAll(CommandSender sender) - { - return Arrays.asList(getEnumValues(clazz)); - } - - // -------------------------------------------- // - // UTIL - // -------------------------------------------- // - - public static T[] getEnumValues(Class clazz) - { - if (clazz == null) throw new IllegalArgumentException("passed clazz param is null"); - if ( ! clazz.isEnum()) throw new IllegalArgumentException("passed clazz param must be an enum"); - - T[] ret = clazz.getEnumConstants(); - if (ret == null) throw new RuntimeException("failed to retrieve enum constants"); - - return ret; - } - - public static String getComparable(Object value) - { - if (value == null) return null; - return getComparable(value.toString()); - } - - public static String getComparable(String string) - { - if (string == null) return null; - return string.toLowerCase().replaceAll("[_\\-\\s]+", ""); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeEnvironment.java b/src/com/massivecraft/massivecore/cmd/type/TypeEnvironment.java deleted file mode 100644 index ae97cf81..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeEnvironment.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import org.apache.commons.lang.StringUtils; -import org.bukkit.World.Environment; -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.util.MUtil; - -public class TypeEnvironment extends TypeAbstractSelect implements TypeAllAble -{ - // -------------------------------------------- // - // CONSTANTS - // -------------------------------------------- // - - public static final List ALT_NAMES = Collections.unmodifiableList(MUtil.list("normal", "end", "nether")); - - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeEnvironment i = new TypeEnvironment(); - public static TypeEnvironment get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Environment select(String arg, CommandSender sender) - { - // "THE_END" --> "end" - arg = getComparable(arg); - - if (arg.startsWith("no") || arg.startsWith("d")) - { - // "normal" or "default" - return Environment.NORMAL; - } - else if (arg.startsWith("ne")) - { - // "nether" - return Environment.NETHER; - } - else if (arg.startsWith("e")) - { - // "end" - return Environment.THE_END; - } - - return null; - } - - @Override - public Collection altNames(CommandSender sender) - { - return ALT_NAMES; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - Collection ret = this.altNames(sender); - - // The_end or the_nether - if (StringUtils.startsWithIgnoreCase(arg, "t")) - { - ret.add("the_end"); - ret.add("the_nether"); - } - - return ret; - } - - @Override - public Collection getAll(CommandSender sender) - { - return Arrays.asList(Environment.values()); - } - - // -------------------------------------------- // - // UTIL - // -------------------------------------------- // - - public static String getComparable(String str) - { - str = str.toLowerCase(); - str = str.replace(" ", ""); - str = str.replace("_", ""); - str = str.replace("the", ""); - - return str; - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeGameMode.java b/src/com/massivecraft/massivecore/cmd/type/TypeGameMode.java deleted file mode 100644 index 6f05c894..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeGameMode.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.bukkit.GameMode; -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.util.Txt; - -public class TypeGameMode extends TypeAbstractSelect implements TypeAllAble -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeGameMode i = new TypeGameMode(); - public static TypeGameMode get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public GameMode select(String arg, CommandSender sender) - { - arg = getComparable(arg); - - if (arg.length() < 2) return null; // Some gamemodes have the same beginning character. So we need atleast 2 characters. - - for (GameMode gm : GameMode.values()) - { - // Comparable - String compare = getComparable(gm); - - if (compare.startsWith(arg)) return gm; - } - - return null; - } - - @Override - public Collection altNames(CommandSender sender) - { - List ret = new ArrayList(); - for (GameMode gm : GameMode.values()) - { - ret.add(Txt.getNicedEnum(gm)); - } - return ret; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return this.altNames(sender); - } - - @Override - public Collection getAll(CommandSender sender) - { - return Arrays.asList(GameMode.values()); - } - - // -------------------------------------------- // - // UTIL - // -------------------------------------------- // - - public static String getComparable(GameMode gamemode) - { - if (gamemode == null) return null; - return getComparable(gamemode.name()); - } - - public static String getComparable(String string) - { - if (string == null) return null; - return string.toLowerCase(); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeList.java b/src/com/massivecraft/massivecore/cmd/type/TypeList.java deleted file mode 100644 index 447f7f16..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeList.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.util.Txt; - -public class TypeList extends TypeCollection> -{ - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - protected Type elementType; - public Type getElementType() { return this.elementType; } - @Override public Type getInnerType() { return this.getElementType(); } - - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - public static TypeList get(Type elementType) - { - return new TypeList(elementType); - } - - public TypeList(Type elementType) - { - this.elementType = elementType; - } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - // NOTE: Must be used with argConcatFrom and setErrorOnTooManyArgs(false). - @Override - public List read(String arg, CommandSender sender) throws MassiveException - { - // Split into inner args - String[] elementArgs = Txt.REGEX_WHITESPACE.split(arg); - - // Create Ret - List ret = new ArrayList(); - - // For Each - for (String elementArg : elementArgs) - { - E element = this.getElementType().read(elementArg, sender); - - ret.add(element); - } - - // Return Ret - return ret; - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeMaterial.java b/src/com/massivecraft/massivecore/cmd/type/TypeMaterial.java deleted file mode 100644 index 80623ae9..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeMaterial.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Set; -import java.util.TreeSet; - -import org.bukkit.Material; -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.MassiveException; - -public class TypeMaterial extends TypeAbstract implements TypeAllAble -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeMaterial i = new TypeMaterial(); - public static TypeMaterial get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Material read(String arg, CommandSender sender) throws MassiveException - { - Material ret = Material.matchMaterial(arg); - if (ret == null) - { - throw new MassiveException() - .addMsg("No material matches %s.", arg) - .addMsg("https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/browse/src/main/java/org/bukkit/Material.java"); - } - - return ret; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - Set ret = new TreeSet(String.CASE_INSENSITIVE_ORDER); - - for (Material material : Material.values()) - { - ret.add(material.name()); - } - - return ret; - } - - @Override - public Collection getAll(CommandSender sender) - { - return Arrays.asList(Material.values()); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypePermission.java b/src/com/massivecraft/massivecore/cmd/type/TypePermission.java deleted file mode 100644 index 77d7440a..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypePermission.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Collection; -import java.util.Set; -import java.util.TreeSet; - -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.permissions.Permission; - -import com.massivecraft.massivecore.MassiveException; - -public class TypePermission extends TypeAbstract implements TypeAllAble -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypePermission i = new TypePermission(); - public static TypePermission get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Permission read(String arg, CommandSender sender) throws MassiveException - { - for (Permission permission : Bukkit.getPluginManager().getPermissions()) - { - if (permission.getName().equals(arg)) return permission; - } - - throw new MassiveException().addMsg("No permission with the name \"%s\" was found.", arg); - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - Set ret = new TreeSet(String.CASE_INSENSITIVE_ORDER); - - for (Permission perm : Bukkit.getPluginManager().getPermissions()) - { - ret.add(perm.getName()); - } - - return ret; - } - - @Override - public Collection getAll(CommandSender sender) - { - return Bukkit.getPluginManager().getPermissions(); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypePotionEffectType.java b/src/com/massivecraft/massivecore/cmd/type/TypePotionEffectType.java deleted file mode 100644 index 905dfcf9..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypePotionEffectType.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.bukkit.command.CommandSender; -import org.bukkit.potion.PotionEffectType; - -import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.collections.MassiveList; - -public class TypePotionEffectType extends TypeAbstractSelect implements TypeAllAble -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypePotionEffectType i = new TypePotionEffectType(); - public static TypePotionEffectType get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public PotionEffectType select(String str, CommandSender sender) throws MassiveException - { - // Prepare - str = getComparable(str); - - // Match Name - for (PotionEffectType potionEffectType : PotionEffectType.values()) - { - String name = getComparable(potionEffectType); - if (str.equals(name)) return potionEffectType; - } - - // :( - return null; - } - - @Override - public Collection altNames(CommandSender sender) - { - // Create Ret - List ret = new MassiveList(); - - // Match Name - for (PotionEffectType potionEffectType : PotionEffectType.values()) - { - if (potionEffectType == null) continue; - String name = potionEffectType.getName(); - if (name == null) continue; - - ret.add(name); - } - - // Return Ret - return ret; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return this.altNames(sender); - } - - @Override - public Collection getAll(CommandSender sender) - { - return Arrays.asList(PotionEffectType.values()); - } - - // -------------------------------------------- // - // UTIL - // -------------------------------------------- // - - public static String getComparable(PotionEffectType potionEffectType) - { - if (potionEffectType == null) return null; - return getComparable(potionEffectType.getName()); - } - - public static String getComparable(String string) - { - if (string == null) return null; - return string.toLowerCase(); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeSet.java b/src/com/massivecraft/massivecore/cmd/type/TypeSet.java deleted file mode 100644 index 52f6e8ed..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeSet.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.Set; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.mixin.Mixin; -import com.massivecraft.massivecore.util.Txt; - -public class TypeSet extends TypeCollection> -{ - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - protected final Type elementType; - public Type getElementType() { return this.elementType; } - @Override public Type getInnerType() { return this.getElementType(); } - - protected final boolean warnOnDuplicates; - public boolean getWarnOnDuplicate() { return warnOnDuplicates; } - - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - public static TypeSet get(Type elementType, boolean warnOnDuplicates) - { - return new TypeSet(elementType, warnOnDuplicates); - } - - public TypeSet(Type elementType, boolean warnOnDuplicates) - { - this.elementType = elementType; - this.warnOnDuplicates = warnOnDuplicates; - } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public String getTypeName() - { - return elementType.getTypeName(); - } - - // NOTE: Must be used with argConcatFrom and setErrorOnTooManyArgs(false). - @Override - public Set read(String arg, CommandSender sender) throws MassiveException - { - // Split into inner args - String[] elementArgs = Txt.REGEX_WHITESPACE.split(arg); - - // Create Ret - Set ret = new LinkedHashSet(); - - boolean duplicates = false; - - // For Each - for (String elementArg : elementArgs) - { - E element = this.getElementType().read(elementArg, sender); - - duplicates = ( ! ret.add(element) || duplicates); - } - - if (warnOnDuplicates && duplicates) - { - Mixin.msgOne(sender, "Some duplicate command input were removed."); - } - - // Return Ret - return ret; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return elementType.getTabList(sender, arg); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeSound.java b/src/com/massivecraft/massivecore/cmd/type/TypeSound.java deleted file mode 100644 index feb0b3f3..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeSound.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Set; -import java.util.TreeSet; - -import org.bukkit.Sound; -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.MassiveException; - -public class TypeSound extends TypeAbstract implements TypeAllAble -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeSound i = new TypeSound(); - public static TypeSound get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public Sound read(String arg, CommandSender sender) throws MassiveException - { - Sound result = getSoundFromString(arg); - if (result == null) - { - throw new MassiveException() - .addMsg("No sound matches \"%s\".", arg) - .addMsg("https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/browse/src/main/java/org/bukkit/Sound.java"); - } - return result; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - Set ret = new TreeSet(String.CASE_INSENSITIVE_ORDER); - - for (Sound sound : Sound.values()) - { - String name = getComparable(sound); - ret.add(name); - } - - return ret; - } - - @Override - public Collection getAll(CommandSender sender) - { - return Arrays.asList(Sound.values()); - } - - // -------------------------------------------- // - // UTIL - // -------------------------------------------- // - - public static Sound getSoundFromString(String str) - { - if (str == null) return null; - String string1 = getComparable(str); - for (Sound sound : Sound.values()) - { - String compare = getComparable(sound); - if (string1.equals(compare)) return sound; - } - return null; - } - - public static String getComparable(Sound sound) - { - if (sound == null) return null; - return getComparable(sound.name()); - } - - public static String getComparable(String string) - { - if (string == null) return null; - string = string.toLowerCase(); - string = string.replaceAll("[^a-zA-Z0-9]", ""); - return string; - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeSoundEffect.java b/src/com/massivecraft/massivecore/cmd/type/TypeSoundEffect.java deleted file mode 100644 index cce87819..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeSoundEffect.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Collection; -import java.util.Set; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.SoundEffect; -import com.massivecraft.massivecore.collections.MassiveSet; - -public class TypeSoundEffect extends TypeAbstractException -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeSoundEffect i = new TypeSoundEffect(); - public static TypeSoundEffect get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public SoundEffect valueOf(String arg, CommandSender sender) throws Exception - { - return SoundEffect.valueOf(arg); - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - Set ret = new MassiveSet(); - - for (String str : TypeSound.get().getTabList(sender, arg)) - { - ret.add(str + "-"); - } - - return ret; - } - - @Override - public boolean allowSpaceAfterTab() - { - return false; - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeUniverse.java b/src/com/massivecraft/massivecore/cmd/type/TypeUniverse.java deleted file mode 100644 index 4ce3e962..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeUniverse.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.ArrayList; -import java.util.Collection; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.Aspect; -import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.Multiverse; -import com.massivecraft.massivecore.collections.MassiveSet; -import com.massivecraft.massivecore.util.Txt; - -public class TypeUniverse extends TypeAbstract -{ - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - protected Aspect aspect = null; - protected Multiverse multiverse = null; - - public Multiverse getMultiverse() - { - if (this.aspect != null) return this.aspect.getMultiverse(); - return this.multiverse; - } - - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - public static TypeUniverse get(Aspect aspect) { return new TypeUniverse(aspect); } - public static TypeUniverse get(Multiverse multiverse) { return new TypeUniverse(multiverse); } - - public TypeUniverse(Aspect aspect) { this.aspect = aspect; } - public TypeUniverse(Multiverse multiverse) { this.multiverse = multiverse; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public String read(String arg, CommandSender sender) throws MassiveException - { - Multiverse multiverse = this.getMultiverse(); - - if (multiverse.containsUniverse(arg)) - { - return arg; - } - else - { - Collection names = new ArrayList(multiverse.getUniverses()); - String format = Txt.parse("%s"); - String comma = Txt.parse(", "); - String and = Txt.parse(" or "); - String dot = Txt.parse("."); - - throw new MassiveException() - .addMsg("No universe \"%s\" exists in multiverse %s.", arg, multiverse.getId()) - .addMsg("Use %s", Txt.implodeCommaAndDot(names, format, comma, and, dot)); - } - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - // MassiveSet is linked. - return new MassiveSet(multiverse.getUniverses()); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeWorld.java b/src/com/massivecraft/massivecore/cmd/type/TypeWorld.java deleted file mode 100644 index 5cc603e9..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeWorld.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Collection; - -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.MassiveException; - -public class TypeWorld extends TypeAbstract -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeWorld i = new TypeWorld(); - public static TypeWorld get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public World read(String arg, CommandSender sender) throws MassiveException - { - String worldId = TypeWorldId.get().read(arg, sender); - - World ret = Bukkit.getWorld(worldId); - - if (ret == null) - { - throw new MassiveException().addMsg("The world \"%s\" could not be found.", arg); - } - - return ret; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return TypeWorldId.get().getTabList(sender, arg); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeWorldId.java b/src/com/massivecraft/massivecore/cmd/type/TypeWorldId.java deleted file mode 100644 index dddeebca..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeWorldId.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.mixin.Mixin; - -public class TypeWorldId extends TypeAbstractSelect implements TypeAllAble -{ - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeWorldId i = new TypeWorldId(); - public static TypeWorldId get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public String getTypeName() - { - return "world"; - } - - @Override - public String select(String arg, CommandSender sender) - { - List visibleWorldIds = Mixin.getVisibleWorldIds(sender); - - for (String worldId : visibleWorldIds) - { - // This was already done above in Mixin.getVisibleWorldIds(sender); - // if ( ! Mixin.canSeeWorld(sender, worldId)) continue; - if (arg.equalsIgnoreCase(worldId)) return worldId; - } - - for (String worldId : visibleWorldIds) - { - // This was already done above in Mixin.getVisibleWorldIds(sender); - // if ( ! Mixin.canSeeWorld(sender, worldId)) continue; - for (String worldAlias : Mixin.getWorldAliases(worldId)) - { - if (arg.equalsIgnoreCase(worldAlias)) return worldId; - } - } - - return null; - } - - @Override - public List altNames(CommandSender sender) - { - List ret = new ArrayList(); - for (String worldId : Mixin.getWorldIds()) - { - if ( ! Mixin.canSeeWorld(sender, worldId)) continue; - ret.add(Mixin.getWorldDisplayName(worldId)); - } - return ret; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return Mixin.getVisibleWorldIds(sender); - } - - @Override - public Collection getAll(CommandSender sender) - { - return Mixin.getVisibleWorldIds(sender); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeWorldType.java b/src/com/massivecraft/massivecore/cmd/type/TypeWorldType.java deleted file mode 100644 index 36c7e8bc..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeWorldType.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import org.bukkit.WorldType; -import org.bukkit.command.CommandSender; - -import com.massivecraft.massivecore.util.MUtil; - -public class TypeWorldType extends TypeAbstractSelect -{ - // -------------------------------------------- // - // CONSTANTS - // -------------------------------------------- // - - public static final List ALT_NAMES = Collections.unmodifiableList(MUtil.list("normal", "flat", "1.1", "largebiomes")); - - // -------------------------------------------- // - // INSTANCE & CONSTRUCT - // -------------------------------------------- // - - private static TypeWorldType i = new TypeWorldType(); - public static TypeWorldType get() { return i; } - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public WorldType select(String arg, CommandSender sender) - { - arg = getComparable(arg); - - if (arg.equals("")) - { - // "normal" or "default" - return WorldType.NORMAL; - } - else if (arg.startsWith("flat")) - { - // "flat" - return WorldType.FLAT; - } - else if (arg.contains("11")) - { - // "VERSION_1_1" - return WorldType.VERSION_1_1; - } - else if (arg.contains("large")) - { - // "LARGE_BIOMES" - return WorldType.LARGE_BIOMES; - } - - return null; - } - - @Override - public Collection altNames(CommandSender sender) - { - return ALT_NAMES; - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return this.altNames(sender); - } - - // -------------------------------------------- // - // UTIL - // -------------------------------------------- // - - public static String getComparable(String string) - { - // "DEFAULT_1_1" --> "11" - // "LARGE_BIOMES" --> "large" - // "Default" --> "" - string = string.toLowerCase(); - string = string.replace("_", ""); - string = string.replace(".", ""); - string = string.replace("normal", ""); - string = string.replace("default", ""); - string = string.replace("biomes", ""); - - return string; - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeWrapper.java b/src/com/massivecraft/massivecore/cmd/type/TypeWrapper.java deleted file mode 100644 index a61f0956..00000000 --- a/src/com/massivecraft/massivecore/cmd/type/TypeWrapper.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.massivecraft.massivecore.cmd.type; - -import java.util.Collection; - -import org.bukkit.command.CommandSender; - -public abstract class TypeWrapper extends TypeAbstract -{ - // -------------------------------------------- // - // ABSTRACT - // -------------------------------------------- // - - public abstract Type getInnerType(); - - // -------------------------------------------- // - // OVERRIDE - // -------------------------------------------- // - - @Override - public String getTypeName() - { - return this.getInnerType().getTypeName(); - } - - @Override - public boolean isValid(String arg, CommandSender sender) - { - return this.getInnerType().isValid(arg, sender); - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return this.getInnerType().getTabList(sender, arg); - } - - @Override - public boolean allowSpaceAfterTab() - { - return this.getInnerType().allowSpaceAfterTab(); - } - -} diff --git a/src/com/massivecraft/massivecore/cmd/DeprecatedCommand.java b/src/com/massivecraft/massivecore/command/DeprecatedCommand.java similarity index 83% rename from src/com/massivecraft/massivecore/cmd/DeprecatedCommand.java rename to src/com/massivecraft/massivecore/command/DeprecatedCommand.java index 136c60aa..b713ce7a 100644 --- a/src/com/massivecraft/massivecore/cmd/DeprecatedCommand.java +++ b/src/com/massivecraft/massivecore/command/DeprecatedCommand.java @@ -1,7 +1,7 @@ -package com.massivecraft.massivecore.cmd; +package com.massivecraft.massivecore.command; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.Visibility; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.Visibility; public class DeprecatedCommand extends MassiveCommand diff --git a/src/com/massivecraft/massivecore/cmd/HelpCommand.java b/src/com/massivecraft/massivecore/command/HelpCommand.java similarity index 93% rename from src/com/massivecraft/massivecore/cmd/HelpCommand.java rename to src/com/massivecraft/massivecore/command/HelpCommand.java index d9ebd035..3cac4474 100644 --- a/src/com/massivecraft/massivecore/cmd/HelpCommand.java +++ b/src/com/massivecraft/massivecore/command/HelpCommand.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd; +package com.massivecraft.massivecore.command; import java.util.ArrayList; import java.util.List; diff --git a/src/com/massivecraft/massivecore/cmd/MassiveCommand.java b/src/com/massivecraft/massivecore/command/MassiveCommand.java similarity index 94% rename from src/com/massivecraft/massivecore/cmd/MassiveCommand.java rename to src/com/massivecraft/massivecore/command/MassiveCommand.java index 8d47d13c..694c0038 100644 --- a/src/com/massivecraft/massivecore/cmd/MassiveCommand.java +++ b/src/com/massivecraft/massivecore/command/MassiveCommand.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd; +package com.massivecraft.massivecore.command; import java.util.ArrayList; import java.util.Arrays; @@ -20,11 +20,11 @@ import org.bukkit.plugin.Plugin; import com.massivecraft.massivecore.Lang; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.PredicateStartsWithIgnoreCase; -import com.massivecraft.massivecore.cmd.req.Req; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.Type; import com.massivecraft.massivecore.collections.MassiveList; import com.massivecraft.massivecore.collections.MassiveMap; +import com.massivecraft.massivecore.command.requirement.Requirement; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.Type; import com.massivecraft.massivecore.mixin.Mixin; import com.massivecraft.massivecore.mson.Mson; import com.massivecraft.massivecore.util.PermUtil; @@ -114,7 +114,7 @@ public class MassiveCommand // === REQUIREMENTS === // All these requirements must be met for the command to be executable; - protected List requirements = new ArrayList(); + protected List requirements = new ArrayList(); // === HELP === @@ -635,20 +635,20 @@ public class MassiveCommand // REQUIREMENTS // -------------------------------------------- // - public List getRequirements() { return this.requirements; } - public void setRequirements(List requirements) { this.requirements = requirements; } + public List getRequirements() { return this.requirements; } + public void setRequirements(List requirements) { this.requirements = requirements; } - public void addRequirements(Req... requirements) { this.requirements.addAll(Arrays.asList(requirements)); } + public void addRequirements(Requirement... requirements) { this.requirements.addAll(Arrays.asList(requirements)); } public boolean isRequirementsMet(CommandSender sender, boolean informSenderIfNot) { - for (Req req : this.getRequirements()) + for (Requirement requirement : this.getRequirements()) { - if (req.apply(sender, this)) continue; + if (requirement.apply(sender, this)) continue; if (informSenderIfNot) { - Mixin.messageOne(sender, req.createErrorMessage(sender, this)); + Mixin.messageOne(sender, requirement.createErrorMessage(sender, this)); } return false; } @@ -682,10 +682,10 @@ public class MassiveCommand { if (this.descPermission != null) return this.descPermission; // Otherwise we try to find one. - for (Req req : this.getRequirements()) + for (Requirement requirement : this.getRequirements()) { - if ( ! (req instanceof ReqHasPerm)) continue; - return ((ReqHasPerm)req).getPerm(); + if ( ! (requirement instanceof RequirementHasPerm)) continue; + return ((RequirementHasPerm)requirement).getPerm(); } return null; } diff --git a/src/com/massivecraft/massivecore/cmd/MassiveCoreBukkitCommand.java b/src/com/massivecraft/massivecore/command/MassiveCoreBukkitCommand.java similarity index 96% rename from src/com/massivecraft/massivecore/cmd/MassiveCoreBukkitCommand.java rename to src/com/massivecraft/massivecore/command/MassiveCoreBukkitCommand.java index 98bceaa8..fbfb5ad3 100644 --- a/src/com/massivecraft/massivecore/cmd/MassiveCoreBukkitCommand.java +++ b/src/com/massivecraft/massivecore/command/MassiveCoreBukkitCommand.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd; +package com.massivecraft.massivecore.command; import java.util.ArrayList; import java.util.Collections; diff --git a/src/com/massivecraft/massivecore/cmd/Parameter.java b/src/com/massivecraft/massivecore/command/Parameter.java similarity index 97% rename from src/com/massivecraft/massivecore/cmd/Parameter.java rename to src/com/massivecraft/massivecore/command/Parameter.java index a1ec2c0a..19160f7b 100644 --- a/src/com/massivecraft/massivecore/cmd/Parameter.java +++ b/src/com/massivecraft/massivecore/command/Parameter.java @@ -1,12 +1,12 @@ -package com.massivecraft.massivecore.cmd; +package com.massivecraft.massivecore.command; import static com.massivecraft.massivecore.mson.Mson.mson; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.massivecraft.massivecore.cmd.type.TypeInteger; -import com.massivecraft.massivecore.cmd.type.Type; +import com.massivecraft.massivecore.command.type.Type; +import com.massivecraft.massivecore.command.type.primitive.TypeInteger; import com.massivecraft.massivecore.mson.Mson; public class Parameter diff --git a/src/com/massivecraft/massivecore/cmd/VersionCommand.java b/src/com/massivecraft/massivecore/command/VersionCommand.java similarity index 87% rename from src/com/massivecraft/massivecore/cmd/VersionCommand.java rename to src/com/massivecraft/massivecore/command/VersionCommand.java index c735f3a4..4681dbcd 100644 --- a/src/com/massivecraft/massivecore/cmd/VersionCommand.java +++ b/src/com/massivecraft/massivecore/command/VersionCommand.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd; +package com.massivecraft.massivecore.command; import java.util.Arrays; import java.util.Collection; @@ -7,8 +7,8 @@ import java.util.List; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; import com.massivecraft.massivecore.util.Txt; public class VersionCommand extends MassiveCommand @@ -41,7 +41,7 @@ public class VersionCommand extends MassiveCommand if (permissionName != null) { - this.addRequirements(ReqHasPerm.get(permissionName)); + this.addRequirements(RequirementHasPerm.get(permissionName)); } this.setDesc("display plugin version"); diff --git a/src/com/massivecraft/massivecore/cmd/Visibility.java b/src/com/massivecraft/massivecore/command/Visibility.java similarity index 87% rename from src/com/massivecraft/massivecore/cmd/Visibility.java rename to src/com/massivecraft/massivecore/command/Visibility.java index 9a166363..1679600c 100644 --- a/src/com/massivecraft/massivecore/cmd/Visibility.java +++ b/src/com/massivecraft/massivecore/command/Visibility.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd; +package com.massivecraft.massivecore.command; public enum Visibility { diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditAbstract.java b/src/com/massivecraft/massivecore/command/editor/CommandEditAbstract.java new file mode 100644 index 00000000..9010e610 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditAbstract.java @@ -0,0 +1,252 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.List; +import java.util.Map.Entry; + +import org.bukkit.command.CommandSender; +import org.bukkit.permissions.Permission; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementEditorUse; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.Type; +import com.massivecraft.massivecore.util.MUtil; +import com.massivecraft.massivecore.util.PermUtil; + +public class CommandEditAbstract extends MassiveCommand +{ + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + protected final EditSettings settings; + public EditSettings getSettings() { return this.settings; } + + protected final Property property; + public Property getProperty() { return this.property; } + + // Null is allowed and means unknown/either/neither. + protected final Boolean write; + public Boolean isWrite() { return this.write; } + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditAbstract(EditSettings settings, Property property, Boolean write) + { + // Fields + this.settings = settings; + this.property = property; + this.write = write; + + // Aliases + this.setAliases(this.getProperty().getNames()); + + // Desc + this.setDesc("edit " + this.getProperty().getName()); + + // Requirements + this.addRequirements(RequirementEditorUse.get()); + + if (this.isWrite() != null && this.isWrite()) + { + Permission permission = this.getPropertyPermission(); + if (permission != null) this.addRequirements(RequirementHasPerm.get(permission.getName())); + } + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public void perform() throws MassiveException + { + if (this.isParent()) + { + super.perform(); + } + else + { + msg("Not yet implemented."); + } + } + + // -------------------------------------------- // + // ATTEMPT SET + // -------------------------------------------- // + + public void attemptSet(V after) + { + // Editable + if ( ! this.getProperty().isEditable()) + { + msg("The property %s is not editable.", this.getProperty().getDisplayName()); + return; + } + + // Permission + if ( ! PermUtil.has(sender, this.getPropertyPermission(), true)) return; + + // Inherited / Source / Before + Entry inherited = this.getInheritedEntry(); + O source = inherited.getKey(); + V before = inherited.getValue(); + + // Setup + String descProperty = this.getProperty().getDisplayName(); + String descObject = this.getObjectVisual(); + String descValue = this.getInheritedVisual(source, before); + + // NoChange + // We check, inform and cancel on equality. + if (MUtil.equals(before, after)) + { + msg("%s for %s already: %s", descProperty, descObject, descValue); + return; + } + + // Startup + // We inform what property and object the edit is taking place on. + msg("%s for %s edited:", descProperty, descObject); + + // Before + // We inform what the value was before. + msg("Before: %s", descValue); + + // Apply + // We set the new property value. + this.getProperty().setValue(this.getObject(), after); + + // After + // We inform what the value is after. + descValue = this.getInheritedVisual(); + msg("After: %s", descValue); + } + + // -------------------------------------------- // + // SHORTCUTS > EDITORSETTINGS + // -------------------------------------------- // + + public Type getObjectType() + { + return this.getSettings().getObjectType(); + } + + public O getObject(CommandSender sender) + { + return this.getSettings().getUsed(sender); + } + + public O getObject() + { + return this.getSettings().getUsed(sender); + } + + public Permission getPropertyPermission() + { + return this.getSettings().getPropertyPermission(this.getProperty()); + } + + public Permission getUsedPermission() + { + return this.getSettings().getUsedPermission(); + } + + public String getObjectVisual() + { + return this.getObjectType().getVisual(this.getObject(), sender); + } + + // -------------------------------------------- // + // SHORTCUTS > PROPERTY + // -------------------------------------------- // + + // Type + public Type getValueType() + { + return this.getProperty().getValueType(); + } + + // Name + public String getPropertyName() + { + return this.getProperty().getName(); + } + + public List getPropertyNames() + { + return this.getProperty().getNames(); + } + + // Access + public V getValue() + { + return this.getProperty().getValue(this.getObject()); + } + + public V setValue(V value) + { + return this.getProperty().setValue(this.getObject(), value); + } + + public Entry getInheritedEntry() + { + return this.getProperty().getInheritedEntry(this.getObject()); + } + + public O getInheritedObject() + { + return this.getProperty().getInheritedObject(this.getObject()); + } + + public V getInheritedValue() + { + return this.getProperty().getInheritedValue(this.getObject()); + } + + public String getInheritedVisual(O source, V value) + { + return this.getProperty().getInheritedVisual(this.getObject(), source, value, sender); + } + + public String getInheritedVisual() + { + return this.getProperty().getInheritedVisual(this.getObject(), sender); + } + + // -------------------------------------------- // + // SHORTCUTS > PROPERTY > TYPE + // -------------------------------------------- // + + // Only to be used with collection type properties. + public Type getValueInnerType() + { + return this.getProperty().getValueType().getInnerType(); + } + + // -------------------------------------------- // + // UTIL + // -------------------------------------------- // + + // Simply picks the last word in the class name. + public String createCommandAlias() + { + // Split at uppercase letters + final String[] words = this.getClass().getSimpleName().split("(?=[A-Z])"); + String alias = words[words.length - 1]; + alias = alias.toLowerCase(); + return alias; + } + + public void show(CommandSender sender) + { + String descProperty = this.getProperty().getDisplayName(); + String descObject = this.getObjectVisual(); + String descValue = this.getInheritedVisual(); + msg("%s for %s: %s", descProperty, descObject, descValue); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditCollection.java b/src/com/massivecraft/massivecore/command/editor/CommandEditCollection.java new file mode 100644 index 00000000..1fb905a9 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditCollection.java @@ -0,0 +1,30 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.Collection; + +public class CommandEditCollection> extends CommandEditAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditCollection(EditSettings settings, Property property) + { + // Super + super(settings, property, null); + + // Children + this.addChild(new CommandEditShow(settings, property)); + this.addChild(new CommandEditCreate(settings, property)); + this.addChild(new CommandEditDelete(settings, property)); + + this.addChild(new CommandEditCollectionAdd(settings, property)); + this.addChild(new CommandEditCollectionInsert(settings, property)); + this.addChild(new CommandEditCollectionSet(settings, property)); + this.addChild(new CommandEditCollectionRemove(settings, property)); + this.addChild(new CommandEditCollectionMove(settings, property)); + this.addChild(new CommandEditCollectionSwap(settings, property)); + this.addChild(new CommandEditCollectionClear(settings, property)); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionAbstract.java b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionAbstract.java new file mode 100644 index 00000000..c5b05e88 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionAbstract.java @@ -0,0 +1,85 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.Collection; +import java.util.List; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.command.requirement.RequirementEditorPropertyCreated; + +public abstract class CommandEditCollectionAbstract> extends CommandEditAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditCollectionAbstract(EditSettings settings, Property property) + { + // Super + super(settings, property, true); + + // Aliases + String alias = this.createCommandAlias(); + this.setAliases(alias); + + // Desc + this.setDesc(alias + " " + this.getPropertyName()); + + // Requirements + this.addRequirements(RequirementEditorPropertyCreated.get(true)); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @SuppressWarnings("unchecked") + @Override + public void perform() throws MassiveException + { + // Create + List after = this.getShallowCopy(); + + // Alter + try + { + after = this.alter(after); + } + catch (MassiveException e) + { + throw e; + } + catch (Exception e) + { + throw new MassiveException().addMsg("%s", e.getMessage()); + } + + // Apply + Collection toSet = null; + if (after != null) + { + toSet = (Collection) this.getProperty().getValueType().createNewInstance(); + toSet.addAll(after); + } + + this.attemptSet((V) toSet); + } + + // -------------------------------------------- // + // ABSTRACT + // -------------------------------------------- // + + public abstract List alter(List list) throws MassiveException; + + // -------------------------------------------- // + // UTIL + // -------------------------------------------- // + + public List getShallowCopy() + { + V ret = this.getProperty().getRaw(this.getObject()); + if (ret == null) return null; + return new MassiveList(ret); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionAdd.java b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionAdd.java new file mode 100644 index 00000000..75e26481 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionAdd.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.Collection; +import java.util.List; + +import com.massivecraft.massivecore.MassiveException; + +public class CommandEditCollectionAdd> extends CommandEditCollectionAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditCollectionAdd(EditSettings settings, Property property) + { + // Super + super(settings, property); + + // Parameters + this.addParameter(this.getValueInnerType(), this.getProperty().getName(), true); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public List alter(List list) throws MassiveException + { + // Args + Object element = this.readArg(); + + // Alter + list.add(element); + + // Return + return list; + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionClear.java b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionClear.java new file mode 100644 index 00000000..24f8994b --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionClear.java @@ -0,0 +1,34 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.Collection; +import java.util.List; + +import com.massivecraft.massivecore.MassiveException; + +public class CommandEditCollectionClear> extends CommandEditCollectionAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditCollectionClear(EditSettings settings, Property property) + { + // Super + super(settings, property); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public List alter(List list) throws MassiveException + { + // Apply + list.clear(); + + // Return + return list; + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionInsert.java b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionInsert.java new file mode 100644 index 00000000..7705feb8 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionInsert.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.Collection; +import java.util.List; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.type.primitive.TypeInteger; + +public class CommandEditCollectionInsert> extends CommandEditCollectionAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditCollectionInsert(EditSettings settings, Property property) + { + // Super + super(settings, property); + + // Parameters + this.addParameter(TypeInteger.get(), "index"); + this.addParameter(this.getValueInnerType(), this.getProperty().getName(), true); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public List alter(List list) throws MassiveException + { + // Args + int index = this.readArg(); + Object element = this.readArg(); + + // Alter + list.add(index, element); + + // Return + return list; + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionMove.java b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionMove.java new file mode 100644 index 00000000..9422669b --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionMove.java @@ -0,0 +1,44 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.Collection; +import java.util.List; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.type.primitive.TypeInteger; + +public class CommandEditCollectionMove> extends CommandEditCollectionAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditCollectionMove(EditSettings settings, Property property) + { + // Super + super(settings, property); + + // Parameters + this.addParameter(TypeInteger.get(), "indexFrom"); + this.addParameter(TypeInteger.get(), "indexTo"); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public List alter(List list) throws MassiveException + { + // Args + int indexFrom = this.readArg(); + int indexTo = this.readArg(); + + // Alter + Object element = list.remove(indexFrom); + list.add(indexTo, element); + + // Return + return list; + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionRemove.java b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionRemove.java new file mode 100644 index 00000000..ec6b57da --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionRemove.java @@ -0,0 +1,41 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.Collection; +import java.util.List; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.type.primitive.TypeInteger; + +public class CommandEditCollectionRemove> extends CommandEditCollectionAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditCollectionRemove(EditSettings settings, Property property) + { + // Super + super(settings, property); + + // Parameters + this.addParameter(TypeInteger.get(), "index"); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public List alter(List list) throws MassiveException + { + // Args + int index = this.readArg(); + + // Alter + list.remove(index); + + // Return + return list; + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionSet.java b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionSet.java new file mode 100644 index 00000000..9b8aa38a --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionSet.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.Collection; +import java.util.List; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.type.primitive.TypeInteger; + +public class CommandEditCollectionSet> extends CommandEditCollectionAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditCollectionSet(EditSettings settings, Property property) + { + // Super + super(settings, property); + + // Parameters + this.addParameter(TypeInteger.get(), "index"); + this.addParameter(this.getValueInnerType(), this.getProperty().getName(), true); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public List alter(List list) throws MassiveException + { + // Args + int index = this.readArg(); + Object element = this.readArg(); + + // Alter + list.set(index, element); + + // Return + return list; + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionSwap.java b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionSwap.java new file mode 100644 index 00000000..d51ebf53 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditCollectionSwap.java @@ -0,0 +1,46 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.Collection; +import java.util.List; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.type.primitive.TypeInteger; + +public class CommandEditCollectionSwap> extends CommandEditCollectionAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditCollectionSwap(EditSettings settings, Property property) + { + // Super + super(settings, property); + + // Parameters + this.addParameter(TypeInteger.get(), "indexOne"); + this.addParameter(TypeInteger.get(), "indexTwo"); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public List alter(List list) throws MassiveException + { + // Args + int indexOne = this.readArg(); + int indexTwo = this.readArg(); + + // Alter + Object one = list.get(indexOne); + Object two = list.get(indexTwo); + list.set(indexOne, two); + list.set(indexTwo, one); + + // Return + return list; + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditCreate.java b/src/com/massivecraft/massivecore/command/editor/CommandEditCreate.java new file mode 100644 index 00000000..863884db --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditCreate.java @@ -0,0 +1,39 @@ +package com.massivecraft.massivecore.command.editor; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.requirement.RequirementEditorPropertyCreated; + +public class CommandEditCreate extends CommandEditAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditCreate(EditSettings settings, Property property) + { + // Super + super(settings, property, true); + + // Aliases + String alias = this.createCommandAlias(); + this.setAliases(alias); + + // Desc + this.setDesc(alias + " " + this.getPropertyName()); + + // Requirements + this.addRequirements(RequirementEditorPropertyCreated.get(false)); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public void perform() throws MassiveException + { + V newInstance = this.getValueType().createNewInstance(); + this.attemptSet(newInstance); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditDelete.java b/src/com/massivecraft/massivecore/command/editor/CommandEditDelete.java new file mode 100644 index 00000000..43db6b9c --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditDelete.java @@ -0,0 +1,38 @@ +package com.massivecraft.massivecore.command.editor; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.requirement.RequirementEditorPropertyCreated; + +public class CommandEditDelete extends CommandEditAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditDelete(EditSettings settings, Property property) + { + // Super + super(settings, property, true); + + // Aliases + String alias = this.createCommandAlias(); + this.setAliases(alias); + + // Desc + this.setDesc(alias + " " + this.getPropertyName()); + + // Requirements + this.addRequirements(RequirementEditorPropertyCreated.get(true)); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public void perform() throws MassiveException + { + this.attemptSet(null); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditItemStacks.java b/src/com/massivecraft/massivecore/command/editor/CommandEditItemStacks.java new file mode 100644 index 00000000..dc5c05a6 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditItemStacks.java @@ -0,0 +1,25 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.List; + +import org.bukkit.inventory.ItemStack; + +public class CommandEditItemStacks extends CommandEditAbstract> +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditItemStacks(EditSettings settings, Property> property) + { + // Super + super(settings, property, true); + + // Children + this.addChild(new CommandEditShow>(settings, property)); + this.addChild(new CommandEditCreate>(settings, property)); + this.addChild(new CommandEditDelete>(settings, property)); + this.addChild(new CommandEditItemStacksOpen(settings, property)); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditItemStacksAbstract.java b/src/com/massivecraft/massivecore/command/editor/CommandEditItemStacksAbstract.java new file mode 100644 index 00000000..a30ade2e --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditItemStacksAbstract.java @@ -0,0 +1,31 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.List; + +import org.bukkit.inventory.ItemStack; + +import com.massivecraft.massivecore.command.requirement.RequirementEditorPropertyCreated; + +public abstract class CommandEditItemStacksAbstract extends CommandEditAbstract> +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditItemStacksAbstract(EditSettings settings, Property> property) + { + // Super + super(settings, property, true); + + // Aliases + String alias = this.createCommandAlias(); + this.setAliases(alias); + + // Desc + this.setDesc(alias + " " + this.getPropertyName()); + + // Requirements + this.addRequirements(RequirementEditorPropertyCreated.get(true)); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditItemStacksOpen.java b/src/com/massivecraft/massivecore/command/editor/CommandEditItemStacksOpen.java new file mode 100644 index 00000000..5f46b129 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditItemStacksOpen.java @@ -0,0 +1,161 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import com.massivecraft.massivecore.MassiveCore; +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.collections.MassiveSet; +import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer; +import com.massivecraft.massivecore.mixin.Mixin; +import com.massivecraft.massivecore.util.InventoryUtil; +import com.massivecraft.massivecore.util.MUtil; + +public class CommandEditItemStacksOpen extends CommandEditItemStacksAbstract implements Listener +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditItemStacksOpen(EditSettings settings, Property> property) + { + // Super + super(settings, property); + + // Requirements + this.addRequirements(RequirementIsPlayer.get()); + + // Listener + Bukkit.getPluginManager().registerEvents(this, MassiveCore.get()); + } + + // -------------------------------------------- // + // EDITING + // -------------------------------------------- // + + protected Set playerIds = new MassiveSet(); + + public void setEditing(Player player, boolean editing) + { + UUID playerId = player.getUniqueId(); + + if (editing) + { + this.playerIds.add(playerId); + } + else + { + this.playerIds.remove(playerId); + } + } + + public boolean isEditing(Player player) + { + UUID playerId = player.getUniqueId(); + + return this.playerIds.contains(playerId); + } + + // -------------------------------------------- // + // LISTENER + // -------------------------------------------- // + + // Not Cancellable + @EventHandler(priority = EventPriority.NORMAL) + public void onInventoryClose(InventoryCloseEvent event) + { + // If a player closes an inventory ... + if (MUtil.isntPlayer(event.getPlayer())) return; + Player player = (Player)event.getPlayer(); + + // ... and that player is editing ... + if ( ! this.isEditing(player)) return; + + // ... set the player as not editing ... + this.setEditing(player, false); + + // ... load the item stacks into a list ... + List after = asList(event.getInventory()); + + // ... attempt set. + this.senderFieldsOuter(player); + this.attemptSet(after); + this.senderFieldsOuter(null); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public void perform() throws MassiveException + { + // Get Before + List before = this.getProperty().getRaw(this.getObject()); + + // Open Chest + Inventory chest = asChest(before); + this.setEditing(me, true); + me.openInventory(chest); + } + + // -------------------------------------------- // + // CONVERT LIST <--> CHEST + // -------------------------------------------- // + + public Inventory asChest(List itemStacks) + { + // Dodge Null + if (itemStacks == null) return null; + + // Create Ret + Inventory ret = Mixin.createInventory(me, 54, this.getProperty().getName()); + + // Fill Ret + for (int i = 0; i < itemStacks.size(); i++) + { + ItemStack itemStack = itemStacks.get(i); + if (InventoryUtil.isNothing(itemStack)) continue; + itemStack = new ItemStack(itemStack); + + ret.setItem(i, itemStack); + } + + // Return Ret + return ret; + } + + public List asList(Inventory inventory) + { + // Dodge Null + if (inventory == null) return null; + + // Create Ret + List ret = new MassiveList(); + + // Fill Ret + for (int i = 0; i < inventory.getSize(); i++) + { + ItemStack itemStack = inventory.getItem(i); + if (InventoryUtil.isNothing(itemStack)) continue; + itemStack = new ItemStack(itemStack); + + ret.add(itemStack); + } + + // Return Ret + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditShow.java b/src/com/massivecraft/massivecore/command/editor/CommandEditShow.java new file mode 100644 index 00000000..30ac72c5 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditShow.java @@ -0,0 +1,36 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.Collection; + +import com.massivecraft.massivecore.MassiveException; + +public class CommandEditShow> extends CommandEditAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditShow(EditSettings settings, Property property) + { + // Super + super(settings, property, false); + + // Aliases + String alias = this.createCommandAlias(); + this.setAliases(alias); + + // Desc + this.setDesc(alias + " " + this.getPropertyName()); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public void perform() throws MassiveException + { + this.show(sender); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditSimple.java b/src/com/massivecraft/massivecore/command/editor/CommandEditSimple.java new file mode 100644 index 00000000..2c4b90f3 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditSimple.java @@ -0,0 +1,46 @@ +package com.massivecraft.massivecore.command.editor; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.type.TypeNullable; +import com.massivecraft.massivecore.util.PermUtil; + +public class CommandEditSimple extends CommandEditAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditSimple(EditSettings settings, Property property) + { + // Super + super(settings, property, null); + + // Parameters + this.addParameter(TypeNullable.get(this.getProperty().getValueType()), "set", "show", true); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public void perform() throws MassiveException + { + // Show + if ( ! this.argIsSet(0)) + { + this.show(sender); + return; + } + + // Permission + if ( ! PermUtil.has(sender, this.getPropertyPermission(), true)) return; + + // Arguments + V after = this.readArg(); + + // Apply + this.attemptSet(after); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/CommandEditUsed.java b/src/com/massivecraft/massivecore/command/editor/CommandEditUsed.java new file mode 100644 index 00000000..3b6d4243 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/CommandEditUsed.java @@ -0,0 +1,23 @@ +package com.massivecraft.massivecore.command.editor; + +import org.bukkit.command.CommandSender; + +public class CommandEditUsed extends CommandEditSimple +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public CommandEditUsed(EditSettings settings) + { + // Super + super(settings.createUsedSettings(), settings.getUsedProperty()); + + // Aliases + this.setAliases("used", "selected"); + + // Desc + this.setDesc("edit used " + this.getProperty().getValueType().getTypeName()); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/EditSettings.java b/src/com/massivecraft/massivecore/command/editor/EditSettings.java new file mode 100644 index 00000000..ac6aca15 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/EditSettings.java @@ -0,0 +1,105 @@ +package com.massivecraft.massivecore.command.editor; + +import org.bukkit.command.CommandSender; +import org.bukkit.permissions.Permission; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.type.Type; +import com.massivecraft.massivecore.command.type.sender.TypeSender; +import com.massivecraft.massivecore.util.Txt; + +public class EditSettings +{ + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + // This is the type of the object we are editing. + protected final Type objectType; + public Type getObjectType() { return this.objectType; } + + // This property is used to get the object we are editing from the sender. + protected Property usedProperty; + public Property getUsedProperty() { return this.usedProperty; } + public void setUsedProperty(Property usedProperty) { this.usedProperty = usedProperty; } + + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public EditSettings(Type objectType, Property objectProperty) + { + this.objectType = objectType; + this.usedProperty = objectProperty; + } + + public EditSettings(Type objectType) + { + this(objectType, null); + } + + public EditSettings createUsedSettings() + { + final EditSettings main = this; + return new EditSettings(TypeSender.get(), new PropertyThis(TypeSender.get())) { + + @Override + public Permission getPropertyPermission(Property property) + { + return main.getUsedPermission(); + }; + + }; + } + + // -------------------------------------------- // + // OBJECT + // -------------------------------------------- // + + public O getUsed(CommandSender sender) + { + return this.getUsedProperty().getValue(sender); + } + + public void setUsed(CommandSender sender, O used) + { + this.getUsedProperty().setValue(sender, used); + } + + // -------------------------------------------- // + // USED COMMAND + // -------------------------------------------- // + + public CommandEditUsed createCommandEditUsed() + { + return new CommandEditUsed(this); + } + + // -------------------------------------------- // + // PERMISSONS + // -------------------------------------------- // + + public Permission getPropertyPermission(Property property) + { + return null; + } + + public Permission getUsedPermission() + { + return null; + } + + // -------------------------------------------- // + // TYPE READ UTILITY + // -------------------------------------------- // + + public O getUsedOrCommandException(CommandSender sender) throws MassiveException + { + O ret = this.getUsed(sender); + if (ret != null) return ret; + String noun = this.getObjectType().getTypeName(); + String aan = Txt.aan(noun); + throw new MassiveException().addMsg("You must select %s %s for use to skip the optional argument.", aan, noun); + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/Property.java b/src/com/massivecraft/massivecore/command/editor/Property.java new file mode 100644 index 00000000..c0ea869b --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/Property.java @@ -0,0 +1,184 @@ +package com.massivecraft.massivecore.command.editor; + +import java.util.List; +import java.util.Map.Entry; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.AbstractMap.SimpleEntry; +import java.util.Arrays; +import java.util.Collection; + +import com.massivecraft.massivecore.Named; +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.command.type.Type; +import com.massivecraft.massivecore.store.Entity; +import com.massivecraft.massivecore.util.MUtil; +import com.massivecraft.massivecore.util.Txt; + +public abstract class Property implements Named +{ + // -------------------------------------------- // + // TYPE + // -------------------------------------------- // + + protected Type objectType = null; + public Type getObjectType() { return this.objectType; } + public void setObjectType(Type objectType) { this.objectType = objectType; } + + protected Type valueType = null; + public Type getValueType() { return this.valueType; } + public void setValueType(Type valueType) { this.valueType = valueType; } + + // -------------------------------------------- // + // SETTINGS + // -------------------------------------------- // + + protected boolean inheritable = true; + public boolean isInheritable() { return this.inheritable; } + public void setInheritable(boolean inheritable) { this.inheritable = inheritable; } + + protected boolean editable = true; + public boolean isEditable() { return this.editable; } + public void setEditable(boolean editable) { this.editable = editable; } + + // -------------------------------------------- // + // NAME + // -------------------------------------------- // + + protected List names = new MassiveList(); + public List getNames() { return this.names; } + @Override public String getName() { return this.getNames().isEmpty() ? null : this.getNames().get(0); } + public void setName(String name) { this.names = new MassiveList(name); } + public void setNames(String... names) { this.names = new MassiveList(names); } + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public Property(Type objectType, Type valueType, Collection names) + { + this.objectType = objectType; + this.valueType = valueType; + this.names = new MassiveList(names); + } + + public Property(Type objectType, Type valueType, String... names) + { + this(objectType, valueType, Arrays.asList(names)); + } + + // -------------------------------------------- // + // ACCESS + // -------------------------------------------- // + + public abstract V getRaw(O object); + public abstract void setRaw(O object, V value); + + public V getValue(O object) + { + return this.getRaw(object); + } + + public V setValue(O object, V value) + { + // Get Before + V before = this.getRaw(object); + + // Get Live Entity + Entity entity = null; + if (object instanceof Entity) entity = (Entity)object; + if (entity != null && ! entity.isLive()) entity = null; + + // NoChange + if (entity != null && MUtil.equals(before, value)) return before; + + // Apply + this.setRaw(object, value); + + // Mark Change + if (entity != null) entity.changed(); + + // On Change + this.onChange(object, before, value); + + // Return Before + return before; + } + + // -------------------------------------------- // + // ON CHANGE + // -------------------------------------------- // + + public void onChange(O object, V before, V after) + { + + } + + // -------------------------------------------- // + // INHERITED + // -------------------------------------------- // + + public Entry getInheritedEntry(O object) + { + if (object == null) return new SimpleEntry(null, null); + V value = this.getValue(object); + return new SimpleEntry(object, value); + } + + public O getInheritedObject(O object) + { + return this.getInheritedEntry(object).getKey(); + } + + public V getInheritedValue(O object) + { + return this.getInheritedEntry(object).getValue(); + } + + // -------------------------------------------- // + // SHORTCUTS + // -------------------------------------------- // + + public CommandEditAbstract createEditCommand(EditSettings settings) + { + return this.getValueType().createEditCommand(settings, this); + } + + public String getDisplayName() + { + return ChatColor.AQUA.toString() + this.getName(); + } + + public String getInheritedVisual(O object, O source, V value, CommandSender sender) + { + String string = this.getValueType().getVisual(value, sender); + if (string == null) + { + System.out.println("value type " + this.getValueType()); + System.out.println("value type name" + this.getValueType().getTypeName()); + System.out.println("object " + object); + System.out.println("source " + source); + System.out.println("value " + value); + System.out.println("sender " + sender); + } + + String suffix = null; + if (source != null && ! source.equals(object)) + { + suffix = Txt.parse("[%s]", this.getObjectType().getVisual(source)); + } + + return Txt.prepondfix(null, string, suffix); + } + + public String getInheritedVisual(O object, CommandSender sender) + { + Entry inherited = this.getInheritedEntry(object); + O source = inherited.getKey(); + V value = inherited.getValue(); + return this.getInheritedVisual(object, source, value, sender); + } + +} \ No newline at end of file diff --git a/src/com/massivecraft/massivecore/command/editor/PropertyThis.java b/src/com/massivecraft/massivecore/command/editor/PropertyThis.java new file mode 100644 index 00000000..63cbf8ff --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/PropertyThis.java @@ -0,0 +1,32 @@ +package com.massivecraft.massivecore.command.editor; + +import com.massivecraft.massivecore.command.type.Type; + +public class PropertyThis extends Property +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public PropertyThis(Type objectType) + { + super(objectType, objectType, "this"); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public O getRaw(O object) + { + return object; + } + + @Override + public void setRaw(O object, O value) + { + return; + } + +} diff --git a/src/com/massivecraft/massivecore/command/editor/PropertyUsed.java b/src/com/massivecraft/massivecore/command/editor/PropertyUsed.java new file mode 100644 index 00000000..7697c91e --- /dev/null +++ b/src/com/massivecraft/massivecore/command/editor/PropertyUsed.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.command.editor; + +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.command.type.sender.TypeSender; + +public abstract class PropertyUsed extends Property +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public PropertyUsed(EditSettings settings) + { + super(TypeSender.get(), settings.getObjectType(), "used " + settings.getObjectType().getTypeName()); + } + +} diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCore.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCore.java similarity index 81% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCore.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCore.java index 82df19d6..48b3a3e8 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCore.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCore.java @@ -1,10 +1,10 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveCorePerm; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.VersionCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.VersionCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCore extends MassiveCommand { @@ -38,7 +38,7 @@ public class CmdMassiveCore extends MassiveCommand this.addChild(this.cmdMassiveCoreVersion); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.BASECOMMAND.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.BASECOMMAND.node)); } } diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBuffer.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBuffer.java similarity index 81% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBuffer.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBuffer.java index b69a1feb..d952fa5a 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBuffer.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBuffer.java @@ -1,8 +1,8 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCorePerm; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreBuffer extends MassiveCommand { @@ -33,7 +33,7 @@ public class CmdMassiveCoreBuffer extends MassiveCommand this.addAliases("buffer"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.BUFFER.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.BUFFER.node)); } } diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferAdd.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferAdd.java similarity index 73% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferAdd.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferAdd.java index 8d2e3506..8a7b3871 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferAdd.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferAdd.java @@ -1,11 +1,11 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCoreEngineVariable; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeString; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.primitive.TypeString; public class CmdMassiveCoreBufferAdd extends MassiveCommand { @@ -22,7 +22,7 @@ public class CmdMassiveCoreBufferAdd extends MassiveCommand this.addParameter(TypeString.get(), "text", true).setDesc("the text to add to your buffer"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.BUFFER_ADD.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.BUFFER_ADD.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferClear.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferClear.java similarity index 70% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferClear.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferClear.java index c66e2763..7c1fdec3 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferClear.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferClear.java @@ -1,9 +1,9 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCoreEngineVariable; import com.massivecraft.massivecore.MassiveCorePerm; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreBufferClear extends MassiveCommand { @@ -17,7 +17,7 @@ public class CmdMassiveCoreBufferClear extends MassiveCommand this.addAliases("clear"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.BUFFER_CLEAR.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.BUFFER_CLEAR.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferPrint.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferPrint.java similarity index 74% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferPrint.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferPrint.java index 56591264..27541a0e 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferPrint.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferPrint.java @@ -1,9 +1,9 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCoreEngineVariable; import com.massivecraft.massivecore.MassiveCorePerm; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreBufferPrint extends MassiveCommand { @@ -17,7 +17,7 @@ public class CmdMassiveCoreBufferPrint extends MassiveCommand this.addAliases("print"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.BUFFER_PRINT.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.BUFFER_PRINT.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferSet.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferSet.java similarity index 71% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferSet.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferSet.java index a0f35b5f..ed41addf 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferSet.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferSet.java @@ -1,11 +1,11 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCoreEngineVariable; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeString; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.primitive.TypeString; public class CmdMassiveCoreBufferSet extends MassiveCommand { @@ -22,7 +22,7 @@ public class CmdMassiveCoreBufferSet extends MassiveCommand this.addParameter(TypeString.get(), "text", true).setDesc("the text to set your buffer to"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.BUFFER_SET.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.BUFFER_SET.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferWhitespace.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferWhitespace.java similarity index 75% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferWhitespace.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferWhitespace.java index bf411dc8..6064e3ed 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreBufferWhitespace.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreBufferWhitespace.java @@ -1,11 +1,11 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCoreEngineVariable; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeInteger; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.primitive.TypeInteger; import com.massivecraft.massivecore.util.Txt; public class CmdMassiveCoreBufferWhitespace extends MassiveCommand @@ -23,7 +23,7 @@ public class CmdMassiveCoreBufferWhitespace extends MassiveCommand this.addParameter(1, TypeInteger.get(), "times").setDesc("the amount of whitespace to add to your buffer"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.BUFFER_WHITESPACE.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.BUFFER_WHITESPACE.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreCmdurl.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreCmdurl.java similarity index 81% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreCmdurl.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreCmdurl.java index 82dacde0..b055988f 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreCmdurl.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreCmdurl.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import java.net.MalformedURLException; import java.net.URL; @@ -10,10 +10,10 @@ import org.bukkit.entity.Player; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.req.ReqIsPlayer; -import com.massivecraft.massivecore.cmd.type.TypeString; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer; +import com.massivecraft.massivecore.command.type.primitive.TypeString; import com.massivecraft.massivecore.mixin.Mixin; import com.massivecraft.massivecore.util.WebUtil; @@ -32,8 +32,8 @@ public class CmdMassiveCoreCmdurl extends MassiveCommand this.addParameter(TypeString.get(), "url").setDesc("the url to load"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.CMDURL.node)); - this.addRequirements(ReqIsPlayer.get()); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.CMDURL.node)); + this.addRequirements(RequirementIsPlayer.get()); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreHearsound.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreHearsound.java similarity index 60% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreHearsound.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreHearsound.java index 254da123..3ae36ee1 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreHearsound.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreHearsound.java @@ -1,15 +1,15 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import java.util.List; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.SoundEffect; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.req.ReqIsPlayer; -import com.massivecraft.massivecore.cmd.type.TypeList; -import com.massivecraft.massivecore.cmd.type.TypeSoundEffect; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer; +import com.massivecraft.massivecore.command.type.collection.TypeList; +import com.massivecraft.massivecore.command.type.combined.TypeSoundEffect; public class CmdMassiveCoreHearsound extends MassiveCommand { @@ -26,8 +26,8 @@ public class CmdMassiveCoreHearsound extends MassiveCommand this.addParameter(TypeList.get(TypeSoundEffect.get()), "sound(s)", true).setDesc("the sounds to hear"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.HEARSOUND.node)); - this.addRequirements(ReqIsPlayer.get()); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.HEARSOUND.node)); + this.addRequirements(RequirementIsPlayer.get()); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreId.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreId.java similarity index 67% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreId.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreId.java index c83c662c..afa6ece0 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreId.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreId.java @@ -1,9 +1,9 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.ConfServer; import com.massivecraft.massivecore.MassiveCorePerm; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreId extends MassiveCommand { @@ -17,7 +17,7 @@ public class CmdMassiveCoreId extends MassiveCommand this.addAliases("id"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.ID.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.ID.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStore.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStore.java similarity index 77% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStore.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStore.java index 4909d46b..d86ef8de 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStore.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStore.java @@ -1,8 +1,8 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCorePerm; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreStore extends MassiveCommand { @@ -29,7 +29,7 @@ public class CmdMassiveCoreStore extends MassiveCommand this.addAliases("store"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.STORE.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.STORE.node)); } } diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStoreCopydb.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreCopydb.java similarity index 88% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStoreCopydb.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreCopydb.java index b66d6323..0e8363f4 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStoreCopydb.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreCopydb.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import java.util.Collection; import java.util.Map.Entry; @@ -7,9 +7,9 @@ import java.util.Set; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeString; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.primitive.TypeString; import com.massivecraft.massivecore.store.Coll; import com.massivecraft.massivecore.store.Db; import com.massivecraft.massivecore.store.MStore; @@ -31,7 +31,7 @@ public class CmdMassiveCoreStoreCopydb extends MassiveCommand this.addParameter(TypeString.get(), "to").setDesc("the database to copy to"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.STORE_COPYDB.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.STORE_COPYDB.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStoreListcolls.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreListcolls.java similarity index 84% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStoreListcolls.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreListcolls.java index 3fc9467a..6c3cd2c7 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStoreListcolls.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreListcolls.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import java.util.Set; import java.util.TreeSet; @@ -7,9 +7,9 @@ import com.massivecraft.massivecore.ConfServer; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.NaturalOrderComparator; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeString; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.primitive.TypeString; import com.massivecraft.massivecore.store.Coll; import com.massivecraft.massivecore.store.Db; import com.massivecraft.massivecore.store.MStore; @@ -30,7 +30,7 @@ public class CmdMassiveCoreStoreListcolls extends MassiveCommand this.addParameter(TypeString.get(), "db", ConfServer.dburi).setDesc("the database to list colls from"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.STORE_LISTCOLLS.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.STORE_LISTCOLLS.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStoreStats.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreStats.java similarity index 88% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStoreStats.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreStats.java index 06e9814d..9e734302 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreStoreStats.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreStats.java @@ -1,12 +1,12 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import java.util.Map.Entry; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeColl; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.store.TypeColl; import com.massivecraft.massivecore.store.Coll; import com.massivecraft.massivecore.store.ExamineThread; import com.massivecraft.massivecore.util.MUtil; @@ -27,7 +27,7 @@ public class CmdMassiveCoreStoreStats extends MassiveCommand this.addParameter(TypeColl.get(), "coll", Coll.TOTAL).setDesc("the coll to show info about"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.STORE_STATS.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.STORE_STATS.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreTest.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreTest.java similarity index 90% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreTest.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreTest.java index 391c5f59..841e4de8 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreTest.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreTest.java @@ -1,7 +1,7 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.cmd.MassiveCommand; +import com.massivecraft.massivecore.command.MassiveCommand; public class CmdMassiveCoreTest extends MassiveCommand { diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsys.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsys.java similarity index 79% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsys.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsys.java index 246a2055..29bcb3ac 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsys.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsys.java @@ -1,8 +1,8 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCorePerm; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreUsys extends MassiveCommand { @@ -31,7 +31,7 @@ public class CmdMassiveCoreUsys extends MassiveCommand this.addAliases("usys"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS.node)); } } diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspect.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspect.java similarity index 77% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspect.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspect.java index 25f680b2..e31dbe60 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspect.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspect.java @@ -1,8 +1,8 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCorePerm; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreUsysAspect extends MassiveCommand { @@ -29,7 +29,7 @@ public class CmdMassiveCoreUsysAspect extends MassiveCommand this.addAliases("aspect"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_ASPECT.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_ASPECT.node)); } } diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspectList.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspectList.java similarity index 80% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspectList.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspectList.java index 78b05b09..7e945c9e 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspectList.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspectList.java @@ -1,12 +1,12 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.Aspect; import com.massivecraft.massivecore.AspectColl; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.cmd.Parameter; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.Parameter; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; import com.massivecraft.massivecore.pager.Pager; import com.massivecraft.massivecore.pager.Stringifier; import com.massivecraft.massivecore.util.Txt; @@ -26,7 +26,7 @@ public class CmdMassiveCoreUsysAspectList extends MassiveCommand this.addParameter(Parameter.getPage()).setDesc("the page in the aspect list"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_ASPECT_LIST.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_ASPECT_LIST.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspectShow.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspectShow.java similarity index 74% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspectShow.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspectShow.java index 0a64b40d..25cb4a79 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspectShow.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspectShow.java @@ -1,11 +1,11 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.Aspect; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeAspect; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.store.TypeAspect; import com.massivecraft.massivecore.util.Txt; public class CmdMassiveCoreUsysAspectShow extends MassiveCommand @@ -23,7 +23,7 @@ public class CmdMassiveCoreUsysAspectShow extends MassiveCommand this.addParameter(TypeAspect.get(), "aspect").setDesc("the aspect to show info about"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_ASPECT_SHOW.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_ASPECT_SHOW.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspectUse.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspectUse.java similarity index 72% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspectUse.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspectUse.java index 62144e66..ca155f54 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysAspectUse.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysAspectUse.java @@ -1,13 +1,13 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.Aspect; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.Multiverse; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeAspect; -import com.massivecraft.massivecore.cmd.type.TypeMultiverse; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.store.TypeAspect; +import com.massivecraft.massivecore.command.type.store.TypeMultiverse; public class CmdMassiveCoreUsysAspectUse extends MassiveCommand { @@ -25,7 +25,7 @@ public class CmdMassiveCoreUsysAspectUse extends MassiveCommand this.addParameter(TypeMultiverse.get(), "multiverse").setDesc("the multiverse which the aspect should use"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_ASPECT_USE.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_ASPECT_USE.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverse.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverse.java similarity index 80% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverse.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverse.java index e3252daf..f909f4c8 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverse.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverse.java @@ -1,8 +1,8 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCorePerm; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreUsysMultiverse extends MassiveCommand { @@ -31,7 +31,7 @@ public class CmdMassiveCoreUsysMultiverse extends MassiveCommand this.addAliases("multiverse"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE.node)); } } diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseDel.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseDel.java similarity index 75% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseDel.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseDel.java index aec4bbcb..3655a83f 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseDel.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseDel.java @@ -1,12 +1,12 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.Multiverse; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeMultiverse; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.store.TypeMultiverse; public class CmdMassiveCoreUsysMultiverseDel extends MassiveCommand { @@ -23,7 +23,7 @@ public class CmdMassiveCoreUsysMultiverseDel extends MassiveCommand this.addParameter(TypeMultiverse.get(), "multiverse").setDesc("the multiverse to delete"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE_DEL.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE_DEL.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseList.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseList.java similarity index 80% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseList.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseList.java index 074b4cfa..8bf82cbd 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseList.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseList.java @@ -1,12 +1,12 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.Multiverse; import com.massivecraft.massivecore.MultiverseColl; -import com.massivecraft.massivecore.cmd.Parameter; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.Parameter; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; import com.massivecraft.massivecore.pager.Pager; import com.massivecraft.massivecore.pager.Stringifier; import com.massivecraft.massivecore.util.Txt; @@ -26,7 +26,7 @@ public class CmdMassiveCoreUsysMultiverseList extends MassiveCommand this.addParameter(Parameter.getPage()); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE_LIST.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE_LIST.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseNew.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseNew.java similarity index 73% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseNew.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseNew.java index 7c8b73df..98cff56e 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseNew.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseNew.java @@ -1,11 +1,11 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.MultiverseColl; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeString; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.primitive.TypeString; public class CmdMassiveCoreUsysMultiverseNew extends MassiveCommand { @@ -22,7 +22,7 @@ public class CmdMassiveCoreUsysMultiverseNew extends MassiveCommand this.addParameter(TypeString.get(), "multiverse").setDesc("name of multiverse to create"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE_NEW.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE_NEW.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseShow.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseShow.java similarity index 84% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseShow.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseShow.java index c3ef1da6..7ce14680 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysMultiverseShow.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysMultiverseShow.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import java.util.ArrayList; import java.util.List; @@ -8,9 +8,9 @@ import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.Multiverse; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeMultiverse; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.store.TypeMultiverse; import com.massivecraft.massivecore.util.Txt; public class CmdMassiveCoreUsysMultiverseShow extends MassiveCommand @@ -28,7 +28,7 @@ public class CmdMassiveCoreUsysMultiverseShow extends MassiveCommand this.addParameter(TypeMultiverse.get(), "multiverse").setDesc("the multiverse to show info about"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE_SHOW.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE_SHOW.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverse.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverse.java similarity index 77% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverse.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverse.java index dff482c2..7d56ea2c 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverse.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverse.java @@ -1,8 +1,8 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCorePerm; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; public class CmdMassiveCoreUsysUniverse extends MassiveCommand { @@ -29,7 +29,7 @@ public class CmdMassiveCoreUsysUniverse extends MassiveCommand this.addAliases("universe"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_UNIVERSE.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_UNIVERSE.node)); } } diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverseClear.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverseClear.java similarity index 77% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverseClear.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverseClear.java index 71769ec7..79a1dac3 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverseClear.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverseClear.java @@ -1,13 +1,13 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.Multiverse; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeMultiverse; -import com.massivecraft.massivecore.cmd.type.TypeString; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.primitive.TypeString; +import com.massivecraft.massivecore.command.type.store.TypeMultiverse; public class CmdMassiveCoreUsysUniverseClear extends MassiveCommand { @@ -25,7 +25,7 @@ public class CmdMassiveCoreUsysUniverseClear extends MassiveCommand this.addParameter(TypeMultiverse.get(), "multiverse").setDesc("the multiverse of the universe to clear"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_UNIVERSE_CLEAR.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_UNIVERSE_CLEAR.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverseDel.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverseDel.java similarity index 77% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverseDel.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverseDel.java index 1081da90..62d006fe 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverseDel.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverseDel.java @@ -1,13 +1,13 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.Multiverse; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeMultiverse; -import com.massivecraft.massivecore.cmd.type.TypeString; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.primitive.TypeString; +import com.massivecraft.massivecore.command.type.store.TypeMultiverse; public class CmdMassiveCoreUsysUniverseDel extends MassiveCommand { @@ -25,7 +25,7 @@ public class CmdMassiveCoreUsysUniverseDel extends MassiveCommand this.addParameter(TypeMultiverse.get(), "multiverse").setDesc("the multiverse of the universe to delete"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE_DEL.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_MULTIVERSE_DEL.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverseNew.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverseNew.java similarity index 74% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverseNew.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverseNew.java index e1f183bb..b675a7e3 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysUniverseNew.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysUniverseNew.java @@ -1,12 +1,12 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.Multiverse; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeMultiverse; -import com.massivecraft.massivecore.cmd.type.TypeString; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.primitive.TypeString; +import com.massivecraft.massivecore.command.type.store.TypeMultiverse; public class CmdMassiveCoreUsysUniverseNew extends MassiveCommand { @@ -24,7 +24,7 @@ public class CmdMassiveCoreUsysUniverseNew extends MassiveCommand this.addParameter(TypeMultiverse.get(), "multiverse").setDesc("the multiverse of the universe to create"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_UNIVERSE_NEW.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_UNIVERSE_NEW.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysWorld.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysWorld.java similarity index 80% rename from src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysWorld.java rename to src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysWorld.java index e2700285..ba985dd8 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreUsysWorld.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreUsysWorld.java @@ -1,12 +1,12 @@ -package com.massivecraft.massivecore.cmd.massivecore; +package com.massivecraft.massivecore.command.massivecore; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.Multiverse; -import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.req.ReqHasPerm; -import com.massivecraft.massivecore.cmd.type.TypeMultiverse; -import com.massivecraft.massivecore.cmd.type.TypeString; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.requirement.RequirementHasPerm; +import com.massivecraft.massivecore.command.type.primitive.TypeString; +import com.massivecraft.massivecore.command.type.store.TypeMultiverse; public class CmdMassiveCoreUsysWorld extends MassiveCommand { @@ -25,7 +25,7 @@ public class CmdMassiveCoreUsysWorld extends MassiveCommand this.addParameter(TypeMultiverse.get(), "multiverse").setDesc("the multiverse of the universe to move the world to"); // Requirements - this.addRequirements(ReqHasPerm.get(MassiveCorePerm.USYS_WORLD.node)); + this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.USYS_WORLD.node)); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/req/Req.java b/src/com/massivecraft/massivecore/command/requirement/Requirement.java similarity index 66% rename from src/com/massivecraft/massivecore/cmd/req/Req.java rename to src/com/massivecraft/massivecore/command/requirement/Requirement.java index 5cbf2986..e31b7f10 100644 --- a/src/com/massivecraft/massivecore/cmd/req/Req.java +++ b/src/com/massivecraft/massivecore/command/requirement/Requirement.java @@ -1,11 +1,11 @@ -package com.massivecraft.massivecore.cmd.req; +package com.massivecraft.massivecore.command.requirement; import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.Predicate; -import com.massivecraft.massivecore.cmd.MassiveCommand; +import com.massivecraft.massivecore.command.MassiveCommand; -public interface Req extends Predicate +public interface Requirement extends Predicate { public boolean apply(CommandSender sender, MassiveCommand command); diff --git a/src/com/massivecraft/massivecore/cmd/req/ReqAbstract.java b/src/com/massivecraft/massivecore/command/requirement/RequirementAbstract.java similarity index 67% rename from src/com/massivecraft/massivecore/cmd/req/ReqAbstract.java rename to src/com/massivecraft/massivecore/command/requirement/RequirementAbstract.java index 52045179..061c68bd 100644 --- a/src/com/massivecraft/massivecore/cmd/req/ReqAbstract.java +++ b/src/com/massivecraft/massivecore/command/requirement/RequirementAbstract.java @@ -1,12 +1,12 @@ -package com.massivecraft.massivecore.cmd.req; +package com.massivecraft.massivecore.command.requirement; import java.io.Serializable; import org.bukkit.command.CommandSender; -import com.massivecraft.massivecore.cmd.MassiveCommand; +import com.massivecraft.massivecore.command.MassiveCommand; -public abstract class ReqAbstract implements Req, Serializable +public abstract class RequirementAbstract implements Requirement, Serializable { private static final long serialVersionUID = 1L; diff --git a/src/com/massivecraft/massivecore/command/requirement/RequirementAnd.java b/src/com/massivecraft/massivecore/command/requirement/RequirementAnd.java new file mode 100644 index 00000000..d7430d55 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/requirement/RequirementAnd.java @@ -0,0 +1,65 @@ +package com.massivecraft.massivecore.command.requirement; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.command.MassiveCommand; + +public class RequirementAnd extends RequirementAbstract +{ + private static final long serialVersionUID = 1L; + + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public static RequirementAnd get(Requirement... requirements) { return new RequirementAnd(requirements); } + public RequirementAnd(Requirement... requirements) + { + this(Arrays.asList(requirements)); + } + + public static RequirementAnd get(Collection requirements) { return new RequirementAnd(requirements); } + public RequirementAnd(Collection requirements) + { + this.requirements = Collections.unmodifiableList(new ArrayList(requirements)); + } + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private final List requirements; + public List getRequirements() { return this.requirements; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public boolean apply(CommandSender sender, MassiveCommand command) + { + return this.getFirstFailedSubreq(sender, command) == null; + } + + @Override + public String createErrorMessage(CommandSender sender, MassiveCommand command) + { + return this.getFirstFailedSubreq(sender, command).createErrorMessage(sender, command); + } + + public Requirement getFirstFailedSubreq(CommandSender sender, MassiveCommand command) + { + for (Requirement requirement : this.getRequirements()) + { + if (!requirement.apply(sender, command)) return requirement; + } + return null; + } + +} diff --git a/src/com/massivecraft/massivecore/command/requirement/RequirementEditorPropertyCreated.java b/src/com/massivecraft/massivecore/command/requirement/RequirementEditorPropertyCreated.java new file mode 100644 index 00000000..634cbe28 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/requirement/RequirementEditorPropertyCreated.java @@ -0,0 +1,70 @@ +package com.massivecraft.massivecore.command.requirement; + +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.editor.CommandEditAbstract; +import com.massivecraft.massivecore.command.editor.Property; +import com.massivecraft.massivecore.command.requirement.RequirementAbstract; +import com.massivecraft.massivecore.util.Txt; + +public class RequirementEditorPropertyCreated extends RequirementAbstract +{ + private static final long serialVersionUID = 1L; + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + protected final boolean createdTarget; + public boolean isCreatedTarget() { return this.createdTarget; } + + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public static RequirementEditorPropertyCreated get(boolean createdTarget) { return new RequirementEditorPropertyCreated(createdTarget); } + public RequirementEditorPropertyCreated(boolean createdTarget) + { + this.createdTarget = createdTarget; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public boolean apply(CommandSender sender, MassiveCommand command) + { + return this.applyInner(sender, command); + } + + public boolean applyInner(CommandSender sender, MassiveCommand command) + { + if ( ! (command instanceof CommandEditAbstract)) return false; + + @SuppressWarnings("unchecked") + CommandEditAbstract commandEditor = (CommandEditAbstract)command; + + Property property = commandEditor.getProperty(); + if (property == null) return false; + + O used = commandEditor.getObject(sender); + if (used == null) return false; + + boolean created = (property.getRaw(used) != null); + + return created == this.isCreatedTarget(); + } + + @Override + public String createErrorMessage(CommandSender sender, MassiveCommand command) + { + if ( ! (command instanceof CommandEditAbstract)) return Txt.parse("This is not an editor!"); + CommandEditAbstract commandEditor = (CommandEditAbstract)command; + + Property property = commandEditor.getProperty(); + return Txt.parse("You must " + (this.isCreatedTarget() ? "create" : "delete") + " " + (property != null ? property.getName() : "the property") + " before you " + getDesc(command) + "."); + } + +} diff --git a/src/com/massivecraft/massivecore/command/requirement/RequirementEditorUse.java b/src/com/massivecraft/massivecore/command/requirement/RequirementEditorUse.java new file mode 100644 index 00000000..3c87dfb9 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/requirement/RequirementEditorUse.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.command.requirement; + +import org.bukkit.command.CommandSender; +import com.massivecraft.massivecore.command.MassiveCommand; +import com.massivecraft.massivecore.command.editor.CommandEditAbstract; +import com.massivecraft.massivecore.util.Txt; + +public class RequirementEditorUse extends RequirementAbstract +{ + private static final long serialVersionUID = 1L; + + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static RequirementEditorUse i = new RequirementEditorUse(); + public static RequirementEditorUse get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public boolean apply(CommandSender sender, MassiveCommand command) + { + if ( ! (command instanceof CommandEditAbstract)) return false; + CommandEditAbstract commandEditor = (CommandEditAbstract)command; + return commandEditor.getSettings().getUsed(sender) != null; + } + + @Override + public String createErrorMessage(CommandSender sender, MassiveCommand command) + { + if ( ! (command instanceof CommandEditAbstract)) return Txt.parse("This is not an editor!"); + CommandEditAbstract commandEditor = (CommandEditAbstract)command; + + String noun = commandEditor.getSettings().getObjectType().getTypeName(); + String aan = Txt.aan(noun); + + return Txt.parse("You must use %s %s to edit it.", aan, noun); + } + +} diff --git a/src/com/massivecraft/massivecore/cmd/req/ReqHasPerm.java b/src/com/massivecraft/massivecore/command/requirement/RequirementHasPerm.java similarity index 69% rename from src/com/massivecraft/massivecore/cmd/req/ReqHasPerm.java rename to src/com/massivecraft/massivecore/command/requirement/RequirementHasPerm.java index 22175087..741cf6ca 100644 --- a/src/com/massivecraft/massivecore/cmd/req/ReqHasPerm.java +++ b/src/com/massivecraft/massivecore/command/requirement/RequirementHasPerm.java @@ -1,11 +1,11 @@ -package com.massivecraft.massivecore.cmd.req; +package com.massivecraft.massivecore.command.requirement; import org.bukkit.command.CommandSender; -import com.massivecraft.massivecore.cmd.MassiveCommand; +import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.util.PermUtil; -public class ReqHasPerm extends ReqAbstract +public class RequirementHasPerm extends RequirementAbstract { private static final long serialVersionUID = 1L; @@ -13,8 +13,8 @@ public class ReqHasPerm extends ReqAbstract // INSTANCE & CONSTRUCT // -------------------------------------------- // - public static ReqHasPerm get(String perm) { return new ReqHasPerm(perm); } - public ReqHasPerm(String perm) { this.perm = perm; } + public static RequirementHasPerm get(String perm) { return new RequirementHasPerm(perm); } + public RequirementHasPerm(String perm) { this.perm = perm; } // -------------------------------------------- // // FIELDS diff --git a/src/com/massivecraft/massivecore/cmd/req/ReqIsPlayer.java b/src/com/massivecraft/massivecore/command/requirement/RequirementIsPlayer.java similarity index 68% rename from src/com/massivecraft/massivecore/cmd/req/ReqIsPlayer.java rename to src/com/massivecraft/massivecore/command/requirement/RequirementIsPlayer.java index bee1295f..2d29a57b 100644 --- a/src/com/massivecraft/massivecore/cmd/req/ReqIsPlayer.java +++ b/src/com/massivecraft/massivecore/command/requirement/RequirementIsPlayer.java @@ -1,13 +1,13 @@ -package com.massivecraft.massivecore.cmd.req; +package com.massivecraft.massivecore.command.requirement; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.massivecraft.massivecore.Lang; -import com.massivecraft.massivecore.cmd.MassiveCommand; +import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.util.Txt; -public class ReqIsPlayer extends ReqAbstract +public class RequirementIsPlayer extends RequirementAbstract { private static final long serialVersionUID = 1L; @@ -15,8 +15,8 @@ public class ReqIsPlayer extends ReqAbstract // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static ReqIsPlayer i = new ReqIsPlayer(); - public static ReqIsPlayer get() { return i; } + private static RequirementIsPlayer i = new RequirementIsPlayer(); + public static RequirementIsPlayer get() { return i; } // -------------------------------------------- // // OVERRIDE diff --git a/src/com/massivecraft/massivecore/cmd/req/ReqIsntCertainSender.java b/src/com/massivecraft/massivecore/command/requirement/RequirementIsntCertainSender.java similarity index 69% rename from src/com/massivecraft/massivecore/cmd/req/ReqIsntCertainSender.java rename to src/com/massivecraft/massivecore/command/requirement/RequirementIsntCertainSender.java index 2ab4ccdb..ca86133e 100644 --- a/src/com/massivecraft/massivecore/cmd/req/ReqIsntCertainSender.java +++ b/src/com/massivecraft/massivecore/command/requirement/RequirementIsntCertainSender.java @@ -1,13 +1,13 @@ -package com.massivecraft.massivecore.cmd.req; +package com.massivecraft.massivecore.command.requirement; import org.bukkit.command.CommandSender; -import com.massivecraft.massivecore.cmd.MassiveCommand; +import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.mixin.Mixin; import com.massivecraft.massivecore.util.IdUtil; import com.massivecraft.massivecore.util.Txt; -public class ReqIsntCertainSender extends ReqAbstract +public class RequirementIsntCertainSender extends RequirementAbstract { private static final long serialVersionUID = 1L; @@ -15,8 +15,8 @@ public class ReqIsntCertainSender extends ReqAbstract // INSTANCE & CONSTRUCT // -------------------------------------------- // - public static ReqIsntCertainSender get(Object senderObject) { return new ReqIsntCertainSender(senderObject); } - public ReqIsntCertainSender(Object senderObject) { this.senderId = IdUtil.getId(senderObject); } + public static RequirementIsntCertainSender get(Object senderObject) { return new RequirementIsntCertainSender(senderObject); } + public RequirementIsntCertainSender(Object senderObject) { this.senderId = IdUtil.getId(senderObject); } // -------------------------------------------- // // FIELDS diff --git a/src/com/massivecraft/massivecore/cmd/req/ReqIsntPlayer.java b/src/com/massivecraft/massivecore/command/requirement/RequirementIsntPlayer.java similarity index 68% rename from src/com/massivecraft/massivecore/cmd/req/ReqIsntPlayer.java rename to src/com/massivecraft/massivecore/command/requirement/RequirementIsntPlayer.java index f29e739d..55731814 100644 --- a/src/com/massivecraft/massivecore/cmd/req/ReqIsntPlayer.java +++ b/src/com/massivecraft/massivecore/command/requirement/RequirementIsntPlayer.java @@ -1,13 +1,13 @@ -package com.massivecraft.massivecore.cmd.req; +package com.massivecraft.massivecore.command.requirement; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.massivecraft.massivecore.Lang; -import com.massivecraft.massivecore.cmd.MassiveCommand; +import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.util.Txt; -public class ReqIsntPlayer extends ReqAbstract +public class RequirementIsntPlayer extends RequirementAbstract { private static final long serialVersionUID = 1L; @@ -15,8 +15,8 @@ public class ReqIsntPlayer extends ReqAbstract // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static ReqIsntPlayer i = new ReqIsntPlayer(); - public static ReqIsntPlayer get() { return i; } + private static RequirementIsntPlayer i = new RequirementIsntPlayer(); + public static RequirementIsntPlayer get() { return i; } // -------------------------------------------- // // OVERRIDE diff --git a/src/com/massivecraft/massivecore/cmd/req/ReqTitlesAvailable.java b/src/com/massivecraft/massivecore/command/requirement/RequirementTitlesAvailable.java similarity index 70% rename from src/com/massivecraft/massivecore/cmd/req/ReqTitlesAvailable.java rename to src/com/massivecraft/massivecore/command/requirement/RequirementTitlesAvailable.java index 84a4119f..cd6c6d7c 100644 --- a/src/com/massivecraft/massivecore/cmd/req/ReqTitlesAvailable.java +++ b/src/com/massivecraft/massivecore/command/requirement/RequirementTitlesAvailable.java @@ -1,13 +1,13 @@ -package com.massivecraft.massivecore.cmd.req; +package com.massivecraft.massivecore.command.requirement; import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.Lang; -import com.massivecraft.massivecore.cmd.MassiveCommand; +import com.massivecraft.massivecore.command.MassiveCommand; import com.massivecraft.massivecore.mixin.Mixin; import com.massivecraft.massivecore.util.Txt; -public class ReqTitlesAvailable extends ReqAbstract +public class RequirementTitlesAvailable extends RequirementAbstract { private static final long serialVersionUID = 1L; @@ -15,8 +15,8 @@ public class ReqTitlesAvailable extends ReqAbstract // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static ReqTitlesAvailable i = new ReqTitlesAvailable(); - public static ReqTitlesAvailable get() { return i; } + private static RequirementTitlesAvailable i = new RequirementTitlesAvailable(); + public static RequirementTitlesAvailable get() { return i; } // -------------------------------------------- // // OVERRIDE diff --git a/src/com/massivecraft/massivecore/command/type/Type.java b/src/com/massivecraft/massivecore/command/type/Type.java new file mode 100644 index 00000000..c7e27bac --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/Type.java @@ -0,0 +1,116 @@ +package com.massivecraft.massivecore.command.type; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.editor.CommandEditAbstract; +import com.massivecraft.massivecore.command.editor.EditSettings; +import com.massivecraft.massivecore.command.editor.Property; + +public interface Type +{ + // -------------------------------------------- // + // META + // -------------------------------------------- // + + // Human friendly name + public String getTypeName(); + + // -------------------------------------------- // + // INNER + // -------------------------------------------- // + + public , X extends Object> List getInnerTypes(); + public Type getInnerType(int index); + public Type getInnerType(); + + public void setInnerTypes(Collection> innerTypes); + public void setInnerTypes(Type... innerTypes); + public void setInnerType(Type innerType); + + // -------------------------------------------- // + // WRITE VISUAL COLOR + // -------------------------------------------- // + + public ChatColor getVisualColor(T value, CommandSender sender); + public ChatColor getVisualColor(T value); + public void setVisualColor(ChatColor color); + + // -------------------------------------------- // + // WRITE VISUAL + // -------------------------------------------- // + // A visual and colorful representation. Possibly with added detail such as simple ASCII art. + + public String getVisualInner(T value, CommandSender sender); + public String getVisualInner(T value); + public String getVisual(T value, CommandSender sender); + public String getVisual(T value); + + public Set getVisualsInner(T value, CommandSender sender); + public Set getVisualsInner(T value); + public Set getVisuals(T value, CommandSender sender); + public Set getVisuals(T value); + + // -------------------------------------------- // + // WRITE NAME + // -------------------------------------------- // + // A human friendly but simple representation without color and clutter. + + public String getNameInner(T value); + public String getName(T value); + public Set getNamesInner(T value); + public Set getNames(T value); + + // -------------------------------------------- // + // WRITE ID + // -------------------------------------------- // + // System identification string. Most times unsuitable for humans. + + public String getIdInner(T value); + public String getId(T value); + public Set getIdsInner(T value); + public Set getIds(T value); + + // -------------------------------------------- // + // READ + // -------------------------------------------- // + + public T read(String arg, CommandSender sender) throws MassiveException; + public T read(CommandSender sender) throws MassiveException; + public T read(String arg) throws MassiveException; + public T read() throws MassiveException; + + // -------------------------------------------- // + // VALID + // -------------------------------------------- // + // Used for arbitrary argument order + + public boolean isValid(String arg, CommandSender sender); + + // -------------------------------------------- // + // TAB LIST + // -------------------------------------------- // + + // The sender is the one that tried to tab complete. + // The arg is beginning the word they are trying to tab complete. + public Collection getTabList(CommandSender sender, String arg); + public List getTabListFiltered(CommandSender sender, String arg); + + // Sometimes we put a space after a tab completion. + // That would however not make sense with all Types. + // Default is true; + public boolean allowSpaceAfterTab(); + + // -------------------------------------------- // + // EDITOR + // -------------------------------------------- // + + public CommandEditAbstract createEditCommand(EditSettings settings, Property property); + public T createNewInstance(); + +} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeAbstract.java b/src/com/massivecraft/massivecore/command/type/TypeAbstract.java similarity index 52% rename from src/com/massivecraft/massivecore/cmd/type/TypeAbstract.java rename to src/com/massivecraft/massivecore/command/type/TypeAbstract.java index 3c8b9966..1beb5f51 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypeAbstract.java +++ b/src/com/massivecraft/massivecore/command/type/TypeAbstract.java @@ -1,61 +1,44 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.ListIterator; +import java.util.Set; +import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.Named; +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.collections.MassiveSet; +import com.massivecraft.massivecore.command.editor.CommandEditAbstract; +import com.massivecraft.massivecore.command.editor.CommandEditSimple; +import com.massivecraft.massivecore.command.editor.EditSettings; +import com.massivecraft.massivecore.command.editor.Property; +import com.massivecraft.massivecore.store.Entity; +import com.massivecraft.massivecore.store.SenderEntity; import com.massivecraft.massivecore.util.Txt; public abstract class TypeAbstract implements Type { // -------------------------------------------- // - // OVERRIDE: READ + // CONSTANTS // -------------------------------------------- // - @Override - public T read(CommandSender sender) throws MassiveException - { - return this.read(null, sender); - } - - @Override - public T read(String arg) throws MassiveException - { - return this.read(arg, null); - } - - @Override - public T read() throws MassiveException - { - return this.read(null, null); - } + public static final String NULL = Txt.parse("NULL"); + public static final String EMPTY = Txt.parse("EMPTY"); + public static final String UNKNOWN = Txt.parse("???"); + + public static final ChatColor COLOR_DEFAULT = ChatColor.YELLOW; + public static final ChatColor COLOR_NUMBER = ChatColor.LIGHT_PURPLE; // -------------------------------------------- // - // OVERRIDE: VALID - // -------------------------------------------- // - - @Override - public boolean isValid(String arg, CommandSender sender) - { - try - { - this.read(arg, sender); - return true; - } - catch (MassiveException ex) - { - return false; - } - } - - // -------------------------------------------- // - // OVERRIDE: NAME + // META // -------------------------------------------- // @Override @@ -73,16 +56,202 @@ public abstract class TypeAbstract implements Type } // -------------------------------------------- // - // OVERRIDE: TAB + // INNER + // -------------------------------------------- // + + protected List> innerTypes = new MassiveList>(); + + @SuppressWarnings("unchecked") + public , X extends Object> List getInnerTypes() { return (List) this.innerTypes; } + @SuppressWarnings("unchecked") + public Type getInnerType(int index) { return (Type) this.getInnerTypes().get(index); } + public Type getInnerType() { return this.getInnerType(0); }; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void setInnerTypes(Collection> innerTypes) { this.innerTypes = new MassiveList(innerTypes); } + public void setInnerTypes(Type... innerTypes) { this.setInnerTypes(Arrays.asList(innerTypes)); }; + public void setInnerType(Type innerType) { this.setInnerTypes(innerType); }; + + // -------------------------------------------- // + // WRITE VISUAL COLOR + // -------------------------------------------- // + + protected ChatColor visualColor = COLOR_DEFAULT; + public void setVisualColor(ChatColor color) + { + this.visualColor = color; + } + public ChatColor getVisualColor(T value, CommandSender sender) + { + return this.visualColor; + } + public ChatColor getVisualColor(T value) + { + return this.getVisualColor(value, null); + } + + // -------------------------------------------- // + // WRITE VISUAL + // -------------------------------------------- // + + public String getVisualInner(T value, CommandSender sender) + { + if (value instanceof SenderEntity) + { + SenderEntity senderEntity = (SenderEntity)value; + String ret = senderEntity.getDisplayName(sender); + return ret == null ? NULL : ret; + } + + return this.getVisualColor(value, sender) + this.getNameInner(value); + } + public String getVisualInner(T value) + { + return this.getVisualInner(value, null); + } + + public String getVisual(T value, CommandSender sender) + { + if (value == null) return NULL; + return this.getVisualInner(value, sender); + } + public String getVisual(T value) + { + return this.getVisual(value, null); + } + + public Set getVisualsInner(T value, CommandSender sender) + { + return new MassiveSet(this.getVisualInner(value, sender)); + } + public Set getVisualsInner(T value) + { + return this.getVisualsInner(value, null); + } + + public Set getVisuals(T value, CommandSender sender) + { + if (value == null) return new MassiveSet(NULL); + return this.getVisualsInner(value, sender); + } + public Set getVisuals(T value) + { + return this.getVisuals(value, null); + } + + // -------------------------------------------- // + // WRITE NAME + // -------------------------------------------- // + + public String getNameInner(T value) + { + if (value instanceof Named) + { + Named named = (Named) value; + return named.getName(); + } + + return this.getIdInner(value); + } + + public String getName(T value) + { + if (value == null) return null; + return this.getNameInner(value); + } + + public Set getNamesInner(T value) + { + return new MassiveSet(this.getNameInner(value)); + } + + public Set getNames(T value) + { + if (value == null) return new MassiveSet(); + return this.getNamesInner(value); + } + + // -------------------------------------------- // + // WRITE ID + // -------------------------------------------- // + + public String getIdInner(T value) + { + if (value instanceof Entity) + { + Entity entity = (Entity)value; + return entity.getId(); + } + else if (value instanceof String || value instanceof Number || value instanceof Boolean) + { + return value.toString(); + } + + return null; + } + + public String getId(T value) + { + if (value == null) return null; + return this.getIdInner(value); + } + + public Set getIdsInner(T value) + { + return new MassiveSet(this.getIdInner(value)); + } + + public Set getIds(T value) + { + if (value == null) return new MassiveSet(); + return this.getIdsInner(value); + } + + // -------------------------------------------- // + // READ + // -------------------------------------------- // + + public T read(CommandSender sender) throws MassiveException + { + return this.read(null, sender); + } + + public T read(String arg) throws MassiveException + { + return this.read(arg, null); + } + + public T read() throws MassiveException + { + return this.read(null, null); + } + + // -------------------------------------------- // + // VALID + // -------------------------------------------- // + + public boolean isValid(String arg, CommandSender sender) + { + try + { + this.read(arg, sender); + return true; + } + catch (MassiveException ex) + { + return false; + } + } + + // -------------------------------------------- // + // TAB LIST // -------------------------------------------- // - @Override public boolean allowSpaceAfterTab() { return true; } - @Override public List getTabListFiltered(CommandSender sender, String arg) { // Get the raw tab list. @@ -110,7 +279,7 @@ public abstract class TypeAbstract implements Type } // -------------------------------------------- // - // PRIVATE: TAB COMPLETE CALCULATIONS + // TAB LIST > PRIVATE TAB COMPLETE CALCULATIONS // -------------------------------------------- // // This method performs an initial cleanup of suggestions. @@ -225,4 +394,18 @@ public abstract class TypeAbstract implements Type return new ArrayList(ret); } + // -------------------------------------------- // + // EDITOR + // -------------------------------------------- // + + public CommandEditAbstract createEditCommand(EditSettings settings, Property property) + { + return new CommandEditSimple(settings, property); + } + + public T createNewInstance() + { + throw new RuntimeException("Not implemented"); + } + } diff --git a/src/com/massivecraft/massivecore/command/type/TypeAbstractChoice.java b/src/com/massivecraft/massivecore/command/type/TypeAbstractChoice.java new file mode 100644 index 00000000..91e85776 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/TypeAbstractChoice.java @@ -0,0 +1,354 @@ +package com.massivecraft.massivecore.command.type; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.CaseInsensitiveComparator; +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.collections.MassiveMap; +import com.massivecraft.massivecore.collections.MassiveSet; +import com.massivecraft.massivecore.collections.MassiveTreeSet; +import com.massivecraft.massivecore.command.type.collection.AllAble; +import com.massivecraft.massivecore.util.Txt; + +public abstract class TypeAbstractChoice extends TypeAbstract implements AllAble +{ + // -------------------------------------------- // + // CONSTANTS + // -------------------------------------------- // + + public final static String SUGGEST_FORMAT = Txt.parse("%s"); + public final static String SUGGEST_COMMMA = Txt.parse(" | "); + public final static String SUGGEST_AND = Txt.parse(" | "); + public final static String SUGGEST_DOT = Txt.parse(""); + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + protected int listCountMax = 50; + public int getListCountMax() { return this.listCountMax; } + public TypeAbstractChoice setListCountMax(int listCountMax) { this.listCountMax = listCountMax; return this; } + + protected String help = null; + public String getHelp() { return this.help; } + public TypeAbstractChoice setHelp(String help) { this.help = help; return this; } + + // -------------------------------------------- // + // OVERRIDE: TYPE + // -------------------------------------------- // + + @Override + public T read(String arg, CommandSender sender) throws MassiveException + { + // NPE Evade + if (arg == null) return null; + + // Get All + Collection all = this.getAll(sender); + + // Get Options + Map options = this.getOptions(all); + + // Get Matches + List matches = this.getMatches(options, arg, false); + + // Exact + if (matches.size() == 1) return matches.get(0); + + // Exception + MassiveException exception = new MassiveException(); + + // Suggestions + boolean suggestNone = false; + boolean suggestAmbiguous = false; + boolean suggestAll = false; + boolean suggestLevenshtein = false; + + // Nothing Found + if (matches.isEmpty()) + { + exception.addMsg("No %s matches \"%s\".", this.getTypeName(), arg); + suggestLevenshtein = true; + } + // Ambiguous + else + { + exception.addMsg("%d %ss matches \"%s\".", matches.size(), this.getTypeName(), arg); + suggestAmbiguous = true; + } + + // Suggest + if (all.isEmpty()) suggestNone = true; + if (all.size() <= this.getListCountMax()) suggestAll = true; + + if ( ! this.canList(sender)) + { + + } + else if (suggestNone) + { + exception.addMsg("Note: There is no %s available.", this.getTypeName()); + } + else + { + Collection suggestions = null; + String msg = null; + String format = SUGGEST_FORMAT; + String comma = SUGGEST_COMMMA; + String and = SUGGEST_AND; + String dot = SUGGEST_DOT; + + if (suggestAmbiguous) + { + suggestions = matches; + msg = "Ambigous: %s"; + } + else if (suggestAll) + { + suggestions = all; + msg = "All: %s"; + } + else if (suggestLevenshtein) + { + suggestions = this.getMatches(options, arg, true);; + msg = "Similar: %s"; + } + + if (suggestions.isEmpty()) + { + exception.addMsg("No suggestions found."); + } + else if (suggestions.size() > this.getListCountMax()) + { + exception.addMsg("Over %d suggestions found (hiding output).", this.getListCountMax()); + } + else + { + List visuals = new MassiveList(); + for (T value : suggestions) + { + visuals.add(this.getVisual(value, sender)); + } + exception.addMsg(msg, Txt.implodeCommaAndDot(visuals, format, comma, and, dot)); + } + } + + // Help + String help = this.getHelp(); + if (help != null) exception.addMsg(help); + + throw exception; + } + + // -------------------------------------------- // + // ABSTRACT + // -------------------------------------------- // + + // -------------------------------------------- // + // OVERRIDE: ALL ABLE + // -------------------------------------------- // + + @Override + public Collection getAll(CommandSender sender) + { + // Create + Set ret = new MassiveSet(); + + // Fill + for (T value : this.getAll()) + { + if ( ! this.canSee(value, sender)) continue; + ret.add(value); + } + + // Return + return ret; + } + + public abstract Collection getAll(); + + public boolean canList(CommandSender sender) + { + return true; + } + + public boolean canSee(T value, CommandSender sender) + { + return true; + } + + // -------------------------------------------- // + // MATCHES + // -------------------------------------------- // + + @SuppressWarnings("unchecked") + public List getMatches(Map options, String arg, boolean levenshtein) + { + // Exact + T exact = this.getExactMatch(arg); + if (exact != null) return new MassiveList(exact); + + // Create + List ret = new MassiveList(); + + // Prepare + arg = this.prepareKey(arg); + + // Fill + for (Entry entry : options.entrySet()) + { + String key = entry.getKey(); + T value = entry.getValue(); + + if (arg.equals(key)) return new MassiveList(value); + + if (levenshtein) + { + if ( ! isLevenshteinSimilar(arg, key)) continue; + } + else + { + if ( ! key.startsWith(arg)) continue; + } + + ret.add(value); + } + + // Return + return ret; + } + + // Can be overridden to make use of existing indexes. + public T getExactMatch(String arg) + { + return null; + } + + public boolean isLevenshteinSimilar(String arg, String string) + { + int max = this.getLevenshteinMax(arg); + return StringUtils.getLevenshteinDistance(arg, string) <= max; + } + + public int getLevenshteinMax(String arg) + { + if (arg == null) return 0; // For some apparent reason this is required. + if (arg.length() <= 1) return 0; // When dealing with 1 character aliases, there is way too many options. + if (arg.length() <= 7) return 1; // 1 is default. + + return 2; // If it were 8 characters or more, we end up here. Because many characters allow for more typos. + } + + // -------------------------------------------- // + // OPTIONS + // -------------------------------------------- // + + public Map getOptions(Iterable all) + { + // Create + Map ret = new MassiveMap(); + + // Fill + for (T value : all) + { + for (String key : this.getKeys(value)) + { + ret.put(key, value); + } + } + + // Return + return ret; + } + + // This method creates keys for a certain value. + // They are not comparable. + public List getKeys(T value) + { + // Create + List ret = new MassiveList(); + + // Fill + for (String name : this.getNames(value)) + { + ret.add(this.prepareKey(name)); + } + + for (String id : this.getIds(value)) + { + ret.add(this.prepareKey(id)); + } + + // Return + return ret; + } + + // The purpose of this method is to strip down a string to a comparable string key. + public String prepareKey(String string) + { + if (string == null) return null; + string = string.trim(); + string = string.toLowerCase(); + string = string.replaceAll("[_\\-\\s]+", ""); + return string; + } + + // -------------------------------------------- // + // TAB + // -------------------------------------------- // + + @Override + public Collection getTabList(CommandSender sender, String arg) + { + // Create + Set ret = new MassiveSet(); + + // Fill + for (T value : this.getAll(sender)) + { + ret.addAll(this.getTabs(value)); + } + + // Return + return ret; + } + + public Set getTabs(T value) + { + // Create + Set ret = new MassiveTreeSet(CaseInsensitiveComparator.get()); + + // Fill + for (String name : this.getNames(value)) + { + ret.add(this.prepareTab(name, true)); + ret.add(this.prepareTab(name, false)); + } + + for (String id : this.getIds(value)) + { + ret.add(this.prepareTab(id, true)); + ret.add(this.prepareTab(id, false)); + } + + // Return + return ret; + } + + public String prepareTab(String string, boolean spaces) + { + if (string == null) return null; + string = string.trim(); + if ( ! spaces) string = string.replace(" ", ""); + return string; + } + +} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeAbstractException.java b/src/com/massivecraft/massivecore/command/type/TypeAbstractException.java similarity index 95% rename from src/com/massivecraft/massivecore/cmd/type/TypeAbstractException.java rename to src/com/massivecraft/massivecore/command/type/TypeAbstractException.java index 1d8b5a80..64a25015 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypeAbstractException.java +++ b/src/com/massivecraft/massivecore/command/type/TypeAbstractException.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type; import org.bukkit.command.CommandSender; diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeAbstractSelect.java b/src/com/massivecraft/massivecore/command/type/TypeAbstractSelect.java similarity index 87% rename from src/com/massivecraft/massivecore/cmd/type/TypeAbstractSelect.java rename to src/com/massivecraft/massivecore/command/type/TypeAbstractSelect.java index 1521b642..7f1450f0 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypeAbstractSelect.java +++ b/src/com/massivecraft/massivecore/command/type/TypeAbstractSelect.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type; import java.util.ArrayList; import java.util.Collection; @@ -9,9 +9,10 @@ import org.apache.commons.lang.StringUtils; import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.type.collection.AllAble; import com.massivecraft.massivecore.util.Txt; -public abstract class TypeAbstractSelect extends TypeAbstract +public abstract class TypeAbstractSelect extends TypeAbstract implements AllAble { // -------------------------------------------- // // CONSTANT @@ -24,7 +25,7 @@ public abstract class TypeAbstractSelect extends TypeAbstract // -------------------------------------------- // public abstract T select(String str, CommandSender sender) throws MassiveException; - public abstract Collection altNames(CommandSender sender); + public boolean canList(CommandSender sender) { return true; } // -------------------------------------------- // @@ -41,6 +42,17 @@ public abstract class TypeAbstractSelect extends TypeAbstract throw exception; } + public Collection altNames(CommandSender sender) + { + List names = new ArrayList(); + for (T value : this.getAll(sender)) + { + String name = this.getVisual(value, sender); + names.add(name); + } + return names; + } + public MassiveException createExceptionForInvalidArg(String arg, CommandSender sender) { MassiveException ret = new MassiveException(); diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeAbstractPrimitive.java b/src/com/massivecraft/massivecore/command/type/TypeAbstractSimple.java similarity index 72% rename from src/com/massivecraft/massivecore/cmd/type/TypeAbstractPrimitive.java rename to src/com/massivecraft/massivecore/command/type/TypeAbstractSimple.java index 86a7e23c..d6e51204 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypeAbstractPrimitive.java +++ b/src/com/massivecraft/massivecore/command/type/TypeAbstractSimple.java @@ -1,10 +1,10 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type; import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.util.Txt; -public abstract class TypeAbstractPrimitive extends TypeAbstractException +public abstract class TypeAbstractSimple extends TypeAbstractException { // -------------------------------------------- // // OVERRIDE diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeDate.java b/src/com/massivecraft/massivecore/command/type/TypeDate.java similarity index 80% rename from src/com/massivecraft/massivecore/cmd/type/TypeDate.java rename to src/com/massivecraft/massivecore/command/type/TypeDate.java index 6f9cb98d..c69ec328 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypeDate.java +++ b/src/com/massivecraft/massivecore/command/type/TypeDate.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -8,7 +8,7 @@ import java.util.Date; import org.bukkit.command.CommandSender; -public class TypeDate extends TypeAbstractPrimitive +public class TypeDate extends TypeAbstractSimple { // -------------------------------------------- // // CONSTANTS @@ -32,6 +32,12 @@ public class TypeDate extends TypeAbstractPrimitive { return "YYYY-MM-DD date"; } + + @Override + public String getIdInner(Date value) + { + return DATE_FORMAT.format(value); + } @Override public Date valueOf(String arg, CommandSender sender) throws Exception @@ -43,6 +49,6 @@ public class TypeDate extends TypeAbstractPrimitive public Collection getTabList(CommandSender sender, String arg) { return Collections.emptySet(); - } + } } diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeDestination.java b/src/com/massivecraft/massivecore/command/type/TypeDestination.java similarity index 89% rename from src/com/massivecraft/massivecore/cmd/type/TypeDestination.java rename to src/com/massivecraft/massivecore/command/type/TypeDestination.java index 142c4a51..97c56362 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypeDestination.java +++ b/src/com/massivecraft/massivecore/command/type/TypeDestination.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type; import java.util.Collection; @@ -22,6 +22,12 @@ public class TypeDestination extends TypeAbstract // OVERRIDE // -------------------------------------------- // + @Override + public String getVisualInner(Destination value, CommandSender sender) + { + return value.getDesc(sender); + } + @Override public Destination read(String arg, CommandSender sender) throws MassiveException { diff --git a/src/com/massivecraft/massivecore/command/type/TypeItemStack.java b/src/com/massivecraft/massivecore/command/type/TypeItemStack.java new file mode 100644 index 00000000..7e3105dc --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/TypeItemStack.java @@ -0,0 +1,59 @@ +package com.massivecraft.massivecore.command.type; + +import java.util.Collection; +import java.util.Collections; + +import org.bukkit.command.CommandSender; +import org.bukkit.inventory.ItemStack; + +import com.massivecraft.massivecore.MassiveException; + +public class TypeItemStack extends TypeAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeItemStack i = new TypeItemStack(); + public static TypeItemStack get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getVisualInner(ItemStack value, CommandSender sender) + { + // TODO: Implement + return null; + } + + @Override + public String getNameInner(ItemStack value) + { + // TODO: Implement + return null; + } + + @Override + public String getIdInner(ItemStack value) + { + // TODO: Implement + return null; + } + + @Override + public ItemStack read(String arg, CommandSender sender) throws MassiveException + { + // TODO: Implement + throw new MassiveException().addMsg("Not implemented!"); + } + + @Override + public Collection getTabList(CommandSender sender, String arg) + { + // TODO: Implement + return Collections.emptyList(); + } + +} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeMillisDiff.java b/src/com/massivecraft/massivecore/command/type/TypeMillisDiff.java similarity index 63% rename from src/com/massivecraft/massivecore/cmd/type/TypeMillisDiff.java rename to src/com/massivecraft/massivecore/command/type/TypeMillisDiff.java index ba8f0314..fb015728 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypeMillisDiff.java +++ b/src/com/massivecraft/massivecore/command/type/TypeMillisDiff.java @@ -1,11 +1,14 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type; import java.util.Collection; import java.util.Collections; +import java.util.LinkedHashMap; import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.util.TimeDiffUtil; +import com.massivecraft.massivecore.util.TimeUnit; +import com.massivecraft.massivecore.util.Txt; public class TypeMillisDiff extends TypeAbstractException { @@ -26,6 +29,14 @@ public class TypeMillisDiff extends TypeAbstractException return "time amount"; } + @Override + public String getVisualInner(Long value, CommandSender sender) + { + String prefix = Txt.parse(value < 0 ? "negative " : ""); + LinkedHashMap unitcounts = TimeDiffUtil.unitcounts(value); + return prefix + TimeDiffUtil.formatedVerboose(unitcounts); + } + @Override public Long valueOf(String arg, CommandSender sender) throws Exception { @@ -38,4 +49,6 @@ public class TypeMillisDiff extends TypeAbstractException return Collections.emptySet(); } + + } diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeNullable.java b/src/com/massivecraft/massivecore/command/type/TypeNullable.java similarity index 64% rename from src/com/massivecraft/massivecore/cmd/type/TypeNullable.java rename to src/com/massivecraft/massivecore/command/type/TypeNullable.java index 24092a35..48d8d5d0 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypeNullable.java +++ b/src/com/massivecraft/massivecore/command/type/TypeNullable.java @@ -1,25 +1,19 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type; import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.List; - import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.collections.MassiveList; -public class TypeNullable extends TypeAbstract +public class TypeNullable extends TypeWrapper { // -------------------------------------------- // // FIELDS // -------------------------------------------- // - protected Type innerType; - public Type getInnerType() { return this.innerType; } - protected Collection nulls; public Collection getNulls() { return this.nulls; } @@ -48,10 +42,8 @@ public class TypeNullable extends TypeAbstract public TypeNullable(Type inner, Collection nulls) { - if (inner == null) throw new NullPointerException("inner"); + super(inner); if (nulls == null) nulls = Collections.emptySet(); - - this.innerType = inner; this.nulls = nulls; } @@ -68,12 +60,6 @@ public class TypeNullable extends TypeAbstract // -------------------------------------------- // // OVERRIDE // -------------------------------------------- // - - @Override - public String getTypeName() - { - return this.getInnerType().getTypeName(); - } @Override public T read(String arg, CommandSender sender) throws MassiveException @@ -81,27 +67,8 @@ public class TypeNullable extends TypeAbstract // Null? if (this.getNulls().contains(arg)) return null; - // Inner - return this.getInnerType().read(arg, sender); - } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - // Create Ret - List ret = new MassiveList(this.getNulls()); - - // Fill Ret - ret.addAll(this.getInnerType().getTabList(sender, arg)); - - // Return Ret - return ret; - } - - @Override - public boolean allowSpaceAfterTab() - { - return this.getInnerType().allowSpaceAfterTab(); + // Super + return super.read(arg, sender); } } diff --git a/src/com/massivecraft/massivecore/cmd/type/TypePS.java b/src/com/massivecraft/massivecore/command/type/TypePS.java similarity index 92% rename from src/com/massivecraft/massivecore/cmd/type/TypePS.java rename to src/com/massivecraft/massivecore/command/type/TypePS.java index 1dc22e03..94c57eab 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypePS.java +++ b/src/com/massivecraft/massivecore/command/type/TypePS.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type; import java.util.Arrays; import java.util.Collection; @@ -9,8 +9,12 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.command.type.primitive.TypeDouble; +import com.massivecraft.massivecore.command.type.primitive.TypeFloat; +import com.massivecraft.massivecore.command.type.primitive.TypeInteger; import com.massivecraft.massivecore.ps.PS; import com.massivecraft.massivecore.ps.PSBuilder; +import com.massivecraft.massivecore.ps.PSFormatDesc; public class TypePS extends TypeAbstract { @@ -25,6 +29,13 @@ public class TypePS extends TypeAbstract // OVERRIDE // -------------------------------------------- // + @Override + public String getVisualInner(PS value, CommandSender sender) + { + // TODO: Slug did not work... will desc look better? + return PSFormatDesc.get().format(value); + } + @Override public PS read(String arg, CommandSender sender) throws MassiveException { diff --git a/src/com/massivecraft/massivecore/command/type/TypePermission.java b/src/com/massivecraft/massivecore/command/type/TypePermission.java new file mode 100644 index 00000000..71f76122 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/TypePermission.java @@ -0,0 +1,32 @@ +package com.massivecraft.massivecore.command.type; + +import java.util.Collection; +import org.bukkit.Bukkit; +import org.bukkit.permissions.Permission; + +public class TypePermission extends TypeAbstractChoice +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypePermission i = new TypePermission(); + public static TypePermission get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getIdInner(Permission value) + { + return value.getName(); + } + + @Override + public Collection getAll() + { + return Bukkit.getPluginManager().getPermissions(); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/TypePotionEffectType.java b/src/com/massivecraft/massivecore/command/type/TypePotionEffectType.java new file mode 100644 index 00000000..b7680432 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/TypePotionEffectType.java @@ -0,0 +1,39 @@ +package com.massivecraft.massivecore.command.type; + +import java.util.Arrays; +import java.util.Collection; +import org.bukkit.potion.PotionEffectType; + +public class TypePotionEffectType extends TypeAbstractChoice +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypePotionEffectType i = new TypePotionEffectType(); + public static TypePotionEffectType get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getNameInner(PotionEffectType value) + { + return value.getName(); + } + + @SuppressWarnings("deprecation") + @Override + public String getIdInner(PotionEffectType value) + { + return String.valueOf(value.getId()); + } + + @Override + public Collection getAll() + { + return Arrays.asList(PotionEffectType.values()); + } + +} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeStringCommand.java b/src/com/massivecraft/massivecore/command/type/TypeStringCommand.java similarity index 96% rename from src/com/massivecraft/massivecore/cmd/type/TypeStringCommand.java rename to src/com/massivecraft/massivecore/command/type/TypeStringCommand.java index dab3fd3c..ecb7a087 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypeStringCommand.java +++ b/src/com/massivecraft/massivecore/command/type/TypeStringCommand.java @@ -1,4 +1,4 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type; import java.util.Arrays; import java.util.Collection; @@ -6,6 +6,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.SimpleCommandMap; @@ -31,6 +32,11 @@ public class TypeStringCommand extends TypeAbstract // -------------------------------------------- // // OVERRIDE // -------------------------------------------- // + + public TypeStringCommand() + { + this.setVisualColor(ChatColor.AQUA); + } @Override public String getTypeName() diff --git a/src/com/massivecraft/massivecore/command/type/TypeTransformer.java b/src/com/massivecraft/massivecore/command/type/TypeTransformer.java new file mode 100644 index 00000000..8a480b44 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/TypeTransformer.java @@ -0,0 +1,332 @@ +package com.massivecraft.massivecore.command.type; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.collections.MassiveSet; +import com.massivecraft.massivecore.command.editor.CommandEditAbstract; +import com.massivecraft.massivecore.command.editor.EditSettings; +import com.massivecraft.massivecore.command.editor.Property; + +// The "inner" controls all ways the type behaves and "seems". +// The "outer" type is how the type interfaces in source code. For example what is read. +public abstract class TypeTransformer extends TypeAbstract +{ + // -------------------------------------------- // + // PREFIX + // -------------------------------------------- // + + public static final String PREFIX = UNKNOWN + " "; + + public static String prefix(String string) + { + return PREFIX + string; + } + + public static Set prefix(Set strings) + { + // Create + Set ret = new MassiveSet(strings.size()); + + // Fill + for (String string : strings) + { + ret.add(prefix(string)); + } + + // Return + return ret; + } + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + public final Type INNER; + public final Type OUTER; + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public TypeTransformer(Type typeInner, Type typeOuter) + { + this.setInnerTypes(typeInner, typeOuter); + INNER = typeInner; + OUTER = typeOuter; + } + + // -------------------------------------------- // + // ABSTRACT + // -------------------------------------------- // + // NOTE: These should return null on null input. + + public abstract O innerToOuter(I inner); + public abstract I outerToInner(O outer); + + // -------------------------------------------- // + // META + // -------------------------------------------- // + + @Override + public String getTypeName() + { + return INNER.getTypeName(); + } + + // -------------------------------------------- // + // WRITE VISUAL COLOR + // -------------------------------------------- // + + @Override + public ChatColor getVisualColor(O outer, CommandSender sender) + { + I inner = outerToInner(outer); + // NOTE: Inner type must NPE evade. + return INNER.getVisualColor(inner, sender); + } + + @Override + public ChatColor getVisualColor(O outer) + { + I inner = outerToInner(outer); + // NOTE: Inner type must NPE evade. + return INNER.getVisualColor(inner); + } + + @Override + public void setVisualColor(ChatColor color) + { + INNER.setVisualColor(color); + } + + // -------------------------------------------- // + // WRITE VISUAL + // -------------------------------------------- // + + @Override + public String getVisualInner(O outer, CommandSender sender) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisualInner(outer, sender)); + return INNER.getVisualInner(inner, sender); + } + + @Override + public String getVisualInner(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisualInner(outer)); + return INNER.getVisualInner(inner); + } + + @Override + public String getVisual(O outer, CommandSender sender) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisual(outer, sender)); + return INNER.getVisual(inner, sender); + } + + @Override + public String getVisual(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisual(outer)); + return INNER.getVisual(inner); + } + + @Override + public Set getVisualsInner(O outer, CommandSender sender) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisualsInner(outer, sender)); + return INNER.getVisualsInner(inner, sender); + } + + @Override + public Set getVisualsInner(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisualsInner(outer)); + return INNER.getVisualsInner(inner); + } + + @Override + public Set getVisuals(O outer, CommandSender sender) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisuals(outer, sender)); + return INNER.getVisuals(inner, sender); + } + + @Override + public Set getVisuals(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) return prefix(OUTER.getVisuals(outer)); + return INNER.getVisuals(inner); + } + + // -------------------------------------------- // + // WRITE NAME + // -------------------------------------------- // + + @Override + public String getNameInner(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) throw new NullPointerException("transformer"); + return INNER.getNameInner(inner); + } + + @Override + public String getName(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) throw new NullPointerException("transformer"); + return INNER.getName(inner); + } + + @Override + public Set getNamesInner(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) throw new NullPointerException("transformer"); + return INNER.getNamesInner(inner); + } + + @Override + public Set getNames(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) throw new NullPointerException("transformer"); + return INNER.getNames(inner); + } + + // -------------------------------------------- // + // WRITE ID + // -------------------------------------------- // + + @Override + public String getIdInner(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) throw new NullPointerException("transformer"); + return INNER.getIdInner(inner); + } + + @Override + public String getId(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) throw new NullPointerException("transformer"); + return INNER.getId(inner); + } + + @Override + public Set getIdsInner(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) throw new NullPointerException("transformer"); + return INNER.getIdsInner(inner); + } + + @Override + public Set getIds(O outer) + { + I inner = outerToInner(outer); + if (outer != null && inner == null) throw new NullPointerException("transformer"); + return INNER.getIds(inner); + } + + // -------------------------------------------- // + // READ + // -------------------------------------------- // + + @Override + public O read(String arg, CommandSender sender) throws MassiveException + { + I inner = INNER.read(arg, sender); + O outer = innerToOuter(inner); + return outer; + } + + @Override + public O read(CommandSender sender) throws MassiveException + { + I inner = INNER.read(sender); + O outer = innerToOuter(inner); + return outer; + } + + @Override + public O read(String arg) throws MassiveException + { + I inner = INNER.read(arg); + O outer = innerToOuter(inner); + return outer; + } + + @Override + public O read() throws MassiveException + { + I inner = INNER.read(); + O outer = innerToOuter(inner); + return outer; + } + + // -------------------------------------------- // + // VALID + // -------------------------------------------- // + + @Override + public boolean isValid(String arg, CommandSender sender) + { + return INNER.isValid(arg, sender); + } + + // -------------------------------------------- // + // TAB LIST + // -------------------------------------------- // + + @Override + public Collection getTabList(CommandSender sender, String arg) + { + return INNER.getTabList(sender, arg); + } + + @Override + public List getTabListFiltered(CommandSender sender, String arg) + { + return INNER.getTabListFiltered(sender, arg); + } + + @Override + public boolean allowSpaceAfterTab() + { + return INNER.allowSpaceAfterTab(); + } + + // -------------------------------------------- // + // EDITOR + // -------------------------------------------- // + + @Override + public CommandEditAbstract createEditCommand(EditSettings settings, Property property) + { + return OUTER.createEditCommand(settings, property); + } + + @Override + public O createNewInstance() + { + return OUTER.createNewInstance(); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/TypeUniverse.java b/src/com/massivecraft/massivecore/command/type/TypeUniverse.java new file mode 100644 index 00000000..278195c9 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/TypeUniverse.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.command.type; + +import java.util.Collection; + +import com.massivecraft.massivecore.Aspect; +import com.massivecraft.massivecore.Multiverse; + +public class TypeUniverse extends TypeAbstractChoice +{ + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + protected Aspect aspect = null; + protected Multiverse multiverse = null; + + public Multiverse getMultiverse() + { + if (this.aspect != null) return this.aspect.getMultiverse(); + return this.multiverse; + } + + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public static TypeUniverse get(Aspect aspect) { return new TypeUniverse(aspect); } + public static TypeUniverse get(Multiverse multiverse) { return new TypeUniverse(multiverse); } + + public TypeUniverse(Aspect aspect) { this.aspect = aspect; } + public TypeUniverse(Multiverse multiverse) { this.multiverse = multiverse; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public Collection getAll() + { + return this.getMultiverse().getUniverses(); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/TypeWorld.java b/src/com/massivecraft/massivecore/command/type/TypeWorld.java new file mode 100644 index 00000000..a2794371 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/TypeWorld.java @@ -0,0 +1,54 @@ +package com.massivecraft.massivecore.command.type; + +import java.util.Collection; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.mixin.Mixin; + +public class TypeWorld extends TypeAbstractChoice +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeWorld i = new TypeWorld(); + public static TypeWorld get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getVisualInner(World value, CommandSender sender) + { + return Mixin.getWorldDisplayName(value.getName()); + } + + @Override + public String getNameInner(World value) + { + return Mixin.getWorldAliasOrId(value.getName()); + } + + @Override + public String getIdInner(World value) + { + return null; + } + + @Override + public Collection getAll() + { + return Bukkit.getWorlds(); + } + + @Override + public boolean canSee(World value, CommandSender sender) + { + return Mixin.canSeeWorld(sender, value.getName()); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/TypeWorldId.java b/src/com/massivecraft/massivecore/command/type/TypeWorldId.java new file mode 100644 index 00000000..10e85e02 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/TypeWorldId.java @@ -0,0 +1,58 @@ +package com.massivecraft.massivecore.command.type; + +import java.util.Collection; + +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.mixin.Mixin; + +public class TypeWorldId extends TypeAbstractChoice +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeWorldId i = new TypeWorldId(); + public static TypeWorldId get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getTypeName() + { + return "world"; + } + + @Override + public String getVisualInner(String value, CommandSender sender) + { + return Mixin.getWorldDisplayName(value); + } + + @Override + public String getNameInner(String value) + { + return Mixin.getWorldAliasOrId(value); + } + + @Override + public String getIdInner(String value) + { + return value; + } + + @Override + public Collection getAll() + { + return Mixin.getWorldIds(); + } + + @Override + public boolean canSee(String value, CommandSender sender) + { + return Mixin.canSeeWorld(sender, value); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/TypeWrapper.java b/src/com/massivecraft/massivecore/command/type/TypeWrapper.java new file mode 100644 index 00000000..2fc2298d --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/TypeWrapper.java @@ -0,0 +1,69 @@ +package com.massivecraft.massivecore.command.type; + +import java.util.Collection; + +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.collections.MassiveList; + +public class TypeWrapper extends TypeAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public TypeWrapper(Type inner) + { + if (inner == null) throw new NullPointerException("inner"); + this.setInnerType(inner); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getTypeName() + { + return this.getInnerType().getTypeName(); + } + + @Override + public String getVisualInner(T value, CommandSender sender) + { + return this.getInnerType().getVisualInner(value, sender); + } + + @Override + public String getNameInner(T value) + { + return this.getInnerType().getNameInner(value); + } + + @Override + public String getIdInner(T value) + { + return this.getInnerType().getIdInner(value); + } + + @Override + public T read(String arg, CommandSender sender) throws MassiveException + { + Type inner = this.getInnerType(); + return inner.read(arg, sender); + } + + @Override + public Collection getTabList(CommandSender sender, String arg) + { + return new MassiveList(this.getInnerType().getTabList(sender, arg)); + } + + @Override + public boolean allowSpaceAfterTab() + { + return this.getInnerType().allowSpaceAfterTab(); + } + +} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypeAllAble.java b/src/com/massivecraft/massivecore/command/type/collection/AllAble.java similarity index 57% rename from src/com/massivecraft/massivecore/cmd/type/TypeAllAble.java rename to src/com/massivecraft/massivecore/command/type/collection/AllAble.java index cbc74350..edebad29 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypeAllAble.java +++ b/src/com/massivecraft/massivecore/command/type/collection/AllAble.java @@ -1,10 +1,10 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type.collection; import java.util.Collection; import org.bukkit.command.CommandSender; -public interface TypeAllAble extends Type +public interface AllAble { public Collection getAll(CommandSender sender); } diff --git a/src/com/massivecraft/massivecore/command/type/collection/TypeCollection.java b/src/com/massivecraft/massivecore/command/type/collection/TypeCollection.java new file mode 100644 index 00000000..c920b77e --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/collection/TypeCollection.java @@ -0,0 +1,179 @@ +package com.massivecraft.massivecore.command.type.collection; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.command.editor.CommandEditAbstract; +import com.massivecraft.massivecore.command.editor.CommandEditCollection; +import com.massivecraft.massivecore.command.editor.EditSettings; +import com.massivecraft.massivecore.command.editor.Property; +import com.massivecraft.massivecore.command.type.Type; +import com.massivecraft.massivecore.command.type.TypeAbstract; +import com.massivecraft.massivecore.util.Txt; + +public abstract class TypeCollection, E> extends TypeAbstract +{ + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public TypeCollection(Type innerType) + { + this.setInnerType(innerType); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getTypeName() + { + return this.getCollectionTypeName() + " of " + this.getInnerType().getTypeName(); + } + + public String getCollectionTypeName() + { + return "Collection"; + } + + @Override + public String getVisualInner(C value, CommandSender sender) + { + // Empty + if (value.isEmpty()) return EMPTY; + + List parts = new MassiveList(); + + int index = -1; + for (E element : value) + { + index++; + String part = Txt.parse("%d %s", index, this.getInnerType().getVisualInner(element, sender)); + parts.add(part); + } + + return Txt.implode(parts, "\n"); + } + + @Override + public String getNameInner(C value) + { + // Empty + if (value.isEmpty()) return ""; + + // Create + List parts = new MassiveList(); + + // Fill + for (E element : value) + { + String part = this.getInnerType().getNameInner(element); + parts.add(part); + } + + // Return + return Txt.implode(parts, " "); + } + + @Override + public String getIdInner(C value) + { + // Empty + if (value.isEmpty()) return ""; + + // Create + List parts = new MassiveList(); + + // Fill + for (E element : value) + { + String part = this.getInnerType().getIdInner(element); + parts.add(part); + } + + // Return + return Txt.implode(parts, " "); + } + + @SuppressWarnings("unchecked") + @Override + public C read(String arg, CommandSender sender) throws MassiveException + { + // Create + C ret = this.createNewInstance(); + + // Check All + if (this.getInnerType() instanceof AllAble) + { + AllAble allAble = (AllAble)this.getInnerType(); + if (arg.equalsIgnoreCase("all")) + { + ret.addAll(allAble.getAll(sender)); + return ret; + } + } + + // Fill + String[] elementArgs = Txt.PATTERN_WHITESPACE.split(arg); + for (String elementArg : elementArgs) + { + Type innerType = this.getInnerType(); + E element = innerType.read(elementArg, sender); + ret.add(element); + } + + // Return + return ret; + } + + @Override + public Collection getTabList(CommandSender sender, String arg) + { + // Because we accept multiple arguments of the same type. + // The passed arg might be more than one. We only want the latest. + return this.getInnerType().getTabList(sender, getLastArg(arg)); + } + + @Override + public List getTabListFiltered(CommandSender sender, String arg) + { + // Because we accept multiple arguments of the same type. + // The passed arg might be more than one. We only want the latest. + return this.getInnerType().getTabListFiltered(sender, getLastArg(arg)); + } + + @Override + public boolean allowSpaceAfterTab() + { + return this.getInnerType().allowSpaceAfterTab(); + } + + @Override + public CommandEditAbstract createEditCommand(EditSettings settings, Property property) + { + return new CommandEditCollection(settings, property); + } + + // -------------------------------------------- // + // UTIL + // -------------------------------------------- // + + public static List getArgs(String string) + { + return Arrays.asList(Txt.PATTERN_WHITESPACE.split(string, -1)); + } + + public static String getLastArg(String string) + { + List args = getArgs(string); + if (args.isEmpty()) return null; + return args.get(args.size() - 1); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/collection/TypeItemStacks.java b/src/com/massivecraft/massivecore/command/type/collection/TypeItemStacks.java new file mode 100644 index 00000000..45bafc25 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/collection/TypeItemStacks.java @@ -0,0 +1,50 @@ +package com.massivecraft.massivecore.command.type.collection; + +import java.util.List; + +import org.bukkit.command.CommandSender; +import org.bukkit.inventory.ItemStack; + +import com.massivecraft.massivecore.command.editor.CommandEditAbstract; +import com.massivecraft.massivecore.command.editor.CommandEditItemStacks; +import com.massivecraft.massivecore.command.editor.EditSettings; +import com.massivecraft.massivecore.command.editor.Property; +import com.massivecraft.massivecore.command.type.TypeItemStack; +import com.massivecraft.massivecore.command.type.primitive.TypeInteger; + +public class TypeItemStacks extends TypeList +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeItemStacks i = new TypeItemStacks(); + public static TypeItemStacks get() { return i; } + public TypeItemStacks() + { + super(TypeItemStack.get()); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getVisualInner(List value, CommandSender sender) + { + // Empty + if (value.isEmpty()) return EMPTY; + + // Integer Size + return TypeInteger.get().getVisual(value.size(), sender); + + // TODO: Improve + } + + @Override + public CommandEditAbstract> createEditCommand(EditSettings settings, Property> property) + { + return new CommandEditItemStacks(settings, property); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/collection/TypeList.java b/src/com/massivecraft/massivecore/command/type/collection/TypeList.java new file mode 100644 index 00000000..ecfa7985 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/collection/TypeList.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.command.type.collection; + +import java.util.List; + +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.command.type.Type; + +public class TypeList extends TypeCollection, E> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public static TypeList get(Type innerType) + { + return new TypeList(innerType); + } + + public TypeList(Type innerType) + { + super(innerType); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getCollectionTypeName() + { + return "List"; + } + + @Override + public List createNewInstance() + { + return new MassiveList(); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/collection/TypeSet.java b/src/com/massivecraft/massivecore/command/type/collection/TypeSet.java new file mode 100644 index 00000000..2dac5b30 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/collection/TypeSet.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.command.type.collection; + +import java.util.Set; + +import com.massivecraft.massivecore.collections.MassiveSet; +import com.massivecraft.massivecore.command.type.Type; + +public class TypeSet extends TypeCollection, E> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public static TypeSet get(Type innerType) + { + return new TypeSet(innerType); + } + + public TypeSet(Type innerType) + { + super(innerType); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getCollectionTypeName() + { + return "Set"; + } + + @Override + public Set createNewInstance() + { + return new MassiveSet(); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/combined/TypeCombined.java b/src/com/massivecraft/massivecore/command/type/combined/TypeCombined.java new file mode 100644 index 00000000..2ff68023 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/combined/TypeCombined.java @@ -0,0 +1,194 @@ +package com.massivecraft.massivecore.command.type.combined; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map.Entry; +import java.util.AbstractMap.SimpleEntry; + +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.command.type.Type; +import com.massivecraft.massivecore.command.type.TypeAbstract; +import com.massivecraft.massivecore.util.Txt; + +public abstract class TypeCombined extends TypeAbstract +{ + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + protected List> types; + public List> getTypes() { return this.types; } + + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public TypeCombined(Collection> types) + { + this.types = new MassiveList>(types); + } + + public TypeCombined(Type... types) + { + this(Arrays.asList(types)); + } + + // -------------------------------------------- // + // ABSTRACT + // -------------------------------------------- // + + public abstract T combine(List parts); + + public abstract List split(T value); + + public List, Object>> splitEntries(T value) + { + // Create + List, Object>> ret = new MassiveList, Object>>(); + + // Fill + List parts = this.split(value); + if (parts.size() > this.getTypes().size()) throw new RuntimeException("Too many parts!"); + for (int i = 0; i < parts.size(); i++) + { + Type type = this.getTypes().get(i); + Object part = parts.get(i); + SimpleEntry, Object> entry = new SimpleEntry, Object>(type, part); + ret.add(entry); + } + + // Return + return ret; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getTypeName() + { + // Create + List parts = new MassiveList(); + + // Fill + for (Type type : this.getTypes()) + { + parts.add(type.getTypeName()); + } + + // Return + return Txt.implode(parts, " "); + } + + @Override + public String getVisualInner(T value, CommandSender sender) + { + // Create + List parts = new MassiveList(); + + // Fill + for (Entry, Object> entry : this.splitEntries(value)) + { + @SuppressWarnings("unchecked") + Type type = (Type) entry.getKey(); + String part = type.getVisual(entry.getValue(), sender); + parts.add(part); + } + + // Return + return Txt.implode(parts, " "); + } + + @Override + public String getNameInner(T value) + { + // Create + List parts = new MassiveList(); + + // Fill + for (Entry, Object> entry : this.splitEntries(value)) + { + @SuppressWarnings("unchecked") + Type type = (Type) entry.getKey(); + String part = type.getName(entry.getValue()); + parts.add(part); + } + + // Return + return Txt.implode(parts, " "); + } + + @Override + public String getIdInner(T value) + { + // Create + List parts = new MassiveList(); + + // Fill + for (Entry, Object> entry : this.splitEntries(value)) + { + @SuppressWarnings("unchecked") + Type type = (Type) entry.getKey(); + String part = type.getId(entry.getValue()); + parts.add(part); + } + + // Return + return Txt.implode(parts, " "); + } + + @Override + public T read(String arg, CommandSender sender) throws MassiveException + { + List parts = this.readParts(arg, sender); + return this.combine(parts); + } + + public List readParts(String arg, CommandSender sender) throws MassiveException + { + // Create + List ret = new MassiveList(); + + // Fill + List argParts = Arrays.asList(arg.split("[, ]+")); + + if (argParts.size() > this.getTypes().size()) + { + throw new MassiveException().addMsg("Too many parts!"); + } + + for (int i = 0; i < argParts.size(); i++) + { + String argPart = argParts.get(i); + Type type = this.getTypes().get(i); + + Object part = type.read(argPart, sender); + + ret.add(part); + } + + // Return + return ret; + } + + //TODO: How to do this? + @Override + public Collection getTabList(CommandSender sender, String arg) + { + return null; // ??? + } + + //TODO: How to do this? + @Override + public boolean allowSpaceAfterTab() + { + // ??? + return false; + } + +} diff --git a/src/com/massivecraft/massivecore/cmd/type/TypePotionEffectWrap.java b/src/com/massivecraft/massivecore/command/type/combined/TypePotionEffectWrap.java similarity index 58% rename from src/com/massivecraft/massivecore/cmd/type/TypePotionEffectWrap.java rename to src/com/massivecraft/massivecore/command/type/combined/TypePotionEffectWrap.java index decde792..db7807f5 100644 --- a/src/com/massivecraft/massivecore/cmd/type/TypePotionEffectWrap.java +++ b/src/com/massivecraft/massivecore/command/type/combined/TypePotionEffectWrap.java @@ -1,15 +1,16 @@ -package com.massivecraft.massivecore.cmd.type; +package com.massivecraft.massivecore.command.type.combined; -import java.util.Collection; import java.util.List; -import org.bukkit.command.CommandSender; import org.bukkit.potion.PotionEffectType; -import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.PotionEffectWrap; +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.command.type.TypePotionEffectType; +import com.massivecraft.massivecore.command.type.primitive.TypeBoolean; +import com.massivecraft.massivecore.command.type.primitive.TypeInteger; -public class TypePotionEffectWrap extends TypeAbstract +public class TypePotionEffectWrap extends TypeCombined { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -18,31 +19,40 @@ public class TypePotionEffectWrap extends TypeAbstract private static TypePotionEffectWrap i = new TypePotionEffectWrap(); public static TypePotionEffectWrap get() { return i; } - // -------------------------------------------- // - // FIELDS - // -------------------------------------------- // - - protected final TypeCombined combined = new TypeCombined( - TypePotionEffectType.get(), - TypeInteger.get(), - TypeInteger.get(), - TypeBoolean.get(), - TypeBoolean.get() - ); + public TypePotionEffectWrap() + { + super( + TypePotionEffectType.get(), + TypeInteger.get(), + TypeInteger.get(), + TypeBoolean.getYes(), + TypeBoolean.getYes() + ); + } // -------------------------------------------- // // OVERRIDE // -------------------------------------------- // @Override - public PotionEffectWrap read(String arg, CommandSender sender) throws MassiveException + public List split(PotionEffectWrap value) { - // Create Ret + return new MassiveList( + value.getPotionEffectType(), + value.getAmplifier(), + value.getDuration(), + value.isAmbient(), + value.isParticles() + ); + } + + @Override + public PotionEffectWrap combine(List parts) + { + // Create PotionEffectWrap ret = new PotionEffectWrap(); - - // Fill Ret - List parts = combined.read(arg, sender); - + + // Fill for (int i = 0 ; i < parts.size() ; i++) { Object part = parts.get(i); @@ -74,14 +84,8 @@ public class TypePotionEffectWrap extends TypeAbstract } } - // Return Ret + // Return return ret; } - - @Override - public Collection getTabList(CommandSender sender, String arg) - { - return TypePotionEffectType.get().getTabList(sender, arg); - } } diff --git a/src/com/massivecraft/massivecore/command/type/combined/TypeSoundEffect.java b/src/com/massivecraft/massivecore/command/type/combined/TypeSoundEffect.java new file mode 100644 index 00000000..4c4d5232 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/combined/TypeSoundEffect.java @@ -0,0 +1,72 @@ +package com.massivecraft.massivecore.command.type.combined; + +import java.util.List; + +import org.bukkit.Sound; + +import com.massivecraft.massivecore.SoundEffect; +import com.massivecraft.massivecore.collections.MassiveList; +import com.massivecraft.massivecore.command.type.enumeration.TypeSound; +import com.massivecraft.massivecore.command.type.primitive.TypeFloat; + +public class TypeSoundEffect extends TypeCombined +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeSoundEffect i = new TypeSoundEffect(); + public static TypeSoundEffect get() { return i; } + + public TypeSoundEffect() + { + super( + TypeSound.get(), + TypeFloat.get(), + TypeFloat.get() + ); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public List split(SoundEffect value) + { + return new MassiveList( + value.getSound(), + value.getVolume(), + value.getPitch() + ); + } + + @Override + public SoundEffect combine(List parts) + { + Sound sound = null; + float volume = 1.0f; + float pitch = 1.0f; + + for (int i = 0 ; i < parts.size() ; i++) + { + Object part = parts.get(i); + + if (i == 0) + { + sound = (Sound)part; + } + else if (i == 1) + { + volume = (Float) part; + } + else if (i == 2) + { + pitch = (Float) part; + } + } + + return SoundEffect.valueOf(sound, volume, pitch); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeBiome.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeBiome.java new file mode 100644 index 00000000..31194d7a --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeBiome.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import org.bukkit.block.Biome; + +public class TypeBiome extends TypeEnum +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeBiome i = new TypeBiome(); + public static TypeBiome get() { return i; } + public TypeBiome() + { + super(Biome.class); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeChatColor.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeChatColor.java new file mode 100644 index 00000000..13c6fc68 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeChatColor.java @@ -0,0 +1,29 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class TypeChatColor extends TypeEnum +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeChatColor i = new TypeChatColor(); + public static TypeChatColor get() { return i; } + public TypeChatColor() + { + super(ChatColor.class); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public ChatColor getVisualColor(ChatColor value, CommandSender sender) + { + return value; + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeDifficulty.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeDifficulty.java new file mode 100644 index 00000000..3940a709 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeDifficulty.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import org.bukkit.Difficulty; + +public class TypeDifficulty extends TypeEnum +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeDifficulty i = new TypeDifficulty(); + public static TypeDifficulty get() { return i; } + public TypeDifficulty() + { + super(Difficulty.class); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeDyeColor.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeDyeColor.java new file mode 100644 index 00000000..e5dc9882 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeDyeColor.java @@ -0,0 +1,33 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import org.bukkit.ChatColor; +import org.bukkit.DyeColor; +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.util.MUtil; + +public class TypeDyeColor extends TypeEnum +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeDyeColor i = new TypeDyeColor(); + public static TypeDyeColor get() { return i; } + public TypeDyeColor() + { + super(DyeColor.class); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getVisualInner(DyeColor value, CommandSender sender) + { + ChatColor color = MUtil.getChatColor(value); + return color + super.getNameInner(value); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeEntityType.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeEntityType.java new file mode 100644 index 00000000..6ea7c966 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeEntityType.java @@ -0,0 +1,40 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import java.util.Set; + +import org.bukkit.entity.EntityType; + +public class TypeEntityType extends TypeEnum +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeEntityType i = new TypeEntityType(); + public static TypeEntityType get() { return i; } + public TypeEntityType() + { + super(EntityType.class); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public Set getNamesInner(EntityType value) + { + Set ret = super.getNamesInner(value); + + if (value == EntityType.PIG_ZOMBIE) + { + ret.add("pigman"); + ret.add("pigzombie"); + ret.add("manpig"); + ret.add("zombiepig"); + } + + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeEnum.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeEnum.java new file mode 100644 index 00000000..9650472c --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeEnum.java @@ -0,0 +1,71 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import java.util.Arrays; +import java.util.Collection; + +import com.massivecraft.massivecore.command.type.TypeAbstractChoice; +import com.massivecraft.massivecore.util.Txt; + +public class TypeEnum> extends TypeAbstractChoice +{ + // -------------------------------------------- // + // FIELD + // -------------------------------------------- // + + protected final Class clazz; + public Class getClazz() { return this.clazz; } + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public TypeEnum(Class clazz) + { + if ( ! clazz.isEnum()) throw new IllegalArgumentException("clazz must be enum"); + this.clazz = clazz; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public String getTypeName() + { + return Txt.getNicedEnumString(this.getClazz().getSimpleName()); + } + + @Override + public String getNameInner(T value) + { + return Txt.getNicedEnum(value); + } + + @Override + public String getIdInner(T value) + { + return String.valueOf(value.ordinal()); + } + + @Override + public Collection getAll() + { + return Arrays.asList(getEnumValues(this.getClazz())); + } + + // -------------------------------------------- // + // ENUM + // -------------------------------------------- // + + public static > T[] getEnumValues(Class clazz) + { + if (clazz == null) throw new IllegalArgumentException("clazz is null"); + if ( ! clazz.isEnum()) throw new IllegalArgumentException("clazz must be enum"); + + T[] ret = clazz.getEnumConstants(); + if (ret == null) throw new RuntimeException("failed to retrieve enum constants"); + + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeEnvironment.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeEnvironment.java new file mode 100644 index 00000000..2a55e046 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeEnvironment.java @@ -0,0 +1,49 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import java.util.Set; + +import org.bukkit.World.Environment; + +public class TypeEnvironment extends TypeEnum +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeEnvironment i = new TypeEnvironment(); + public static TypeEnvironment get() { return i; } + public TypeEnvironment() + { + super(Environment.class); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public Set getNamesInner(Environment value) + { + Set ret = super.getNamesInner(value); + + if (value == Environment.NORMAL) + { + ret.add("normal"); + ret.add("default"); + ret.add("thenormal"); + ret.add("thedefault"); + } + else if (value == Environment.NETHER) + { + ret.add("nether"); + ret.add("thenether"); + } + else if (value == Environment.THE_END) + { + ret.add("end"); + } + + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeGameMode.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeGameMode.java new file mode 100644 index 00000000..117c6e88 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeGameMode.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import org.bukkit.GameMode; + +public class TypeGameMode extends TypeEnum +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeGameMode i = new TypeGameMode(); + public static TypeGameMode get() { return i; } + public TypeGameMode() + { + super(GameMode.class); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeHorseColor.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeHorseColor.java new file mode 100644 index 00000000..9078fab6 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeHorseColor.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import org.bukkit.entity.Horse.Color; + +public class TypeHorseColor extends TypeEnum +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static TypeHorseColor i = new TypeHorseColor(); + public static TypeHorseColor get() { return i; } + public TypeHorseColor() + { + super(Color.class); + } + +} diff --git a/src/com/massivecraft/massivecore/command/type/enumeration/TypeHorseStyle.java b/src/com/massivecraft/massivecore/command/type/enumeration/TypeHorseStyle.java new file mode 100644 index 00000000..de21ddc6 --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/enumeration/TypeHorseStyle.java @@ -0,0 +1,18 @@ +package com.massivecraft.massivecore.command.type.enumeration; + +import org.bukkit.entity.Horse.Style; + +public class TypeHorseStyle extends TypeEnum