This commit is contained in:
Srendi 2022-04-06 14:54:16 +02:00
parent 349e3b7721
commit 8c78815092
8 changed files with 60 additions and 55 deletions

View file

@ -4,7 +4,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
} }
} }
@ -14,10 +14,10 @@ group = 'de.srendi.cctutorial'
version = '1.0' version = '1.0'
archivesBaseName = 'cctutorial' archivesBaseName = 'cctutorial'
java.toolchain.languageVersion = JavaLanguageVersion.of(8) java.toolchain.languageVersion = JavaLanguageVersion.of(17)
minecraft { minecraft {
mappings channel: 'snapshot', version: '20210309-1.16.5' mappings channel: 'official', version: '1.18.2'
runs { runs {
client { client {
@ -88,9 +88,9 @@ dependencies {
// Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed
// that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied. // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied.
// The userdev artifact is a special name and will get all sorts of transformations applied to it. // The userdev artifact is a special name and will get all sorts of transformations applied to it.
minecraft 'net.minecraftforge:forge:1.16.5-36.1.23' minecraft 'net.minecraftforge:forge:1.18.2-40.0.40'
implementation fg.deobf("org.squiddev:cc-tweaked-1.16.4:${cc_version}") implementation fg.deobf("org.squiddev:cc-tweaked-1.18.2:${cc_version}")
} }

View file

@ -1,3 +1,3 @@
org.gradle.jvmargs=-Xmx3G org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false org.gradle.daemon=false
cc_version=1.95.3 cc_version=1.100.4

View file

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View file

@ -1,29 +1,32 @@
package de.srendi.cctutorial.cctutorial; package de.srendi.cctutorial.cctutorial;
import net.minecraft.block.Block; import net.minecraft.core.BlockPos;
import net.minecraft.block.BlockState; import net.minecraft.world.level.block.Block;
import net.minecraft.block.material.Material; import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.tileentity.TileEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.IBlockReader; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public class CCBlock extends Block { /**
* This is our block. To tell minecraft that this block has a block entity, we need to implement {@link EntityBlock}
*/
public class CCBlock extends Block implements EntityBlock {
public CCBlock() { public CCBlock() {
super(Properties.create(Material.IRON).hardnessAndResistance(5, 10)); super(Properties.of(Material.METAL).strength(5, 5));
} }
//Create a new tile entity with our registry object /**
* This is the method from {@link EntityBlock} to create a new block entity for our block
*
* @return A new block entity from our registry object
*/
@Nullable @Nullable
@Override @Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) { public BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) {
return Registration.CC_TILEENTITY.get().create(); return Registration.CC_TILEENTITY.get().create(pos, state);
}
//Say minecraft, our CCBlock has a tile entity.
@Override
public boolean hasTileEntity(BlockState state) {
return true;
} }
} }

View file

@ -3,8 +3,9 @@ package de.srendi.cctutorial.cctutorial;
import dan200.computercraft.api.lua.LuaFunction; import dan200.computercraft.api.lua.LuaFunction;
import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IComputerAccess;
import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.peripheral.IPeripheral;
import net.minecraft.util.text.StringTextComponent; import net.minecraft.Util;
import net.minecraftforge.fml.server.ServerLifecycleHooks; import net.minecraft.network.chat.TextComponent;
import net.minecraftforge.server.ServerLifecycleHooks;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -19,7 +20,7 @@ public class CCPeripheral implements IPeripheral {
/** /**
* A list of all our connected computers. We need this for event usages. * A list of all our connected computers. We need this for event usages.
*/ */
List<IComputerAccess> connectedComputers = new ArrayList<>(); private final List<IComputerAccess> connectedComputers = new ArrayList<>();
/** /**
* This is our tile entity, we set the tile entity when we create a new peripheral. We use this tile entity to access the block or the world * This is our tile entity, we set the tile entity when we create a new peripheral. We use this tile entity to access the block or the world
@ -27,7 +28,6 @@ public class CCPeripheral implements IPeripheral {
private final CCTileEntity tileEntity; private final CCTileEntity tileEntity;
/** /**
*
* @param tileEntity the tile entity of this peripheral * @param tileEntity the tile entity of this peripheral
*/ */
public CCPeripheral(CCTileEntity tileEntity) { public CCPeripheral(CCTileEntity tileEntity) {
@ -82,7 +82,8 @@ public class CCPeripheral implements IPeripheral {
// Used to get the current server and all online players. // Used to get the current server and all online players.
ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayers().forEach(player -> { ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayers().forEach(player -> {
// Now, send the message // Now, send the message
player.sendStatusMessage(new StringTextComponent(message), false); // To send a message, we need a Component(We use a TextComponent) and a sender UUID. We just pass an empty uuid in here
player.sendMessage(new TextComponent(message), Util.NIL_UUID);
}); });
} }
@ -91,7 +92,7 @@ public class CCPeripheral implements IPeripheral {
*/ */
@LuaFunction(mainThread = true) @LuaFunction(mainThread = true)
public final boolean isRaining() { public final boolean isRaining() {
return getTileEntity().getWorld().getRainStrength(0) > 0; return getTileEntity().getLevel().getRainLevel(0) > 0;
} }
} }

View file

@ -1,17 +1,20 @@
package de.srendi.cctutorial.cctutorial; package de.srendi.cctutorial.cctutorial;
import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.peripheral.IPeripheral;
import net.minecraft.tileentity.TileEntity; import net.minecraft.core.BlockPos;
import net.minecraft.util.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import org.jetbrains.annotations.NotNull;
import static dan200.computercraft.shared.Capabilities.CAPABILITY_PERIPHERAL; import static dan200.computercraft.shared.Capabilities.CAPABILITY_PERIPHERAL;
public class CCTileEntity extends TileEntity { public class CCTileEntity extends BlockEntity {
public CCTileEntity() { public CCTileEntity(BlockPos pos, BlockState state) {
super(Registration.CC_TILEENTITY.get()); super(Registration.CC_TILEENTITY.get(), pos, state);
} }
/** /**
@ -22,9 +25,11 @@ public class CCTileEntity extends TileEntity {
/** /**
* When a computer modem tries to wrap our block, the modem will call getCapability to receive our peripheral. * When a computer modem tries to wrap our block, the modem will call getCapability to receive our peripheral.
* Then we just simply return a {@link LazyOptional} with our Peripheral
*/ */
@Override @Override
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction direction) { @NotNull
public <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, Direction direction) {
if (cap == CAPABILITY_PERIPHERAL) { if (cap == CAPABILITY_PERIPHERAL) {
if (peripheralCap == null) { if (peripheralCap == null) {
peripheralCap = LazyOptional.of(() -> peripheral); peripheralCap = LazyOptional.of(() -> peripheral);

View file

@ -2,8 +2,6 @@ package de.srendi.cctutorial.cctutorial;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
// The value here should match an entry in the META-INF/mods.toml file // The value here should match an entry in the META-INF/mods.toml file
@Mod("cctutorial") @Mod("cctutorial")
@ -11,8 +9,6 @@ public class CCtutorial {
// Our mod id // Our mod id
public static final String MODID = "cctutorial"; public static final String MODID = "cctutorial";
// Directly reference a log4j logger.
private static final Logger LOGGER = LogManager.getLogger();
public CCtutorial() { public CCtutorial() {
Registration.register(); Registration.register();

View file

@ -1,16 +1,16 @@
package de.srendi.cctutorial.cctutorial; package de.srendi.cctutorial.cctutorial;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import net.minecraft.block.Block; import net.minecraft.world.item.BlockItem;
import net.minecraft.item.BlockItem; import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.item.ItemGroup; import net.minecraft.world.level.block.Block;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import java.util.function.Supplier; import java.util.function.Supplier;
@ -18,25 +18,25 @@ public class Registration {
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, CCtutorial.MODID); public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, CCtutorial.MODID);
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, CCtutorial.MODID); public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, CCtutorial.MODID);
public static final DeferredRegister<TileEntityType<?>> TILE_ENTITIES = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, CCtutorial.MODID); public static final DeferredRegister<BlockEntityType<?>> BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITIES, CCtutorial.MODID);
// Blocks // Blocks
public static final RegistryObject<Block> CC_BLOCK = register("tutorial_block", CCBlock::new); public static final RegistryObject<Block> CC_BLOCK = register("tutorial_block", CCBlock::new);
private static <T extends Block> RegistryObject<T> register(String name, Supplier<T> block) { private static <T extends Block> RegistryObject<T> register(String name, Supplier<T> block) {
RegistryObject<T> registryObject = BLOCKS.register(name, block); RegistryObject<T> registryObject = BLOCKS.register(name, block);
ITEMS.register(name, ()->new BlockItem(registryObject.get(), new Item.Properties().group(ItemGroup.REDSTONE))); ITEMS.register(name, () -> new BlockItem(registryObject.get(), new Item.Properties().tab(CreativeModeTab.TAB_REDSTONE)));
return registryObject; return registryObject;
} }
// Tile Entities // Tile Entities
public static final RegistryObject<TileEntityType<CCTileEntity>> CC_TILEENTITY = Registration.TILE_ENTITIES.register("tutorial_block", () -> new TileEntityType<>(CCTileEntity::new, Sets.newHashSet(CC_BLOCK.get()), null)); public static final RegistryObject<BlockEntityType<CCTileEntity>> CC_TILEENTITY = Registration.BLOCK_ENTITIES.register("tutorial_block", () -> new BlockEntityType<>(CCTileEntity::new, Sets.newHashSet(CC_BLOCK.get()), null));
// Register our stuff // Register our stuff
public static void register() { public static void register() {
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
BLOCKS.register(modEventBus); BLOCKS.register(modEventBus);
ITEMS.register(modEventBus); ITEMS.register(modEventBus);
TILE_ENTITIES.register(modEventBus); BLOCK_ENTITIES.register(modEventBus);
} }
} }