diff --git a/doc/events/mouse_click.md b/doc/events/mouse_click.md index 83d371260..ed4f2e3eb 100644 --- a/doc/events/mouse_click.md +++ b/doc/events/mouse_click.md @@ -19,8 +19,8 @@ numerical value depending on which button on your mouse was last pressed when th Button codeMouse button 1Left button - 2Middle button - 3Right button + 2Right button + 3Middle button ## Example diff --git a/gradle.properties b/gradle.properties index 03c16cd34..b6a70df95 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ org.gradle.jvmargs=-Xmx3G # Mod properties -mod_version=1.100.2 +mod_version=1.100.3 # Minecraft properties (update mods.toml when changing) mc_version=1.17.1 diff --git a/src/main/java/dan200/computercraft/client/ClientRegistry.java b/src/main/java/dan200/computercraft/client/ClientRegistry.java index 35e2c98b1..c17253bca 100644 --- a/src/main/java/dan200/computercraft/client/ClientRegistry.java +++ b/src/main/java/dan200/computercraft/client/ClientRegistry.java @@ -10,7 +10,6 @@ import dan200.computercraft.client.gui.*; import dan200.computercraft.client.render.TileEntityMonitorRenderer; import dan200.computercraft.client.render.TileEntityTurtleRenderer; import dan200.computercraft.client.render.TurtleModelLoader; -import dan200.computercraft.client.render.TurtlePlayerRenderer; import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.common.IColouredItem; import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; @@ -30,7 +29,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ColorHandlerEvent; -import net.minecraftforge.client.event.EntityRenderersEvent; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.client.model.ModelLoaderRegistry; @@ -122,12 +120,6 @@ public final class ClientRegistry ); } - @SubscribeEvent - public static void registerEntityRenderers( EntityRenderersEvent.RegisterRenderers event ) - { - event.registerEntityRenderer( Registry.ModEntities.TURTLE_PLAYER.get(), TurtlePlayerRenderer::new ); - } - @SubscribeEvent public static void setupClient( FMLClientSetupEvent event ) { diff --git a/src/main/java/dan200/computercraft/shared/CommonHooks.java b/src/main/java/dan200/computercraft/shared/CommonHooks.java index d8d79ac6b..2839e7287 100644 --- a/src/main/java/dan200/computercraft/shared/CommonHooks.java +++ b/src/main/java/dan200/computercraft/shared/CommonHooks.java @@ -21,6 +21,7 @@ import dan200.computercraft.shared.peripheral.modem.wireless.WirelessNetwork; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.level.storage.loot.BuiltInLootTables; import net.minecraft.world.level.storage.loot.LootPool; @@ -161,4 +162,14 @@ public final class CommonHooks NetworkHandler.sendToPlayer( event.getPlayer(), packet ); } } + + @SubscribeEvent + public static void onMissingEntityMappingsEvent( RegistryEvent.MissingMappings> event ) + { + ResourceLocation id = new ResourceLocation( ComputerCraft.MOD_ID, "turtle_player" ); + for( RegistryEvent.MissingMappings.Mapping> mapping : event.getMappings( ComputerCraft.MOD_ID ) ) + { + if( mapping.key.equals( id ) ) mapping.ignore(); + } + } } diff --git a/src/main/java/dan200/computercraft/shared/Registry.java b/src/main/java/dan200/computercraft/shared/Registry.java index 60b95dc0a..5ae9b8851 100644 --- a/src/main/java/dan200/computercraft/shared/Registry.java +++ b/src/main/java/dan200/computercraft/shared/Registry.java @@ -61,7 +61,6 @@ import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker; import dan200.computercraft.shared.pocket.recipes.PocketComputerUpgradeRecipe; import dan200.computercraft.shared.turtle.blocks.BlockTurtle; import dan200.computercraft.shared.turtle.blocks.TileTurtle; -import dan200.computercraft.shared.turtle.core.TurtlePlayer; import dan200.computercraft.shared.turtle.inventory.ContainerTurtle; import dan200.computercraft.shared.turtle.items.ItemTurtle; import dan200.computercraft.shared.turtle.recipes.TurtleRecipe; @@ -73,8 +72,6 @@ import dan200.computercraft.shared.util.ImpostorRecipe; import dan200.computercraft.shared.util.ImpostorShapelessRecipe; import net.minecraft.core.cauldron.CauldronInteraction; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MobCategory; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.CreativeModeTab; @@ -285,18 +282,6 @@ public final class Registry SERIALISERS.register( "wireless_modem_advanced", () -> PocketUpgradeSerialiser.simpleWithCustomItem( ( id, item ) -> new PocketModem( id, item, true ) ) ); } - public static class ModEntities - { - static final DeferredRegister> ENTITIES = DeferredRegister.create( ForgeRegistries.ENTITIES, ComputerCraft.MOD_ID ); - - public static final RegistryObject> TURTLE_PLAYER = ENTITIES.register( "turtle_player", () -> - EntityType.Builder.createNothing( MobCategory.MISC ) - .noSave() - .noSummon() - .sized( 0, 0 ) - .build( ComputerCraft.MOD_ID + ":turtle_player" ) ); - } - public static class ModContainers { static final DeferredRegister> CONTAINERS = DeferredRegister.create( ForgeRegistries.CONTAINERS, ComputerCraft.MOD_ID ); @@ -425,7 +410,6 @@ public final class Registry ModItems.ITEMS.register( bus ); ModTurtleSerialisers.SERIALISERS.register( bus ); ModPocketUpgradeSerialisers.SERIALISERS.register( bus ); - ModEntities.ENTITIES.register( bus ); ModContainers.CONTAINERS.register( bus ); } } diff --git a/src/main/java/dan200/computercraft/shared/network/server/UploadFileMessage.java b/src/main/java/dan200/computercraft/shared/network/server/UploadFileMessage.java index e953ef73a..dd83a9856 100644 --- a/src/main/java/dan200/computercraft/shared/network/server/UploadFileMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/server/UploadFileMessage.java @@ -160,6 +160,7 @@ public class UploadFileMessage extends ComputerServerMessage contents.position( currentOffset ).limit( currentOffset + canWrite ); slices.add( new FileSlice( fileId, currentOffset, contents.slice() ) ); currentOffset += canWrite; + remaining -= canWrite; } contents.position( 0 ).limit( capacity ); diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java index 257d27600..0905b696c 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java @@ -8,7 +8,6 @@ package dan200.computercraft.shared.turtle.core; import com.mojang.authlib.GameProfile; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.turtle.ITurtleAccess; -import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.util.DirectionUtil; import dan200.computercraft.shared.util.InventoryUtil; import dan200.computercraft.shared.util.WorldUtil; @@ -22,7 +21,6 @@ import net.minecraft.world.MenuProvider; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.animal.horse.AbstractHorse; import net.minecraft.world.item.ItemStack; @@ -197,13 +195,6 @@ public final class TurtlePlayer extends FakePlayer getInventory().setChanged(); } - @Nonnull - @Override - public EntityType getType() - { - return Registry.ModEntities.TURTLE_PLAYER.get(); - } - @Override public Vec3 position() { diff --git a/src/main/java/dan200/computercraft/shared/util/IDAssigner.java b/src/main/java/dan200/computercraft/shared/util/IDAssigner.java index 87c556f51..fa5cecab8 100644 --- a/src/main/java/dan200/computercraft/shared/util/IDAssigner.java +++ b/src/main/java/dan200/computercraft/shared/util/IDAssigner.java @@ -45,21 +45,17 @@ public final class IDAssigner return ServerLifecycleHooks.getCurrentServer().getWorldPath( FOLDER ).toFile(); } - private static MinecraftServer getCachedServer() + private static boolean hasServerChanged() { - if( server == null ) return null; + if( server == null ) return true; MinecraftServer currentServer = server.get(); - if( currentServer == null ) return null; - - if( currentServer != ServerLifecycleHooks.getCurrentServer() ) return null; - return currentServer; + return currentServer == null || currentServer != ServerLifecycleHooks.getCurrentServer(); } public static synchronized int getNextId( String kind ) { - MinecraftServer currentServer = getCachedServer(); - if( currentServer == null ) + if( hasServerChanged() ) { // The server has changed, refetch our ID map server = new WeakReference<>( ServerLifecycleHooks.getCurrentServer() ); @@ -68,23 +64,22 @@ public final class IDAssigner dir.mkdirs(); // Load our ID file from disk + Map newIds = null; idFile = new File( dir, "ids.json" ).toPath(); if( Files.isRegularFile( idFile ) ) { try( Reader reader = Files.newBufferedReader( idFile, StandardCharsets.UTF_8 ) ) { - ids = GSON.fromJson( reader, ID_TOKEN ); + newIds = GSON.fromJson( reader, ID_TOKEN ); } catch( Exception e ) { ComputerCraft.log.error( "Cannot load id file '" + idFile + "'", e ); - ids = new HashMap<>(); } } - else - { - ids = new HashMap<>(); - } + + if( newIds == null ) newIds = new HashMap<>(); + ids = newIds; } Integer existing = ids.get( kind ); diff --git a/src/main/resources/data/computercraft/advancements/recipes/turtle_normal.json b/src/main/resources/data/computercraft/advancements/recipes/turtle_normal.json index 482be3e1c..b3c9e4982 100644 --- a/src/main/resources/data/computercraft/advancements/recipes/turtle_normal.json +++ b/src/main/resources/data/computercraft/advancements/recipes/turtle_normal.json @@ -1,7 +1,7 @@ { "parent": "minecraft:recipes/root", "rewards": { - "recipes": [ "computercraft:normal_turtle_normal" ] + "recipes": [ "computercraft:turtle_normal" ] }, "criteria": { "has_normal": { diff --git a/src/main/resources/data/computercraft/lua/rom/help/changelog.md b/src/main/resources/data/computercraft/lua/rom/help/changelog.md index 8f58dd7b3..b77563427 100644 --- a/src/main/resources/data/computercraft/lua/rom/help/changelog.md +++ b/src/main/resources/data/computercraft/lua/rom/help/changelog.md @@ -1,3 +1,11 @@ +# New features in CC: Tweaked 1.100.3 + +Several bug fixes: +* Fix client disconnect when uploading large files. +* Correctly handling empty computer ID file. +* Fix the normal turtle recipe not being unlocked. +* Remove turtle fake EntityType. + # New features in CC: Tweaked 1.100.2 Several bug fixes: diff --git a/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md b/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md index bbd0e76f2..ce9e428f4 100644 --- a/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md +++ b/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md @@ -1,7 +1,9 @@ -New features in CC: Tweaked 1.100.2 +New features in CC: Tweaked 1.100.3 Several bug fixes: -* Fix wired modems swapping the modem/peripheral block state. -* Remove debugging logging line from `turtle.attack`. +* Fix client disconnect when uploading large files. +* Correctly handling empty computer ID file. +* Fix the normal turtle recipe not being unlocked. +* Remove turtle fake EntityType. Type "help changelog" to see the full version history.