mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 08:27:43 +01:00
port Villagers follow emerald blocks patch
This commit is contained in:
@@ -5,7 +5,7 @@ Subject: [PATCH] Villagers follow emerald blocks
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
|
diff --git a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
|
||||||
index 8ccbf0386aa453e82fc0f82d2aefd1e08b6c3345..8c1ff0b273e25373c6b581613f692265d9569952 100644
|
index 61ed4d687120fcbb7b91863e400f3657ebcde687..e773c426567964fc8269237d71c3434a5473985c 100644
|
||||||
--- a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
|
--- a/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
|
||||||
+++ b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
|
+++ b/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
|
||||||
@@ -162,7 +162,7 @@ public class DefaultAttributes {
|
@@ -162,7 +162,7 @@ public class DefaultAttributes {
|
||||||
@@ -18,10 +18,10 @@ index 8ccbf0386aa453e82fc0f82d2aefd1e08b6c3345..8c1ff0b273e25373c6b581613f692265
|
|||||||
.put(EntityType.WITHER, WitherBoss.createAttributes().build())
|
.put(EntityType.WITHER, WitherBoss.createAttributes().build())
|
||||||
.put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build())
|
.put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build())
|
||||||
diff --git a/net/minecraft/world/entity/ai/goal/TemptGoal.java b/net/minecraft/world/entity/ai/goal/TemptGoal.java
|
diff --git a/net/minecraft/world/entity/ai/goal/TemptGoal.java b/net/minecraft/world/entity/ai/goal/TemptGoal.java
|
||||||
index 84ab90dd1fe693da71732533ccff940c1007e1b6..798d1a169ebebfbdc5e0cf71e7a1256cefcbd32b 100644
|
index 438d6347778a94b4fe430320b268a2d67afa209a..f88f618d34fb343b31de3af1a875d6633703df71 100644
|
||||||
--- a/net/minecraft/world/entity/ai/goal/TemptGoal.java
|
--- a/net/minecraft/world/entity/ai/goal/TemptGoal.java
|
||||||
+++ b/net/minecraft/world/entity/ai/goal/TemptGoal.java
|
+++ b/net/minecraft/world/entity/ai/goal/TemptGoal.java
|
||||||
@@ -67,7 +67,7 @@ public class TemptGoal extends Goal {
|
@@ -58,7 +58,7 @@ public class TemptGoal extends Goal {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldFollow(LivingEntity entity) {
|
private boolean shouldFollow(LivingEntity entity) {
|
||||||
@@ -31,22 +31,23 @@ index 84ab90dd1fe693da71732533ccff940c1007e1b6..798d1a169ebebfbdc5e0cf71e7a1256c
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/net/minecraft/world/entity/npc/AbstractVillager.java b/net/minecraft/world/entity/npc/AbstractVillager.java
|
diff --git a/net/minecraft/world/entity/npc/AbstractVillager.java b/net/minecraft/world/entity/npc/AbstractVillager.java
|
||||||
index 3c037cabd8331eb96a6523b37abab4e73ab79a02..94ba68e063e63f77f7951d482af7a3586ba4ffdf 100644
|
index a71d16d968bb90fd7aca6f01a3dd56df4f9a7ce6..b4e79cac5611942240ce85120f7bbee329ae2fb8 100644
|
||||||
--- a/net/minecraft/world/entity/npc/AbstractVillager.java
|
--- a/net/minecraft/world/entity/npc/AbstractVillager.java
|
||||||
+++ b/net/minecraft/world/entity/npc/AbstractVillager.java
|
+++ b/net/minecraft/world/entity/npc/AbstractVillager.java
|
||||||
@@ -48,6 +48,7 @@ import org.bukkit.event.entity.VillagerAcquireTradeEvent;
|
@@ -45,6 +45,8 @@ import org.bukkit.event.entity.VillagerAcquireTradeEvent;
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
|
|
||||||
public abstract class AbstractVillager extends AgeableMob implements InventoryCarrier, Npc, Merchant {
|
public abstract class AbstractVillager extends AgeableMob implements InventoryCarrier, Npc, Merchant {
|
||||||
+ static final net.minecraft.world.item.crafting.Ingredient TEMPT_ITEMS = net.minecraft.world.item.crafting.Ingredient.of(net.minecraft.world.level.block.Blocks.EMERALD_BLOCK.asItem()); // Purpur - Villagers follow emerald blocks
|
+ static final net.minecraft.world.item.crafting.Ingredient TEMPT_ITEMS = net.minecraft.world.item.crafting.Ingredient.of(net.minecraft.world.level.block.Blocks.EMERALD_BLOCK.asItem()); // Purpur - Villagers follow emerald blocks
|
||||||
|
+
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
@Override
|
@Override
|
||||||
|
public CraftMerchant getCraftMerchant() {
|
||||||
diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java
|
diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java
|
||||||
index 39f2091391222bcd4ab0f2677f896c5ecdc6e86c..129833b7ecd644e4180fadca15015276961725c6 100644
|
index 85a6a38fb954915c7bf6290a40b0ab48818d08c8..0f4a8845250a0e59611006b8f3fe370c02c87542 100644
|
||||||
--- a/net/minecraft/world/entity/npc/Villager.java
|
--- a/net/minecraft/world/entity/npc/Villager.java
|
||||||
+++ b/net/minecraft/world/entity/npc/Villager.java
|
+++ b/net/minecraft/world/entity/npc/Villager.java
|
||||||
@@ -175,6 +175,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
@@ -212,6 +212,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||||
@Override
|
@Override
|
||||||
protected void registerGoals() {
|
protected void registerGoals() {
|
||||||
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this));
|
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this));
|
||||||
@@ -54,87 +55,49 @@ index 39f2091391222bcd4ab0f2677f896c5ecdc6e86c..129833b7ecd644e4180fadca15015276
|
|||||||
}
|
}
|
||||||
// Purpur end - Ridables
|
// Purpur end - Ridables
|
||||||
|
|
||||||
@@ -183,6 +184,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
@@ -220,6 +221,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||||
public void initAttributes() {
|
public void initAttributes() {
|
||||||
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.villagerMaxHealth);
|
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.villagerMaxHealth);
|
||||||
this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.villagerScale);
|
this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.villagerScale);
|
||||||
+ this.getAttribute(Attributes.TEMPT_RANGE).setBaseValue(this.level().purpurConfig.villagerTemptRange); // Purpur - Villagers follow emerald blocks
|
+ this.getAttribute(Attributes.TEMPT_RANGE).setBaseValue(this.level().purpurConfig.villagerTemptRange); // Purpur - Villagers follow emerald blocks
|
||||||
}
|
}
|
||||||
// Purpur end - Configurable entity base attributes
|
// Purpur end - Configurable entity base attributes
|
||||||
@Override
|
|
||||||
@@ -246,7 +248,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
@@ -288,7 +290,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AttributeSupplier.Builder createAttributes() {
|
public static AttributeSupplier.Builder createAttributes() {
|
||||||
- return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.5D);
|
- return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.5);
|
||||||
+ return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.5D).add(Attributes.TEMPT_RANGE, 10.0D); // Purpur - Villagers follow emerald blocks
|
+ return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.TEMPT_RANGE, 10.0D); // Purpur - Villagers follow emerald blocks
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean assignProfessionWhenSpawned() {
|
public boolean assignProfessionWhenSpawned() {
|
||||||
diff --git a/net/minecraft/world/entity/npc/WanderingTrader.java b/net/minecraft/world/entity/npc/WanderingTrader.java
|
diff --git a/net/minecraft/world/entity/npc/WanderingTrader.java b/net/minecraft/world/entity/npc/WanderingTrader.java
|
||||||
index 8e12ae313c76d742b61aa83a35d41d83b92bded5..c307aa1153d6a17ee8624453fc9303ac5749b6ef 100644
|
index 470f8052af13b24d7cf6cfde19557219e32f4324..8fb572cd5699021769a994312b5b31392314ab1e 100644
|
||||||
--- a/net/minecraft/world/entity/npc/WanderingTrader.java
|
--- a/net/minecraft/world/entity/npc/WanderingTrader.java
|
||||||
+++ b/net/minecraft/world/entity/npc/WanderingTrader.java
|
+++ b/net/minecraft/world/entity/npc/WanderingTrader.java
|
||||||
@@ -93,8 +93,14 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
|
@@ -90,9 +90,16 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
|
||||||
@Override
|
@Override
|
||||||
public void initAttributes() {
|
public void initAttributes() {
|
||||||
this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.wanderingTraderMaxHealth);
|
this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.wanderingTraderMaxHealth);
|
||||||
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.TEMPT_RANGE).setBaseValue(this.level().purpurConfig.wanderingTraderTemptRange); // Purpur - Villagers follow emerald blocks
|
+ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.TEMPT_RANGE).setBaseValue(this.level().purpurConfig.wanderingTraderTemptRange); // Purpur - Villagers follow emerald blocks
|
||||||
}
|
}
|
||||||
// Purpur end - Configurable entity base attributes
|
// Purpur end - Configurable entity base attributes
|
||||||
|
|
||||||
+ // Purpur start - Villagers follow emerald blocks
|
+ // Purpur start - Villagers follow emerald blocks
|
||||||
+ public static net.minecraft.world.entity.ai.attributes.AttributeSupplier.Builder createAttributes() {
|
+ public static net.minecraft.world.entity.ai.attributes.AttributeSupplier.Builder createAttributes() {
|
||||||
+ return Mob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.TEMPT_RANGE, 10.0D);
|
+ return Mob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.TEMPT_RANGE, 10.0D);
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end - Villagers follow emerald blocks
|
+ // Purpur end - Villagers follow emerald blocks
|
||||||
|
+
|
||||||
@Override
|
@Override
|
||||||
protected void registerGoals() {
|
protected void registerGoals() {
|
||||||
this.goalSelector.addGoal(0, new FloatGoal(this));
|
this.goalSelector.addGoal(0, new FloatGoal(this));
|
||||||
@@ -115,6 +121,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
|
@@ -127,6 +134,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
|
||||||
this.goalSelector.addGoal(1, new PanicGoal(this, 0.5D));
|
this.goalSelector.addGoal(1, new PanicGoal(this, 0.5));
|
||||||
this.goalSelector.addGoal(1, new LookAtTradingPlayerGoal(this));
|
this.goalSelector.addGoal(1, new LookAtTradingPlayerGoal(this));
|
||||||
this.goalSelector.addGoal(2, new WanderingTrader.WanderToPositionGoal(this, 2.0D, 0.35D));
|
this.goalSelector.addGoal(2, new WanderingTrader.WanderToPositionGoal(this, 2.0, 0.35));
|
||||||
+ if (level().purpurConfig.wanderingTraderFollowEmeraldBlock) this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); // Purpur - Villagers follow emerald blocks
|
+ if (level().purpurConfig.wanderingTraderFollowEmeraldBlock) this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); // Purpur - Villagers follow emerald blocks
|
||||||
this.goalSelector.addGoal(4, new MoveTowardsRestrictionGoal(this, 0.35D));
|
this.goalSelector.addGoal(4, new MoveTowardsRestrictionGoal(this, 0.35));
|
||||||
this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 0.35D));
|
this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 0.35));
|
||||||
this.goalSelector.addGoal(9, new InteractGoal(this, Player.class, 3.0F, 1.0F));
|
this.goalSelector.addGoal(9, new InteractGoal(this, Player.class, 3.0F, 1.0F));
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
index b33ab2fc455c212284ef50cfecc778000741ead5..b81790ec5a7e4b73fbef52229844506b072dfa0d 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
@@ -1588,6 +1588,8 @@ public class PurpurWorldConfig {
|
|
||||||
public boolean villagerControllable = true;
|
|
||||||
public double villagerMaxHealth = 20.0D;
|
|
||||||
public double villagerScale = 1.0D;
|
|
||||||
+ public boolean villagerFollowEmeraldBlock = false;
|
|
||||||
+ public double villagerTemptRange = 10.0D;
|
|
||||||
private void villagerSettings() {
|
|
||||||
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
|
|
||||||
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
|
|
||||||
@@ -1599,6 +1601,8 @@ public class PurpurWorldConfig {
|
|
||||||
}
|
|
||||||
villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth);
|
|
||||||
villagerScale = Mth.clamp(getDouble("mobs.villager.attributes.scale", villagerScale), 0.0625D, 16.0D);
|
|
||||||
+ villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock);
|
|
||||||
+ villagerTemptRange = getDouble("mobs.villager.attributes.tempt_range", villagerTemptRange);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean vindicatorRidable = false;
|
|
||||||
@@ -1624,6 +1628,8 @@ public class PurpurWorldConfig {
|
|
||||||
public boolean wanderingTraderControllable = true;
|
|
||||||
public double wanderingTraderMaxHealth = 20.0D;
|
|
||||||
public double wanderingTraderScale = 1.0D;
|
|
||||||
+ public boolean wanderingTraderFollowEmeraldBlock = false;
|
|
||||||
+ public double wanderingTraderTemptRange = 10.0D;
|
|
||||||
private void wanderingTraderSettings() {
|
|
||||||
wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable);
|
|
||||||
wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater);
|
|
||||||
@@ -1635,6 +1641,8 @@ public class PurpurWorldConfig {
|
|
||||||
}
|
|
||||||
wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth);
|
|
||||||
wanderingTraderScale = Mth.clamp(getDouble("mobs.wandering_trader.attributes.scale", wanderingTraderScale), 0.0625D, 16.0D);
|
|
||||||
+ wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock);
|
|
||||||
+ wanderingTraderTemptRange = getDouble("mobs.wandering_trader.attributes.tempt_range", wanderingTraderTemptRange);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean wardenRidable = false;
|
|
||||||
@@ -1576,6 +1576,8 @@ public class PurpurWorldConfig {
|
|||||||
public boolean villagerControllable = true;
|
public boolean villagerControllable = true;
|
||||||
public double villagerMaxHealth = 20.0D;
|
public double villagerMaxHealth = 20.0D;
|
||||||
public double villagerScale = 1.0D;
|
public double villagerScale = 1.0D;
|
||||||
|
public boolean villagerFollowEmeraldBlock = false;
|
||||||
|
public double villagerTemptRange = 10.0D;
|
||||||
private void villagerSettings() {
|
private void villagerSettings() {
|
||||||
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
|
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
|
||||||
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
|
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
|
||||||
@@ -1587,6 +1589,8 @@ public class PurpurWorldConfig {
|
|||||||
}
|
}
|
||||||
villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth);
|
villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth);
|
||||||
villagerScale = Mth.clamp(getDouble("mobs.villager.attributes.scale", villagerScale), 0.0625D, 16.0D);
|
villagerScale = Mth.clamp(getDouble("mobs.villager.attributes.scale", villagerScale), 0.0625D, 16.0D);
|
||||||
|
villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock);
|
||||||
|
villagerTemptRange = getDouble("mobs.villager.attributes.tempt_range", villagerTemptRange);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean vindicatorRidable = false;
|
public boolean vindicatorRidable = false;
|
||||||
@@ -1614,6 +1618,8 @@ public class PurpurWorldConfig {
|
|||||||
public boolean wanderingTraderControllable = true;
|
public boolean wanderingTraderControllable = true;
|
||||||
public double wanderingTraderMaxHealth = 20.0D;
|
public double wanderingTraderMaxHealth = 20.0D;
|
||||||
public double wanderingTraderScale = 1.0D;
|
public double wanderingTraderScale = 1.0D;
|
||||||
|
public boolean wanderingTraderFollowEmeraldBlock = false;
|
||||||
|
public double wanderingTraderTemptRange = 10.0D;
|
||||||
private void wanderingTraderSettings() {
|
private void wanderingTraderSettings() {
|
||||||
wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable);
|
wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable);
|
||||||
wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater);
|
wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater);
|
||||||
@@ -1625,6 +1631,8 @@ public class PurpurWorldConfig {
|
|||||||
}
|
}
|
||||||
wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth);
|
wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth);
|
||||||
wanderingTraderScale = Mth.clamp(getDouble("mobs.wandering_trader.attributes.scale", wanderingTraderScale), 0.0625D, 16.0D);
|
wanderingTraderScale = Mth.clamp(getDouble("mobs.wandering_trader.attributes.scale", wanderingTraderScale), 0.0625D, 16.0D);
|
||||||
|
wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock);
|
||||||
|
wanderingTraderTemptRange = getDouble("mobs.wandering_trader.attributes.tempt_range", wanderingTraderTemptRange);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean wardenRidable = false;
|
public boolean wardenRidable = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user