mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Updated Upstream (Paper & Pufferfish)
Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@44ee1cd fix recipe packet limiter (#9841) PaperMC/Paper@e57af7d sync netty version with vanilla (#9842) Pufferfish Changes: pufferfish-gg/Pufferfish@0020a8b Port a patch from upstream pufferfish-gg/Pufferfish@979d3a2 Update upstream (last 1.20.1) pufferfish-gg/Pufferfish@06262c1 Initial 1.20.2 update
This commit is contained in:
223
patches/server/0040-Minecart-settings-and-WASD-controls.patch
Normal file
223
patches/server/0040-Minecart-settings-and-WASD-controls.patch
Normal file
@@ -0,0 +1,223 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 29 Jun 2019 02:32:40 -0500
|
||||
Subject: [PATCH] Minecart settings and WASD controls
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
index 9918f6ac1066ccadd3eb2635450faaf5a4350523..85383b6a9d16b7cf7e928c4d9aaf7af932540091 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
@@ -1109,6 +1109,7 @@ public class ServerPlayer extends Player {
|
||||
if (this.isInvulnerableTo(source)) {
|
||||
return false;
|
||||
} else {
|
||||
+ if (source.is(DamageTypeTags.IS_FALL) && getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level().purpurConfig.minecartControllable && !level().purpurConfig.minecartControllableFallDamage) return false; // Purpur
|
||||
boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && source.is(DamageTypeTags.IS_FALL);
|
||||
|
||||
if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) {
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
|
||||
index 44a6118d3bd67a95180f750c17967561946e2e87..9d9d9cf2366441b453b66f91c53e7a0fe0c01e8f 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
|
||||
@@ -112,12 +112,14 @@ public abstract class AbstractMinecart extends Entity {
|
||||
private double flyingY = 0.949999988079071D; // Paper - restore vanilla precision
|
||||
private double flyingZ = 0.949999988079071D; // Paper - restore vanilla precision
|
||||
public double maxSpeed = 0.4D;
|
||||
+ public double storedMaxSpeed; // Purpur
|
||||
// CraftBukkit end
|
||||
|
||||
protected AbstractMinecart(EntityType<?> type, Level world) {
|
||||
super(type, world);
|
||||
this.targetDeltaMovement = Vec3.ZERO;
|
||||
this.blocksBuilding = true;
|
||||
+ if (world != null) maxSpeed = storedMaxSpeed = world.purpurConfig.minecartMaxSpeed; // Purpur
|
||||
}
|
||||
|
||||
protected AbstractMinecart(EntityType<?> type, Level world, double x, double y, double z) {
|
||||
@@ -342,6 +344,12 @@ public abstract class AbstractMinecart extends Entity {
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
+ // Purpur start
|
||||
+ if (storedMaxSpeed != level().purpurConfig.minecartMaxSpeed) {
|
||||
+ maxSpeed = storedMaxSpeed = level().purpurConfig.minecartMaxSpeed;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
// CraftBukkit start
|
||||
double prevX = this.getX();
|
||||
double prevY = this.getY();
|
||||
@@ -499,16 +507,62 @@ public abstract class AbstractMinecart extends Entity {
|
||||
|
||||
public void activateMinecart(int x, int y, int z, boolean powered) {}
|
||||
|
||||
+ // Purpur start
|
||||
+ private Double lastSpeed;
|
||||
+
|
||||
+ public double getControllableSpeed() {
|
||||
+ BlockState blockState = level().getBlockState(this.blockPosition());
|
||||
+ if (!blockState.isSolid()) {
|
||||
+ blockState = level().getBlockState(this.blockPosition().relative(Direction.DOWN));
|
||||
+ }
|
||||
+ Double speed = level().purpurConfig.minecartControllableBlockSpeeds.get(blockState.getBlock());
|
||||
+ if (!blockState.isSolid()) {
|
||||
+ speed = lastSpeed;
|
||||
+ }
|
||||
+ if (speed == null) {
|
||||
+ speed = level().purpurConfig.minecartControllableBaseSpeed;
|
||||
+ }
|
||||
+ return lastSpeed = speed;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
protected void comeOffTrack() {
|
||||
double d0 = this.getMaxSpeed();
|
||||
Vec3 vec3d = this.getDeltaMovement();
|
||||
|
||||
this.setDeltaMovement(Mth.clamp(vec3d.x, -d0, d0), vec3d.y, Mth.clamp(vec3d.z, -d0, d0));
|
||||
+
|
||||
+ // Purpur start
|
||||
+ if (level().purpurConfig.minecartControllable && !isInWater() && !isInLava() && !passengers.isEmpty()) {
|
||||
+ Entity passenger = passengers.get(0);
|
||||
+ if (passenger instanceof Player) {
|
||||
+ Player player = (Player) passenger;
|
||||
+ if (player.jumping && this.onGround) {
|
||||
+ setDeltaMovement(new Vec3(getDeltaMovement().x, level().purpurConfig.minecartControllableHopBoost, getDeltaMovement().z));
|
||||
+ }
|
||||
+ if (player.zza != 0.0F) {
|
||||
+ Vector velocity = player.getBukkitEntity().getEyeLocation().getDirection().normalize().multiply(getControllableSpeed());
|
||||
+ if (player.zza < 0.0) {
|
||||
+ velocity.multiply(-0.5);
|
||||
+ }
|
||||
+ setDeltaMovement(new Vec3(velocity.getX(), getDeltaMovement().y, velocity.getZ()));
|
||||
+ }
|
||||
+ this.setYRot(passenger.getYRot() - 90);
|
||||
+ maxUpStep = level().purpurConfig.minecartControllableStepHeight;
|
||||
+ } else {
|
||||
+ maxUpStep = 0.0F;
|
||||
+ }
|
||||
+ } else {
|
||||
+ maxUpStep = 0.0F;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
if (this.onGround()) {
|
||||
// CraftBukkit start - replace magic numbers with our variables
|
||||
this.setDeltaMovement(new Vec3(this.getDeltaMovement().x * this.derailedX, this.getDeltaMovement().y * this.derailedY, this.getDeltaMovement().z * this.derailedZ));
|
||||
// CraftBukkit end
|
||||
}
|
||||
+ else if (level().purpurConfig.minecartControllable) setDeltaMovement(new Vec3(getDeltaMovement().x * derailedX, getDeltaMovement().y, getDeltaMovement().z * derailedZ)); // Purpur
|
||||
|
||||
this.move(MoverType.SELF, this.getDeltaMovement());
|
||||
if (!this.onGround()) {
|
||||
diff --git a/src/main/java/net/minecraft/world/item/MinecartItem.java b/src/main/java/net/minecraft/world/item/MinecartItem.java
|
||||
index a33395dc5a94d89b5ab273c7832813b6ff9ea3b7..2b2218e2de535ebc8f529f5b5bf98fa1ef819a5e 100644
|
||||
--- a/src/main/java/net/minecraft/world/item/MinecartItem.java
|
||||
+++ b/src/main/java/net/minecraft/world/item/MinecartItem.java
|
||||
@@ -122,8 +122,9 @@ public class MinecartItem extends Item {
|
||||
BlockState iblockdata = world.getBlockState(blockposition);
|
||||
|
||||
if (!iblockdata.is(BlockTags.RAILS)) {
|
||||
- return InteractionResult.FAIL;
|
||||
- } else {
|
||||
+ if (!world.purpurConfig.minecartPlaceAnywhere) return InteractionResult.FAIL;
|
||||
+ if (iblockdata.isSolid()) blockposition = blockposition.relative(context.getClickedFace());
|
||||
+ } // else { // Purpur - place minecarts anywhere
|
||||
ItemStack itemstack = context.getItemInHand();
|
||||
|
||||
if (!world.isClientSide) {
|
||||
@@ -151,6 +152,6 @@ public class MinecartItem extends Item {
|
||||
|
||||
itemstack.shrink(1);
|
||||
return InteractionResult.sidedSuccess(world.isClientSide);
|
||||
- }
|
||||
+ // } // Purpur - place minecarts anywhere
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
|
||||
index e6a4a5898ffdcb2aa2bc01371a6d7dbc06d610ce..443bed339884f78ecda8abdbcdc9b57ea9768cc9 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
|
||||
@@ -89,7 +89,7 @@ public abstract class BlockBehaviour implements FeatureElement {
|
||||
protected final float jumpFactor;
|
||||
protected final boolean dynamicShape;
|
||||
protected final FeatureFlagSet requiredFeatures;
|
||||
- protected final BlockBehaviour.Properties properties;
|
||||
+ public final BlockBehaviour.Properties properties; // Purpur - protected -> public
|
||||
@Nullable
|
||||
protected ResourceLocation drops;
|
||||
|
||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
||||
index ed64be25581f407edcd15b8eac1c4effd9bb8728..7290de61830b84ddc54f50353dd5c24a65192816 100644
|
||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
||||
@@ -95,6 +95,68 @@ public class PurpurWorldConfig {
|
||||
armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
|
||||
}
|
||||
|
||||
+ public double minecartMaxSpeed = 0.4D;
|
||||
+ public boolean minecartPlaceAnywhere = false;
|
||||
+ public boolean minecartControllable = false;
|
||||
+ public float minecartControllableStepHeight = 1.0F;
|
||||
+ public double minecartControllableHopBoost = 0.5D;
|
||||
+ public boolean minecartControllableFallDamage = true;
|
||||
+ public double minecartControllableBaseSpeed = 0.1D;
|
||||
+ public Map<Block, Double> minecartControllableBlockSpeeds = new HashMap<>();
|
||||
+ private void minecartSettings() {
|
||||
+ if (PurpurConfig.version < 12) {
|
||||
+ boolean oldBool = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", minecartPlaceAnywhere);
|
||||
+ set("gameplay-mechanics.controllable-minecarts.place-anywhere", null);
|
||||
+ set("gameplay-mechanics.minecart.place-anywhere", oldBool);
|
||||
+ oldBool = getBoolean("gameplay-mechanics.controllable-minecarts.enabled", minecartControllable);
|
||||
+ set("gameplay-mechanics.controllable-minecarts.enabled", null);
|
||||
+ set("gameplay-mechanics.minecart.controllable.enabled", oldBool);
|
||||
+ double oldDouble = getDouble("gameplay-mechanics.controllable-minecarts.step-height", minecartControllableStepHeight);
|
||||
+ set("gameplay-mechanics.controllable-minecarts.step-height", null);
|
||||
+ set("gameplay-mechanics.minecart.controllable.step-height", oldDouble);
|
||||
+ oldDouble = getDouble("gameplay-mechanics.controllable-minecarts.hop-boost", minecartControllableHopBoost);
|
||||
+ set("gameplay-mechanics.controllable-minecarts.hop-boost", null);
|
||||
+ set("gameplay-mechanics.minecart.controllable.hop-boost", oldDouble);
|
||||
+ oldBool = getBoolean("gameplay-mechanics.controllable-minecarts.fall-damage", minecartControllableFallDamage);
|
||||
+ set("gameplay-mechanics.controllable-minecarts.fall-damage", null);
|
||||
+ set("gameplay-mechanics.minecart.controllable.fall-damage", oldBool);
|
||||
+ oldDouble = getDouble("gameplay-mechanics.controllable-minecarts.base-speed", minecartControllableBaseSpeed);
|
||||
+ set("gameplay-mechanics.controllable-minecarts.base-speed", null);
|
||||
+ set("gameplay-mechanics.minecart.controllable.base-speed", oldDouble);
|
||||
+ ConfigurationSection section = getConfigurationSection("gameplay-mechanics.controllable-minecarts.block-speed");
|
||||
+ if (section != null) {
|
||||
+ for (String key : section.getKeys(false)) {
|
||||
+ if ("grass-block".equals(key)) key = "grass_block"; // oopsie
|
||||
+ oldDouble = section.getDouble(key, minecartControllableBaseSpeed);
|
||||
+ set("gameplay-mechanics.controllable-minecarts.block-speed." + key, null);
|
||||
+ set("gameplay-mechanics.minecart.controllable.block-speed." + key, oldDouble);
|
||||
+ }
|
||||
+ set("gameplay-mechanics.controllable-minecarts.block-speed", null);
|
||||
+ }
|
||||
+ set("gameplay-mechanics.controllable-minecarts", null);
|
||||
+ }
|
||||
+
|
||||
+ minecartMaxSpeed = getDouble("gameplay-mechanics.minecart.max-speed", minecartMaxSpeed);
|
||||
+ minecartPlaceAnywhere = getBoolean("gameplay-mechanics.minecart.place-anywhere", minecartPlaceAnywhere);
|
||||
+ minecartControllable = getBoolean("gameplay-mechanics.minecart.controllable.enabled", minecartControllable);
|
||||
+ minecartControllableStepHeight = (float) getDouble("gameplay-mechanics.minecart.controllable.step-height", minecartControllableStepHeight);
|
||||
+ minecartControllableHopBoost = getDouble("gameplay-mechanics.minecart.controllable.hop-boost", minecartControllableHopBoost);
|
||||
+ minecartControllableFallDamage = getBoolean("gameplay-mechanics.minecart.controllable.fall-damage", minecartControllableFallDamage);
|
||||
+ minecartControllableBaseSpeed = getDouble("gameplay-mechanics.minecart.controllable.base-speed", minecartControllableBaseSpeed);
|
||||
+ ConfigurationSection section = getConfigurationSection("gameplay-mechanics.minecart.controllable.block-speed");
|
||||
+ if (section != null) {
|
||||
+ for (String key : section.getKeys(false)) {
|
||||
+ Block block = BuiltInRegistries.BLOCK.get(new ResourceLocation(key));
|
||||
+ if (block != Blocks.AIR) {
|
||||
+ minecartControllableBlockSpeeds.put(block, section.getDouble(key, minecartControllableBaseSpeed));
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ set("gameplay-mechanics.minecart.controllable.block-speed.grass_block", 0.3D);
|
||||
+ set("gameplay-mechanics.minecart.controllable.block-speed.stone", 0.5D);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
public boolean idleTimeoutKick = true;
|
||||
public boolean idleTimeoutTickNearbyEntities = true;
|
||||
public boolean idleTimeoutCountAsSleeping = false;
|
||||
Reference in New Issue
Block a user