mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 13:42:59 +00:00 
			
		
		
		
	Merge branch 'mc-1.13.x' into mc-1.14-fabric
This commit is contained in:
		
							
								
								
									
										13
									
								
								build.gradle
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								build.gradle
									
									
									
									
									
								
							| @@ -56,12 +56,6 @@ dependencies { | ||||
|     modCompile "net.fabricmc:fabric-loader:0.4.0+build.121" | ||||
|     modCompile "net.fabricmc:fabric:0.2.7+build.122" | ||||
|  | ||||
|     // compileOnly "mezz.jei:jei-1.13.2:5.0.0.8:api" | ||||
|     // deobfProvided "pl.asie:Charset-Lib:0.5.4.6" | ||||
|     // deobfProvided "MCMultiPart2:MCMultiPart:2.5.3" | ||||
|  | ||||
|     // deobf "mezz.jei:jei-1.13.2:5.0.0.8" | ||||
|  | ||||
|     implementation 'com.google.code.findbugs:jsr305:3.0.2' | ||||
|  | ||||
|     shade 'org.squiddev:Cobalt:0.5.0-SNAPSHOT' | ||||
| @@ -304,7 +298,7 @@ githubRelease { | ||||
|     token project.hasProperty('githubApiKey') ? project.githubApiKey : '' | ||||
|     owner 'SquidDev-CC' | ||||
|     repo 'CC-Tweaked' | ||||
|     targetCommitish (mc_version == "1.12.2" ? "master" : mc_version) | ||||
|     targetCommitish "mc-1.13.x" // TODO: Pull from GrGit | ||||
|  | ||||
|     tagName "v${mc_version}-${mod_version}" | ||||
|     releaseName "[${mc_version}] ${mod_version}" | ||||
| @@ -314,6 +308,11 @@ githubRelease { | ||||
|     releaseAssets.from(jar.archivePath) | ||||
| } | ||||
|  | ||||
| task uploadAll(dependsOn: [uploadArchives, "curseforge", "githubRelease"]) { | ||||
|     group "upload" | ||||
|     description "Uploads to all repositories (Maven, Curse, GitHub release)" | ||||
| } | ||||
|  | ||||
| test { | ||||
|     useJUnitPlatform() | ||||
|     testLogging { | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| # Mod properties | ||||
| mod_version=1.82.1 | ||||
| mod_version=1.82.3 | ||||
|  | ||||
| # Minecraft properties | ||||
| mc_version=1.14 Pre-Release 2 | ||||
|   | ||||
| @@ -9,4 +9,4 @@ pluginManagement { | ||||
|     } | ||||
| } | ||||
|  | ||||
| rootProject.name = "cc-tweaked-${mc_version}" | ||||
| rootProject.name = "cc-tweaked-${mc_version}-fabric" | ||||
|   | ||||
| @@ -69,7 +69,7 @@ public class JarMount implements IMount | ||||
|         // Cleanup any old mounts. It's unlikely that there will be any, but it's best to be safe. | ||||
|         cleanup(); | ||||
|  | ||||
|         if( !jarFile.exists() || jarFile.isDirectory() ) throw new FileNotFoundException(); | ||||
|         if( !jarFile.exists() || jarFile.isDirectory() ) throw new FileNotFoundException( "Cannot find " + jarFile ); | ||||
|  | ||||
|         // Open the zip file | ||||
|         try | ||||
| @@ -85,7 +85,7 @@ public class JarMount implements IMount | ||||
|         if( zip.getEntry( subPath ) == null ) | ||||
|         { | ||||
|             zip.close(); | ||||
|             throw new IOException( "Zip does not contain path" ); | ||||
|             throw new FileNotFoundException( "Zip does not contain path" ); | ||||
|         } | ||||
|  | ||||
|         // We now create a weak reference to this mount. This is automatically added to the appropriate queue. | ||||
|   | ||||
| @@ -242,7 +242,7 @@ public class CobaltLuaMachine implements ILuaMachine | ||||
|                         } | ||||
|                         catch( InterruptedException e ) | ||||
|                         { | ||||
|                             throw new OrphanedThread(); | ||||
|                             throw new InterruptedError( e ); | ||||
|                         } | ||||
|                         catch( LuaException e ) | ||||
|                         { | ||||
|   | ||||
| @@ -70,7 +70,7 @@ public abstract class BlockComputerBase<T extends TileComputerBase> extends Bloc | ||||
|         if( computer == null ) return 0; | ||||
|  | ||||
|         ComputerSide localSide = computerEntity.remapToLocalSide( incomingSide.getOpposite() ); | ||||
|         return computerEntity.isRedstoneBlockedOnSide( localSide ) ? 0 : computer.getRedstoneOutput( localSide ); | ||||
|         return computer.getRedstoneOutput( localSide ); | ||||
|     } | ||||
|  | ||||
|     @Nonnull | ||||
| @@ -91,11 +91,7 @@ public abstract class BlockComputerBase<T extends TileComputerBase> extends Bloc | ||||
|     @Override | ||||
|     public boolean getBundledRedstoneConnectivity( World world, BlockPos pos, Direction side ) | ||||
|     { | ||||
|         BlockEntity entity = world.getBlockEntity( pos ); | ||||
|         if( !(entity instanceof TileComputerBase) ) return false; | ||||
|  | ||||
|         TileComputerBase computerEntity = (TileComputerBase) entity; | ||||
|         return !computerEntity.isRedstoneBlockedOnSide( computerEntity.remapToLocalSide( side ) ); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -109,7 +105,7 @@ public abstract class BlockComputerBase<T extends TileComputerBase> extends Bloc | ||||
|         if( computer == null ) return 0; | ||||
|  | ||||
|         ComputerSide localSide = computerEntity.remapToLocalSide( side ); | ||||
|         return computerEntity.isRedstoneBlockedOnSide( localSide ) ? 0 : computer.getBundledRedstoneOutput( localSide ); | ||||
|         return computer.getBundledRedstoneOutput( localSide ); | ||||
|     } | ||||
|  | ||||
|     @Nonnull | ||||
|   | ||||
| @@ -20,6 +20,9 @@ import dan200.computercraft.shared.computer.core.ServerComputer; | ||||
| import dan200.computercraft.shared.util.DirectionUtil; | ||||
| import dan200.computercraft.shared.util.RedstoneUtil; | ||||
| import joptsimple.internal.Strings; | ||||
| import net.minecraft.block.BlockState; | ||||
| import net.minecraft.block.Blocks; | ||||
| import net.minecraft.block.RedstoneWireBlock; | ||||
| import net.minecraft.block.entity.BlockEntityType; | ||||
| import net.minecraft.entity.player.PlayerEntity; | ||||
| import net.minecraft.item.ItemStack; | ||||
| @@ -33,6 +36,7 @@ import net.minecraft.util.Tickable; | ||||
| import net.minecraft.util.hit.BlockHitResult; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.util.math.Direction; | ||||
| import net.minecraft.world.World; | ||||
|  | ||||
| import javax.annotation.Nonnull; | ||||
| import javax.annotation.Nullable; | ||||
| @@ -207,11 +211,6 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     protected boolean isRedstoneBlockedOnSide( ComputerSide localSide ) | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     protected abstract Direction getDirection(); | ||||
|  | ||||
|     protected ComputerSide remapToLocalSide( Direction globalSide ) | ||||
| @@ -228,17 +227,35 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT | ||||
|     { | ||||
|         Direction offsetSide = dir.getOpposite(); | ||||
|         ComputerSide localDir = remapToLocalSide( dir ); | ||||
|         if( !isRedstoneBlockedOnSide( localDir ) ) | ||||
|         { | ||||
|             computer.setRedstoneInput( localDir, getWorld().getEmittedRedstonePower( offset, dir ) ); | ||||
|             computer.setBundledRedstoneInput( localDir, BundledRedstone.getOutput( getWorld(), offset, offsetSide ) ); | ||||
|         } | ||||
|  | ||||
|         computer.setRedstoneInput( localDir, getRedstoneInput( world, offset, dir ) ); | ||||
|         computer.setBundledRedstoneInput( localDir, BundledRedstone.getOutput( getWorld(), offset, offsetSide ) ); | ||||
|         if( !isPeripheralBlockedOnSide( localDir ) ) | ||||
|         { | ||||
|             computer.setPeripheral( localDir, Peripherals.getPeripheral( getWorld(), offset, offsetSide ) ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets the redstone input for an adjacent block | ||||
|      * | ||||
|      * @param world The world we exist in | ||||
|      * @param pos   The position of the neighbour | ||||
|      * @param side  The side we are reading from | ||||
|      * @return The effective redstone power | ||||
|      * @see net.minecraft.block.RedstoneBlock#method_9991(World, BlockPos, BlockState) | ||||
|      */ | ||||
|     protected static int getRedstoneInput( World world, BlockPos pos, Direction side ) | ||||
|     { | ||||
|         int power = world.getEmittedRedstonePower( pos, side ); | ||||
|         if( power >= 15 ) return power; | ||||
|  | ||||
|         BlockState neighbour = world.getBlockState( pos ); | ||||
|         return neighbour.getBlock() == Blocks.REDSTONE_WIRE | ||||
|             ? Math.max( power, neighbour.get( RedstoneWireBlock.POWER ) ) | ||||
|             : power; | ||||
|     } | ||||
|  | ||||
|     public void updateInput() | ||||
|     { | ||||
|         if( getWorld() == null || getWorld().isClient ) return; | ||||
|   | ||||
| @@ -10,8 +10,10 @@ import dan200.computercraft.ComputerCraft; | ||||
| import dan200.computercraft.api.ComputerCraftAPI; | ||||
| import dan200.computercraft.api.peripheral.IPeripheral; | ||||
| import dan200.computercraft.api.peripheral.IPeripheralTile; | ||||
| import dan200.computercraft.shared.peripheral.common.TilePeripheralBase; | ||||
| import dan200.computercraft.shared.peripheral.modem.wireless.TileAdvancedModem; | ||||
| import dan200.computercraft.shared.peripheral.modem.wireless.TileWirelessModem; | ||||
| import dan200.computercraft.shared.peripheral.monitor.TileMonitor; | ||||
| import mcmultipart.api.addon.IMCMPAddon; | ||||
| import mcmultipart.api.addon.MCMPAddon; | ||||
| import mcmultipart.api.container.IMultipartContainer; | ||||
| @@ -52,7 +54,7 @@ public class MCMPIntegration implements IMCMPAddon | ||||
|     public void registerParts( IMultipartRegistry registry ) | ||||
|     { | ||||
|         // Setup all parts | ||||
|         register( registry, ComputerCraft.Blocks.peripheral, new PartNormalModem() ); | ||||
|         register( registry, ComputerCraft.Blocks.peripheral, new PartPeripheral() ); | ||||
|         register( registry, ComputerCraft.Blocks.advancedModem, new PartAdvancedModem() ); | ||||
|  | ||||
|         // Subscribe to capability events | ||||
| @@ -83,8 +85,11 @@ public class MCMPIntegration implements IMCMPAddon | ||||
|     public static void attach( AttachCapabilitiesEvent<TileEntity> event ) | ||||
|     { | ||||
|         TileEntity tile = event.getObject(); | ||||
|         if( tile instanceof TileAdvancedModem || tile instanceof TileWirelessModem ) | ||||
|         if( tile instanceof TileAdvancedModem || tile instanceof TileWirelessModem | ||||
|             || tile instanceof TilePeripheralBase || tile instanceof TileMonitor ) | ||||
|         { | ||||
|             // We need to attach to modems (obviously), but also any other tile created by BlockPeripheral. Otherwise | ||||
|             // IMultipart.convertToMultipartTile will error. | ||||
|             event.addCapability( CAPABILITY_KEY, new BasicMultipart( tile ) ); | ||||
|         } | ||||
|     } | ||||
| @@ -94,7 +99,10 @@ public class MCMPIntegration implements IMCMPAddon | ||||
|         private final TileEntity tile; | ||||
|         private IMultipartTile wrapped; | ||||
|  | ||||
|         private BasicMultipart( TileEntity tile ) {this.tile = tile;} | ||||
|         private BasicMultipart( TileEntity tile ) | ||||
|         { | ||||
|             this.tile = tile; | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|         public boolean hasCapability( @Nonnull Capability<?> capability, @Nullable Direction facing ) | ||||
|   | ||||
| @@ -10,6 +10,7 @@ import dan200.computercraft.ComputerCraft; | ||||
| import dan200.computercraft.shared.peripheral.common.BlockPeripheral; | ||||
| import dan200.computercraft.shared.peripheral.common.BlockPeripheralVariant; | ||||
| import mcmultipart.api.multipart.IMultipart; | ||||
| import mcmultipart.api.slot.EnumCenterSlot; | ||||
| import mcmultipart.api.slot.EnumFaceSlot; | ||||
| import mcmultipart.api.slot.IPartSlot; | ||||
| import net.minecraft.block.Block; | ||||
| @@ -20,34 +21,41 @@ import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.world.IBlockAccess; | ||||
| import net.minecraft.world.World; | ||||
| 
 | ||||
| public class PartNormalModem implements IMultipart | ||||
| import javax.annotation.Nonnull; | ||||
| 
 | ||||
| public class PartPeripheral implements IMultipart | ||||
| { | ||||
|     @Override | ||||
|     public IPartSlot getSlotForPlacement( World world, BlockPos pos, IBlockState state, Direction facing, float hitX, float hitY, float hitZ, EntityLivingBase placer ) | ||||
|     { | ||||
|         return EnumFaceSlot.fromFace( getFacing( state ) ); | ||||
|         return getSlot( state ); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public IPartSlot getSlotFromWorld( IBlockAccess world, BlockPos pos, IBlockState state ) | ||||
|     { | ||||
|         return EnumFaceSlot.fromFace( getFacing( state ) ); | ||||
|         return getSlot( state ); | ||||
|     } | ||||
| 
 | ||||
|     private Direction getFacing( IBlockState state ) | ||||
|     @Nonnull | ||||
|     private static IPartSlot getSlot( IBlockState state ) | ||||
|     { | ||||
|         BlockPeripheralVariant type = state.getValue( BlockPeripheral.VARIANT ); | ||||
|         if( type == BlockPeripheralVariant.WirelessModemUpOn || type == BlockPeripheralVariant.WirelessModemUpOff ) | ||||
|         { | ||||
|             return Direction.UP; | ||||
|             return EnumFaceSlot.UP; | ||||
|         } | ||||
|         else if( type == BlockPeripheralVariant.WirelessModemDownOn || type == BlockPeripheralVariant.WirelessModemDownOff ) | ||||
|         { | ||||
|             return Direction.UP; | ||||
|             return EnumFaceSlot.DOWN; | ||||
|         } | ||||
|         else if( type == BlockPeripheralVariant.WirelessModemOff || type == BlockPeripheralVariant.WirelessModemOn ) | ||||
|         { | ||||
|             return EnumFaceSlot.fromFace( state.getValue( BlockPeripheral.FACING ) ); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             return state.getValue( BlockPeripheral.FACING ); | ||||
|             return EnumCenterSlot.CENTER; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @@ -304,7 +304,8 @@ public class TurtleAPI implements ILuaAPI | ||||
|             case 31: | ||||
|             { | ||||
|                 // refuel | ||||
|                 int count = parseCount( args, 0 ); | ||||
|                 int count = optInt( args, 0, Integer.MAX_VALUE ); | ||||
|                 if( count < 0 ) throw new LuaException( "Refuel count " + count + " out of range" ); | ||||
|                 return tryCommand( context, new TurtleRefuelCommand( count ) ); | ||||
|             } | ||||
|             case 32: | ||||
|   | ||||
| @@ -316,12 +316,6 @@ public class TileTurtle extends TileComputerBase implements ITurtleTile, Default | ||||
|         return hasPeripheralUpgradeOnSide( localSide ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean isRedstoneBlockedOnSide( ComputerSide localSide ) | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     // IDirectionalTile | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -6,19 +6,27 @@ if #tArgs > 1 then | ||||
|     return | ||||
| elseif #tArgs > 0 then | ||||
|     if tArgs[1] == "all" then | ||||
|         nLimit = 64 * 16 | ||||
|         nLimit = nil | ||||
|     else | ||||
|         nLimit = tonumber( tArgs[1] ) | ||||
|         if not nLimit then | ||||
|             print("Invalid limit, expected a number or \"all\"") | ||||
|             return | ||||
|         end | ||||
|     end | ||||
| end | ||||
|  | ||||
| if turtle.getFuelLevel() ~= "unlimited" then | ||||
|     for n=1,16 do | ||||
|     for n = 1, 16 do | ||||
|         -- Stop if we've reached the limit, or are fully refuelled. | ||||
|         if (nLimit and nLimit <= 0) or turtle.getFuelLevel() >= turtle.getFuelLimit() then | ||||
|             break | ||||
|         end | ||||
|  | ||||
|         local nCount = turtle.getItemCount(n) | ||||
|         if nLimit > 0 and nCount > 0 and turtle.getFuelLevel() < turtle.getFuelLimit() then | ||||
|             local nBurn = math.min( nLimit, nCount ) | ||||
|         if nCount > 0 then | ||||
|             turtle.select( n ) | ||||
|             if turtle.refuel( nBurn ) then | ||||
|             if turtle.refuel( nLimit ) and nLimit then | ||||
|                 local nNewCount = turtle.getItemCount(n) | ||||
|                 nLimit = nLimit - (nCount - nNewCount) | ||||
|             end | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 SquidDev
					SquidDev