Skip to content

Commit 833a4cd

Browse files
encode42granny
authored andcommitted
Config to always tame in Creative
Adds a configuration option that ensures a player in Creative always tames a tameable entity. This essentially allows Creative mode players to tame animals on their first try.
1 parent ca2e233 commit 833a4cd

6 files changed

Lines changed: 42 additions & 81 deletions

File tree

patches/server/0123-Config-to-always-tame-in-Creative.patch

Lines changed: 0 additions & 80 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--- a/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java
2+
+++ b/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java
3+
@@ -58,7 +_,7 @@
4+
if (firstPassenger instanceof Player player) {
5+
int temper = this.horse.getTemper();
6+
int maxTemper = this.horse.getMaxTemper();
7+
- if (maxTemper > 0 && this.horse.getRandom().nextInt(maxTemper) < temper && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this.horse, ((org.bukkit.craftbukkit.entity.CraftHumanEntity) this.horse.getBukkitEntity().getPassenger()).getHandle()).isCancelled()) { // CraftBukkit - fire EntityTameEvent
8+
+ if (this.horse.level().purpurConfig.alwaysTameInCreative && player.hasInfiniteMaterials() || maxTemper > 0 && this.horse.getRandom().nextInt(maxTemper) < temper && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this.horse, ((org.bukkit.craftbukkit.entity.CraftHumanEntity) this.horse.getBukkitEntity().getPassenger()).getHandle()).isCancelled()) { // CraftBukkit - fire EntityTameEvent // Purpur - Config to always tame in Creative
9+
this.horse.tameWithName(player);
10+
return;
11+
}

purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Cat.java.patch

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,12 @@
1515
@Nullable
1616
@Override
1717
public SpawnGroupData finalizeSpawn(
18+
@@ -438,7 +_,7 @@
19+
}
20+
21+
private void tryToTame(Player player) {
22+
- if (this.random.nextInt(3) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit
23+
+ if (this.level().purpurConfig.alwaysTameInCreative && player.hasInfiniteMaterials() || this.random.nextInt(3) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit // Purpur - Config to always tame in Creative
24+
this.tame(player);
25+
this.setOrderedToSit(true);
26+
this.level().broadcastEntityEvent(this, (byte)7);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--- a/net/minecraft/world/entity/animal/Parrot.java
2+
+++ b/net/minecraft/world/entity/animal/Parrot.java
3+
@@ -257,7 +_,7 @@
4+
}
5+
6+
if (!this.level().isClientSide) {
7+
- if (this.random.nextInt(10) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit
8+
+ if (this.level().purpurConfig.alwaysTameInCreative && player.hasInfiniteMaterials() || (this.random.nextInt(10) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled())) { // CraftBukkit // Purpur - Config to always tame in Creative
9+
this.tame(player);
10+
this.level().broadcastEntityEvent(this, (byte)7);
11+
} else {

purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Wolf.java.patch

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@
137137
this.interestedAngleO = this.interestedAngle;
138138
if (this.isInterested()) {
139139
this.interestedAngle = this.interestedAngle + (1.0F - this.interestedAngle) * 0.4F;
140-
@@ -481,6 +_,20 @@
140+
@@ -481,13 +_,27 @@
141141
itemInHand.consume(1, player);
142142
this.tryToTame(player);
143143
return InteractionResult.SUCCESS_SERVER;
@@ -158,3 +158,11 @@
158158
}
159159

160160
return super.mobInteract(player, hand);
161+
}
162+
163+
private void tryToTame(Player player) {
164+
- if (this.random.nextInt(3) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit - added event call and isCancelled check.
165+
+ if (this.level().purpurConfig.alwaysTameInCreative && player.hasInfiniteMaterials() || this.random.nextInt(3) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit - added event call and isCancelled check. // Purpur - Config to always tame in Creative
166+
this.tame(player);
167+
this.navigation.stop();
168+
this.setTarget(null);

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ private void arrowSettings() {
110110
}
111111

112112
public boolean useBetterMending = false;
113+
public boolean alwaysTameInCreative = false;
113114
public boolean boatEjectPlayersOnLand = false;
114115
public boolean boatsDoFallDamage = false;
115116
public boolean disableDropsOnCrammingDeath = false;
@@ -128,6 +129,7 @@ private void arrowSettings() {
128129
public boolean imposeTeleportRestrictionsOnEndPortals = false;
129130
private void miscGameplayMechanicsSettings() {
130131
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
132+
alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative);
131133
boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand);
132134
boatsDoFallDamage = getBoolean("gameplay-mechanics.boat.do-fall-damage", boatsDoFallDamage);
133135
disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);

0 commit comments

Comments
 (0)