mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-11-02 06:32:59 +00:00
Compare commits
22 Commits
v1.18.1-1.
...
v1.17.1-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70c5cbafec | ||
|
|
2c64186965 | ||
|
|
31ba17d085 | ||
|
|
6353e8d930 | ||
|
|
bcc7dd6991 | ||
|
|
4a4e8bb4b6 | ||
|
|
bd36185662 | ||
|
|
045c4fc88c | ||
|
|
e0fcc425c6 | ||
|
|
e01895d719 | ||
|
|
87b38f4249 | ||
|
|
60d1d1bb18 | ||
|
|
cdf8b77ffd | ||
|
|
e2ce52fe81 | ||
|
|
e05588c662 | ||
|
|
9cf70b10ef | ||
|
|
9ac8f3aeea | ||
|
|
e191b08eb5 | ||
|
|
a1221b99e1 | ||
|
|
85bced6b1d | ||
|
|
fc4569e0cc | ||
|
|
e7f08313d9 |
@@ -19,8 +19,8 @@ numerical value depending on which button on your mouse was last pressed when th
|
||||
<!-- Our markdown parser doesn't work on tables!? Guess I'll have to roll my own soonish :/. -->
|
||||
<tr><th>Button code</th><th>Mouse button</th></tr>
|
||||
<tr><td align="right">1</td><td>Left button</td></tr>
|
||||
<tr><td align="right">2</td><td>Middle button</td></tr>
|
||||
<tr><td align="right">3</td><td>Right button</td></tr>
|
||||
<tr><td align="right">2</td><td>Right button</td></tr>
|
||||
<tr><td align="right">3</td><td>Middle button</td></tr>
|
||||
</table>
|
||||
|
||||
## Example
|
||||
|
||||
@@ -18,7 +18,7 @@ representable value.
|
||||
|
||||
This representation of sound - a long, uniformally sampled list of amplitudes is referred to as [Pulse-code
|
||||
Modulation][PCM] (PCM). PCM can be thought of as the "standard" audio format, as it's incredibly easy to work with. For
|
||||
instance, to mix two pieces of audio together, you can just samples from the two tracks together and take the average.
|
||||
instance, to mix two pieces of audio together, you can just add samples from the two tracks together and take the average.
|
||||
|
||||
CC: Tweaked's speakers also work with PCM audio. It plays back 48,000 samples a second, where each sample is an integer
|
||||
between -128 and 127. This is more commonly referred to as 48kHz and an 8-bit resolution.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
org.gradle.jvmargs=-Xmx3G
|
||||
|
||||
# Mod properties
|
||||
mod_version=1.100.1
|
||||
mod_version=1.100.4
|
||||
|
||||
# Minecraft properties (update mods.toml when changing)
|
||||
mc_version=1.17.1
|
||||
|
||||
@@ -111,7 +111,7 @@ public final class ComputerCraftAPI
|
||||
}
|
||||
|
||||
/**
|
||||
* rers a peripheral provider to convert blocks into {@link IPeripheral} implementations.
|
||||
* Registers a peripheral provider to convert blocks into {@link IPeripheral} implementations.
|
||||
*
|
||||
* @param provider The peripheral provider to register.
|
||||
* @see IPeripheral
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
|
||||
@@ -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<EntityType<?>> event )
|
||||
{
|
||||
ResourceLocation id = new ResourceLocation( ComputerCraft.MOD_ID, "turtle_player" );
|
||||
for( RegistryEvent.MissingMappings.Mapping<EntityType<?>> mapping : event.getMappings( ComputerCraft.MOD_ID ) )
|
||||
{
|
||||
if( mapping.key.equals( id ) ) mapping.ignore();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<EntityType<?>> ENTITIES = DeferredRegister.create( ForgeRegistries.ENTITIES, ComputerCraft.MOD_ID );
|
||||
|
||||
public static final RegistryObject<EntityType<TurtlePlayer>> TURTLE_PLAYER = ENTITIES.register( "turtle_player", () ->
|
||||
EntityType.Builder.<TurtlePlayer>createNothing( MobCategory.MISC )
|
||||
.noSave()
|
||||
.noSummon()
|
||||
.sized( 0, 0 )
|
||||
.build( ComputerCraft.MOD_ID + ":turtle_player" ) );
|
||||
}
|
||||
|
||||
public static class ModContainers
|
||||
{
|
||||
static final DeferredRegister<MenuType<?>> 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 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -59,7 +59,7 @@ public enum CableModemVariant implements StringRepresentable
|
||||
@Nonnull
|
||||
public static CableModemVariant from( Direction facing, boolean modem, boolean peripheral )
|
||||
{
|
||||
int state = (modem ? 2 : 0) + (peripheral ? 1 : 0);
|
||||
int state = (modem ? 1 : 0) + (peripheral ? 2 : 0);
|
||||
return facing == null ? None : VALUES[1 + 6 * state + facing.get3DDataValue()];
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.level.ChunkPos;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.chunk.ChunkStatus;
|
||||
import net.minecraft.world.level.chunk.LevelChunk;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
import net.minecraftforge.event.world.ChunkWatchEvent;
|
||||
@@ -47,8 +46,10 @@ public final class MonitorWatcher
|
||||
@SubscribeEvent
|
||||
public static void onWatch( ChunkWatchEvent.Watch event )
|
||||
{
|
||||
// Get the current chunk if it has been loaded. This is safe as, if the chunk hasn't been loaded yet, then the
|
||||
// monitor will have no contents, and so we won't need to send an update anyway.
|
||||
ChunkPos chunkPos = event.getPos();
|
||||
LevelChunk chunk = (LevelChunk) event.getWorld().getChunk( chunkPos.x, chunkPos.z, ChunkStatus.FULL, false );
|
||||
LevelChunk chunk = event.getWorld().getChunkSource().getChunkNow( chunkPos.x, chunkPos.z );
|
||||
if( chunk == null ) return;
|
||||
|
||||
for( BlockEntity te : chunk.getBlockEntities().values() )
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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<String, Integer> 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 );
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
*/
|
||||
package dan200.computercraft.shared.util;
|
||||
|
||||
import com.google.common.io.BaseEncoding;
|
||||
import dan200.computercraft.ComputerCraft;
|
||||
import net.minecraft.nbt.*;
|
||||
import org.apache.commons.codec.binary.Hex;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
@@ -22,6 +22,8 @@ import java.util.Map;
|
||||
|
||||
public final class NBTUtil
|
||||
{
|
||||
private static final BaseEncoding ENCODING = BaseEncoding.base16().lowerCase();
|
||||
|
||||
private NBTUtil() {}
|
||||
|
||||
private static Tag toNBTTag( Object object )
|
||||
@@ -177,7 +179,7 @@ public final class NBTUtil
|
||||
DataOutput output = new DataOutputStream( new DigestOutputStream( digest ) );
|
||||
NbtIo.write( tag, output );
|
||||
byte[] hash = digest.digest();
|
||||
return new String( Hex.encodeHex( hash ) );
|
||||
return ENCODING.encode( hash );
|
||||
}
|
||||
catch( NoSuchAlgorithmException | IOException e )
|
||||
{
|
||||
|
||||
@@ -39,5 +39,25 @@
|
||||
"chat.computercraft.wired_modem.peripheral_disconnected": "Perifer enhed \"%s\" koblet fra netværk",
|
||||
"gui.computercraft.tooltip.copy": "Kopier til udklipsholder",
|
||||
"gui.computercraft.tooltip.computer_id": "Computer-ID: %s",
|
||||
"gui.computercraft.tooltip.disk_id": "Disk-ID: %s"
|
||||
"gui.computercraft.tooltip.disk_id": "Disk-ID: %s",
|
||||
"gui.computercraft.tooltip.turn_on": "Tænd denne computer",
|
||||
"gui.computercraft.tooltip.turn_off": "Sluk denne computer",
|
||||
"gui.computercraft.tooltip.terminate.key": "Hold Ctrl+T nede",
|
||||
"gui.computercraft.tooltip.turn_off.key": "Hold Ctrl+S nede",
|
||||
"gui.computercraft.tooltip.terminate": "Stop den igangværende kode",
|
||||
"gui.computercraft.tooltip.turn_on.key": "Hold Ctrl+R nede",
|
||||
"gui.computercraft.upload.overwrite_button": "Overskriv",
|
||||
"gui.computercraft.upload.overwrite.detail": "Følgende filer vil blive overskrevet ved upload. Fortsæt?%s",
|
||||
"gui.computercraft.upload.success": "Upload Lykkedes",
|
||||
"gui.computercraft.upload.overwrite": "Filer ville blive overskrevet",
|
||||
"gui.computercraft.upload.failed.out_of_space": "Ikke nok plads på computeren til disse filer.",
|
||||
"gui.computercraft.upload.failed.computer_off": "Du skal tænde computeren, før du kan uploade filer.",
|
||||
"gui.computercraft.upload.failed.too_much": "Dine filer er for store til at blive uploadet.",
|
||||
"gui.computercraft.upload.failed.overwrite_dir": "Kan ikke uploade %s, da der allerede er en mappe med det samme navn.",
|
||||
"gui.computercraft.upload.success.msg": "%d filer uploadet.",
|
||||
"gui.computercraft.upload.failed": "Upload Fejlede",
|
||||
"gui.computercraft.upload.failed.name_too_long": "Filnavne er for lange til at blive uploadet.",
|
||||
"gui.computercraft.upload.failed.too_many_files": "Kan ikke uploade så mange filer.",
|
||||
"gui.computercraft.pocket_computer_overlay": "Lommecomputer åben. Tryk ESC for at lukke.",
|
||||
"itemGroup.computercraft": "ComputerCraft"
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"rewards": {
|
||||
"recipes": [ "computercraft:normal_turtle_normal" ]
|
||||
"recipes": [ "computercraft:turtle_normal" ]
|
||||
},
|
||||
"criteria": {
|
||||
"has_normal": {
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
# New features in CC: Tweaked 1.100.4
|
||||
|
||||
Several bug fixes:
|
||||
* Fix the monitor watching blocking the main thread when chunks are slow to load.
|
||||
|
||||
# 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:
|
||||
* Fix wired modems swapping the modem/peripheral block state.
|
||||
* Remove debugging logging line from `turtle.attack`.
|
||||
|
||||
# New features in CC: Tweaked 1.100.1
|
||||
|
||||
Several bug fixes:
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
New features in CC: Tweaked 1.100.1
|
||||
New features in CC: Tweaked 1.100.4
|
||||
|
||||
Several bug fixes:
|
||||
* Fix `peripheral.hasType` not working with wired modems (Toad-Dev).
|
||||
* Fix crashes when noisy pocket computer are shutdown.
|
||||
* Fix the monitor watching blocking the main thread when chunks are slow to load.
|
||||
|
||||
Type "help changelog" to see the full version history.
|
||||
|
||||
Reference in New Issue
Block a user