mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-11-04 07:32:59 +00:00 
			
		
		
		
	Compare commits
	
		
			10 Commits
		
	
	
		
			v1.17.1-1.
			...
			v1.18.1-1.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					2b901f2d5e | ||
| 
						 | 
					901d8d4c3b | ||
| 
						 | 
					2562642664 | ||
| 
						 | 
					632db1cfa5 | ||
| 
						 | 
					f6fcba7a39 | ||
| 
						 | 
					7c373c6e06 | ||
| 
						 | 
					57c5d19f95 | ||
| 
						 | 
					23c17075be | ||
| 
						 | 
					87988a705b | ||
| 
						 | 
					179da1d8cf | 
							
								
								
									
										16
									
								
								build.gradle
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								build.gradle
									
									
									
									
									
								
							@@ -5,7 +5,7 @@ buildscript {
 | 
			
		||||
        maven { url = 'https://maven.parchmentmc.org' }
 | 
			
		||||
    }
 | 
			
		||||
    dependencies {
 | 
			
		||||
        classpath 'net.minecraftforge.gradle:ForgeGradle:5.1.24'
 | 
			
		||||
        classpath 'net.minecraftforge.gradle:ForgeGradle:5.1.+'
 | 
			
		||||
        classpath "org.spongepowered:mixingradle:0.7.+"
 | 
			
		||||
        classpath 'org.parchmentmc:librarian:1.+'
 | 
			
		||||
    }
 | 
			
		||||
@@ -31,7 +31,7 @@ version = mod_version
 | 
			
		||||
group = "org.squiddev"
 | 
			
		||||
archivesBaseName = "cc-tweaked-${mc_version}"
 | 
			
		||||
 | 
			
		||||
def javaVersion = JavaLanguageVersion.of(16)
 | 
			
		||||
def javaVersion = JavaLanguageVersion.of(17)
 | 
			
		||||
java {
 | 
			
		||||
    toolchain {
 | 
			
		||||
        languageVersion = javaVersion
 | 
			
		||||
@@ -123,7 +123,8 @@ minecraft {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mappings channel: 'parchment', version: "${mapping_version}-${mc_version}"
 | 
			
		||||
    // mappings channel: 'parchment', version: "${mapping_version}-${mc_version}"
 | 
			
		||||
    mappings channel: 'official', version: mc_version
 | 
			
		||||
 | 
			
		||||
    accessTransformer file('src/main/resources/META-INF/accesstransformer.cfg')
 | 
			
		||||
    accessTransformer file('src/testMod/resources/META-INF/accesstransformer.cfg')
 | 
			
		||||
@@ -158,9 +159,8 @@ dependencies {
 | 
			
		||||
    minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
 | 
			
		||||
    annotationProcessor 'org.spongepowered:mixin:0.8.4:processor'
 | 
			
		||||
 | 
			
		||||
    compileOnly fg.deobf("mezz.jei:jei-1.17.1:8.0.0.14:api")
 | 
			
		||||
 | 
			
		||||
    runtimeOnly fg.deobf("mezz.jei:jei-1.17.1:8.0.0.14")
 | 
			
		||||
    compileOnly fg.deobf("mezz.jei:jei-1.18.1:9.1.0.47:api")
 | 
			
		||||
    runtimeOnly fg.deobf("mezz.jei:jei-1.18.1:9.1.0.47")
 | 
			
		||||
 | 
			
		||||
    shade 'org.squiddev:Cobalt:0.5.2-SNAPSHOT'
 | 
			
		||||
 | 
			
		||||
@@ -172,7 +172,9 @@ dependencies {
 | 
			
		||||
    testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2'
 | 
			
		||||
 | 
			
		||||
    testModImplementation sourceSets.main.output
 | 
			
		||||
    testModExtra 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.21'
 | 
			
		||||
    testModExtra('org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0') {
 | 
			
		||||
        exclude group: "org.jetbrains", module: "annotations"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    cctJavadoc 'cc.tweaked:cct-javadoc:1.4.5'
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx3G
 | 
			
		||||
mod_version=1.100.0
 | 
			
		||||
 | 
			
		||||
# Minecraft properties (update mods.toml when changing)
 | 
			
		||||
mc_version=1.17.1
 | 
			
		||||
mc_version=1.18.1
 | 
			
		||||
mapping_version=2021.09.05
 | 
			
		||||
forge_version=37.0.85
 | 
			
		||||
forge_version=39.0.0
 | 
			
		||||
# NO SERIOUSLY, UPDATE mods.toml WHEN CHANGING
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ import net.minecraft.world.level.block.entity.BlockEntity;
 | 
			
		||||
import net.minecraftforge.common.capabilities.Capability;
 | 
			
		||||
import net.minecraftforge.common.util.LazyOptional;
 | 
			
		||||
import net.minecraftforge.fml.ModList;
 | 
			
		||||
import net.minecraftforge.fmllegacy.server.ServerLifecycleHooks;
 | 
			
		||||
import net.minecraftforge.server.ServerLifecycleHooks;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ 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.ForgeModelBakery;
 | 
			
		||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
 | 
			
		||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
 | 
			
		||||
import net.minecraftforge.fml.common.Mod;
 | 
			
		||||
@@ -76,7 +76,7 @@ public final class ClientRegistry
 | 
			
		||||
        ModelLoaderRegistry.registerLoader( new ResourceLocation( ComputerCraft.MOD_ID, "turtle" ), TurtleModelLoader.INSTANCE );
 | 
			
		||||
        for( String model : EXTRA_MODELS )
 | 
			
		||||
        {
 | 
			
		||||
            ModelLoader.addSpecialModel( new ModelResourceLocation( new ResourceLocation( ComputerCraft.MOD_ID, model ), "inventory" ) );
 | 
			
		||||
            ForgeModelBakery.addSpecialModel( new ModelResourceLocation( new ResourceLocation( ComputerCraft.MOD_ID, model ), "inventory" ) );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -71,12 +71,12 @@ public class DynamicImageButton extends Button
 | 
			
		||||
        RenderSystem.disableDepthTest();
 | 
			
		||||
 | 
			
		||||
        int yTex = yTexStart;
 | 
			
		||||
        if( isHovered() ) yTex += yDiffTex;
 | 
			
		||||
        if( isHoveredOrFocused() ) yTex += yDiffTex;
 | 
			
		||||
 | 
			
		||||
        blit( stack, x, y, xTexStart.getAsInt(), yTex, width, height, textureWidth, textureHeight );
 | 
			
		||||
        RenderSystem.enableDepthTest();
 | 
			
		||||
 | 
			
		||||
        if( isHovered() ) renderToolTip( stack, mouseX, mouseY );
 | 
			
		||||
        if( isHovered ) renderToolTip( stack, mouseX, mouseY );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
 
 | 
			
		||||
@@ -45,8 +45,8 @@ public final class CableHighlightRenderer
 | 
			
		||||
    {
 | 
			
		||||
        BlockHitResult hit = event.getTarget();
 | 
			
		||||
        BlockPos pos = hit.getBlockPos();
 | 
			
		||||
        Level world = event.getInfo().getEntity().getCommandSenderWorld();
 | 
			
		||||
        Camera info = event.getInfo();
 | 
			
		||||
        Level world = event.getCamera().getEntity().getCommandSenderWorld();
 | 
			
		||||
        Camera info = event.getCamera();
 | 
			
		||||
 | 
			
		||||
        BlockState state = world.getBlockState( pos );
 | 
			
		||||
 | 
			
		||||
@@ -67,9 +67,9 @@ public final class CableHighlightRenderer
 | 
			
		||||
        double yOffset = pos.getY() - cameraPos.y();
 | 
			
		||||
        double zOffset = pos.getZ() - cameraPos.z();
 | 
			
		||||
 | 
			
		||||
        VertexConsumer buffer = event.getBuffers().getBuffer( RenderType.lines() );
 | 
			
		||||
        Matrix4f matrix4f = event.getMatrix().last().pose();
 | 
			
		||||
        Matrix3f normal = event.getMatrix().last().normal();
 | 
			
		||||
        VertexConsumer buffer = event.getMultiBufferSource().getBuffer( RenderType.lines() );
 | 
			
		||||
        Matrix4f matrix4f = event.getPoseStack().last().pose();
 | 
			
		||||
        Matrix3f normal = event.getPoseStack().last().normal();
 | 
			
		||||
        // TODO: Can we just accesstransformer out LevelRenderer.renderShape?
 | 
			
		||||
        shape.forAllEdges( ( x1, y1, z1, x2, y2, z2 ) -> {
 | 
			
		||||
            float xDelta = (float) (x2 - x1);
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ public final class ItemPocketRenderer extends ItemMapLikeRenderer
 | 
			
		||||
 | 
			
		||||
        event.setCanceled( true );
 | 
			
		||||
        INSTANCE.renderItemFirstPerson(
 | 
			
		||||
            event.getMatrixStack(), event.getBuffers(), event.getLight(),
 | 
			
		||||
            event.getPoseStack(), event.getMultiBufferSource(), event.getPackedLight(),
 | 
			
		||||
            event.getHand(), event.getInterpolatedPitch(), event.getEquipProgress(), event.getSwingProgress(), event.getItemStack()
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ public final class ItemPrintoutRenderer extends ItemMapLikeRenderer
 | 
			
		||||
 | 
			
		||||
        event.setCanceled( true );
 | 
			
		||||
        INSTANCE.renderItemFirstPerson(
 | 
			
		||||
            event.getMatrixStack(), event.getBuffers(), event.getLight(),
 | 
			
		||||
            event.getPoseStack(), event.getMultiBufferSource(), event.getPackedLight(),
 | 
			
		||||
            event.getHand(), event.getInterpolatedPitch(), event.getEquipProgress(), event.getSwingProgress(), event.getItemStack()
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
@@ -63,11 +63,11 @@ public final class ItemPrintoutRenderer extends ItemMapLikeRenderer
 | 
			
		||||
    @SubscribeEvent
 | 
			
		||||
    public static void onRenderInFrame( RenderItemInFrameEvent event )
 | 
			
		||||
    {
 | 
			
		||||
        ItemStack stack = event.getItem();
 | 
			
		||||
        ItemStack stack = event.getItemStack();
 | 
			
		||||
        if( !(stack.getItem() instanceof ItemPrintout) ) return;
 | 
			
		||||
        event.setCanceled( true );
 | 
			
		||||
 | 
			
		||||
        PoseStack transform = event.getMatrix();
 | 
			
		||||
        PoseStack transform = event.getPoseStack();
 | 
			
		||||
 | 
			
		||||
        // Move a little bit forward to ensure we're not clipping with the frame
 | 
			
		||||
        transform.translate( 0.0f, 0.0f, -0.001f );
 | 
			
		||||
@@ -75,8 +75,8 @@ public final class ItemPrintoutRenderer extends ItemMapLikeRenderer
 | 
			
		||||
        transform.scale( 0.95f, 0.95f, -0.95f );
 | 
			
		||||
        transform.translate( -0.5f, -0.5f, 0.0f );
 | 
			
		||||
 | 
			
		||||
        int light = event.getEntityItemFrame().getType() == EntityType.GLOW_ITEM_FRAME ? 0xf000d2 : event.getLight(); // See getLightVal.
 | 
			
		||||
        drawPrintout( transform, event.getBuffers(), stack, light );
 | 
			
		||||
        int light = event.getItemFrameEntity().getType() == EntityType.GLOW_ITEM_FRAME ? 0xf000d2 : event.getPackedLight(); // See getLightVal.
 | 
			
		||||
        drawPrintout( transform, event.getMultiBufferSource(), stack, light );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void drawPrintout( PoseStack transform, MultiBufferSource render, ItemStack stack, int light )
 | 
			
		||||
 
 | 
			
		||||
@@ -41,9 +41,9 @@ public final class MonitorHighlightRenderer
 | 
			
		||||
    public static void drawHighlight( DrawSelectionEvent.HighlightBlock event )
 | 
			
		||||
    {
 | 
			
		||||
        // Preserve normal behaviour when crouching.
 | 
			
		||||
        if( event.getInfo().getEntity().isCrouching() ) return;
 | 
			
		||||
        if( event.getCamera().getEntity().isCrouching() ) return;
 | 
			
		||||
 | 
			
		||||
        Level world = event.getInfo().getEntity().getCommandSenderWorld();
 | 
			
		||||
        Level world = event.getCamera().getEntity().getCommandSenderWorld();
 | 
			
		||||
        BlockPos pos = event.getTarget().getBlockPos();
 | 
			
		||||
 | 
			
		||||
        BlockEntity tile = world.getBlockEntity( pos );
 | 
			
		||||
@@ -60,13 +60,13 @@ public final class MonitorHighlightRenderer
 | 
			
		||||
        if( monitor.getYIndex() != 0 ) faces.remove( monitor.getDown().getOpposite() );
 | 
			
		||||
        if( monitor.getYIndex() != monitor.getHeight() - 1 ) faces.remove( monitor.getDown() );
 | 
			
		||||
 | 
			
		||||
        PoseStack transformStack = event.getMatrix();
 | 
			
		||||
        Vec3 cameraPos = event.getInfo().getPosition();
 | 
			
		||||
        PoseStack transformStack = event.getPoseStack();
 | 
			
		||||
        Vec3 cameraPos = event.getCamera().getPosition();
 | 
			
		||||
        transformStack.pushPose();
 | 
			
		||||
        transformStack.translate( pos.getX() - cameraPos.x(), pos.getY() - cameraPos.y(), pos.getZ() - cameraPos.z() );
 | 
			
		||||
 | 
			
		||||
        // I wish I could think of a better way to do this
 | 
			
		||||
        VertexConsumer buffer = event.getBuffers().getBuffer( RenderType.lines() );
 | 
			
		||||
        VertexConsumer buffer = event.getMultiBufferSource().getBuffer( RenderType.lines() );
 | 
			
		||||
        Matrix4f transform = transformStack.last().pose();
 | 
			
		||||
        Matrix3f normal = transformStack.last().normal();
 | 
			
		||||
        if( faces.contains( NORTH ) || faces.contains( WEST ) ) line( buffer, transform, normal, 0, 0, 0, UP );
 | 
			
		||||
 
 | 
			
		||||
@@ -29,11 +29,11 @@ public class SpeakerManager
 | 
			
		||||
        if( !(event.getSound() instanceof SpeakerSound sound) ) return;
 | 
			
		||||
        if( sound.stream == null ) return;
 | 
			
		||||
 | 
			
		||||
        event.getSource().attachBufferStream( sound.stream );
 | 
			
		||||
        event.getSource().play();
 | 
			
		||||
        event.getChannel().attachBufferStream( sound.stream );
 | 
			
		||||
        event.getChannel().play();
 | 
			
		||||
 | 
			
		||||
        sound.channel = event.getSource();
 | 
			
		||||
        sound.executor = event.getManager().executor;
 | 
			
		||||
        sound.channel = event.getChannel();
 | 
			
		||||
        sound.executor = event.getEngine().executor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static SpeakerInstance getSound( UUID source )
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,8 @@ import dan200.computercraft.core.computer.TimeoutState;
 | 
			
		||||
import dan200.computercraft.core.tracking.Tracking;
 | 
			
		||||
import dan200.computercraft.core.tracking.TrackingField;
 | 
			
		||||
import dan200.computercraft.shared.util.ThreadUtils;
 | 
			
		||||
import org.squiddev.cobalt.*;
 | 
			
		||||
import org.squiddev.cobalt.LuaTable;
 | 
			
		||||
import org.squiddev.cobalt.*;
 | 
			
		||||
import org.squiddev.cobalt.compiler.CompileException;
 | 
			
		||||
import org.squiddev.cobalt.compiler.LoadState;
 | 
			
		||||
import org.squiddev.cobalt.debug.DebugFrame;
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ import net.minecraft.world.level.storage.loot.predicates.AlternativeLootItemCond
 | 
			
		||||
import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition;
 | 
			
		||||
import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition;
 | 
			
		||||
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
 | 
			
		||||
import net.minecraftforge.fmllegacy.RegistryObject;
 | 
			
		||||
import net.minecraftforge.registries.RegistryObject;
 | 
			
		||||
 | 
			
		||||
import java.util.function.BiConsumer;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,11 +28,11 @@ import net.minecraft.world.level.storage.loot.entries.LootTableReference;
 | 
			
		||||
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
 | 
			
		||||
import net.minecraftforge.event.*;
 | 
			
		||||
import net.minecraftforge.event.entity.player.PlayerContainerEvent;
 | 
			
		||||
import net.minecraftforge.event.server.ServerStartedEvent;
 | 
			
		||||
import net.minecraftforge.event.server.ServerStartingEvent;
 | 
			
		||||
import net.minecraftforge.event.server.ServerStoppedEvent;
 | 
			
		||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
 | 
			
		||||
import net.minecraftforge.fml.common.Mod;
 | 
			
		||||
import net.minecraftforge.fmlserverevents.FMLServerStartedEvent;
 | 
			
		||||
import net.minecraftforge.fmlserverevents.FMLServerStartingEvent;
 | 
			
		||||
import net.minecraftforge.fmlserverevents.FMLServerStoppedEvent;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
@@ -84,7 +84,7 @@ public final class CommonHooks
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SubscribeEvent
 | 
			
		||||
    public static void onServerStarting( FMLServerStartingEvent event )
 | 
			
		||||
    public static void onServerStarting( ServerStartingEvent event )
 | 
			
		||||
    {
 | 
			
		||||
        MinecraftServer server = event.getServer();
 | 
			
		||||
        if( server instanceof DedicatedServer dediServer && dediServer.getProperties().enableJmxMonitoring )
 | 
			
		||||
@@ -94,7 +94,7 @@ public final class CommonHooks
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SubscribeEvent
 | 
			
		||||
    public static void onServerStarted( FMLServerStartedEvent event )
 | 
			
		||||
    public static void onServerStarted( ServerStartedEvent event )
 | 
			
		||||
    {
 | 
			
		||||
        ComputerCraft.serverComputerRegistry.reset();
 | 
			
		||||
        WirelessNetwork.resetNetworks();
 | 
			
		||||
@@ -104,7 +104,7 @@ public final class CommonHooks
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SubscribeEvent
 | 
			
		||||
    public static void onServerStopped( FMLServerStoppedEvent event )
 | 
			
		||||
    public static void onServerStopped( ServerStoppedEvent event )
 | 
			
		||||
    {
 | 
			
		||||
        ComputerCraft.serverComputerRegistry.reset();
 | 
			
		||||
        WirelessNetwork.resetNetworks();
 | 
			
		||||
 
 | 
			
		||||
@@ -96,11 +96,11 @@ import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
 | 
			
		||||
import net.minecraftforge.fml.common.Mod;
 | 
			
		||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
 | 
			
		||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
 | 
			
		||||
import net.minecraftforge.fmllegacy.RegistryObject;
 | 
			
		||||
import net.minecraftforge.items.CapabilityItemHandler;
 | 
			
		||||
import net.minecraftforge.registries.DeferredRegister;
 | 
			
		||||
import net.minecraftforge.registries.ForgeRegistries;
 | 
			
		||||
import net.minecraftforge.registries.RegistryBuilder;
 | 
			
		||||
import net.minecraftforge.registries.RegistryObject;
 | 
			
		||||
 | 
			
		||||
import java.util.function.BiFunction;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ import net.minecraftforge.api.distmarker.Dist;
 | 
			
		||||
import net.minecraftforge.client.event.ClientChatEvent;
 | 
			
		||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
 | 
			
		||||
import net.minecraftforge.fml.common.Mod;
 | 
			
		||||
import net.minecraftforge.fmllegacy.server.ServerLifecycleHooks;
 | 
			
		||||
import net.minecraftforge.server.ServerLifecycleHooks;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ import net.minecraft.world.level.block.entity.BlockEntity;
 | 
			
		||||
import net.minecraft.world.level.block.entity.BlockEntityType;
 | 
			
		||||
import net.minecraft.world.level.block.state.BlockState;
 | 
			
		||||
import net.minecraft.world.phys.BlockHitResult;
 | 
			
		||||
import net.minecraftforge.fmllegacy.RegistryObject;
 | 
			
		||||
import net.minecraftforge.registries.RegistryObject;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
 
 | 
			
		||||
@@ -12,11 +12,11 @@ import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
 | 
			
		||||
import net.minecraft.world.InteractionHand;
 | 
			
		||||
import net.minecraft.world.InteractionResult;
 | 
			
		||||
import net.minecraft.world.entity.player.Player;
 | 
			
		||||
import net.minecraft.world.level.block.Block;
 | 
			
		||||
import net.minecraft.world.level.block.entity.BlockEntity;
 | 
			
		||||
import net.minecraft.world.level.block.entity.BlockEntityType;
 | 
			
		||||
import net.minecraft.world.level.block.state.BlockState;
 | 
			
		||||
import net.minecraft.world.phys.BlockHitResult;
 | 
			
		||||
import net.minecraftforge.common.util.Constants;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
@@ -36,7 +36,7 @@ public abstract class TileGeneric extends BlockEntity
 | 
			
		||||
        setChanged();
 | 
			
		||||
        BlockPos pos = getBlockPos();
 | 
			
		||||
        BlockState state = getBlockState();
 | 
			
		||||
        getLevel().sendBlockUpdated( pos, state, state, Constants.BlockFlags.DEFAULT );
 | 
			
		||||
        getLevel().sendBlockUpdated( pos, state, state, Block.UPDATE_ALL );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
@@ -76,7 +76,8 @@ public abstract class TileGeneric extends BlockEntity
 | 
			
		||||
    @Override
 | 
			
		||||
    public final void onDataPacket( Connection net, ClientboundBlockEntityDataPacket packet )
 | 
			
		||||
    {
 | 
			
		||||
        if( packet.getType() == 0 ) handleUpdateTag( packet.getTag() );
 | 
			
		||||
        var tag = packet.getTag();
 | 
			
		||||
        if( tag != null ) handleUpdateTag( tag );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ import net.minecraft.world.level.block.state.StateDefinition;
 | 
			
		||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
 | 
			
		||||
import net.minecraft.world.level.block.state.properties.DirectionProperty;
 | 
			
		||||
import net.minecraft.world.level.block.state.properties.EnumProperty;
 | 
			
		||||
import net.minecraftforge.fmllegacy.RegistryObject;
 | 
			
		||||
import net.minecraftforge.registries.RegistryObject;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ import net.minecraft.world.level.storage.loot.LootContext;
 | 
			
		||||
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
 | 
			
		||||
import net.minecraft.world.phys.HitResult;
 | 
			
		||||
import net.minecraft.world.phys.Vec3;
 | 
			
		||||
import net.minecraftforge.fmllegacy.RegistryObject;
 | 
			
		||||
import net.minecraftforge.registries.RegistryObject;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
@@ -119,7 +119,7 @@ public abstract class BlockComputerBase<T extends TileComputerBase> extends Bloc
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
    @Override
 | 
			
		||||
    public ItemStack getPickBlock( BlockState state, HitResult target, BlockGetter world, BlockPos pos, Player player )
 | 
			
		||||
    public ItemStack getCloneItemStack( BlockState state, HitResult target, BlockGetter world, BlockPos pos, Player player )
 | 
			
		||||
    {
 | 
			
		||||
        BlockEntity tile = world.getBlockEntity( pos );
 | 
			
		||||
        if( tile instanceof TileComputerBase )
 | 
			
		||||
@@ -128,7 +128,7 @@ public abstract class BlockComputerBase<T extends TileComputerBase> extends Bloc
 | 
			
		||||
            if( !result.isEmpty() ) return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return super.getPickBlock( state, target, world, pos, player );
 | 
			
		||||
        return super.getCloneItemStack( state, target, world, pos, player );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -188,16 +188,15 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
 | 
			
		||||
 | 
			
		||||
    protected abstract void updateBlockState( ComputerState newState );
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
    @Override
 | 
			
		||||
    public CompoundTag save( @Nonnull CompoundTag nbt )
 | 
			
		||||
    public void saveAdditional( @Nonnull CompoundTag nbt )
 | 
			
		||||
    {
 | 
			
		||||
        // Save ID, label and power state
 | 
			
		||||
        if( computerID >= 0 ) nbt.putInt( NBT_ID, computerID );
 | 
			
		||||
        if( label != null ) nbt.putString( NBT_LABEL, label );
 | 
			
		||||
        nbt.putBoolean( NBT_ON, on );
 | 
			
		||||
 | 
			
		||||
        return super.save( nbt );
 | 
			
		||||
        super.saveAdditional( nbt );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -388,7 +387,7 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
 | 
			
		||||
    @Override
 | 
			
		||||
    public final ClientboundBlockEntityDataPacket getUpdatePacket()
 | 
			
		||||
    {
 | 
			
		||||
        return new ClientboundBlockEntityDataPacket( worldPosition, 0, getUpdateTag() );
 | 
			
		||||
        return ClientboundBlockEntityDataPacket.create( this );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ import net.minecraft.server.MinecraftServer;
 | 
			
		||||
import net.minecraft.world.entity.player.Player;
 | 
			
		||||
import net.minecraft.world.inventory.AbstractContainerMenu;
 | 
			
		||||
import net.minecraft.world.level.Level;
 | 
			
		||||
import net.minecraftforge.fmllegacy.server.ServerLifecycleHooks;
 | 
			
		||||
import net.minecraftforge.server.ServerLifecycleHooks;
 | 
			
		||||
import net.minecraftforge.versions.mcp.MCPVersion;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 
 | 
			
		||||
@@ -16,11 +16,11 @@ import net.minecraft.world.entity.player.Player;
 | 
			
		||||
import net.minecraft.world.level.Level;
 | 
			
		||||
import net.minecraft.world.level.chunk.LevelChunk;
 | 
			
		||||
import net.minecraft.world.phys.Vec3;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkDirection;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkRegistry;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.PacketDistributor;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.simple.SimpleChannel;
 | 
			
		||||
import net.minecraftforge.network.NetworkDirection;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkRegistry;
 | 
			
		||||
import net.minecraftforge.network.PacketDistributor;
 | 
			
		||||
import net.minecraftforge.network.simple.SimpleChannel;
 | 
			
		||||
 | 
			
		||||
import java.util.function.Function;
 | 
			
		||||
import java.util.function.Supplier;
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
package dan200.computercraft.shared.network;
 | 
			
		||||
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ import dan200.computercraft.shared.command.text.TableBuilder;
 | 
			
		||||
import dan200.computercraft.shared.network.NetworkMessage;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraft.network.chat.Component;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import dan200.computercraft.shared.computer.core.ComputerState;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.ServerComputer;
 | 
			
		||||
import net.minecraft.nbt.CompoundTag;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ package dan200.computercraft.shared.network.client;
 | 
			
		||||
 | 
			
		||||
import dan200.computercraft.ComputerCraft;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
public class ComputerDeletedClientMessage extends ComputerClientMessage
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
package dan200.computercraft.shared.network.client;
 | 
			
		||||
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ import net.minecraft.client.player.LocalPlayer;
 | 
			
		||||
import net.minecraft.core.BlockPos;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraft.world.level.block.entity.BlockEntity;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ import net.minecraft.network.chat.TextComponent;
 | 
			
		||||
import net.minecraft.sounds.SoundEvent;
 | 
			
		||||
import net.minecraftforge.api.distmarker.Dist;
 | 
			
		||||
import net.minecraftforge.api.distmarker.OnlyIn;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraft.world.phys.Vec3;
 | 
			
		||||
import net.minecraftforge.api.distmarker.Dist;
 | 
			
		||||
import net.minecraftforge.api.distmarker.OnlyIn;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import java.nio.ByteBuffer;
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraft.world.phys.Vec3;
 | 
			
		||||
import net.minecraftforge.api.distmarker.Dist;
 | 
			
		||||
import net.minecraftforge.api.distmarker.OnlyIn;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ import net.minecraft.resources.ResourceLocation;
 | 
			
		||||
import net.minecraft.world.phys.Vec3;
 | 
			
		||||
import net.minecraftforge.api.distmarker.Dist;
 | 
			
		||||
import net.minecraftforge.api.distmarker.OnlyIn;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ import dan200.computercraft.shared.network.NetworkMessage;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.api.distmarker.Dist;
 | 
			
		||||
import net.minecraftforge.api.distmarker.OnlyIn;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ import dan200.computercraft.shared.UpgradeManager;
 | 
			
		||||
import dan200.computercraft.shared.network.NetworkMessage;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraft.resources.ResourceLocation;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.registries.IForgeRegistry;
 | 
			
		||||
import net.minecraftforge.registries.RegistryManager;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ import net.minecraft.client.Minecraft;
 | 
			
		||||
import net.minecraft.client.gui.screens.Screen;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraft.network.chat.Component;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -12,16 +12,16 @@ import net.minecraft.world.entity.player.Inventory;
 | 
			
		||||
import net.minecraft.world.entity.player.Player;
 | 
			
		||||
import net.minecraft.world.inventory.AbstractContainerMenu;
 | 
			
		||||
import net.minecraft.world.inventory.MenuType;
 | 
			
		||||
import net.minecraftforge.common.extensions.IForgeContainerType;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.IContainerFactory;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkHooks;
 | 
			
		||||
import net.minecraftforge.common.extensions.IForgeMenuType;
 | 
			
		||||
import net.minecraftforge.network.IContainerFactory;
 | 
			
		||||
import net.minecraftforge.network.NetworkHooks;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import java.util.function.Consumer;
 | 
			
		||||
import java.util.function.Function;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * An extension over the basic {@link IForgeContainerType}/{@link NetworkHooks#openGui(ServerPlayer, MenuProvider, Consumer)}
 | 
			
		||||
 * An extension over the basic {@link IForgeMenuType}/{@link NetworkHooks#openGui(ServerPlayer, MenuProvider, Consumer)}
 | 
			
		||||
 * hooks, with a more convenient way of reading and writing data.
 | 
			
		||||
 */
 | 
			
		||||
public interface ContainerData
 | 
			
		||||
@@ -35,7 +35,7 @@ public interface ContainerData
 | 
			
		||||
 | 
			
		||||
    static <C extends AbstractContainerMenu, T extends ContainerData> MenuType<C> toType( Function<FriendlyByteBuf, T> reader, Factory<C, T> factory )
 | 
			
		||||
    {
 | 
			
		||||
        return IForgeContainerType.create( ( id, player, data ) -> factory.create( id, player, reader.apply( data ) ) );
 | 
			
		||||
        return IForgeMenuType.create( ( id, player, data ) -> factory.create( id, player, reader.apply( data ) ) );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static <C extends AbstractContainerMenu, T extends ContainerData> MenuType<C> toType( Function<FriendlyByteBuf, T> reader, FixedFactory<C, T> factory )
 | 
			
		||||
@@ -60,7 +60,7 @@ public interface ContainerData
 | 
			
		||||
 | 
			
		||||
        private FixedPointContainerFactory( Function<FriendlyByteBuf, T> reader, FixedFactory<C, T> factory )
 | 
			
		||||
        {
 | 
			
		||||
            MenuType<C> type = this.type = IForgeContainerType.create( this );
 | 
			
		||||
            MenuType<C> type = this.type = IForgeMenuType.create( this );
 | 
			
		||||
            impl = ( id, player, data ) -> factory.create( type, id, player, reader.apply( data ) );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ package dan200.computercraft.shared.network.server;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.IContainerComputer;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.ServerComputer;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ import dan200.computercraft.shared.computer.core.IContainerComputer;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.ServerComputer;
 | 
			
		||||
import dan200.computercraft.shared.network.NetworkMessage;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import dan200.computercraft.shared.computer.core.IContainerComputer;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.ServerComputer;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraft.server.level.ServerPlayer;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import dan200.computercraft.shared.computer.core.IContainerComputer;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.InputState;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.ServerComputer;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import dan200.computercraft.shared.computer.core.IContainerComputer;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.InputState;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.ServerComputer;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ import dan200.computercraft.shared.computer.core.ServerComputer;
 | 
			
		||||
import dan200.computercraft.shared.util.NBTUtil;
 | 
			
		||||
import net.minecraft.nbt.CompoundTag;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import dan200.computercraft.ComputerCraft;
 | 
			
		||||
import dan200.computercraft.shared.computer.core.ServerComputer;
 | 
			
		||||
import dan200.computercraft.shared.network.NetworkMessage;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ import dan200.computercraft.shared.network.NetworkHandler;
 | 
			
		||||
import io.netty.handler.codec.DecoderException;
 | 
			
		||||
import net.minecraft.network.FriendlyByteBuf;
 | 
			
		||||
import net.minecraft.server.level.ServerPlayer;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkEvent;
 | 
			
		||||
import net.minecraftforge.network.NetworkEvent;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import java.nio.ByteBuffer;
 | 
			
		||||
 
 | 
			
		||||
@@ -37,9 +37,9 @@ import net.minecraft.world.level.block.state.BlockState;
 | 
			
		||||
import net.minecraft.world.phys.BlockHitResult;
 | 
			
		||||
import net.minecraftforge.common.capabilities.Capability;
 | 
			
		||||
import net.minecraftforge.common.util.LazyOptional;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkHooks;
 | 
			
		||||
import net.minecraftforge.items.IItemHandlerModifiable;
 | 
			
		||||
import net.minecraftforge.items.wrapper.InvWrapper;
 | 
			
		||||
import net.minecraftforge.network.NetworkHooks;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
@@ -137,9 +137,8 @@ public final class TileDiskDrive extends TileGeneric implements DefaultInventory
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
    @Override
 | 
			
		||||
    public CompoundTag save( @Nonnull CompoundTag nbt )
 | 
			
		||||
    public void saveAdditional( @Nonnull CompoundTag nbt )
 | 
			
		||||
    {
 | 
			
		||||
        if( customName != null ) nbt.putString( NBT_NAME, Component.Serializer.toJson( customName ) );
 | 
			
		||||
 | 
			
		||||
@@ -149,7 +148,7 @@ public final class TileDiskDrive extends TileGeneric implements DefaultInventory
 | 
			
		||||
            diskStack.save( item );
 | 
			
		||||
            nbt.put( NBT_ITEM, item );
 | 
			
		||||
        }
 | 
			
		||||
        return super.save( nbt );
 | 
			
		||||
        super.saveAdditional( nbt );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void serverTick()
 | 
			
		||||
 
 | 
			
		||||
@@ -60,9 +60,9 @@ public class ItemData
 | 
			
		||||
            data.put( "maxDamage", stack.getMaxDamage() );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if( stack.getItem().showDurabilityBar( stack ) )
 | 
			
		||||
        if( stack.getItem().isBarVisible( stack ) )
 | 
			
		||||
        {
 | 
			
		||||
            data.put( "durability", stack.getItem().getDurabilityForDisplay( stack ) );
 | 
			
		||||
            data.put( "durability", stack.getItem().getBarWidth( stack ) / 13.0 );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        data.put( "tags", DataHelpers.getTags( stack.getItem().getTags() ) );
 | 
			
		||||
 
 | 
			
		||||
@@ -98,7 +98,7 @@ public class BlockCable extends BlockGeneric implements SimpleWaterloggedBlock
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean removedByPlayer( BlockState state, Level world, BlockPos pos, Player player, boolean willHarvest, FluidState fluid )
 | 
			
		||||
    public boolean onDestroyedByPlayer( BlockState state, Level world, BlockPos pos, Player player, boolean willHarvest, FluidState fluid )
 | 
			
		||||
    {
 | 
			
		||||
        if( state.getValue( CABLE ) && state.getValue( MODEM ).getFacing() != null )
 | 
			
		||||
        {
 | 
			
		||||
@@ -140,12 +140,12 @@ public class BlockCable extends BlockGeneric implements SimpleWaterloggedBlock
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return super.removedByPlayer( state, world, pos, player, willHarvest, fluid );
 | 
			
		||||
        return super.onDestroyedByPlayer( state, world, pos, player, willHarvest, fluid );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
    @Override
 | 
			
		||||
    public ItemStack getPickBlock( BlockState state, HitResult hit, BlockGetter world, BlockPos pos, Player player )
 | 
			
		||||
    public ItemStack getCloneItemStack( BlockState state, HitResult hit, BlockGetter world, BlockPos pos, Player player )
 | 
			
		||||
    {
 | 
			
		||||
        Direction modem = state.getValue( MODEM ).getFacing();
 | 
			
		||||
        boolean cable = state.getValue( CABLE );
 | 
			
		||||
 
 | 
			
		||||
@@ -292,13 +292,12 @@ public class TileCable extends TileGeneric
 | 
			
		||||
        peripheral.read( nbt, "" );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
    @Override
 | 
			
		||||
    public CompoundTag save( CompoundTag nbt )
 | 
			
		||||
    public void saveAdditional( CompoundTag nbt )
 | 
			
		||||
    {
 | 
			
		||||
        nbt.putBoolean( NBT_PERIPHERAL_ENABLED, peripheralAccessAllowed );
 | 
			
		||||
        peripheral.write( nbt, "" );
 | 
			
		||||
        return super.save( nbt );
 | 
			
		||||
        super.saveAdditional( nbt );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void updateBlockState()
 | 
			
		||||
@@ -346,7 +345,7 @@ public class TileCable extends TileGeneric
 | 
			
		||||
        for( Direction facing : DirectionUtil.FACINGS )
 | 
			
		||||
        {
 | 
			
		||||
            BlockPos offset = current.relative( facing );
 | 
			
		||||
            if( !world.isAreaLoaded( offset, 0 ) ) continue;
 | 
			
		||||
            if( !world.isLoaded( offset ) ) continue;
 | 
			
		||||
 | 
			
		||||
            LazyOptional<IWiredElement> element = ComputerCraftAPI.getWiredElementAt( world, offset, facing.getOpposite() );
 | 
			
		||||
            if( !element.isPresent() ) continue;
 | 
			
		||||
 
 | 
			
		||||
@@ -241,13 +241,12 @@ public class TileWiredModemFull extends TileGeneric
 | 
			
		||||
        for( int i = 0; i < peripherals.length; i++ ) peripherals[i].read( nbt, Integer.toString( i ) );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
    @Override
 | 
			
		||||
    public CompoundTag save( CompoundTag nbt )
 | 
			
		||||
    public void saveAdditional( CompoundTag nbt )
 | 
			
		||||
    {
 | 
			
		||||
        nbt.putBoolean( NBT_PERIPHERAL_ENABLED, peripheralAccessAllowed );
 | 
			
		||||
        for( int i = 0; i < peripherals.length; i++ ) peripherals[i].write( nbt, Integer.toString( i ) );
 | 
			
		||||
        return super.save( nbt );
 | 
			
		||||
        super.saveAdditional( nbt );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void updateBlockState()
 | 
			
		||||
@@ -306,7 +305,7 @@ public class TileWiredModemFull extends TileGeneric
 | 
			
		||||
        for( Direction facing : DirectionUtil.FACINGS )
 | 
			
		||||
        {
 | 
			
		||||
            BlockPos offset = current.relative( facing );
 | 
			
		||||
            if( !world.isAreaLoaded( offset, 0 ) ) continue;
 | 
			
		||||
            if( !world.isLoaded( offset ) ) continue;
 | 
			
		||||
 | 
			
		||||
            LazyOptional<IWiredElement> element = ComputerCraftAPI.getWiredElementAt( world, offset, facing.getOpposite() );
 | 
			
		||||
            if( !element.isPresent() ) continue;
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ import net.minecraft.world.level.block.state.properties.DirectionProperty;
 | 
			
		||||
import net.minecraft.world.level.material.FluidState;
 | 
			
		||||
import net.minecraft.world.phys.shapes.CollisionContext;
 | 
			
		||||
import net.minecraft.world.phys.shapes.VoxelShape;
 | 
			
		||||
import net.minecraftforge.fmllegacy.RegistryObject;
 | 
			
		||||
import net.minecraftforge.registries.RegistryObject;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
 | 
			
		||||
import net.minecraft.world.level.block.state.properties.DirectionProperty;
 | 
			
		||||
import net.minecraft.world.level.block.state.properties.EnumProperty;
 | 
			
		||||
import net.minecraftforge.common.util.FakePlayer;
 | 
			
		||||
import net.minecraftforge.fmllegacy.RegistryObject;
 | 
			
		||||
import net.minecraftforge.registries.RegistryObject;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
 
 | 
			
		||||
@@ -101,7 +101,7 @@ public final class MonitorWatcher
 | 
			
		||||
            if( !(world instanceof ServerLevel) ) continue;
 | 
			
		||||
 | 
			
		||||
            LevelChunk chunk = world.getChunkAt( pos );
 | 
			
		||||
            if( ((ServerLevel) world).getChunkSource().chunkMap.getPlayers( chunk.getPos(), false ).findAny().isEmpty() )
 | 
			
		||||
            if( ((ServerLevel) world).getChunkSource().chunkMap.getPlayers( chunk.getPos(), false ).isEmpty() )
 | 
			
		||||
            {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -127,15 +127,14 @@ public class TileMonitor extends TileGeneric
 | 
			
		||||
        return InteractionResult.PASS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
    @Override
 | 
			
		||||
    public CompoundTag save( CompoundTag tag )
 | 
			
		||||
    public void saveAdditional( CompoundTag tag )
 | 
			
		||||
    {
 | 
			
		||||
        tag.putInt( NBT_X, xIndex );
 | 
			
		||||
        tag.putInt( NBT_Y, yIndex );
 | 
			
		||||
        tag.putInt( NBT_WIDTH, width );
 | 
			
		||||
        tag.putInt( NBT_HEIGHT, height );
 | 
			
		||||
        return super.save( tag );
 | 
			
		||||
        super.saveAdditional( tag );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -261,7 +260,7 @@ public class TileMonitor extends TileGeneric
 | 
			
		||||
    @Override
 | 
			
		||||
    public final ClientboundBlockEntityDataPacket getUpdatePacket()
 | 
			
		||||
    {
 | 
			
		||||
        return new ClientboundBlockEntityDataPacket( worldPosition, 0, getUpdateTag() );
 | 
			
		||||
        return ClientboundBlockEntityDataPacket.create( this );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
@@ -398,7 +397,7 @@ public class TileMonitor extends TileGeneric
 | 
			
		||||
        BlockPos pos = toWorldPos( x, y );
 | 
			
		||||
 | 
			
		||||
        Level world = getLevel();
 | 
			
		||||
        if( world == null || !world.isAreaLoaded( pos, 0 ) ) return MonitorState.UNLOADED;
 | 
			
		||||
        if( world == null || !world.isLoaded( pos ) ) return MonitorState.UNLOADED;
 | 
			
		||||
 | 
			
		||||
        BlockEntity tile = world.getBlockEntity( pos );
 | 
			
		||||
        if( !(tile instanceof TileMonitor monitor) ) return MonitorState.MISSING;
 | 
			
		||||
 
 | 
			
		||||
@@ -31,10 +31,10 @@ import net.minecraft.world.phys.BlockHitResult;
 | 
			
		||||
import net.minecraft.world.phys.Vec3;
 | 
			
		||||
import net.minecraftforge.common.capabilities.Capability;
 | 
			
		||||
import net.minecraftforge.common.util.LazyOptional;
 | 
			
		||||
import net.minecraftforge.fmllegacy.network.NetworkHooks;
 | 
			
		||||
import net.minecraftforge.items.IItemHandler;
 | 
			
		||||
import net.minecraftforge.items.wrapper.InvWrapper;
 | 
			
		||||
import net.minecraftforge.items.wrapper.SidedInvWrapper;
 | 
			
		||||
import net.minecraftforge.network.NetworkHooks;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
@@ -113,9 +113,8 @@ public final class TilePrinter extends TileGeneric implements DefaultSidedInvent
 | 
			
		||||
        ContainerHelper.loadAllItems( nbt, inventory );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
    @Override
 | 
			
		||||
    public CompoundTag save( @Nonnull CompoundTag nbt )
 | 
			
		||||
    public void saveAdditional( @Nonnull CompoundTag nbt )
 | 
			
		||||
    {
 | 
			
		||||
        if( customName != null ) nbt.putString( NBT_NAME, Component.Serializer.toJson( customName ) );
 | 
			
		||||
 | 
			
		||||
@@ -130,7 +129,7 @@ public final class TilePrinter extends TileGeneric implements DefaultSidedInvent
 | 
			
		||||
        // Write inventory
 | 
			
		||||
        ContainerHelper.saveAllItems( nbt, inventory );
 | 
			
		||||
 | 
			
		||||
        return super.save( nbt );
 | 
			
		||||
        super.saveAdditional( nbt );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    boolean isPrinting()
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import dan200.computercraft.api.peripheral.IComputerAccess;
 | 
			
		||||
import dan200.computercraft.shared.network.NetworkHandler;
 | 
			
		||||
import dan200.computercraft.shared.network.client.SpeakerStopClientMessage;
 | 
			
		||||
import net.minecraft.server.MinecraftServer;
 | 
			
		||||
import net.minecraftforge.fmllegacy.server.ServerLifecycleHooks;
 | 
			
		||||
import net.minecraftforge.server.ServerLifecycleHooks;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ import net.minecraft.world.phys.Vec3;
 | 
			
		||||
import net.minecraft.world.phys.shapes.CollisionContext;
 | 
			
		||||
import net.minecraft.world.phys.shapes.Shapes;
 | 
			
		||||
import net.minecraft.world.phys.shapes.VoxelShape;
 | 
			
		||||
import net.minecraftforge.fmllegacy.RegistryObject;
 | 
			
		||||
import net.minecraftforge.registries.RegistryObject;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
 
 | 
			
		||||
@@ -289,9 +289,8 @@ public class TileTurtle extends TileComputerBase implements ITurtleTile, Default
 | 
			
		||||
        brain.readFromNBT( nbt );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nonnull
 | 
			
		||||
    @Override
 | 
			
		||||
    public CompoundTag save( @Nonnull CompoundTag nbt )
 | 
			
		||||
    public void saveAdditional( @Nonnull CompoundTag nbt )
 | 
			
		||||
    {
 | 
			
		||||
        // Write inventory
 | 
			
		||||
        ListTag nbttaglist = new ListTag();
 | 
			
		||||
@@ -310,7 +309,7 @@ public class TileTurtle extends TileComputerBase implements ITurtleTile, Default
 | 
			
		||||
        // Write brain
 | 
			
		||||
        nbt = brain.writeToNBT( nbt );
 | 
			
		||||
 | 
			
		||||
        return super.save( nbt );
 | 
			
		||||
        super.saveAdditional( nbt );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -307,7 +307,7 @@ public class TurtleBrain implements ITurtleAccess
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Ensure the chunk is loaded
 | 
			
		||||
        if( !world.isAreaLoaded( pos, 0 ) ) return false;
 | 
			
		||||
        if( !world.isLoaded( pos ) ) return false;
 | 
			
		||||
 | 
			
		||||
        // Ensure we're inside the world border
 | 
			
		||||
        if( !world.getWorldBorder().isWithinBounds( pos ) ) return false;
 | 
			
		||||
 
 | 
			
		||||
@@ -137,7 +137,7 @@ public class TurtleMoveCommand implements ITurtleCommand
 | 
			
		||||
            return TurtleCommandResult.failure( "Cannot enter protected area" );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if( !world.isAreaLoaded( position, 0 ) ) return TurtleCommandResult.failure( "Cannot leave loaded world" );
 | 
			
		||||
        if( !world.isLoaded( position ) ) return TurtleCommandResult.failure( "Cannot leave loaded world" );
 | 
			
		||||
        if( !world.getWorldBorder().isWithinBounds( position ) )
 | 
			
		||||
        {
 | 
			
		||||
            return TurtleCommandResult.failure( "Cannot pass the world border" );
 | 
			
		||||
 
 | 
			
		||||
@@ -27,13 +27,13 @@ import net.minecraft.world.item.*;
 | 
			
		||||
import net.minecraft.world.item.context.BlockPlaceContext;
 | 
			
		||||
import net.minecraft.world.item.context.UseOnContext;
 | 
			
		||||
import net.minecraft.world.level.Level;
 | 
			
		||||
import net.minecraft.world.level.block.Block;
 | 
			
		||||
import net.minecraft.world.level.block.entity.BlockEntity;
 | 
			
		||||
import net.minecraft.world.level.block.entity.SignBlockEntity;
 | 
			
		||||
import net.minecraft.world.level.block.state.BlockState;
 | 
			
		||||
import net.minecraft.world.phys.BlockHitResult;
 | 
			
		||||
import net.minecraft.world.phys.Vec3;
 | 
			
		||||
import net.minecraftforge.common.ForgeHooks;
 | 
			
		||||
import net.minecraftforge.common.util.Constants;
 | 
			
		||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
 | 
			
		||||
import net.minecraftforge.eventbus.api.Event.Result;
 | 
			
		||||
import net.minecraftforge.items.IItemHandler;
 | 
			
		||||
@@ -321,7 +321,7 @@ public class TurtlePlaceCommand implements ITurtleCommand
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        signTile.setChanged();
 | 
			
		||||
        world.sendBlockUpdated( tile.getBlockPos(), tile.getBlockState(), tile.getBlockState(), Constants.BlockFlags.DEFAULT );
 | 
			
		||||
        world.sendBlockUpdated( tile.getBlockPos(), tile.getBlockState(), tile.getBlockState(), Block.UPDATE_ALL );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static class ErrorMessage
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ import net.minecraft.world.item.crafting.Recipe;
 | 
			
		||||
import net.minecraft.world.item.crafting.RecipeType;
 | 
			
		||||
import net.minecraft.world.level.Level;
 | 
			
		||||
import net.minecraftforge.common.ForgeHooks;
 | 
			
		||||
import net.minecraftforge.fmllegacy.hooks.BasicEventHooks;
 | 
			
		||||
import net.minecraftforge.event.ForgeEventFactory;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Nonnull;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
@@ -91,7 +91,7 @@ public class TurtleInventoryCrafting extends CraftingContainer
 | 
			
		||||
            results.add( result );
 | 
			
		||||
 | 
			
		||||
            result.onCraftedBy( world, player, result.getCount() );
 | 
			
		||||
            BasicEventHooks.firePlayerCraftingEvent( player, result, this );
 | 
			
		||||
            ForgeEventFactory.firePlayerCraftingEvent( player, result, this );
 | 
			
		||||
 | 
			
		||||
            ForgeHooks.setCraftingPlayer( player );
 | 
			
		||||
            NonNullList<ItemStack> remainders = recipe.getRemainingItems( this );
 | 
			
		||||
 
 | 
			
		||||
@@ -255,7 +255,7 @@ public class TurtleTool extends AbstractTurtleUpgrade
 | 
			
		||||
 | 
			
		||||
        // Destroy the block
 | 
			
		||||
        boolean canHarvest = state.canHarvestBlock( world, blockPosition, turtlePlayer );
 | 
			
		||||
        boolean canBreak = state.removedByPlayer( world, blockPosition, turtlePlayer, canHarvest, fluidState );
 | 
			
		||||
        boolean canBreak = state.onDestroyedByPlayer( world, blockPosition, turtlePlayer, canHarvest, fluidState );
 | 
			
		||||
        if( canBreak ) state.getBlock().destroy( world, blockPosition, state );
 | 
			
		||||
        if( canHarvest && canBreak )
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import com.google.gson.reflect.TypeToken;
 | 
			
		||||
import dan200.computercraft.ComputerCraft;
 | 
			
		||||
import net.minecraft.server.MinecraftServer;
 | 
			
		||||
import net.minecraft.world.level.storage.LevelResource;
 | 
			
		||||
import net.minecraftforge.fmllegacy.server.ServerLifecycleHooks;
 | 
			
		||||
import net.minecraftforge.server.ServerLifecycleHooks;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.Reader;
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,8 @@ import dan200.computercraft.ComputerCraft;
 | 
			
		||||
import dan200.computercraft.shared.common.TileGeneric;
 | 
			
		||||
import net.minecraft.core.BlockPos;
 | 
			
		||||
import net.minecraft.world.level.Level;
 | 
			
		||||
import net.minecraft.world.level.TickList;
 | 
			
		||||
import net.minecraft.world.level.LevelAccessor;
 | 
			
		||||
import net.minecraft.world.level.block.Block;
 | 
			
		||||
import net.minecraft.world.level.block.entity.BlockEntity;
 | 
			
		||||
import net.minecraftforge.event.TickEvent;
 | 
			
		||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
 | 
			
		||||
@@ -21,7 +22,7 @@ import java.util.Iterator;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A thread-safe version of {@link TickList#scheduleTick(BlockPos, Object, int)}.
 | 
			
		||||
 * A thread-safe version of {@link LevelAccessor#scheduleTick(BlockPos, Block, int)}.
 | 
			
		||||
 *
 | 
			
		||||
 * We use this when modems and other peripherals change a block in a different thread.
 | 
			
		||||
 */
 | 
			
		||||
@@ -58,9 +59,9 @@ public final class TickScheduler
 | 
			
		||||
            Level world = tile.getLevel();
 | 
			
		||||
            BlockPos pos = tile.getBlockPos();
 | 
			
		||||
 | 
			
		||||
            if( world != null && pos != null && world.isAreaLoaded( pos, 0 ) && world.getBlockEntity( pos ) == tile )
 | 
			
		||||
            if( world != null && pos != null && world.isLoaded( pos ) && world.getBlockEntity( pos ) == tile )
 | 
			
		||||
            {
 | 
			
		||||
                world.getBlockTicks().scheduleTick( pos, tile.getBlockState().getBlock(), 0 );
 | 
			
		||||
                world.scheduleTick( pos, tile.getBlockState().getBlock(), 0 );
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ public final class WaterloggableHelpers
 | 
			
		||||
    {
 | 
			
		||||
        if( state.getValue( WATERLOGGED ) )
 | 
			
		||||
        {
 | 
			
		||||
            world.getLiquidTicks().scheduleTick( pos, Fluids.WATER, Fluids.WATER.getTickDelay( world ) );
 | 
			
		||||
            world.scheduleTick( pos, Fluids.WATER, Fluids.WATER.getTickDelay( world ) );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
modLoader="javafml"
 | 
			
		||||
loaderVersion="[37,38)"
 | 
			
		||||
loaderVersion="[39,40)"
 | 
			
		||||
 | 
			
		||||
issueTrackerURL="https://github.com/cc-tweaked/CC-Tweaked/issues"
 | 
			
		||||
logoFile="pack.png"
 | 
			
		||||
@@ -21,6 +21,6 @@ CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles a
 | 
			
		||||
[[dependencies.computercraft]]
 | 
			
		||||
    modId="forge"
 | 
			
		||||
    mandatory=true
 | 
			
		||||
    versionRange="[37.0.85,38)"
 | 
			
		||||
    versionRange="[39.0.0,40)"
 | 
			
		||||
    ordering="NONE"
 | 
			
		||||
    side="BOTH"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ import net.minecraft.world.level.levelgen.WorldGenSettings;
 | 
			
		||||
import net.minecraft.world.level.levelgen.flat.FlatLayerInfo;
 | 
			
		||||
import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings;
 | 
			
		||||
import net.minecraftforge.api.distmarker.Dist;
 | 
			
		||||
import net.minecraftforge.client.event.GuiScreenEvent;
 | 
			
		||||
import net.minecraftforge.client.event.ScreenEvent;
 | 
			
		||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
 | 
			
		||||
import net.minecraftforge.fml.common.Mod;
 | 
			
		||||
import org.apache.logging.log4j.LogManager;
 | 
			
		||||
@@ -50,9 +50,9 @@ public final class ClientHooks
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SubscribeEvent
 | 
			
		||||
    public static void onGuiInit( GuiScreenEvent.InitGuiEvent event )
 | 
			
		||||
    public static void onGuiInit( ScreenEvent.InitScreenEvent event )
 | 
			
		||||
    {
 | 
			
		||||
        if( triggered || !(event.getGui() instanceof TitleScreen) ) return;
 | 
			
		||||
        if( triggered || !(event.getScreen() instanceof TitleScreen) ) return;
 | 
			
		||||
        triggered = true;
 | 
			
		||||
 | 
			
		||||
        ClientHooks.openWorld();
 | 
			
		||||
@@ -93,7 +93,7 @@ public final class ClientHooks
 | 
			
		||||
 | 
			
		||||
            WorldGenSettings generator = new WorldGenSettings( 0, false, false, withOverworld(
 | 
			
		||||
                dimensions,
 | 
			
		||||
                DimensionType.defaultDimensions( dimensions, biomes, registries.registryOrThrow( Registry.NOISE_GENERATOR_SETTINGS_REGISTRY ), 0 ),
 | 
			
		||||
                DimensionType.defaultDimensions( registries, 0 ),
 | 
			
		||||
                new FlatLevelSource( flatSettings )
 | 
			
		||||
            ) );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,9 @@
 | 
			
		||||
 */
 | 
			
		||||
package dan200.computercraft.ingame.mod;
 | 
			
		||||
 | 
			
		||||
import dan200.computercraft.ingame.api.Times;
 | 
			
		||||
import net.minecraft.ChatFormatting;
 | 
			
		||||
import net.minecraft.SharedConstants;
 | 
			
		||||
import dan200.computercraft.ingame.api.Times;
 | 
			
		||||
import net.minecraft.client.Minecraft;
 | 
			
		||||
import net.minecraft.commands.CommandSourceStack;
 | 
			
		||||
import net.minecraft.core.BlockPos;
 | 
			
		||||
@@ -21,11 +21,11 @@ import net.minecraft.world.level.block.Rotation;
 | 
			
		||||
import net.minecraft.world.level.levelgen.Heightmap;
 | 
			
		||||
import net.minecraftforge.event.RegisterCommandsEvent;
 | 
			
		||||
import net.minecraftforge.event.TickEvent;
 | 
			
		||||
import net.minecraftforge.event.server.ServerStartedEvent;
 | 
			
		||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
 | 
			
		||||
import net.minecraftforge.fml.common.Mod;
 | 
			
		||||
import net.minecraftforge.fml.loading.FMLLoader;
 | 
			
		||||
import net.minecraftforge.fmllegacy.server.ServerLifecycleHooks;
 | 
			
		||||
import net.minecraftforge.fmlserverevents.FMLServerStartedEvent;
 | 
			
		||||
import net.minecraftforge.server.ServerLifecycleHooks;
 | 
			
		||||
import org.apache.logging.log4j.LogManager;
 | 
			
		||||
import org.apache.logging.log4j.Logger;
 | 
			
		||||
 | 
			
		||||
@@ -49,7 +49,7 @@ public class TestHooks
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SubscribeEvent
 | 
			
		||||
    public static void onServerStarted( FMLServerStartedEvent event )
 | 
			
		||||
    public static void onServerStarted( ServerStartedEvent event )
 | 
			
		||||
    {
 | 
			
		||||
        MinecraftServer server = event.getServer();
 | 
			
		||||
        GameRules rules = server.getGameRules();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user