mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-19 17:37:42 +01:00
progress
This commit is contained in:
@@ -1,61 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Kerllenevich <me@notom3ga.me>
|
||||
Date: Sun, 21 Mar 2021 15:26:52 -0400
|
||||
Subject: [PATCH] Drowning Settings
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index 7b28e61eee6f65219a11e63dea3728aa36b9a313..72d5e5f728645898675b86654ec92df923cf457e 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -2361,7 +2361,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne
|
||||
}
|
||||
|
||||
public int getDefaultPortalCooldown() {
|
||||
- return 300;
|
||||
+ return this.world.purpurConfig.drowningAirTicks; // Purpur
|
||||
}
|
||||
|
||||
public Iterable<ItemStack> bn() {
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
||||
index 11390c5eba03ca2d60c2f711807970078c5704ea..89ae9836b0712ae78a8dfefe688d95d53b1156e2 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
||||
@@ -393,7 +393,7 @@ public abstract class EntityLiving extends Entity {
|
||||
if (this.a((Tag) TagsFluid.WATER) && !this.world.getType(new BlockPosition(this.locX(), this.getHeadY(), this.locZ())).a(Blocks.BUBBLE_COLUMN)) {
|
||||
if (!this.canBreatheUnderwater() && !MobEffectUtil.c(this) && !flag1) { // Paper - use OBFHELPER so it can be overridden
|
||||
this.setAirTicks(this.l(this.getAirTicks()));
|
||||
- if (this.getAirTicks() == -20) {
|
||||
+ if (this.getAirTicks() == -this.world.purpurConfig.drowningDamageInterval) { // Purpur
|
||||
this.setAirTicks(0);
|
||||
Vec3D vec3d = this.getMot();
|
||||
|
||||
@@ -405,7 +405,7 @@ public abstract class EntityLiving extends Entity {
|
||||
this.world.addParticle(Particles.BUBBLE, this.locX() + d2, this.locY() + d3, this.locZ() + d4, vec3d.x, vec3d.y, vec3d.z);
|
||||
}
|
||||
|
||||
- this.damageEntity(DamageSource.DROWN, 2.0F);
|
||||
+ this.damageEntity(DamageSource.DROWN, (float) this.world.purpurConfig.damageFromDrowning); // Purpur
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index c2314380e7064459dd104b09b900c5a28b592b71..82da1dd5bb8b02c948be51fa941d3b31a3f0dc20 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -2047,6 +2047,15 @@ public class PurpurWorldConfig {
|
||||
imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways);
|
||||
}
|
||||
|
||||
+ public int drowningAirTicks = 300;
|
||||
+ public int drowningDamageInterval = 20;
|
||||
+ public double damageFromDrowning = 2.0F;
|
||||
+ private void drowningSettings() {
|
||||
+ drowningAirTicks = getInt("gameplay-mechanics.drowning.air-ticks", drowningAirTicks);
|
||||
+ drowningDamageInterval = getInt("gameplay-mechanics.drowning.ticks-per-damage", drowningDamageInterval);
|
||||
+ damageFromDrowning = getDouble("gameplay-mechanics.drowning.damage-from-drowning", damageFromDrowning);
|
||||
+ }
|
||||
+
|
||||
public boolean baselessCrystalExplode = true;
|
||||
public double baselessCrystalExplosionPower = 6.0D;
|
||||
public boolean baselessCrystalExplosionFire = false;
|
||||
@@ -1,74 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Tue, 23 Mar 2021 19:38:53 -0500
|
||||
Subject: [PATCH] Break individual slabs when sneaking
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/PlayerInteractManager.java b/src/main/java/net/minecraft/server/level/PlayerInteractManager.java
|
||||
index 87722285690d9d3370610e2a2eb809e0d1f497c9..e80d80b230cde5ca9278691313f556147229013b 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/PlayerInteractManager.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/PlayerInteractManager.java
|
||||
@@ -377,6 +377,8 @@ public class PlayerInteractManager {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
+
|
||||
+ if (this.player.world.purpurConfig.slabHalfBreak && this.player.isSneaking() && iblockdata.getBlock() instanceof net.minecraft.world.level.block.BlockStepAbstract && ((net.minecraft.world.level.block.BlockStepAbstract) iblockdata.getBlock()).halfBreak(iblockdata, blockposition, this.player)) return true; // Purpur
|
||||
}
|
||||
// CraftBukkit end
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/block/BlockStepAbstract.java b/src/main/java/net/minecraft/world/level/block/BlockStepAbstract.java
|
||||
index 12c0fa5072755fd2a4f575b0cc5e4222617490ce..94965b216d50b29b95f09fa9019c177b9c099e14 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/block/BlockStepAbstract.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/block/BlockStepAbstract.java
|
||||
@@ -27,7 +27,7 @@ import net.minecraft.world.phys.shapes.VoxelShapes;
|
||||
|
||||
public class BlockStepAbstract extends Block implements IBlockWaterlogged {
|
||||
|
||||
- public static final BlockStateEnum<BlockPropertySlabType> a = BlockProperties.aK;
|
||||
+ public static final BlockStateEnum<BlockPropertySlabType> a = BlockProperties.aK; public static BlockStateEnum<BlockPropertySlabType> slabType() { return a; } // Purpur - OBFHELPER
|
||||
public static final BlockStateBoolean b = BlockProperties.C;
|
||||
protected static final VoxelShape c = Block.a(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D);
|
||||
protected static final VoxelShape d = Block.a(0.0D, 8.0D, 0.0D, 16.0D, 16.0D, 16.0D);
|
||||
@@ -134,4 +134,25 @@ public class BlockStepAbstract extends Block implements IBlockWaterlogged {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ // Purpur start
|
||||
+ public boolean halfBreak(IBlockData iblockdata, BlockPosition pos, net.minecraft.server.level.EntityPlayer player) {
|
||||
+ if (iblockdata.get(BlockStepAbstract.slabType()) != BlockPropertySlabType.DOUBLE) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ net.minecraft.world.phys.MovingObjectPosition result = player.getRayTrace(16);
|
||||
+ if (result == null) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ double hitY = result.getPos().getY();
|
||||
+ int blockY = org.bukkit.util.NumberConversions.floor(hitY);
|
||||
+ player.world.setTypeAndData(pos, iblockdata.set(BlockStepAbstract.slabType(), (hitY - blockY > 0.5 || blockY - pos.getY() == 1) ? BlockPropertySlabType.BOTTOM : BlockPropertySlabType.TOP), 3);
|
||||
+ if (!player.abilities.canInstantlyBuild) {
|
||||
+ net.minecraft.world.entity.item.EntityItem item = new net.minecraft.world.entity.item.EntityItem(player.world, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(getItem()));
|
||||
+ item.defaultPickupDelay();
|
||||
+ player.world.addEntity(item);
|
||||
+ }
|
||||
+ return true;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 82da1dd5bb8b02c948be51fa941d3b31a3f0dc20..accfdc659f97fb75387776326f4d1b6bd1742aaf 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -575,6 +575,11 @@ public class PurpurWorldConfig {
|
||||
signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit);
|
||||
}
|
||||
|
||||
+ public boolean slabHalfBreak = false;
|
||||
+ private void slabSettings() {
|
||||
+ slabHalfBreak = getBoolean("blocks.slab.break-individual-slabs-when-sneaking", slabHalfBreak);
|
||||
+ }
|
||||
+
|
||||
public boolean spawnerDeactivateByRedstone = false;
|
||||
private void spawnerSettings() {
|
||||
spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone);
|
||||
@@ -1,40 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Encode42 <me@encode42.dev>
|
||||
Date: Tue, 23 Mar 2021 15:40:45 -0400
|
||||
Subject: [PATCH] Config to disable hostile mob spawn on ice
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityMonster.java b/src/main/java/net/minecraft/world/entity/monster/EntityMonster.java
|
||||
index c484e27650364b6537fe6b2e8e14de98382b86a3..096a7b76e0ae42ba8b859159e20fb72e101fe6de 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/monster/EntityMonster.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/monster/EntityMonster.java
|
||||
@@ -95,6 +95,12 @@ public abstract class EntityMonster extends EntityCreature implements IMonster {
|
||||
}
|
||||
|
||||
public static boolean a(WorldAccess worldaccess, BlockPosition blockposition, Random random) {
|
||||
+ // Purpur start
|
||||
+ net.minecraft.world.level.block.state.IBlockData spawnBlock = worldaccess.getType(blockposition.down());
|
||||
+ if ((!worldaccess.getMinecraftWorld().purpurConfig.mobsSpawnOnPackedIce && spawnBlock.equals(net.minecraft.world.level.block.Blocks.PACKED_ICE)) || (!worldaccess.getMinecraftWorld().purpurConfig.mobsSpawnOnBlueIce && spawnBlock.equals(net.minecraft.world.level.block.Blocks.BLUE_ICE))) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
if (worldaccess.getBrightness(EnumSkyBlock.SKY, blockposition) > random.nextInt(32)) {
|
||||
return false;
|
||||
} else {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index accfdc659f97fb75387776326f4d1b6bd1742aaf..cb20d4cccbaf52d71df7e1e4f877f6938f2969e3 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -495,8 +495,12 @@ public class PurpurWorldConfig {
|
||||
}
|
||||
|
||||
public boolean snowOnBlueIce = true;
|
||||
+ public boolean mobsSpawnOnPackedIce = true;
|
||||
+ public boolean mobsSpawnOnBlueIce = true;
|
||||
private void iceSettings() {
|
||||
snowOnBlueIce = getBoolean("blocks.blue_ice.allow-snow-formation", snowOnBlueIce);
|
||||
+ mobsSpawnOnPackedIce = getBoolean("blocks.packed_ice.allow-mob-spawns", mobsSpawnOnPackedIce);
|
||||
+ mobsSpawnOnBlueIce = getBoolean("blocks.blue_ice.allow-mob-spawns", mobsSpawnOnBlueIce);
|
||||
}
|
||||
|
||||
public boolean chestOpenWithBlockOnTop = false;
|
||||
@@ -1,38 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Encode42 <me@encode42.dev>
|
||||
Date: Tue, 23 Mar 2021 22:42:20 -0400
|
||||
Subject: [PATCH] Config to show Armor Stand arms on spawn
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java
|
||||
index ecb797e67554d30e35b3aca4d0fc9b0e3f6c1a50..ddc1c3383cdc32fa832485f3922c74185731557a 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java
|
||||
@@ -103,6 +103,7 @@ public class EntityArmorStand extends EntityLiving {
|
||||
this.leftLegPose = EntityArmorStand.bn;
|
||||
this.rightLegPose = EntityArmorStand.bo;
|
||||
this.G = 0.0F;
|
||||
+ this.setArms(world != null && world.purpurConfig.armorstandPlaceWithArms); // Purpur
|
||||
}
|
||||
|
||||
public EntityArmorStand(World world, double d0, double d1, double d2) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index cb20d4cccbaf52d71df7e1e4f877f6938f2969e3..295cc5427a1bdc8f89a0b0c34b3c1f1db7c47a2f 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -114,6 +114,7 @@ public class PurpurWorldConfig {
|
||||
public boolean armorstandMovement = true;
|
||||
public boolean armorstandWaterMovement = true;
|
||||
public boolean armorstandWaterFence = true;
|
||||
+ public boolean armorstandPlaceWithArms = false;
|
||||
private void armorstandSettings() {
|
||||
armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible);
|
||||
armorstandFixNametags = getBoolean("gameplay-mechanics.armorstand.fix-nametags", armorstandFixNametags);
|
||||
@@ -121,6 +122,7 @@ public class PurpurWorldConfig {
|
||||
armorstandMovement = getBoolean("gameplay-mechanics.armorstand.can-movement-tick", armorstandMovement);
|
||||
armorstandWaterMovement = getBoolean("gameplay-mechanics.armorstand.can-move-in-water", armorstandWaterMovement);
|
||||
armorstandWaterFence = getBoolean("gameplay-mechanics.armorstand.can-move-in-water-over-fence", armorstandWaterFence);
|
||||
+ armorstandPlaceWithArms = getBoolean("gameplay-mechanics.armorstand.place-with-arms-visible", armorstandPlaceWithArms);
|
||||
}
|
||||
|
||||
public double minecartMaxSpeed = 0.4D;
|
||||
@@ -1,92 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Wed, 24 Mar 2021 04:40:11 -0500
|
||||
Subject: [PATCH] Option to make doors require redstone
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorInteractDoor.java b/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorInteractDoor.java
|
||||
index 4b8df9f05e10b7f42f2b45f31082886d597b3bc9..bde24d90fd1c1dc19fb26bce4e625fab4983e8c2 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorInteractDoor.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorInteractDoor.java
|
||||
@@ -62,7 +62,7 @@ public class BehaviorInteractDoor extends Behavior<EntityLiving> {
|
||||
BlockPosition blockposition = pathpoint.a();
|
||||
IBlockData iblockdata = worldserver.getType(blockposition);
|
||||
|
||||
- if (iblockdata.a((Tag) TagsBlock.WOODEN_DOORS)) {
|
||||
+ if (iblockdata.a((Tag) TagsBlock.WOODEN_DOORS) && !BlockDoor.requiresRedstone(entityliving.world, iblockdata, blockposition)) { // Purpur
|
||||
BlockDoor blockdoor = (BlockDoor) iblockdata.getBlock();
|
||||
|
||||
if (!blockdoor.h(iblockdata)) {
|
||||
@@ -82,7 +82,7 @@ public class BehaviorInteractDoor extends Behavior<EntityLiving> {
|
||||
BlockPosition blockposition1 = pathpoint1.a();
|
||||
IBlockData iblockdata1 = worldserver.getType(blockposition1);
|
||||
|
||||
- if (iblockdata1.a((Tag) TagsBlock.WOODEN_DOORS)) {
|
||||
+ if (iblockdata1.a((Tag) TagsBlock.WOODEN_DOORS) && !BlockDoor.requiresRedstone(entityliving.world, iblockdata, blockposition1)) { // Purpur
|
||||
BlockDoor blockdoor1 = (BlockDoor) iblockdata1.getBlock();
|
||||
|
||||
if (!blockdoor1.h(iblockdata1)) {
|
||||
@@ -117,7 +117,7 @@ public class BehaviorInteractDoor extends Behavior<EntityLiving> {
|
||||
} else {
|
||||
IBlockData iblockdata = worldserver.getType(blockposition);
|
||||
|
||||
- if (!iblockdata.a((Tag) TagsBlock.WOODEN_DOORS)) {
|
||||
+ if (!iblockdata.a((Tag) TagsBlock.WOODEN_DOORS) || BlockDoor.requiresRedstone(entityliving.world, iblockdata, blockposition)) { // Purpur
|
||||
iterator.remove();
|
||||
} else {
|
||||
BlockDoor blockdoor = (BlockDoor) iblockdata.getBlock();
|
||||
diff --git a/src/main/java/net/minecraft/world/level/block/BlockDoor.java b/src/main/java/net/minecraft/world/level/block/BlockDoor.java
|
||||
index 453b46851f021d4285be123bedc8982fc8844da2..2a7695c899b12c87ab89d00116b6f0dd0c9fd9dc 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/block/BlockDoor.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/block/BlockDoor.java
|
||||
@@ -167,6 +167,10 @@ public class BlockDoor extends Block {
|
||||
public EnumInteractionResult interact(IBlockData iblockdata, World world, BlockPosition blockposition, EntityHuman entityhuman, EnumHand enumhand, MovingObjectPositionBlock movingobjectpositionblock) {
|
||||
if (this.material == Material.ORE) {
|
||||
return EnumInteractionResult.PASS;
|
||||
+ // Purpur start
|
||||
+ } else if (requiresRedstone(world, iblockdata, blockposition)) {
|
||||
+ return EnumInteractionResult.CONSUME;
|
||||
+ // Purpur end
|
||||
} else {
|
||||
iblockdata = (IBlockData) iblockdata.a((IBlockState) BlockDoor.OPEN);
|
||||
world.setTypeAndData(blockposition, iblockdata, 10);
|
||||
@@ -254,4 +258,18 @@ public class BlockDoor extends Block {
|
||||
public static boolean l(IBlockData iblockdata) {
|
||||
return iblockdata.getBlock() instanceof BlockDoor && (iblockdata.getMaterial() == Material.WOOD || iblockdata.getMaterial() == Material.NETHER_WOOD);
|
||||
}
|
||||
+
|
||||
+ // Purpur start
|
||||
+ public static boolean requiresRedstone(World world, IBlockData iblockdata, BlockPosition blockposition) {
|
||||
+ if (world.purpurConfig.doorRequiresRedstone.contains(iblockdata.getBlock())) {
|
||||
+ // force update client
|
||||
+ BlockPosition otherBlockPosition = blockposition.shift(iblockdata.get(BlockDoor.HALF) == BlockPropertyDoubleBlockHalf.LOWER ? EnumDirection.UP : EnumDirection.DOWN);
|
||||
+ IBlockData otherIBlockData = world.getType(otherBlockPosition);
|
||||
+ world.notify(blockposition, iblockdata, iblockdata, 3);
|
||||
+ world.notify(otherBlockPosition, otherIBlockData, otherIBlockData, 3);
|
||||
+ return true;
|
||||
+ }
|
||||
+ return false;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 295cc5427a1bdc8f89a0b0c34b3c1f1db7c47a2f..9cb06d3e3109c08b2e9f3336365dd14241c4faca 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -496,6 +496,16 @@ public class PurpurWorldConfig {
|
||||
}
|
||||
}
|
||||
|
||||
+ public List<Block> doorRequiresRedstone = new ArrayList<>();
|
||||
+ private void doorSettings() {
|
||||
+ getList("blocks.door.requires-redstone", new ArrayList<String>()).forEach(key -> {
|
||||
+ Block block = IRegistry.BLOCK.get(new MinecraftKey(key.toString()));
|
||||
+ if (!block.getBlockData().isAir()) {
|
||||
+ doorRequiresRedstone.add(block);
|
||||
+ }
|
||||
+ });
|
||||
+ }
|
||||
+
|
||||
public boolean snowOnBlueIce = true;
|
||||
public boolean mobsSpawnOnPackedIce = true;
|
||||
public boolean mobsSpawnOnBlueIce = true;
|
||||
@@ -1,77 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Encode42 <me@encode42.dev>
|
||||
Date: Wed, 24 Mar 2021 17:59:54 -0400
|
||||
Subject: [PATCH] Config to allow for unsafe enchants
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/commands/CommandEnchant.java b/src/main/java/net/minecraft/server/commands/CommandEnchant.java
|
||||
index 96991d77cfef2ef0fdada1a831619293ffe37e70..bd035a0f3554fd44f135c23fc92f3411ccf74e0d 100644
|
||||
--- a/src/main/java/net/minecraft/server/commands/CommandEnchant.java
|
||||
+++ b/src/main/java/net/minecraft/server/commands/CommandEnchant.java
|
||||
@@ -48,7 +48,7 @@ public class CommandEnchant {
|
||||
}
|
||||
|
||||
private static int a(CommandListenerWrapper commandlistenerwrapper, Collection<? extends Entity> collection, Enchantment enchantment, int i) throws CommandSyntaxException {
|
||||
- if (i > enchantment.getMaxLevel()) {
|
||||
+ if (!net.pl3x.purpur.PurpurConfig.allowUnsafeEnchants && i > enchantment.getMaxLevel()) { // Purpur
|
||||
throw CommandEnchant.d.create(i, enchantment.getMaxLevel());
|
||||
} else {
|
||||
int j = 0;
|
||||
@@ -62,7 +62,7 @@ public class CommandEnchant {
|
||||
ItemStack itemstack = entityliving.getItemInMainHand();
|
||||
|
||||
if (!itemstack.isEmpty()) {
|
||||
- if (enchantment.canEnchant(itemstack) && EnchantmentManager.a((Collection) EnchantmentManager.a(itemstack).keySet(), enchantment)) {
|
||||
+ if ((enchantment.canEnchant(itemstack) && EnchantmentManager.a((Collection) EnchantmentManager.a(itemstack).keySet(), enchantment)) || (net.pl3x.purpur.PurpurConfig.allowUnsafeEnchants && !itemstack.hasEnchantment(enchantment))) { // Purpur
|
||||
itemstack.addEnchantment(enchantment, i);
|
||||
++j;
|
||||
} else if (collection.size() == 1) {
|
||||
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
index 2e4bc664412feb8657c7b9995d281203a14d48fd..677f866dfaab653b05c693663adaeb2465117a55 100644
|
||||
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
|
||||
@@ -860,6 +860,12 @@ public final class ItemStack {
|
||||
return this.tag != null && this.tag.hasKeyOfType("Enchantments", 9) ? !this.tag.getList("Enchantments", 10).isEmpty() : false;
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ public boolean hasEnchantment(Enchantment enchantment) {
|
||||
+ return hasEnchantments() && EnchantmentManager.getEnchantmentMap(getEnchantments()).containsKey(enchantment);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
public void getOrCreateTagAndSet(String s, NBTBase nbtbase) { a(s, nbtbase);} // Paper - OBFHELPER
|
||||
public void a(String s, NBTBase nbtbase) {
|
||||
this.getOrCreateTag().set(s, nbtbase);
|
||||
diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java
|
||||
index b2d28c2bf0a9e93d38583e2d734c12fed4f63d5d..63a6f63a2d3e03e74c314cdebf7cb61b66fd5108 100644
|
||||
--- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java
|
||||
+++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java
|
||||
@@ -59,6 +59,7 @@ public class EnchantmentManager {
|
||||
return a(nbttaglist);
|
||||
}
|
||||
|
||||
+ public static Map<Enchantment, Integer> getEnchantmentMap(NBTTagList nbttaglist) { return a(nbttaglist); } // Purpur - OBFHELPER
|
||||
public static Map<Enchantment, Integer> a(NBTTagList nbttaglist) {
|
||||
Map<Enchantment, Integer> map = Maps.newLinkedHashMap();
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index b44f82517e1e6e1f77144e50716dfb887bf26f70..0548eb1539aa7469e1762c1e43e6a8368fbf09fa 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -232,6 +232,7 @@ public class PurpurConfig {
|
||||
|
||||
public static boolean allowInfinityMending = false;
|
||||
public static boolean allowCrossbowInfinity = false;
|
||||
+ public static boolean allowUnsafeEnchants = false;
|
||||
private static void enchantmentSettings() {
|
||||
if (version < 5) {
|
||||
boolean oldValue = getBoolean("settings.enchantment.allow-infinite-and-mending-together", false);
|
||||
@@ -240,6 +241,7 @@ public class PurpurConfig {
|
||||
}
|
||||
allowInfinityMending = getBoolean("settings.enchantment.allow-infinity-and-mending-together", allowInfinityMending);
|
||||
allowCrossbowInfinity = getBoolean("settings.enchantment.allow-infinity-on-crossbow", allowCrossbowInfinity);
|
||||
+ allowUnsafeEnchants = getBoolean("settings.enchantment.allow-unsafe-enchants", allowUnsafeEnchants);
|
||||
}
|
||||
|
||||
public static boolean endermanShortHeight = false;
|
||||
Reference in New Issue
Block a user