|
9 | 9 | import com.projectkorra.projectkorra.GeneralMethods; |
10 | 10 | import com.projectkorra.projectkorra.ability.AddonAbility; |
11 | 11 | import com.projectkorra.projectkorra.ability.ComboAbility; |
| 12 | +import com.projectkorra.projectkorra.ability.ElementalAbility; |
12 | 13 | import com.projectkorra.projectkorra.ability.WaterAbility; |
13 | 14 | import com.projectkorra.projectkorra.ability.util.ComboManager.AbilityInformation; |
14 | 15 | import com.projectkorra.projectkorra.util.BlockSource; |
|
17 | 18 | import com.projectkorra.projectkorra.waterbending.OctopusForm; |
18 | 19 | import com.projectkorra.projectkorra.waterbending.Torrent; |
19 | 20 |
|
| 21 | +import com.projectkorra.projectkorra.waterbending.ice.PhaseChange; |
| 22 | +import com.projectkorra.projectkorra.waterbending.plant.PlantRegrowth; |
20 | 23 | import com.projectkorra.projectkorra.waterbending.util.WaterReturn; |
21 | 24 | import org.bukkit.Location; |
22 | 25 | import org.bukkit.Material; |
@@ -45,7 +48,8 @@ public class WaterGimbal extends WaterAbility implements AddonAbility, ComboAbil |
45 | 48 | private double damage; |
46 | 49 | private double speed; |
47 | 50 | private int animspeed; |
48 | | - private boolean plant; |
| 51 | + private boolean plantSourcing; |
| 52 | + private boolean snowSourcing; |
49 | 53 | private boolean requireAdjacentPlants; |
50 | 54 | private boolean canUseBottle; |
51 | 55 | private double abilityCollisionRadius; |
@@ -106,7 +110,8 @@ public void setFields() { |
106 | 110 | damage = config.getDouble("Abilities.Water.WaterCombo.WaterGimbal.Damage"); |
107 | 111 | speed = config.getDouble("Abilities.Water.WaterCombo.WaterGimbal.Speed"); |
108 | 112 | animspeed = config.getInt("Abilities.Water.WaterCombo.WaterGimbal.AnimationSpeed"); |
109 | | - plant = config.getBoolean("Abilities.Water.WaterCombo.WaterGimbal.PlantSource"); |
| 113 | + plantSourcing = config.getBoolean("Abilities.Water.WaterCombo.WaterGimbal.PlantSource"); |
| 114 | + snowSourcing = config.getBoolean("Abilities.Water.WaterCombo.WaterGimbal.SnowSource"); |
110 | 115 | requireAdjacentPlants = config.getBoolean("Abilities.Water.WaterCombo.WaterGimbal.RequireAdjacentPlants"); |
111 | 116 | canUseBottle = config.getBoolean("Abilities.Water.WaterCombo.WaterGimbal.BottleSource"); |
112 | 117 | abilityCollisionRadius = config.getDouble("Abilities.Water.WaterCombo.WaterGimbal.AbilityCollisionRadius"); |
@@ -167,20 +172,32 @@ public void progress() { |
167 | 172 | } |
168 | 173 |
|
169 | 174 | private boolean grabSource() { |
170 | | - sourceblock = BlockSource.getWaterSourceBlock(player, sourcerange, ClickType.SHIFT_DOWN, true, true, plant); |
| 175 | + sourceblock = BlockSource.getWaterSourceBlock(player, sourcerange, ClickType.SHIFT_DOWN, true, true, plantSourcing, snowSourcing, false); |
171 | 176 | if (sourceblock != null) { |
172 | | - if (isPlant(sourceblock)) { |
173 | | - if (!requireAdjacentPlants || JCMethods.isAdjacentToThreeOrMoreSources(sourceblock, sourceblock.getType())) { |
| 177 | + // All of these extra checks need to be done because PK sourcing system is buggy. |
| 178 | + boolean usingSnow = snowSourcing && (sourceblock.getType() == Material.SNOW_BLOCK || sourceblock.getType() == Material.SNOW); |
| 179 | + |
| 180 | + if (isPlant(sourceblock) || usingSnow) { |
| 181 | + if (usingSnow || !requireAdjacentPlants || JCMethods.isAdjacentToThreeOrMoreSources(sourceblock, sourceblock.getType())) { |
174 | 182 | playFocusWaterEffect(sourceblock); |
175 | 183 | sourceloc = sourceblock.getLocation(); |
| 184 | + |
| 185 | + new PlantRegrowth(this.player, sourceblock); |
176 | 186 | sourceblock.setType(Material.AIR); |
| 187 | + |
177 | 188 | return true; |
178 | 189 | } |
179 | | - } else { |
180 | | - if (GeneralMethods.isAdjacentToThreeOrMoreSources(sourceblock, false) || (TempBlock.isTempBlock(sourceblock) && WaterAbility.isBendableWaterTempBlock(sourceblock))) { |
| 190 | + } else if (!ElementalAbility.isSnow(sourceblock)) { |
| 191 | + boolean isTempBlock = TempBlock.isTempBlock(sourceblock); |
| 192 | + |
| 193 | + if (GeneralMethods.isAdjacentToThreeOrMoreSources(sourceblock, false) || (isTempBlock && WaterAbility.isBendableWaterTempBlock(sourceblock))) { |
181 | 194 | playFocusWaterEffect(sourceblock); |
182 | 195 | sourceloc = sourceblock.getLocation(); |
183 | | - sourceblock.setType(Material.AIR); |
| 196 | + |
| 197 | + if (isTempBlock) { |
| 198 | + PhaseChange.thaw(sourceblock); |
| 199 | + } |
| 200 | + |
184 | 201 | return true; |
185 | 202 | } |
186 | 203 | } |
|
0 commit comments