From 76334f9a68fd7ab3dbfa0be38a5c1038e65afb76 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 6 Jul 2019 02:22:00 -0300 Subject: [PATCH] missing tools and motd fixed --- src/main/java/carpet/CarpetServer.java | 3 +- .../fakes/MinecraftServer_motdInterface.java | 6 --- .../mixins/MinecraftDedicatedServerMixin.java | 5 ++- .../mixins/MinecraftServer_motdMixin.java | 41 ------------------- .../mixins/PickaxeItem_missingToolsMixin.java | 25 +++++++++++ .../mixins/ServerMetadata_motdMixin.java | 24 +++++++++++ .../mixins/ShearsItem_missingToolsMixin.java | 26 ++++++++++++ .../java/carpet/mixins/SpawnHelperMixin.java | 18 ++++++++ .../java/carpet/settings/CarpetSettings.java | 17 +------- src/main/resources/carpet.mixins.json | 7 +++- 10 files changed, 106 insertions(+), 66 deletions(-) delete mode 100644 src/main/java/carpet/fakes/MinecraftServer_motdInterface.java delete mode 100644 src/main/java/carpet/mixins/MinecraftServer_motdMixin.java create mode 100644 src/main/java/carpet/mixins/PickaxeItem_missingToolsMixin.java create mode 100644 src/main/java/carpet/mixins/ServerMetadata_motdMixin.java create mode 100644 src/main/java/carpet/mixins/ShearsItem_missingToolsMixin.java diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index 94027a8d..1443a87c 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -51,10 +51,11 @@ public class CarpetServer // static for now - easier to handle all around the co public static void init(MinecraftServer server) //aka constructor of this static singleton class { // no sure we really need this here, needs testing and moving to onServerLoaded - CarpetServer.minecraft_server = server; + //CarpetServer.minecraft_server = server; } public static void onServerLoaded(MinecraftServer server) { + CarpetServer.minecraft_server = server; settingsManager.attachServer(server); extensions.forEach(e -> { SettingsManager sm = e.customSettingsManager(); diff --git a/src/main/java/carpet/fakes/MinecraftServer_motdInterface.java b/src/main/java/carpet/fakes/MinecraftServer_motdInterface.java deleted file mode 100644 index 6cb05284..00000000 --- a/src/main/java/carpet/fakes/MinecraftServer_motdInterface.java +++ /dev/null @@ -1,6 +0,0 @@ -package carpet.fakes; - -public interface MinecraftServer_motdInterface -{ - String checkMOTD(); -} diff --git a/src/main/java/carpet/mixins/MinecraftDedicatedServerMixin.java b/src/main/java/carpet/mixins/MinecraftDedicatedServerMixin.java index 9b23c940..c4842e13 100644 --- a/src/main/java/carpet/mixins/MinecraftDedicatedServerMixin.java +++ b/src/main/java/carpet/mixins/MinecraftDedicatedServerMixin.java @@ -14,9 +14,10 @@ public class MinecraftDedicatedServerMixin // this.tickWorlds(booleanSupplier_1); @Inject(method = "setupServer", at = @At("TAIL")) private void onSetupServer(CallbackInfoReturnable cir) { - //CM init - all stuff loaded from the server, just before worlds loading - CarpetServer.onServerLoaded((MinecraftDedicatedServer) (Object) this); //CM start game hook CarpetServer.onGameStarted(); + //CM init - all stuff loaded from the server, just before worlds loading + CarpetServer.onServerLoaded((MinecraftDedicatedServer) (Object) this); + } } diff --git a/src/main/java/carpet/mixins/MinecraftServer_motdMixin.java b/src/main/java/carpet/mixins/MinecraftServer_motdMixin.java deleted file mode 100644 index 187018ab..00000000 --- a/src/main/java/carpet/mixins/MinecraftServer_motdMixin.java +++ /dev/null @@ -1,41 +0,0 @@ -package carpet.mixins; - -import carpet.settings.CarpetSettings; -import carpet.fakes.MinecraftServer_motdInterface; -import net.minecraft.server.MinecraftServer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(MinecraftServer.class) -public abstract class MinecraftServer_motdMixin implements MinecraftServer_motdInterface -{ - @Shadow private String motd; - - @Shadow public abstract void setMotd(String string_1); - - @Redirect(method = "run", at = @At( - value = "FIELD", - target = "Lnet/minecraft/server/MinecraftServer;motd:Ljava/lang/String;") - ) - private String setCustomMotd(MinecraftServer server) - { - return checkMOTD(); - } - - @Override - public String checkMOTD() - { - if ("_".equals(CarpetSettings.customMOTD)) - { - setMotd(motd); - return motd; - } - else - { - setMotd(CarpetSettings.customMOTD); - return CarpetSettings.customMOTD; - } - } -} diff --git a/src/main/java/carpet/mixins/PickaxeItem_missingToolsMixin.java b/src/main/java/carpet/mixins/PickaxeItem_missingToolsMixin.java new file mode 100644 index 00000000..ea683c45 --- /dev/null +++ b/src/main/java/carpet/mixins/PickaxeItem_missingToolsMixin.java @@ -0,0 +1,25 @@ +package carpet.mixins; + +import carpet.settings.CarpetSettings; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.item.PickaxeItem; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(PickaxeItem.class) +public class PickaxeItem_missingToolsMixin +{ + @Redirect(method = "getMiningSpeed", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/BlockState;getMaterial()Lnet/minecraft/block/Material;" + )) + private Material getCustomMaterial(BlockState blockState) + { + Material material = blockState.getMaterial(); + if (CarpetSettings.missingTools && (material == Material.PISTON || material == Material.GLASS)) + material = Material.STONE; + return material; + } +} diff --git a/src/main/java/carpet/mixins/ServerMetadata_motdMixin.java b/src/main/java/carpet/mixins/ServerMetadata_motdMixin.java new file mode 100644 index 00000000..f6116d2d --- /dev/null +++ b/src/main/java/carpet/mixins/ServerMetadata_motdMixin.java @@ -0,0 +1,24 @@ +package carpet.mixins; + +import carpet.settings.CarpetSettings; +import net.minecraft.server.ServerMetadata; +import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ServerMetadata.class) +public class ServerMetadata_motdMixin +{ + @Inject(method = "getDescription", at = @At("HEAD"), cancellable = true) + private void getDescriptionAlternative(CallbackInfoReturnable cir) + { + if (!CarpetSettings.customMOTD.equals("_")) + { + cir.setReturnValue(new LiteralText(CarpetSettings.customMOTD)); + cir.cancel(); + } + } +} diff --git a/src/main/java/carpet/mixins/ShearsItem_missingToolsMixin.java b/src/main/java/carpet/mixins/ShearsItem_missingToolsMixin.java new file mode 100644 index 00000000..96f4b59f --- /dev/null +++ b/src/main/java/carpet/mixins/ShearsItem_missingToolsMixin.java @@ -0,0 +1,26 @@ +package carpet.mixins; + +import carpet.settings.CarpetSettings; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ShearsItem; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ShearsItem.class) +public class ShearsItem_missingToolsMixin +{ + @Inject(method = "getMiningSpeed", at = @At("HEAD"), cancellable = true) + private void getCustomMaterial(ItemStack itemStack_1, BlockState blockState_1, CallbackInfoReturnable cir) + { + if (CarpetSettings.missingTools && (blockState_1.getMaterial() == Material.SPONGE)) + { + cir.setReturnValue(15.0F); + cir.cancel(); + } + } +} diff --git a/src/main/java/carpet/mixins/SpawnHelperMixin.java b/src/main/java/carpet/mixins/SpawnHelperMixin.java index 7e8854e0..dba85845 100644 --- a/src/main/java/carpet/mixins/SpawnHelperMixin.java +++ b/src/main/java/carpet/mixins/SpawnHelperMixin.java @@ -5,17 +5,22 @@ import carpet.fakes.WorldInterface; import carpet.utils.SpawnReporter; import net.minecraft.block.Block; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCategory; import net.minecraft.entity.EntityType; import net.minecraft.entity.mob.MobEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.SpawnHelper; import net.minecraft.world.World; +import net.minecraft.world.chunk.WorldChunk; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Map; @@ -96,4 +101,17 @@ public class SpawnHelperMixin return world.spawnEntity(entity_1); return false; } + + @Redirect(method = "spawnEntitiesInChunk", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/entity/player/PlayerEntity;squaredDistanceTo(DDD)D" + )) + private static double getSqDistanceTo(PlayerEntity playerEntity, double double_1, double double_2, double double_3, + EntityCategory entityCategory_1, World world_1, WorldChunk worldChunk_1, BlockPos blockPos_1) + { + double distanceTo = playerEntity.squaredDistanceTo(double_1, double_2, double_3); + if (CarpetSettings.lagFreeSpawning && distanceTo > 16384.0D && entityCategory_1 != EntityCategory.CREATURE) + return 0.0; + return distanceTo; + } } diff --git a/src/main/java/carpet/settings/CarpetSettings.java b/src/main/java/carpet/settings/CarpetSettings.java index 0fc5db9b..4a14e5f0 100644 --- a/src/main/java/carpet/settings/CarpetSettings.java +++ b/src/main/java/carpet/settings/CarpetSettings.java @@ -1,7 +1,6 @@ package carpet.settings; import carpet.CarpetServer; -import carpet.fakes.MinecraftServer_motdInterface; import carpet.utils.Messenger; import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.ServerCommandSource; @@ -209,11 +208,7 @@ public class CarpetSettings @Rule(desc = "Placing carpets may issue carpet commands for non-op players", category = SURVIVAL) public static boolean carpets = false; - @Rule( - desc = "Pistons, Glass and Sponge can be broken faster with their appropriate tools", - category = SURVIVAL, - validate = Validator.WIP.class - ) + @Rule(desc = "Pistons, Glass and Sponge can be broken faster with their appropriate tools", category = SURVIVAL) public static boolean missingTools = false; @Rule(desc = "Alternative, persistent caching strategy for nether portals", category = {SURVIVAL, CREATIVE}) @@ -287,19 +282,11 @@ public class CarpetSettings @Rule(desc = "One player is required on the server to cause night to pass", category = SURVIVAL) public static boolean onePlayerSleeping = false; - private static class SetMotd extends Validator { - @Override public String validate(ServerCommandSource source, ParsedRule currentRule, String newValue, String string) { - customMOTD = newValue; // accelerate a smidge - ((MinecraftServer_motdInterface) CarpetServer.minecraft_server).checkMOTD(); - return newValue; - } - } @Rule( desc = "Sets a different motd message on client trying to connect to the server", extra = "use '_' to use the startup setting from server.properties", options = "_", - category = CREATIVE, - validate = {SetMotd.class, Validator.WIP.class} // for some reason doesn't yet work + category = CREATIVE ) public static String customMOTD = "_"; diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 7c322d6c..c9ab03c2 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -13,6 +13,8 @@ "StructureBlockBlockEntity_fillUpdatesMixin", "Structure_fillUpdatesMixin", + "ServerMetadata_motdMixin", + "MinecraftServer_coreMixin", "MinecraftServer_tickspeedMixin", @@ -23,7 +25,6 @@ "MobEntityMixin", - "MinecraftServer_motdMixin", "ServerPlayNetworkHandlerMixin", "MinecraftServer_scarpetMixin", "PlayerListHeaderS2CPacketMixin", @@ -93,6 +94,10 @@ "PistonBlock_qcMixin", "DispenserBlock_qcMixin", + "PickaxeItem_missingToolsMixin", + "ShearsItem_missingToolsMixin", + + "PistonBlock_movableTEMixin", "PistonBlockEntity_movableTEMixin", "World_movableTEMixin",