Shulker change color with dye

This commit is contained in:
William Blake Galbreath
2025-01-12 12:31:13 -08:00
committed by granny
parent 504c35afb7
commit c9760f34b3
6 changed files with 40 additions and 66 deletions

View File

@@ -4029,12 +4029,12 @@ index 4a4d01abfbbdd4ab4bf89ce990ec287ca03dbc29..09910d526cdf3484474463ee4ea1ca85
this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.0);
} else {
diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java
index 28df1ff5a5ea1fffa3f8e9f676a633eebc3eec09..ded4af13c04f41557c2a9f4fb43632d5bb31ac7b 100644
index 3f2668c79dd3d9e7973c1bba3e424b8220749682..e0a496a0c584e1f90967a8528a73536fd991e774 100644
--- a/net/minecraft/world/entity/monster/Shulker.java
+++ b/net/minecraft/world/entity/monster/Shulker.java
@@ -89,12 +89,31 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
this.lookControl = new Shulker.ShulkerLookControl(this);
@@ -104,12 +104,31 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
}
// Purpur end - Shulker change color with dye
+ // Purpur start - Ridables
+ @Override
@@ -4064,7 +4064,7 @@ index 28df1ff5a5ea1fffa3f8e9f676a633eebc3eec09..ded4af13c04f41557c2a9f4fb43632d5
this.targetSelector.addGoal(1, new HurtByTargetGoal(this, this.getClass()).setAlertOthers());
this.targetSelector.addGoal(2, new Shulker.ShulkerNearestAttackGoal(this));
this.targetSelector.addGoal(3, new Shulker.ShulkerDefenseAttackGoal(this));
@@ -682,7 +701,7 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
@@ -697,7 +716,7 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
}
}

View File

@@ -23,7 +23,7 @@ index d0313fd5368baa53ec511c8c07fc78a1f1ecec4e..898b1e01026ec1f44cfe60e9f18a997c
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 293be658b1154a09468be16583400e7389acc103..4946b206167498e92880423654580f3efd7ba559 100644
index e86dcc0f596491fc7a5c22fa3909287ba520ca95..fef8910f31d697a77ea6f0e7aa6fd5ebb26367a1 100644
--- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java
@@ -311,6 +311,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -903,7 +903,7 @@ index bc9564ee22ff9d7f6d819da9601c2d8162d304e1..ca900bb646e16c7b4342f23c3ffae786
// CraftBukkit start - SPIGOT-2420: Special case, the ender dragon drops 12000 xp for the first kill and 500 xp for every other kill and this over time.
diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java
index c78132da8cb476e81beac68f7c0ac4ccd27a5db0..409b54fd8b0b9f34f2524d63d49abce6845ec80a 100644
index 5d97ae09292fb3209e7362df778e88dc508815a3..60e666aa8afe14b519010b6d137a89e3d22f6c81 100644
--- a/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -211,6 +211,14 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -1050,7 +1050,7 @@ index c6eeaf7b460408acfdf89d988b47b08eab7df4c5..148ae4bca77874545a2a05fb7f29f9ac
return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.3F).add(Attributes.ATTACK_DAMAGE, 8.0).add(Attributes.MAX_HEALTH, 80.0);
}
diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java
index 41107379eb3376697638aace09441680d54fa181..3fd2aed0cd425bee1211d1e56ded137501b6b25c 100644
index cf511c78638e0d7aa652d1c880b3cd8172d5b3cf..f8d6935439b4e672ed655b2a458451d4b1fa8ffd 100644
--- a/net/minecraft/world/entity/monster/EnderMan.java
+++ b/net/minecraft/world/entity/monster/EnderMan.java
@@ -107,6 +107,14 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -1321,10 +1321,10 @@ index 09910d526cdf3484474463ee4ea1ca8501280e45..55ddffbea1b86fa0fd5c5f435a5f7633
protected void registerGoals() {
super.registerGoals();
diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java
index ded4af13c04f41557c2a9f4fb43632d5bb31ac7b..aff212717684beccbe36e42e1a6e4f71ddc253a0 100644
index e0a496a0c584e1f90967a8528a73536fd991e774..03db684c122a07176aa1365550da935cdb66a1b9 100644
--- a/net/minecraft/world/entity/monster/Shulker.java
+++ b/net/minecraft/world/entity/monster/Shulker.java
@@ -106,6 +106,14 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
@@ -121,6 +121,14 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
}
// Purpur end - Ridables
@@ -1339,7 +1339,7 @@ index ded4af13c04f41557c2a9f4fb43632d5bb31ac7b..aff212717684beccbe36e42e1a6e4f71
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables
@@ -593,7 +601,7 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
@@ -608,7 +616,7 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
@Override
protected float sanitizeScale(float scale) {
@@ -1623,7 +1623,7 @@ index 4f1c04c65ffb01d931d2ab5979ab05bb9b1d3923..4b0f04c861397af694c477a8d3dc0de7
@Override
diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java
index c79e03267b0030e844746945f947616c1b6e4726..610e5e5330462646034c5667c15245fdb2af77a0 100644
index 0bce803739eb3ade7a256c6249914651c7f253ee..33831be05465c466408e6e84ee635e16ab9db5e2 100644
--- a/net/minecraft/world/entity/monster/ZombieVillager.java
+++ b/net/minecraft/world/entity/monster/ZombieVillager.java
@@ -95,6 +95,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {

View File

@@ -637,7 +637,7 @@ index 724d259d4b793f2043e63dda9022bdfddc4dca38..b2a0ba6faa117ad781aaa3e6932482d4
return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0);
}
diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java
index 837a4bdeed3fc3878667293444340d19f7aa0df4..ce6d4163c34dfdefacc917beccdee0542376d55b 100644
index a325fa87e149e7f354ed4cf3dbb30a002c4ce32a..7a3688e6cad1bbb0a47d8f3d0218bd777a0ab033 100644
--- a/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -219,6 +219,13 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -749,7 +749,7 @@ index 148ae4bca77874545a2a05fb7f29f9ac284feff6..2b1d33f4938b978c5b04ede7562bdecb
return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.3F).add(Attributes.ATTACK_DAMAGE, 8.0).add(Attributes.MAX_HEALTH, 80.0);
}
diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java
index 5decb422dbe94c7e8ff777bd11e2c33f0618978d..2e5ae060480e98936e56115b7926a127e6753990 100644
index 7b74322aef3d7d45a322abccc71d9168b3c0911b..6fccfb243c26c27b665df57e5e19eb3350c52ddf 100644
--- a/net/minecraft/world/entity/monster/EnderMan.java
+++ b/net/minecraft/world/entity/monster/EnderMan.java
@@ -87,7 +87,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -969,10 +969,10 @@ index b83886f2533026550759c823e1e11930665fc5bd..2844846811398350832a0f88a7277283
protected void registerGoals() {
super.registerGoals();
diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java
index aff212717684beccbe36e42e1a6e4f71ddc253a0..b3fce960c943a74993efd7b82e5008ae3a577a74 100644
index 03db684c122a07176aa1365550da935cdb66a1b9..c26e4858a14571d58e439cabd5f2593da4ee2634 100644
--- a/net/minecraft/world/entity/monster/Shulker.java
+++ b/net/minecraft/world/entity/monster/Shulker.java
@@ -114,6 +114,13 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
@@ -129,6 +129,13 @@ public class Shulker extends AbstractGolem implements VariantHolder<Optional<Dye
}
// Purpur end - Configurable entity base attributes
@@ -1207,7 +1207,7 @@ index b600fc46ed96d46769b7b289997a6e3cd422417b..61767c8dc1872d7d87d0757da4d3664c
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables
diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java
index 54df75681a89df93f59a589189c7e96b4acc4c77..bfe3b1c01ae03392b64be401918010bbcd025efe 100644
index 167b5dcbd378f36a17fb7e93b137fcb4fd1d25f9..91f15f794238494fdac69b4d320337cf984a92f8 100644
--- a/net/minecraft/world/entity/monster/ZombieVillager.java
+++ b/net/minecraft/world/entity/monster/ZombieVillager.java
@@ -124,6 +124,13 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {

View File

@@ -8,6 +8,28 @@
import net.minecraft.world.level.gameevent.GameEvent;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
@@ -88,6 +_,21 @@
this.lookControl = new Shulker.ShulkerLookControl(this);
}
+ // Purpur start - Shulker change color with dye
+ @Override
+ protected net.minecraft.world.InteractionResult mobInteract(Player player, net.minecraft.world.InteractionHand hand) {
+ net.minecraft.world.item.ItemStack itemstack = player.getItemInHand(hand);
+ if (player.level().purpurConfig.shulkerChangeColorWithDye && itemstack.getItem() instanceof net.minecraft.world.item.DyeItem dye && dye.getDyeColor() != this.getColor()) {
+ this.setVariant(Optional.of(dye.getDyeColor()));
+ if (!player.getAbilities().instabuild) {
+ itemstack.shrink(1);
+ }
+ return net.minecraft.world.InteractionResult.SUCCESS;
+ }
+ return super.mobInteract(player, hand);
+ }
+ // Purpur end - Shulker change color with dye
+
@Override
protected void registerGoals() {
this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F, 0.02F, true));
@@ -459,11 +_,21 @@
private void hitByShulkerBullet() {
Vec3 vec3 = this.position();

View File

@@ -2326,6 +2326,7 @@ public class PurpurWorldConfig {
public double shulkerSpawnFromBulletNearbyRange = 8.0D;
public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0";
public boolean shulkerSpawnFromBulletRandomColor = false;
public boolean shulkerChangeColorWithDye = false;
private void shulkerSettings() {
shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable);
shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater);
@@ -2343,6 +2344,7 @@ public class PurpurWorldConfig {
shulkerSpawnFromBulletNearbyRange = getDouble("mobs.shulker.spawn-from-bullet.nearby-range", shulkerSpawnFromBulletNearbyRange);
shulkerSpawnFromBulletNearbyEquation = getString("mobs.shulker.spawn-from-bullet.nearby-equation", shulkerSpawnFromBulletNearbyEquation);
shulkerSpawnFromBulletRandomColor = getBoolean("mobs.shulker.spawn-from-bullet.random-color", shulkerSpawnFromBulletRandomColor);
shulkerChangeColorWithDye = getBoolean("mobs.shulker.change-color-with-dye", shulkerChangeColorWithDye);
}
public boolean silverfishRidable = false;