mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-22 19:07:44 +01:00
Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly Paper Changes:26c37d99d5create random seeds for features using SecureRandom589bf2f1bfUpgrade gson to 2.8.8 (Closes #6370)0a6103597bGet entity default attributes (#6449)40057019e0Correctly inflate villager activation bounding box (#6798)e5f9241d15Left handed API (#6775)40ee63496cAdd advancement display API (#6175)9d570042edAdd ItemFactory#getMonsterEgg API (#6772)55ca459515rename method to getSpawnEggbb397ba74cAdd critical damage API (#6275)f47aeafe00Add Horse Animation API (#5599)7a0886180fAT & Mapping fixes (#6809)5553432644docs: Update gradle instructions for Java 16 (#6811) [ci skip]a1f49e4c60Fix command suggestion leak (#6592)9472d38f3cFix method name for Critical damage (#6813)
This commit is contained in:
135
patches/server/0190-Iron-golem-poppy-calms-anger.patch
Normal file
135
patches/server/0190-Iron-golem-poppy-calms-anger.patch
Normal file
@@ -0,0 +1,135 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Thu, 13 May 2021 21:22:51 -0500
|
||||
Subject: [PATCH] Iron golem poppy calms anger
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
|
||||
index e327e00506f1b96fe924e52de6c45034ba56ac7a..e19e0c934c2e494a439ba8ec22b238e82aa72c28 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
|
||||
@@ -96,6 +96,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob {
|
||||
protected void registerGoals() {
|
||||
if (level.purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur
|
||||
this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur
|
||||
+ if (this.level.purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.ReceiveFlower(this)); // Purpur
|
||||
this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true));
|
||||
this.goalSelector.addGoal(2, new MoveTowardsTargetGoal(this, 0.9D, 32.0F));
|
||||
this.goalSelector.addGoal(2, new MoveBackToVillageGoal(this, 0.6D, false));
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 96c3bccbfa80cc1bc0c3dd55416661c27257369b..65992ff2a5fa2cd3e27f940eac1dd6eb8b2d3cf9 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -1342,6 +1342,7 @@ public class PurpurWorldConfig {
|
||||
public boolean ironGolemCanSwim = false;
|
||||
public double ironGolemMaxHealth = 100.0D;
|
||||
public boolean ironGolemTakeDamageFromWater = false;
|
||||
+ public boolean ironGolemPoppyCalm = false;
|
||||
private void ironGolemSettings() {
|
||||
ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable);
|
||||
ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater);
|
||||
@@ -1353,6 +1354,7 @@ public class PurpurWorldConfig {
|
||||
}
|
||||
ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth);
|
||||
ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater);
|
||||
+ ironGolemPoppyCalm = getBoolean("mobs.iron_golem.poppy-calms-anger", ironGolemPoppyCalm);
|
||||
}
|
||||
|
||||
public boolean llamaRidable = false;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/entity/ai/ReceiveFlower.java b/src/main/java/net/pl3x/purpur/entity/ai/ReceiveFlower.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..efbf2775558e61310dff900a0321964c63f4551d
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/entity/ai/ReceiveFlower.java
|
||||
@@ -0,0 +1,91 @@
|
||||
+package net.pl3x.purpur.entity.ai;
|
||||
+
|
||||
+import net.minecraft.server.level.ServerLevel;
|
||||
+import net.minecraft.server.level.ServerPlayer;
|
||||
+import net.minecraft.world.InteractionHand;
|
||||
+import net.minecraft.world.entity.Entity;
|
||||
+import net.minecraft.world.entity.ai.goal.Goal;
|
||||
+import net.minecraft.world.entity.animal.IronGolem;
|
||||
+import net.minecraft.world.item.ItemStack;
|
||||
+import net.minecraft.world.level.block.Blocks;
|
||||
+
|
||||
+import java.util.EnumSet;
|
||||
+import java.util.UUID;
|
||||
+
|
||||
+public class ReceiveFlower extends Goal {
|
||||
+ private final IronGolem irongolem;
|
||||
+ private ServerPlayer target;
|
||||
+ private int cooldown;
|
||||
+
|
||||
+ public ReceiveFlower(IronGolem entity) {
|
||||
+ this.irongolem = entity;
|
||||
+ setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK));
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean canUse() {
|
||||
+ if (this.irongolem.getOfferFlowerTick() > 0) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (!this.irongolem.isAngry()) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ UUID uuid = this.irongolem.getPersistentAngerTarget();
|
||||
+ if (uuid == null) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ Entity target = ((ServerLevel) this.irongolem.level).getEntity(uuid);
|
||||
+ if (!(target instanceof ServerPlayer player)) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ InteractionHand hand = getPoppyHand(player);
|
||||
+ if (hand == null) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ removeFlower(player, hand);
|
||||
+ this.target = player;
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean canContinueToUse() {
|
||||
+ return this.cooldown > 0;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void start() {
|
||||
+ this.cooldown = 100;
|
||||
+ this.irongolem.stopBeingAngry();
|
||||
+ this.irongolem.offerFlower(true);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void stop() {
|
||||
+ this.irongolem.offerFlower(false);
|
||||
+ this.target = null;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void tick() {
|
||||
+ this.irongolem.getLookControl().setLookAt(this.target, 30.0F, 30.0F);
|
||||
+ --this.cooldown;
|
||||
+ }
|
||||
+
|
||||
+ private InteractionHand getPoppyHand(ServerPlayer player) {
|
||||
+ if (isPoppy(player.getMainHandItem())) {
|
||||
+ return InteractionHand.MAIN_HAND;
|
||||
+ }
|
||||
+ if (isPoppy(player.getOffhandItem())) {
|
||||
+ return InteractionHand.OFF_HAND;
|
||||
+ }
|
||||
+ return null;
|
||||
+ }
|
||||
+
|
||||
+ private void removeFlower(ServerPlayer player, InteractionHand hand) {
|
||||
+ player.setItemInHand(hand, ItemStack.EMPTY);
|
||||
+ }
|
||||
+
|
||||
+ private boolean isPoppy(ItemStack item) {
|
||||
+ return item.getItem() == Blocks.POPPY.asItem();
|
||||
+ }
|
||||
+}
|
||||
Reference in New Issue
Block a user