Working Restrictions
This commit is contained in:
		| @@ -1,18 +1,22 @@ | ||||
| package eu.mhsl.minenet.minigames.instance.game.minigame.config; | ||||
|  | ||||
| import com.extollit.linalg.mutable.Vec2d; | ||||
| 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.InventoryItemAlignment; | ||||
| 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.MinecraftServer; | ||||
| import net.minestom.server.entity.Player; | ||||
| import net.minestom.server.event.instance.AddEntityToInstanceEvent; | ||||
| import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent; | ||||
| import net.minestom.server.inventory.InventoryType; | ||||
| import net.minestom.server.inventory.click.ClickType; | ||||
| import net.minestom.server.inventory.condition.InventoryConditionResult; | ||||
| @@ -36,10 +40,8 @@ public class GameConfigurationInventory extends InteractableInventory { | ||||
|         this.factory = factory; | ||||
|  | ||||
|         room.eventNode() | ||||
|                 .addListener(AddEntityToInstanceEvent.class, addEntityToInstanceEvent -> { | ||||
|                     System.out.println("UPDATE"); | ||||
|                     updatePlayButton(); | ||||
|                 }); | ||||
|                 .addListener(AddEntityToInstanceEvent.class, addEntityToInstanceEvent -> MinecraftServer.getSchedulerManager().scheduleNextTick(this::updatePlayButton)) | ||||
|                 .addListener(RemoveEntityFromInstanceEvent.class, removeEntityFromInstanceEvent -> MinecraftServer.getSchedulerManager().scheduleNextTick(this::updatePlayButton)); | ||||
|  | ||||
|         ConfigManager config = factory.configuration(); | ||||
|  | ||||
| @@ -70,18 +72,22 @@ public class GameConfigurationInventory extends InteractableInventory { | ||||
|                     ItemStack.builder(Material.BARRIER).displayName(Component.text("Keine Optionen")).lore(TextUtil.autoWrap("Für dieses Spiel sind keine Einstellungen verfügbar!")).build(), | ||||
|                     31 | ||||
|             ); | ||||
|             return; | ||||
|  | ||||
|         } else { | ||||
|             int offset = 18; | ||||
|             InventoryItemAlignment itemAlignment = new InventoryItemAlignment(config.getAll().size(), 3); | ||||
|             for(Option<?> item : config.getAll()) { | ||||
|                 Vec2d current = itemAlignment.next(); | ||||
|                 System.out.println(current.x + " : " + current.y); | ||||
|                 map.put((int) (offset + (current.y * 9) + current.x), item); | ||||
|  | ||||
|                 setDummyItem( | ||||
|                         item.getCurrent(), | ||||
|                         (int) (offset + (current.y * 9) + current.x) | ||||
|                 ); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         int pos = 18; | ||||
|         for(Option<?> item : config.getAll()) { | ||||
|             map.put(pos, item); | ||||
|  | ||||
|             setDummyItem( | ||||
|                     item.getCurrent(), | ||||
|                     pos++ | ||||
|             ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -104,6 +110,8 @@ public class GameConfigurationInventory extends InteractableInventory { | ||||
|         RestrictionHandler restrictionHandler = factory.globalRestrictions(); | ||||
|         RestrictionData restrictionData = new RestrictionData(room); | ||||
|  | ||||
|         System.out.println("UpdatePlayButton:" + restrictionHandler.canPlay(restrictionData)); | ||||
|  | ||||
|         if(restrictionHandler.canPlay(restrictionData)) { | ||||
|  | ||||
|             setClickableItem( | ||||
| @@ -132,11 +140,17 @@ public class GameConfigurationInventory extends InteractableInventory { | ||||
|                             .build(), | ||||
|                     8, | ||||
|                     itemClick -> { | ||||
|                         if(restrictionHandler.canPlay(restrictionData)) { | ||||
|                             updatePlayButton(); | ||||
|                             return; | ||||
|                         } | ||||
|                         itemClick.getPlayer().playSound(Sound.sound(SoundEvent.ENTITY_SILVERFISH_DEATH, Sound.Source.AMBIENT, 1f, 1f)); | ||||
|                     }, | ||||
|                     false | ||||
|             ); | ||||
|  | ||||
|         } | ||||
|  | ||||
|         update(); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,16 +1,15 @@ | ||||
| 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; | ||||
|     final private Room room; | ||||
|  | ||||
|     public RestrictionData(Room instance) { | ||||
|         this.instance = instance; | ||||
|     public RestrictionData(Room room) { | ||||
|         this.room = room; | ||||
|     } | ||||
|  | ||||
|     public MineNetInstance getInstance() { | ||||
|         return instance; | ||||
|     public Room getRoom() { | ||||
|         return room; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -25,8 +25,9 @@ public class RestrictionHandler { | ||||
|     } | ||||
|  | ||||
|     public boolean canPlay(RestrictionData data) { | ||||
|         if(restrictions.size() < 1) return true; | ||||
|         return this.restrictions.stream() | ||||
|                 .anyMatch(iRestriction -> !iRestriction.calculate(data).getType().equals(Restriction.Type.OK)); | ||||
|                 .noneMatch(iRestriction -> iRestriction.calculate(data).getType().equals(Restriction.Type.FAIL)); | ||||
|     } | ||||
|  | ||||
|     public List<String> getWarnings(RestrictionData data) { | ||||
|   | ||||
| @@ -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 MaximalPlayeramountGameRestriction implements IRestriction { | ||||
|     private int max; | ||||
|  | ||||
|     public MaximalPlayeramountGameRestriction(int max) { | ||||
|         this.max = max; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Restriction calculate(RestrictionData data) { | ||||
|         return new Restriction( | ||||
|                 "Minimal players needed", | ||||
|                 "Minimal players", | ||||
|                 null, | ||||
|                 data.getRoom().getAllMembers().size() > this.max ? Restriction.Type.FAIL : Restriction.Type.OK | ||||
|         ); | ||||
|     } | ||||
| } | ||||
| @@ -3,12 +3,11 @@ package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.comm | ||||
| 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 { | ||||
| public class MaximalPlayeramountInstanceRestriction implements IRestriction { | ||||
|     final private int max; | ||||
| 
 | ||||
|     public MaximalPlayeramountRestriction(int max) { | ||||
|     public MaximalPlayeramountInstanceRestriction(int max) { | ||||
|         this.max = max; | ||||
|     } | ||||
| 
 | ||||
| @@ -18,7 +17,7 @@ public class MaximalPlayeramountRestriction implements IRestriction { | ||||
|                 "Maxplayers", | ||||
|                 "Maximale spieleranzahl", | ||||
|                 null, | ||||
|                 data.getInstance().getPlayers().size() > this.max ? Restriction.Type.FAIL : Restriction.Type.OK | ||||
|                 data.getRoom().getPlayers().size() > this.max ? Restriction.Type.FAIL : Restriction.Type.OK | ||||
|         ); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,25 @@ | ||||
| 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 javax.xml.transform.OutputKeys; | ||||
|  | ||||
| public class MinimalPlayeramountGameRestriction implements IRestriction { | ||||
|     private int min; | ||||
|  | ||||
|     public MinimalPlayeramountGameRestriction(int min) { | ||||
|         this.min = min; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Restriction calculate(RestrictionData data) { | ||||
|         return new Restriction( | ||||
|                 "Minimal players", | ||||
|                 "minimal Players needed", | ||||
|                 null, | ||||
|                 data.getRoom().getAllMembers().size() < this.min ? Restriction.Type.FAIL : Restriction.Type.OK | ||||
|         ); | ||||
|     } | ||||
| } | ||||
| @@ -4,10 +4,10 @@ import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRest | ||||
| 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 { | ||||
| public class MinimalPlayeramountInstanceRestriction implements IRestriction { | ||||
|     final int min; | ||||
| 
 | ||||
|     public MinimalPlayeramountRestriction(int min) { | ||||
|     public MinimalPlayeramountInstanceRestriction(int min) { | ||||
|         this.min = min; | ||||
|     } | ||||
| 
 | ||||
| @@ -17,7 +17,7 @@ public class MinimalPlayeramountRestriction implements IRestriction { | ||||
|                 "Minimal players", | ||||
|                 "Minimal amount of players needed", | ||||
|                 null, | ||||
|                 data.getInstance().getPlayers().size() < min ? Restriction.Type.FAIL : Restriction.Type.OK | ||||
|                 data.getRoom().getPlayers().size() < min ? Restriction.Type.FAIL : Restriction.Type.OK | ||||
|         ); | ||||
|     } | ||||
| } | ||||
| @@ -4,9 +4,12 @@ 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.common.NumericOption; | ||||
| 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 eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MaximalPlayeramountGameRestriction; | ||||
| import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MaximalPlayeramountInstanceRestriction; | ||||
| import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MinimalPlayeramountGameRestriction; | ||||
| import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MinimalPlayeramountInstanceRestriction; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.minestom.server.item.Material; | ||||
|  | ||||
| @@ -20,14 +23,15 @@ public class StickFightFactory implements GameFactory { | ||||
|  | ||||
|     @Override | ||||
|     public ConfigManager configuration() { | ||||
|         return null; | ||||
|         return new ConfigManager() | ||||
|                 .addOption(new NumericOption("lenght", Material.SANDSTONE, "Länge", 5, 7, 9, 11)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public RestrictionHandler globalRestrictions() { | ||||
|         return new RestrictionHandler() | ||||
|                 .addRestriction(new MinimalPlayeramountRestriction(2)) | ||||
|                 .addRestriction(new MaximalPlayeramountRestriction(4)); | ||||
|                 .addRestriction(new MinimalPlayeramountGameRestriction(2)) | ||||
|                 .addRestriction(new MaximalPlayeramountGameRestriction(4)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
		Reference in New Issue
	
	Block a user