Skip to content
This repository was archived by the owner on Apr 13, 2025. It is now read-only.

Commit 6f99e5f

Browse files
BillyGalbreathgranny
authored andcommitted
Add skeleton bow accuracy option
1 parent fff1bdc commit 6f99e5f

3 files changed

Lines changed: 23 additions & 51 deletions

File tree

patches/server/0253-Add-skeleton-bow-accuracy-option.patch

Lines changed: 0 additions & 51 deletions
This file was deleted.

purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,12 @@
1212
this.setItemSlot(EquipmentSlot.HEAD, new ItemStack(random.nextFloat() < 0.1F ? Blocks.JACK_O_LANTERN : Blocks.CARVED_PUMPKIN));
1313
this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F;
1414
}
15+
@@ -217,7 +_,7 @@
16+
if (event.getProjectile() == arrow.getBukkitEntity()) {
17+
// CraftBukkit end
18+
Projectile.spawnProjectileUsingShoot(
19+
- arrow, serverLevel, projectile, d, d1 + squareRoot * 0.2F, d2, 1.6F, 14 - serverLevel.getDifficulty().getId() * 4
20+
+ arrow, serverLevel, projectile, d, d1 + squareRoot * 0.2F, d2, 1.6F, serverLevel.purpurConfig.skeletonBowAccuracyMap.getOrDefault(serverLevel.getDifficulty().getId(), (float) (14 - serverLevel.getDifficulty().getId() * 4)) // Purpur - skeleton bow accuracy option
21+
);
22+
} // CraftBukkit
23+
}

purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2608,6 +2608,8 @@ private void silverfishSettings() {
26082608
public boolean skeletonAlwaysDropExp = false;
26092609
public double skeletonHeadVisibilityPercent = 0.5D;
26102610
public int skeletonFeedWitherRoses = 0;
2611+
public String skeletonBowAccuracy = "14 - difficulty * 4";
2612+
public Map<Integer, Float> skeletonBowAccuracyMap = new HashMap<>();
26112613
private void skeletonSettings() {
26122614
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
26132615
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
@@ -2623,6 +2625,18 @@ private void skeletonSettings() {
26232625
skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp);
26242626
skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent);
26252627
skeletonFeedWitherRoses = getInt("mobs.skeleton.feed-wither-roses", skeletonFeedWitherRoses);
2628+
final String defaultSkeletonBowAccuracy = skeletonBowAccuracy;
2629+
skeletonBowAccuracy = getString("mobs.skeleton.bow-accuracy", skeletonBowAccuracy);
2630+
for (int i = 1; i < 4; i++) {
2631+
final float divergence;
2632+
try {
2633+
divergence = ((Number) Entity.scriptEngine.eval("let difficulty = " + i + "; " + skeletonBowAccuracy)).floatValue();
2634+
} catch (javax.script.ScriptException e) {
2635+
e.printStackTrace();
2636+
break;
2637+
}
2638+
skeletonBowAccuracyMap.put(i, divergence);
2639+
}
26262640
}
26272641

26282642
public boolean skeletonHorseRidable = false;

0 commit comments

Comments
 (0)