Browse Source

Merge pull request #47 from RedstoneFuture/Improvements/RandomGameEquipment

Improvements of random game equipment
Daniel 2 years ago
parent
commit
2934d57f65

+ 11 - 16
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/abstracts/Arena.java

@@ -19,14 +19,7 @@
 package de.butzlabben.missilewars.wrapper.abstracts;
 
 import com.google.gson.annotations.SerializedName;
-import de.butzlabben.missilewars.wrapper.abstracts.arena.EquipmentIntervalConfiguration;
-import de.butzlabben.missilewars.wrapper.abstracts.arena.FallProtectionConfiguration;
-import de.butzlabben.missilewars.wrapper.abstracts.arena.FireballConfiguration;
-import de.butzlabben.missilewars.wrapper.abstracts.arena.GameRespawnConfiguration;
-import de.butzlabben.missilewars.wrapper.abstracts.arena.GameSpawnConfiguration;
-import de.butzlabben.missilewars.wrapper.abstracts.arena.MissileConfiguration;
-import de.butzlabben.missilewars.wrapper.abstracts.arena.MoneyConfiguration;
-import de.butzlabben.missilewars.wrapper.abstracts.arena.ShieldConfiguration;
+import de.butzlabben.missilewars.wrapper.abstracts.arena.*;
 import de.butzlabben.missilewars.wrapper.geometry.FlatArea;
 import de.butzlabben.missilewars.wrapper.geometry.Plane;
 import lombok.Getter;
@@ -39,10 +32,6 @@ import org.bukkit.util.Vector;
 @ToString
 public class Arena implements Cloneable {
 
-    @SerializedName("spectator_spawn")
-    @Setter
-    private Location spectatorSpawn = new Location(null, 0, 100, 0, 90, 0);
-
     private String name = "arena0";
     @SerializedName("display_name") private String displayName = "&eDefault map";
     @SerializedName("display_material") private String displayMaterial = "STONE";
@@ -58,20 +47,26 @@ public class Arena implements Cloneable {
     @SerializedName("game_duration") private int gameDuration = 30;
     @SerializedName("fireball") private FireballConfiguration fireballConfiguration = new FireballConfiguration();
     @SerializedName("shield") private ShieldConfiguration shieldConfiguration = new ShieldConfiguration();
-    @SerializedName("arrow_occurrence") private int arrowOccurrence = 2;
+    @SerializedName("arrow") private ArrowConfiguration arrowConfiguration = new ArrowConfiguration();
     @SerializedName("save_statistics") private boolean saveStatistics = true;
     @SerializedName("fall_protection") private FallProtectionConfiguration fallProtection = new FallProtectionConfiguration();
     @SerializedName("money") private MoneyConfiguration money = new MoneyConfiguration();
     @SerializedName("equipment_interval") private EquipmentIntervalConfiguration interval = new EquipmentIntervalConfiguration();
-    @SerializedName("missile_configuration") private MissileConfiguration missileConfiguration = new MissileConfiguration();
+    @SerializedName("missile") private MissileConfiguration missileConfiguration = new MissileConfiguration();
+    @SerializedName("area") private FlatArea gameArea = new FlatArea(-30, -72, 30, 72);
+    
+    @SerializedName("spectator_spawn")
+    @Setter
+    private Location spectatorSpawn = new Location(null, 0, 100, 0, 90, 0);
+    
     @SerializedName("team1_spawn")
     @Setter
     private Location team1Spawn = new Location(null, 0.5, 100, 45.5, 180, 0);
-    @SerializedName("area") private FlatArea gameArea = new FlatArea(-30, -72, 30, 72);
+    
     @SerializedName("team2_spawn")
     @Setter
     private Location team2Spawn = new Location(null, 0.5, 100, -45.5, 0, 0);
-
+    
     public Arena() {
 
     }

+ 32 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/abstracts/arena/ArrowConfiguration.java

@@ -0,0 +1,32 @@
+/*
+ * This file is part of MissileWars (https://github.com/Butzlabben/missilewars).
+ * Copyright (c) 2018-2021 Daniel Nägele.
+ *
+ * MissileWars is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MissileWars is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with MissileWars.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package de.butzlabben.missilewars.wrapper.abstracts.arena;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.ToString;
+
+@Getter
+@ToString
+@RequiredArgsConstructor
+public class ArrowConfiguration {
+
+    private int occurrence = 2;
+    private int amount = 3;
+}

+ 1 - 1
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/abstracts/arena/ShieldConfiguration.java

@@ -31,5 +31,5 @@ public class ShieldConfiguration {
     private String name = "Shield";
     private String schematic = "shield.schematic";
     private int occurrence = 1;
-    @SerializedName("serialized_name") private int flyTime = 20;
+    @SerializedName("fly_time") private int flyTime = 20;
 }

+ 15 - 32
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/game/Shield.java

@@ -22,13 +22,7 @@ import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.util.version.VersionUtil;
 import de.butzlabben.missilewars.wrapper.abstracts.arena.ShieldConfiguration;
 import de.butzlabben.missilewars.wrapper.missile.paste.PasteProvider;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
 import lombok.RequiredArgsConstructor;
-import org.apache.commons.io.IOUtils;
 import org.bukkit.Bukkit;
 import org.bukkit.Location;
 import org.bukkit.entity.Player;
@@ -39,6 +33,8 @@ import org.bukkit.event.entity.ProjectileHitEvent;
 import org.bukkit.event.entity.ProjectileLaunchEvent;
 import org.bukkit.util.Vector;
 
+import java.io.File;
+
 /**
  * @author Butzlabben
  * @since 11.09.2018
@@ -50,42 +46,29 @@ public class Shield implements Listener {
     private final ShieldConfiguration shieldConfiguration;
     private org.bukkit.entity.Snowball ball;
 
-    public static String getContent(String uri) throws IOException {
-        URL url = new URL(uri);
-        URLConnection con = url.openConnection();
-        con.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
-        InputStream in = con.getInputStream();
-        String encoding = con.getContentEncoding();
-        encoding = encoding == null ? "UTF-8" : encoding;
-        return IOUtils.toString(in, encoding);
-    }
-
-    public void onThrow(ProjectileLaunchEvent e) {
-        ball = (org.bukkit.entity.Snowball) e.getEntity();
+    public void onThrow(ProjectileLaunchEvent event) {
+        ball = (org.bukkit.entity.Snowball) event.getEntity();
         Bukkit.getPluginManager().registerEvents(this, MissileWars.getInstance());
+
         Bukkit.getScheduler().runTaskLater(MissileWars.getInstance(), () -> {
-            try {
-                if (!ball.isDead())
-                    paste();
-                HandlerList.unregisterAll(this);
-            } catch (Exception e1) {
-                e1.printStackTrace();
-            }
+            if (!ball.isDead()) pasteShield();
+            HandlerList.unregisterAll(this);
         }, shieldConfiguration.getFlyTime());
     }
 
     @EventHandler
-    public void onHit(ProjectileHitEvent e) {
-        if (e.getEntity().equals(ball) || ball == e.getEntity()) {
-            HandlerList.unregisterAll(this);
-            paste();
-        }
+    public void onHit(ProjectileHitEvent event) {
+        if (!event.getEntity().equals(ball)) return;
+
+        HandlerList.unregisterAll(this);
+        pasteShield();
     }
 
-    public void paste() {
+    public void pasteShield() {
         Location loc = ball.getLocation();
         Vector pastePos = new Vector(loc.getX(), loc.getY(), loc.getZ());
-        File schem = new File(MissileWars.getInstance().getDataFolder(), shieldConfiguration.getSchematic());
+        File pluginDir = MissileWars.getInstance().getDataFolder();
+        File schem = new File(pluginDir, "shields/" + shieldConfiguration.getSchematic());
 
         PasteProvider.getPaster().pasteSchematic(schem, pastePos, loc.getWorld());
         VersionUtil.playSnowball(player, player.getLocation());

+ 3 - 2
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/game/SpecialGameEquipment.java

@@ -59,11 +59,12 @@ public class SpecialGameEquipment {
      * This method goes through all configured special equipment items
      * and adds them to the list. The higher the defined spawn-occurrence
      * of an item type being set, the more often it will be added to the list.
+     * If the spawn-occurrence is 0, the equipment is skipped.
      */
     private void createSpecialEquipmentList() {
 
         int shieldOccurrence = game.getArena().getShieldConfiguration().getOccurrence();
-        int arrowOccurrence = game.getArena().getArrowOccurrence();
+        int arrowOccurrence = game.getArena().getArrowConfiguration().getOccurrence();
         int fireballOccurrence = game.getArena().getFireballConfiguration().getOccurrence();
 
         for (int i = shieldOccurrence; i > 0; i--) {
@@ -94,7 +95,7 @@ public class SpecialGameEquipment {
      * This method creates the arrow item stack.
      */
     private void createArrow() {
-        arrow = new ItemStack(Material.ARROW, 3);
+        arrow = new ItemStack(Material.ARROW, game.getArena().getArrowConfiguration().getAmount());
     }
 
     /**

+ 1 - 5
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/missile/Missile.java

@@ -103,11 +103,7 @@ public class Missile {
                 .replace("%schematic_name_compact%", getSchematicName(true));
         return name;
     }
-
-    public EntityType getType() {
-        return egg;
-    }
-
+    
     /**
      * This method provides the missile spawn item based on the
      * mob spawn item specification in the arena configuration.