From b5468b1fe9256123de9096459caf9f290a42de15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 25 Sep 2022 23:34:43 +0200 Subject: [PATCH] Added restrictions --- .gradle/7.4/checksums/checksums.lock | Bin 37 -> 17 bytes .../dependencies-accessors.lock | Bin 37 -> 17 bytes .../7.4/executionHistory/executionHistory.bin | Bin 90505 -> 159382 bytes .../executionHistory/executionHistory.lock | Bin 37 -> 17 bytes .gradle/7.4/fileHashes/fileHashes.bin | Bin 30197 -> 31047 bytes .gradle/7.4/fileHashes/fileHashes.lock | Bin 37 -> 17 bytes .../7.4/fileHashes/resourceHashesCache.bin | Bin 22951 -> 23835 bytes .../buildOutputCleanup.lock | Bin 37 -> 17 bytes LICENSE | 2 +- docs/allclasses-index.html | 4 +- docs/allpackages-index.html | 2 +- docs/element-list | 2 +- .../instance/game/minigame/config/Option.html | 2 +- .../minigame/config/options/BoolOption.html | 6 +- .../config/options/NumericOption.html | 6 +- .../config/options/package-summary.html | 13 +-- .../minigame/config/options/package-tree.html | 10 +-- .../game/minigame/config/package-summary.html | 2 +- docs/index-files/index-13.html | 4 +- docs/index-files/index-2.html | 4 +- docs/index-files/index-5.html | 2 +- docs/index.html | 2 +- docs/legal/jquery.md | 4 +- docs/legal/jqueryUI.md | 2 +- docs/overview-tree.html | 6 +- .../minenet/minigames/instance/game/Game.java | 8 ++ .../config/GameConfigurationInventory.java | 77 ++++++++++++++---- .../game/minigame/config/GameFactory.java | 13 ++- .../instance/game/minigame/config/Option.java | 12 ++- .../{options => common}/BoolOption.java | 2 +- .../{options => common}/NumericOption.java | 4 +- .../config/restriction/IRestriction.java | 6 ++ .../config/restriction/Restriction.java | 43 ++++++++++ .../config/restriction/RestrictionData.java | 16 ++++ .../restriction/RestrictionHandler.java | 42 ++++++++++ .../MaximalPlayeramountRestriction.java | 24 ++++++ .../MinimalPlayeramountRestriction.java | 23 ++++++ .../types/deathcube/DeathcubeFactory.java | 2 +- .../types/minerun/MinerunFactory.java | 2 +- .../types/stickfight/StickFightFactory.java | 10 +++ .../instance/room/entity/GameSelector.java | 2 +- .../MinigameTypeSelectInventory.java | 7 +- .../minenet/minigames/lang/Languages.java | 1 - 43 files changed, 305 insertions(+), 62 deletions(-) rename src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/{options => common}/BoolOption.java (97%) rename src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/{options => common}/NumericOption.java (79%) create mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/IRestriction.java create mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/Restriction.java create mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/RestrictionData.java create mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/RestrictionHandler.java create mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/common/MaximalPlayeramountRestriction.java create mode 100644 src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/common/MinimalPlayeramountRestriction.java diff --git a/.gradle/7.4/checksums/checksums.lock b/.gradle/7.4/checksums/checksums.lock index 8fdc09d18d6d0a22892eba89e78cd7b13870ea9e..7db5587f3fc78ad04e75cfffa9cec90adff32cf7 100644 GIT binary patch literal 17 TcmZSX-8bdF=!!!P3{U_7JLv?$ literal 37 ncmZSX-8bdF=!!!P3{b$#z%cV*(K+YZro9`@8JLYsEg2X9`Z#ms9ka0SW*!R0J&m literal 37 ncmZSXD>`Z#ms9ka0ScHI7-k-{`^|O8Y1+YQ49rHRmJAF4&iM*q diff --git a/.gradle/7.4/executionHistory/executionHistory.bin b/.gradle/7.4/executionHistory/executionHistory.bin index 028c4b37c13a2850fd99a6bce3a6cc8983dfba18..131559fe72777b096b95931e1d5d31ec47fdebca 100644 GIT binary patch delta 5978 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 delta 220 zcmbPsm$UOQ>jV)&Mg}nOaAaU;5Cbw5H#*)BpBNxBSyIB0nc?2~&9M><$CL^S%hSwL zl8sGF)62?|lg!Ez)AEx|O47_zA=(+1Y%cUL*4S>u&Ny2|Al$Hj`u)&)D>>gE#=5Je ze5P-(W|Y~UV8ygiTHtE&y)KcM_2Mgkao&9x8GCiQVi?oz>7^cwJ6ZO2Ot(m364-7U!f4OM Oatf$sdqo_hATt0t1Wr8w diff --git a/.gradle/7.4/executionHistory/executionHistory.lock b/.gradle/7.4/executionHistory/executionHistory.lock index 5542c879eeaadb93fc8f68b321de453ab4b991d8..02c91821b70cabb5b2461bec3bc16a75abc6f2aa 100644 GIT binary patch literal 17 UcmZQ(iuGOiLg}p-0|Z0^04VbVxc~qF literal 37 ocmZQ(iuGOiLg}p-0|b~cGce3Nc&W~0Ws8(b3Inr|sU-sg0J1a)=Kufz diff --git a/.gradle/7.4/fileHashes/fileHashes.bin b/.gradle/7.4/fileHashes/fileHashes.bin index 900ca95c0cfa8888b2e2029d0d4fc6afa7b41a93..73df5bf92f75fb32d49066987f5b02d8522adc57 100644 GIT binary patch delta 2792 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 diff --git a/.gradle/7.4/fileHashes/fileHashes.lock b/.gradle/7.4/fileHashes/fileHashes.lock index 16eb7ac5d76f2875b530eaa1402c0d2c9f5fd9d1..caba861b964fe11ddb20c099449d9a89da571449 100644 GIT binary patch literal 17 VcmZQRDlLB|;HNbU0~j#B001ls1VR7+ literal 37 pcmZQRDlLB|;HNbU0~j!EWoBTQdC+^(+5U|eEAknbjZ7^W7y!!P3a|hG diff --git a/.gradle/7.4/fileHashes/resourceHashesCache.bin b/.gradle/7.4/fileHashes/resourceHashesCache.bin index f20715b786c5d1c7674f86df41c8b932327f5076..129f6504da12a0154d91219982af44e5ce2a7fc5 100644 GIT binary patch delta 1479 zcmZ3!nQ`_m#tkMCjB_WON=y)#XwEIeD){fW|b=I=gLls`1 zd{-twRW?B2`C~4I&t|eR8e5C4YL7zQ7hoAE?;x$!q0j@*9=E>@d;T4H1i6zS&kmgHgcM-m7_q z_YO&@%BhoM6=w+eZDg)#O1^Ros`T~dw~9L$1yZ-KFutATrwvtlbMjneOa4g8*8DkJCql%c?I-K1L^1K5+^G0Ne4{}C=VnKbG{Jgfpe)EzK@b)Y zseJpw$6l*N_p3wp#&xoVKtVZF6&&o{|D|)@=x#mx#`M`q@qL&o-b?>*4?NS&H?KA9 z;m#~kMNAc`*6S9T>;B1^P|I2WbL;*|pp=Vdjp`1OIVvxCc(>L_e^L?lxR0sg%EC^i zc}1I7ymyVc5p+XD1ye)UqauKQRq zm7MpUGx=v^D`Tds%GrdA5tlJl@LiYK>^dv=RSnyA_o}z6l`&Q1+n8TWE{Sa|)p#9g zuWbfOAu#XOLj&F;UW;)$Z=lF1mV5zA2-Rsp40wZQ%Le@0eCHm^D@h+CF4psE4}*YE90IQ?`3P_8q=d zCZTZp#Os%shAhuu`s|3vq4B^5s(-x9smFU diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 9aad399299cd0061b8ebe3386fc434fa2fa75c4f..163d9faa633c36b56fcb15b8ef7c85611b782f14 100644 GIT binary patch literal 17 UcmZQ}E9u!N^Frnb0|e{`05BK?o&W#< literal 37 ocmZQ}E9u!N^Frnb0|eAFGce3Ns8PDN@SXHy4F+Z-Q%eR00L)ejJpcdz diff --git a/LICENSE b/LICENSE index 2071b23..2986042 100644 --- a/LICENSE +++ b/LICENSE @@ -2,7 +2,7 @@ MIT License Copyright (c) -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without IRestriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. diff --git a/docs/allclasses-index.html b/docs/allclasses-index.html index 4389298..b13cfa7 100644 --- a/docs/allclasses-index.html +++ b/docs/allclasses-index.html @@ -68,7 +68,7 @@ loadScripts(document, 'script');
 
 
- +
 
 
@@ -160,7 +160,7 @@ loadScripts(document, 'script');
 
 
- +
 
 
diff --git a/docs/allpackages-index.html b/docs/allpackages-index.html index 7c43cbe..72a7550 100644 --- a/docs/allpackages-index.html +++ b/docs/allpackages-index.html @@ -74,7 +74,7 @@ loadScripts(document, 'script');
 
 
- +
 
 
diff --git a/docs/element-list b/docs/element-list index 9fd784a..7192909 100644 --- a/docs/element-list +++ b/docs/element-list @@ -8,7 +8,7 @@ eu.mhsl.minenet.minigames.instance eu.mhsl.minenet.minigames.instance.game eu.mhsl.minenet.minigames.instance.game.minigame eu.mhsl.minenet.minigames.instance.game.minigame.config -eu.mhsl.minenet.minigames.instance.game.minigame.config.options +eu.mhsl.minenet.minigames.instance.game.minigame.config.common eu.mhsl.minenet.minigames.instance.game.minigame.types.deathcube eu.mhsl.minenet.minigames.instance.game.minigame.types.minerun eu.mhsl.minenet.minigames.instance.game.minigame.types.stickfight diff --git a/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/Option.html b/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/Option.html index 9f97f42..8239d6e 100644 --- a/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/Option.html +++ b/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/Option.html @@ -77,7 +77,7 @@ loadScripts(document, 'script');
Direct Known Subclasses:
-
BoolOption, NumericOption
+
BoolOption, NumericOption

public abstract class Option<T> diff --git a/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/BoolOption.html b/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/BoolOption.html index 402cfda..fd1682b 100644 --- a/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/BoolOption.html +++ b/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/BoolOption.html @@ -6,7 +6,7 @@ - + @@ -64,12 +64,12 @@ loadScripts(document, 'script');
java.lang.Object
eu.mhsl.minenet.minigames.instance.game.minigame.config.Option<Boolean> -
eu.mhsl.minenet.minigames.instance.game.minigame.config.options.BoolOption
+
eu.mhsl.minenet.minigames.instance.game.minigame.config.common.BoolOption
diff --git a/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/NumericOption.html b/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/NumericOption.html index f5c39ef..18c2968 100644 --- a/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/NumericOption.html +++ b/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/NumericOption.html @@ -6,7 +6,7 @@ - + @@ -64,12 +64,12 @@ loadScripts(document, 'script');
java.lang.Object
eu.mhsl.minenet.minigames.instance.game.minigame.config.Option<Integer> -
eu.mhsl.minenet.minigames.instance.game.minigame.config.options.NumericOption
+
eu.mhsl.minenet.minigames.instance.game.minigame.config.common.NumericOption
diff --git a/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/package-summary.html b/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/package-summary.html index 10bd6a9..f4b08b8 100644 --- a/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/package-summary.html +++ b/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/package-summary.html @@ -2,11 +2,11 @@ -eu.mhsl.minenet.minigames.instance.game.minigame.config.options +eu.mhsl.minenet.minigames.instance.game.minigame.config.common - + @@ -56,10 +56,11 @@ loadScripts(document, 'script');
-

Package eu.mhsl.minenet.minigames.instance.game.minigame.config.options

+

Package + eu.mhsl.minenet.minigames.instance.game.minigame.config.common


-
package eu.mhsl.minenet.minigames.instance.game.minigame.config.options
+
package eu.mhsl.minenet.minigames.instance.game.minigame.config.common
diff --git a/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/package-tree.html b/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/package-tree.html index a0347de..ee8088b 100644 --- a/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/package-tree.html +++ b/docs/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/package-tree.html @@ -2,11 +2,11 @@ -eu.mhsl.minenet.minigames.instance.game.minigame.config.options Class Hierarchy +eu.mhsl.minenet.minigames.instance.game.minigame.config.common Class Hierarchy - + @@ -48,7 +48,7 @@ loadScripts(document, 'script');
-

Hierarchy For Package eu.mhsl.minenet.minigames.instance.game.minigame.config.options

+

Hierarchy For Package eu.mhsl.minenet.minigames.instance.game.minigame.config.common

Package Hierarchies:
diff --git a/docs/index-files/index-13.html b/docs/index-files/index-13.html index a82e8c6..8cf7578 100644 --- a/docs/index-files/index-13.html +++ b/docs/index-files/index-13.html @@ -71,9 +71,9 @@ loadScripts(document, 'script');
 
newLine() - Method in class eu.mhsl.minenet.minigames.message.TranslatableMessage
 
-
NumericOption - Class in eu.mhsl.minenet.minigames.instance.game.minigame.config.options
+
NumericOption - Class in eu.mhsl.minenet.minigames.instance.game.minigame.config.common
 
-
NumericOption(String, Material, String, Integer...) - Constructor for class eu.mhsl.minenet.minigames.instance.game.minigame.config.options.NumericOption
+
NumericOption(String, Material, String, Integer...) - Constructor for class eu.mhsl.minenet.minigames.instance.game.minigame.config.common.NumericOption
 
A B C D E F G H I J L M N O P Q R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values
diff --git a/docs/index-files/index-2.html b/docs/index-files/index-2.html index 62b7258..fdaa6af 100644 --- a/docs/index-files/index-2.html +++ b/docs/index-files/index-2.html @@ -59,9 +59,9 @@ loadScripts(document, 'script');
 
BlockPallet - Enum Class in eu.mhsl.minenet.minigames.world.generator
 
-
BoolOption - Class in eu.mhsl.minenet.minigames.instance.game.minigame.config.options
+
BoolOption - Class in eu.mhsl.minenet.minigames.instance.game.minigame.config.common
 
-
BoolOption(String, Material, String) - Constructor for class eu.mhsl.minenet.minigames.instance.game.minigame.config.options.BoolOption
+
BoolOption(String, Material, String) - Constructor for class eu.mhsl.minenet.minigames.instance.game.minigame.config.common.BoolOption
 
build(Player) - Method in class eu.mhsl.minenet.minigames.message.TranslatableMessage
 
diff --git a/docs/index-files/index-5.html b/docs/index-files/index-5.html index 2dcabba..f46f204 100644 --- a/docs/index-files/index-5.html +++ b/docs/index-files/index-5.html @@ -75,7 +75,7 @@ loadScripts(document, 'script');
 
eu.mhsl.minenet.minigames.instance.game.minigame.config - package eu.mhsl.minenet.minigames.instance.game.minigame.config
 
-
eu.mhsl.minenet.minigames.instance.game.minigame.config.options - package eu.mhsl.minenet.minigames.instance.game.minigame.config.options
+
eu.mhsl.minenet.minigames.instance.game.minigame.config.common - package eu.mhsl.minenet.minigames.instance.game.minigame.config.common
 
eu.mhsl.minenet.minigames.instance.game.minigame.types.deathcube - package eu.mhsl.minenet.minigames.instance.game.minigame.types.deathcube
 
diff --git a/docs/index.html b/docs/index.html index 09f5ced..b14592e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -72,7 +72,7 @@ loadScripts(document, 'script');
 
 
- +
 
 
diff --git a/docs/legal/jquery.md b/docs/legal/jquery.md index 8054a34..bd3dbbd 100644 --- a/docs/legal/jquery.md +++ b/docs/legal/jquery.md @@ -7,7 +7,7 @@ Copyright JS Foundation and other contributors, https://js.foundation/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including +"Software"), to deal in the Software without IRestriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to @@ -43,7 +43,7 @@ documented below: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including +"Software"), to deal in the Software without IRestriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to diff --git a/docs/legal/jqueryUI.md b/docs/legal/jqueryUI.md index 8031bdb..34a678d 100644 --- a/docs/legal/jqueryUI.md +++ b/docs/legal/jqueryUI.md @@ -15,7 +15,7 @@ documented below: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including +"Software"), to deal in the Software without IRestriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to diff --git a/docs/overview-tree.html b/docs/overview-tree.html index 92da465..32220fd 100644 --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -61,7 +61,7 @@ loadScripts(document, 'script');
  • eu.mhsl.minenet.minigames.instance.game,
  • eu.mhsl.minenet.minigames.instance.game.minigame,
  • eu.mhsl.minenet.minigames.instance.game.minigame.config,
  • -
  • eu.mhsl.minenet.minigames.instance.game.minigame.config.options,
  • +
  • eu.mhsl.minenet.minigames.instance.game.minigame.config.common,
  • eu.mhsl.minenet.minigames.instance.game.minigame.types.deathcube,
  • eu.mhsl.minenet.minigames.instance.game.minigame.types.minerun,
  • eu.mhsl.minenet.minigames.instance.game.minigame.types.stickfight,
  • @@ -189,8 +189,8 @@ loadScripts(document, 'script');
  • eu.mhsl.minenet.minigames.message.component.NamespacedTranslatable
  • eu.mhsl.minenet.minigames.instance.game.minigame.config.Option<T>
      -
    • eu.mhsl.minenet.minigames.instance.game.minigame.config.options.BoolOption
    • -
    • eu.mhsl.minenet.minigames.instance.game.minigame.config.options.NumericOption
    • +
    • eu.mhsl.minenet.minigames.instance.game.minigame.config.common.BoolOption
    • +
    • eu.mhsl.minenet.minigames.instance.game.minigame.config.common.NumericOption
  • eu.mhsl.minenet.minigames.world.generator.PlaneGenerator (implements net.minestom.server.instance.generator.Generator)
  • diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java index e1144f0..57382bb 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java @@ -1,6 +1,7 @@ package eu.mhsl.minenet.minigames.instance.game; import eu.mhsl.minenet.minigames.instance.MineNetInstance; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory; import eu.mhsl.minenet.minigames.util.CommonEventHandles; import eu.mhsl.minenet.minigames.instance.Spawnable; import eu.mhsl.minenet.minigames.instance.room.Room; @@ -50,6 +51,13 @@ public abstract class Game extends MineNetInstance implements Spawnable { .addListener(ItemDropEvent.class, this::onItemDrop); } + public static Game initialize(GameFactory factory, Player owner) { + Game game = factory.manufacture(factory.configuration() != null ? factory.configuration().getAll() : null); + Room.getRoom(owner).moveMembersToGame(game); + game.load(); + return game; + } + /** * Load and start countdown */ diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/GameConfigurationInventory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/GameConfigurationInventory.java index c79f21e..b0d34f3 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/GameConfigurationInventory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/GameConfigurationInventory.java @@ -1,26 +1,46 @@ package eu.mhsl.minenet.minigames.instance.game.minigame.config; import eu.mhsl.minenet.minigames.instance.game.Game; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRestriction; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler; import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory; import eu.mhsl.minenet.minigames.util.TextUtil; import eu.mhsl.minenet.minigames.instance.room.Room; +import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.minestom.server.entity.Player; +import net.minestom.server.event.instance.AddEntityToInstanceEvent; import net.minestom.server.inventory.InventoryType; import net.minestom.server.inventory.click.ClickType; import net.minestom.server.inventory.condition.InventoryConditionResult; import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; +import net.minestom.server.sound.SoundEvent; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; public class GameConfigurationInventory extends InteractableInventory { private final Map> map = new HashMap<>(); - public GameConfigurationInventory(GameFactory factory) { + final private Room room; + final private GameFactory factory; + + public GameConfigurationInventory(Room room, GameFactory factory) { super(InventoryType.CHEST_5_ROW, factory.name()); + this.room = room; + this.factory = factory; + + room.eventNode() + .addListener(AddEntityToInstanceEvent.class, addEntityToInstanceEvent -> { + System.out.println("UPDATE"); + updatePlayButton(); + }); + ConfigManager config = factory.configuration(); setClickableItem( @@ -39,20 +59,7 @@ public class GameConfigurationInventory extends InteractableInventory { setDummyItem(Material.BLACK_STAINED_GLASS_PANE,7); - setClickableItem( - ItemStack.builder(Material.GREEN_WOOL).displayName(Component.text("Start", NamedTextColor.GREEN)).build(), - 8, - itemClick -> { - try { - Game game = factory.manufacture(config != null ? config.getAll() : null); - Room.getRoom(itemClick.getPlayer()).moveMembersToGame(game); - game.load(); - } catch (Exception e) { - e.printStackTrace(); - } - }, - true - ); + updatePlayButton(); for(int i = 9; i <= 17; i++) { setDummyItem(Material.BLACK_STAINED_GLASS_PANE, i); @@ -92,4 +99,44 @@ public class GameConfigurationInventory extends InteractableInventory { update(); } + + private void updatePlayButton() { + RestrictionHandler restrictionHandler = factory.globalRestrictions(); + RestrictionData restrictionData = new RestrictionData(room); + + if(restrictionHandler.canPlay(restrictionData)) { + + setClickableItem( + ItemStack.builder(restrictionHandler.getWarnings(restrictionData).size() > 0 ? Material.YELLOW_WOOL : Material.GREEN_WOOL) + .displayName(Component.text("Start", NamedTextColor.GREEN)) + .lore(restrictionHandler.getWarnings(restrictionData).stream().map(Component::text).collect(Collectors.toList())) + .build(), + 8, + itemClick -> { + Game.initialize(factory, itemClick.getPlayer()); + }, + true + ); + + } else { + + setClickableItem( + ItemStack.builder(Material.RED_WOOL) + .displayName(Component.text("Bedinungen nicht erfült", NamedTextColor.RED)) + .lore( + restrictionHandler.getRestrictions() + .stream() + .filter(iRestriction -> iRestriction.calculate(restrictionData).getType().equals(Restriction.Type.FAIL)) + .map(iRestriction -> Component.text(iRestriction.calculate(restrictionData).getName())) + .collect(Collectors.toList())) + .build(), + 8, + itemClick -> { + itemClick.getPlayer().playSound(Sound.sound(SoundEvent.ENTITY_SILVERFISH_DEATH, Sound.Source.AMBIENT, 1f, 1f)); + }, + false + ); + + } + } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/GameFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/GameFactory.java index 6a37594..1794bd9 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/GameFactory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/GameFactory.java @@ -1,6 +1,7 @@ package eu.mhsl.minenet.minigames.instance.game.minigame.config; import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler; import net.kyori.adventure.text.Component; import net.minestom.server.instance.block.Block; import net.minestom.server.item.Material; @@ -12,23 +13,31 @@ import java.util.Map; public interface GameFactory { Component name(); ConfigManager configuration(); + default RestrictionHandler globalRestrictions() { + return new RestrictionHandler(); + } default Material symbol() { return Material.GRASS_BLOCK; - }; + } default Component description() { return Component.text("- Keine Beschreibung -"); - }; + } Minigame manufacture(Map> configuration); + default Minigame manufacture(List> configuration) { if(configuration == null) return manufacture(); + Map> cnf = new HashMap<>(); configuration.forEach(option -> cnf.put(option.getId(), option)); + return manufacture(cnf); } + default Minigame manufacture() { if(this.configuration() == null) return manufacture(List.of()); + return manufacture(this.configuration().getAll()); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/Option.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/Option.java index c24aec8..f2bc45e 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/Option.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/Option.java @@ -1,5 +1,6 @@ package eu.mhsl.minenet.minigames.instance.game.minigame.config; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler; import net.kyori.adventure.text.Component; import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; @@ -7,10 +8,10 @@ import net.minestom.server.item.Material; import java.util.List; public abstract class Option { + private RestrictionHandler restrictionHandler; private final Material item; private final String name; private final String id; - protected T currentValue; private final List options; private int pointer = 0; @@ -24,6 +25,15 @@ public abstract class Option { currentValue = options.get(0); } + public void setRestrictionHandler(RestrictionHandler restrictionHandler) { + this.restrictionHandler = restrictionHandler; + } + + public RestrictionHandler getRestrictionHandler() { + return restrictionHandler; + } + + public ItemStack getNext() { if(++pointer >= options.size()) pointer = 0; currentValue = options.get(pointer); diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/BoolOption.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/common/BoolOption.java similarity index 97% rename from src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/BoolOption.java rename to src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/common/BoolOption.java index eb8b65b..b67a9c1 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/BoolOption.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/common/BoolOption.java @@ -1,4 +1,4 @@ -package eu.mhsl.minenet.minigames.instance.game.minigame.config.options; +package eu.mhsl.minenet.minigames.instance.game.minigame.config.common; import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option; import net.minestom.server.item.Material; diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/NumericOption.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/common/NumericOption.java similarity index 79% rename from src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/NumericOption.java rename to src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/common/NumericOption.java index 847d6f5..3e2b6c6 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/options/NumericOption.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/common/NumericOption.java @@ -1,11 +1,13 @@ -package eu.mhsl.minenet.minigames.instance.game.minigame.config.options; +package eu.mhsl.minenet.minigames.instance.game.minigame.config.common; import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler; import net.minestom.server.item.Material; import java.util.List; public class NumericOption extends Option { + public NumericOption(String id, Material item, String name, Integer... options) { super(id, item, name, List.of(options)); } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/IRestriction.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/IRestriction.java new file mode 100644 index 0000000..b51f2a7 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/IRestriction.java @@ -0,0 +1,6 @@ +package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction; + + +public interface IRestriction { + Restriction calculate(RestrictionData data); +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/Restriction.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/Restriction.java new file mode 100644 index 0000000..f4a01ac --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/Restriction.java @@ -0,0 +1,43 @@ +package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction; + +public class Restriction { + final private String name; + final private String description; + final private String warnMessage; + + final private Type type; + + public Restriction(String name, String description, String warnMessage, Type type) { + this.name = name; + this.description = description; + this.warnMessage = warnMessage; + this.type = type; + + if(this.warnMessage == null && this.type.equals(Type.WARN)) { + throw new IllegalStateException("warnMessage cannot be null when RestrictionType is WARN"); + } + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public String getWarnMessage() { + return warnMessage; + } + + public Type getType() { + return type; + } + + public enum Type { + OK, + WARN, + FAIL, + } +} + diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/RestrictionData.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/RestrictionData.java new file mode 100644 index 0000000..747347a --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/RestrictionData.java @@ -0,0 +1,16 @@ +package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction; + +import eu.mhsl.minenet.minigames.instance.MineNetInstance; +import eu.mhsl.minenet.minigames.instance.room.Room; + +public class RestrictionData { + final private Room instance; + + public RestrictionData(Room instance) { + this.instance = instance; + } + + public MineNetInstance getInstance() { + return instance; + } +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/RestrictionHandler.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/RestrictionHandler.java new file mode 100644 index 0000000..c9966b1 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/RestrictionHandler.java @@ -0,0 +1,42 @@ +package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.List; + +public class RestrictionHandler { + private List restrictions = new ArrayList<>(); + + public RestrictionHandler(IRestriction... restrictions) { + this.restrictions = List.of(restrictions); + } + + public RestrictionHandler() { + + } + + public RestrictionHandler addRestriction(IRestriction IRestriction) { + this.restrictions.add(IRestriction); + return this; + } + + public List getRestrictions() { + return restrictions; + } + + public boolean canPlay(RestrictionData data) { + return this.restrictions.stream() + .anyMatch(iRestriction -> !iRestriction.calculate(data).getType().equals(Restriction.Type.OK)); + } + + public List getWarnings(RestrictionData data) { + List warnings = new ArrayList<>(); + for (IRestriction r : this.restrictions) { + Restriction calculated = r.calculate(data); + if(!calculated.getType().equals(Restriction.Type.WARN)) continue; + + warnings.add(calculated.getWarnMessage()); + } + return warnings; + } +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/common/MaximalPlayeramountRestriction.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/common/MaximalPlayeramountRestriction.java new file mode 100644 index 0000000..cbf4d30 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/common/MaximalPlayeramountRestriction.java @@ -0,0 +1,24 @@ +package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common; + +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRestriction; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData; +import kotlin.Result; + +public class MaximalPlayeramountRestriction implements IRestriction { + final private int max; + + public MaximalPlayeramountRestriction(int max) { + this.max = max; + } + + @Override + public Restriction calculate(RestrictionData data) { + return new Restriction( + "Maxplayers", + "Maximale spieleranzahl", + null, + data.getInstance().getPlayers().size() > this.max ? Restriction.Type.FAIL : Restriction.Type.OK + ); + } +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/common/MinimalPlayeramountRestriction.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/common/MinimalPlayeramountRestriction.java new file mode 100644 index 0000000..be69390 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/config/restriction/common/MinimalPlayeramountRestriction.java @@ -0,0 +1,23 @@ +package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common; + +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRestriction; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData; + +public class MinimalPlayeramountRestriction implements IRestriction { + final int min; + + public MinimalPlayeramountRestriction(int min) { + this.min = min; + } + + @Override + public Restriction calculate(RestrictionData data) { + return new Restriction( + "Minimal players", + "Minimal amount of players needed", + null, + data.getInstance().getPlayers().size() < min ? Restriction.Type.FAIL : Restriction.Type.OK + ); + } +} diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/deathcube/DeathcubeFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/deathcube/DeathcubeFactory.java index f74e3cd..61a1797 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/deathcube/DeathcubeFactory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/deathcube/DeathcubeFactory.java @@ -4,7 +4,7 @@ import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame; import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory; import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option; import eu.mhsl.minenet.minigames.instance.game.minigame.config.ConfigManager; -import eu.mhsl.minenet.minigames.instance.game.minigame.config.options.NumericOption; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.common.NumericOption; import net.kyori.adventure.text.Component; import net.minestom.server.item.Material; diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/minerun/MinerunFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/minerun/MinerunFactory.java index 9966e5b..a63a17f 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/minerun/MinerunFactory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/minerun/MinerunFactory.java @@ -4,7 +4,7 @@ import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame; import eu.mhsl.minenet.minigames.instance.game.minigame.config.ConfigManager; import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory; import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option; -import eu.mhsl.minenet.minigames.instance.game.minigame.config.options.NumericOption; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.common.NumericOption; import net.kyori.adventure.text.Component; import net.minestom.server.item.Material; diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/stickfight/StickFightFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/stickfight/StickFightFactory.java index 2c8ad73..5824bf7 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/stickfight/StickFightFactory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/minigame/types/stickfight/StickFightFactory.java @@ -4,6 +4,9 @@ import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame; import eu.mhsl.minenet.minigames.instance.game.minigame.config.ConfigManager; import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory; import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MaximalPlayeramountRestriction; +import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MinimalPlayeramountRestriction; import net.kyori.adventure.text.Component; import net.minestom.server.item.Material; @@ -20,6 +23,13 @@ public class StickFightFactory implements GameFactory { return null; } + @Override + public RestrictionHandler globalRestrictions() { + return new RestrictionHandler() + .addRestriction(new MinimalPlayeramountRestriction(2)) + .addRestriction(new MaximalPlayeramountRestriction(4)); + } + @Override public Minigame manufacture(Map> configuration) { return new Stickfight(); diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/room/entity/GameSelector.java b/src/main/java/eu/mhsl/minenet/minigames/instance/room/entity/GameSelector.java index 8fe952a..a3a0c5d 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/room/entity/GameSelector.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/room/entity/GameSelector.java @@ -44,6 +44,6 @@ public class GameSelector extends InteractableEntity { return; } - playerEntityInteractEvent.getPlayer().openInventory(new MinigameTypeSelectInventory()); + playerEntityInteractEvent.getPlayer().openInventory(new MinigameTypeSelectInventory(room)); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/room/inventory/MinigameTypeSelectInventory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/room/inventory/MinigameTypeSelectInventory.java index 41dba79..a09c026 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/room/inventory/MinigameTypeSelectInventory.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/room/inventory/MinigameTypeSelectInventory.java @@ -4,6 +4,7 @@ import eu.mhsl.minenet.minigames.instance.game.GameList; import eu.mhsl.minenet.minigames.instance.game.GameType; import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameConfigurationInventory; import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory; +import eu.mhsl.minenet.minigames.instance.room.Room; import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory; import net.kyori.adventure.text.Component; import net.minestom.server.inventory.InventoryType; @@ -12,8 +13,10 @@ import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; public class MinigameTypeSelectInventory extends InteractableInventory { - public MinigameTypeSelectInventory() { + final private Room room; + public MinigameTypeSelectInventory(Room room) { super(InventoryType.CHEST_6_ROW, Component.text("MineNet Servernetzwerk")); + this.room = room; int typeCount = 0; for (GameType type : GameType.values()) { @@ -54,7 +57,7 @@ public class MinigameTypeSelectInventory extends InteractableInventory { .meta(metaBuilder -> metaBuilder.hideFlag(ItemHideFlag.HIDE_ATTRIBUTES)) .build(), gameCount, - itemClick -> itemClick.getPlayer().openInventory(new GameConfigurationInventory(gameFactory)) + itemClick -> itemClick.getPlayer().openInventory(new GameConfigurationInventory(room, gameFactory)) ); gameCount++; } diff --git a/src/main/java/eu/mhsl/minenet/minigames/lang/Languages.java b/src/main/java/eu/mhsl/minenet/minigames/lang/Languages.java index 0c55836..b3e71b5 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/lang/Languages.java +++ b/src/main/java/eu/mhsl/minenet/minigames/lang/Languages.java @@ -105,4 +105,3 @@ public class Languages { } } } -