mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 17:07:43 +01:00
111 lines
6.6 KiB
Diff
111 lines
6.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
|
Date: Fri, 29 Nov 2019 22:10:12 -0600
|
|
Subject: [PATCH] Villagers follow emerald blocks
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java
|
|
index e59a77c80a1bbe62aaa61bd4792d21b12c895a5c..760546b954c221e1e138891c7684921682d5f24a 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java
|
|
@@ -28,11 +28,13 @@ import net.minecraft.world.entity.SlotAccess;
|
|
import net.minecraft.world.entity.SpawnGroupData;
|
|
import net.minecraft.world.entity.player.Player;
|
|
import net.minecraft.world.item.ItemStack;
|
|
+import net.minecraft.world.item.crafting.Ingredient;
|
|
import net.minecraft.world.item.trading.Merchant;
|
|
import net.minecraft.world.item.trading.MerchantOffer;
|
|
import net.minecraft.world.item.trading.MerchantOffers;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.ServerLevelAccessor;
|
|
+import net.minecraft.world.level.block.Blocks;
|
|
import net.minecraft.world.level.pathfinder.BlockPathTypes;
|
|
import net.minecraft.world.phys.Vec3;
|
|
// CraftBukkit start
|
|
@@ -44,6 +46,8 @@ import org.bukkit.event.entity.VillagerAcquireTradeEvent;
|
|
|
|
public abstract class AbstractVillager extends AgeableMob implements InventoryCarrier, Npc, Merchant {
|
|
|
|
+ static final Ingredient TEMPT_ITEMS = Ingredient.of(Blocks.EMERALD_BLOCK.asItem()); // Purpur
|
|
+
|
|
// CraftBukkit start
|
|
private CraftMerchant craftMerchant;
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
index d9d12330e84f204f96761051e1d92984d8a96330..897dcb4eb6e5530fb612e16551eb9e4f457985f5 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
@@ -62,6 +62,7 @@ import net.minecraft.world.entity.ai.Brain;
|
|
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
|
|
import net.minecraft.world.entity.ai.attributes.Attributes;
|
|
import net.minecraft.world.entity.ai.behavior.VillagerGoalPackages;
|
|
+import net.minecraft.world.entity.ai.goal.TemptGoal;
|
|
import net.minecraft.world.entity.ai.gossip.GossipContainer;
|
|
import net.minecraft.world.entity.ai.gossip.GossipType;
|
|
import net.minecraft.world.entity.ai.memory.MemoryModuleType;
|
|
@@ -157,6 +158,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
this.brainTickOffset = getRandom().nextInt(100); // Purpur
|
|
}
|
|
|
|
+ // Purpur start
|
|
+ @Override
|
|
+ protected void registerGoals() {
|
|
+ if (level.purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.addGoal(3, new TemptGoal(this, 1.0D, TEMPT_ITEMS, false));
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
@Override
|
|
public Brain<Villager> getBrain() {
|
|
return (Brain<Villager>) super.getBrain(); // CraftBukkit - decompile error
|
|
diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
|
|
index c4f7c94255e4631a3c0355f9260132ba28296f50..05fc739b8dfe2ec74a2b070f5cdcd945f5b04b1a 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
|
|
@@ -25,6 +25,7 @@ import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal;
|
|
import net.minecraft.world.entity.ai.goal.LookAtTradingPlayerGoal;
|
|
import net.minecraft.world.entity.ai.goal.MoveTowardsRestrictionGoal;
|
|
import net.minecraft.world.entity.ai.goal.PanicGoal;
|
|
+import net.minecraft.world.entity.ai.goal.TemptGoal;
|
|
import net.minecraft.world.entity.ai.goal.TradeWithPlayerGoal;
|
|
import net.minecraft.world.entity.ai.goal.UseItemGoal;
|
|
import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal;
|
|
@@ -87,6 +88,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 LookAtTradingPlayerGoal(this));
|
|
this.goalSelector.addGoal(2, new WanderingTrader.WanderToPositionGoal(this, 2.0D, 0.35D));
|
|
+ if (level.purpurConfig.wanderingTraderFollowEmeraldBlock) this.goalSelector.addGoal(3, new TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); // Purpur
|
|
this.goalSelector.addGoal(4, new MoveTowardsRestrictionGoal(this, 0.35D));
|
|
this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 0.35D));
|
|
this.goalSelector.addGoal(9, new InteractGoal(this, Player.class, 3.0F, 1.0F));
|
|
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
index 53553a5aa2d7571fef895026f30dd4404101d5a3..a53f827843407ae4c8c6252796af66da41683caa 100644
|
|
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
@@ -717,12 +717,14 @@ public class PurpurWorldConfig {
|
|
public int villagerBrainTicks = 1;
|
|
public boolean villagerUseBrainTicksOnlyWhenLagging = true;
|
|
public boolean villagerFarmingBypassMobGriefing = false;
|
|
+ public boolean villagerFollowEmeraldBlock = false;
|
|
private void villagerSettings() {
|
|
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
|
|
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
|
|
villagerBrainTicks = getInt("mobs.villager.brain-ticks", villagerBrainTicks);
|
|
villagerUseBrainTicksOnlyWhenLagging = getBoolean("mobs.villager.use-brain-ticks-only-when-lagging", villagerUseBrainTicksOnlyWhenLagging);
|
|
villagerFarmingBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerFarmingBypassMobGriefing);
|
|
+ villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock);
|
|
}
|
|
|
|
public boolean vindicatorRidable = false;
|
|
@@ -734,9 +736,11 @@ public class PurpurWorldConfig {
|
|
|
|
public boolean wanderingTraderRidable = false;
|
|
public boolean wanderingTraderRidableInWater = false;
|
|
+ public boolean wanderingTraderFollowEmeraldBlock = false;
|
|
private void wanderingTraderSettings() {
|
|
wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable);
|
|
wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater);
|
|
+ wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock);
|
|
}
|
|
|
|
public boolean witchRidable = false;
|