diff --git a/build.gradle b/build.gradle index 1def41c1..bec3cec1 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'io.github.fisher2911' -version '1.6.1' +version '1.6.2' repositories { mavenCentral() diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/config/CosmeticSettings.java b/src/main/java/io/github/fisher2911/hmccosmetics/config/CosmeticSettings.java index c76741d9..95c3d403 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/config/CosmeticSettings.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/config/CosmeticSettings.java @@ -12,13 +12,16 @@ public class CosmeticSettings { private static final transient String COSMETIC_SETTINGS_PATH = "cosmetic-settings"; private static final transient String REQUIRE_EMPTY_HELMET_PATH = "require-empty-helmet"; private static final transient String REQUIRE_EMPTY_OFF_HAND_PATH = "require-empty-off-hand"; + private static final transient String LOOK_DOWN_PITCH_PATH = "look-down-backpack-remove"; private boolean requireEmptyHelmet; private boolean requireEmptyOffHand; + private int lookDownPitch; public void load(final FileConfiguration config) { this.requireEmptyHelmet = config.getBoolean(COSMETIC_SETTINGS_PATH + "." + REQUIRE_EMPTY_HELMET_PATH); this.requireEmptyOffHand = config.getBoolean(COSMETIC_SETTINGS_PATH + "." + REQUIRE_EMPTY_OFF_HAND_PATH); + this.lookDownPitch = config.getInt(COSMETIC_SETTINGS_PATH + "." + LOOK_DOWN_PITCH_PATH); } public boolean isRequireEmptyHelmet() { @@ -29,6 +32,10 @@ public class CosmeticSettings { return requireEmptyOffHand; } + public int getLookDownPitch() { + return lookDownPitch; + } + public void setRequireEmptyHelmet(final boolean requireEmptyHelmet) { this.requireEmptyHelmet = requireEmptyHelmet; } diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java b/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java index ec1f8f4a..deaae76b 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java @@ -6,12 +6,13 @@ import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.Pair; import com.comphenix.protocol.wrappers.WrappedDataWatcher; import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer; -import io.github.fisher2911.hmccosmetics.HMCCosmetics; +import io.github.fisher2911.hmccosmetics.config.Settings; import io.github.fisher2911.hmccosmetics.gui.ArmorItem; import io.github.fisher2911.hmccosmetics.inventory.PlayerArmor; import io.github.fisher2911.hmccosmetics.packet.PacketManager; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -86,9 +87,9 @@ public class User { PacketManager.sendPacket(other, packet); } - public void spawnArmorStand() { + public void spawnArmorStand(final Settings settings) { if (this.hasArmorStand) { - this.updateArmorStand(); + this.updateArmorStand(settings); return; } @@ -99,10 +100,9 @@ public class User { this.hasArmorStand = true; } - public void updateArmorStand() { + public void updateArmorStand(final Settings settings) { if (!this.hasArmorStand) { - this.spawnArmorStand(); -// return; + this.spawnArmorStand(settings); } final Player player = this.getPlayer(); @@ -133,6 +133,21 @@ public class User { metaContainer.getWatchableCollectionModifier().write(0, metaData.getWatchableObjects()); PacketManager.sendPacketToOnline(armorPacket, metaContainer, rotationPacket, ridingPacket); + + final int lookDownPitch = settings.getCosmeticSettings().getLookDownPitch(); + + if (lookDownPitch != -1 && + this.isFacingDown(location, lookDownPitch)) { + equipmentList.set(0, new Pair<>(EnumWrappers.ItemSlot.HEAD, + new ItemStack(Material.AIR) + )); + + PacketManager.sendPacket(player, PacketManager.getEquipmentPacket(equipmentList, this.armorStandId)); + } + } + + private boolean isFacingDown(final Location location, final int pitchLimit) { + return location.getPitch() > pitchLimit; } public void despawnAttached() { diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java b/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java index dc3c4cbb..0f0896e4 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java @@ -88,7 +88,7 @@ public class UserManager { this.plugin, () -> { for (final User user : this.userMap.values()) { - user.updateArmorStand(); + user.updateArmorStand(this.plugin.getSettings()); } }, 1, diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index ffa639b5..dfedb3fd 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,3 +1,6 @@ cosmetic-settings: require-empty-helmet: false - require-empty-off-hand: true \ No newline at end of file + require-empty-off-hand: true + # The pitch the player must look down for the backpack to be removed + # Set to -1 for no removal + look-down-backpack-remove: 70 \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 4eb1d7ea..1aea03ab 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: HMCCosmetics main: io.github.fisher2911.hmccosmetics.HMCCosmetics -version: 1.6.1 +version: 1.6.2 api-version: 1.17 softdepend: - Multiverse