Jump to content

Recommended Posts

Posted (edited)

Hi,

I am giving you code that lets you let the block do something when you switch it on with Redstone. It is of course for 1.16 but can updated with the same principles. You just have to code in the actions or statements into "onRedstoneActivated". This will work if the redstone is already on and you place it where to signal is leading towards being used in "onPlace". There is example code in here that is optional and can be deleted... I have taged it with "optional"

package com.blakegale.test;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnReason;
import net.minecraft.util.DamageSource;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;

public class DemonBlock extends Block {
	
	public DemonBlock(Properties properties) {
		super(properties);
	}
	
	//Being used as the redstone detection method
	@Override
	public void neighborChanged(BlockState state, World world, BlockPos pos, Block block, BlockPos pos_2, boolean Boolean) {
		if (redstoneIsActivated(world, pos)) { 
			onRedstoneActivated(world, pos, block, Boolean);
		}
	}
	
  	//Also being used as Redstone Detection except it automatically switches on when you place the block down
	@Override
	public void onPlace(BlockState state, World world, BlockPos pos, BlockState state_2, boolean Boolean) {
		if (redstoneIsActivated(world, pos)) {
			onRedstoneActivated(world, pos, state.getBlock(), Boolean);
		}
	}
	
	//if redstone signal is activated
	private boolean redstoneIsActivated(World world, BlockPos pos) {
		if (world.hasNeighborSignal(pos)) {
			return true;
		}
		return false;
	}
	
	//All of the block actions/statements when turned on by Redstone
	protected static final void onRedstoneActivated (World world, BlockPos pos, Block block, boolean Boolean) {

/*
 * 		actual body of statements, of when block is activated by Redstone
*/
		
		//example code, optional
		killAllPlayers (world, pos);
		
		//example code, optional
		EntityType.WITHER.spawn(((ServerWorld) world), null, null, new BlockPos(pos.getX(), pos.getY()+1, pos.getZ()), SpawnReason.COMMAND, Boolean, Boolean);
		
	}
	
	//The thing that kills all the players. This method is optional
	protected static final void killAllPlayers(World world, BlockPos pos) {
		for (int i = 0; i < world.players().size(); i++) {
			world.players().get(i).hurt((new DamageSource("activatingtheblock")).bypassArmor(), Float.MAX_VALUE);
		}
	}

}

This is just the block class name and package importations, with the constructor. This is created by creating the class, adding "extend Block", and creating a new instance of this in wherever you instantiate and register your block items and variables 

package com.blakegale.test;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnReason;
import net.minecraft.util.DamageSource;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;

public class DemonBlock extends Block {
	
	public DemonBlock(Properties properties) {
		super(properties);
	}

This code is activated when anything around it is changed. The if statement checks the neighbouring blocks if it is being powered by redstone and then calls the "onRedstoneIsActivated" method

	//Being used as the redstone detection method
	@Override
	public void neighborChanged(BlockState state, World world, BlockPos pos, Block block, BlockPos pos_2, boolean Boolean) {
		if (redstoneIsActivated(world, pos)) { 
			onRedstoneActivated(world, pos, block, Boolean);
		}
	}

Same story with this one but is activated as soon as it is placed and is used to automatically switch on if there's already redstone activated and will activate the actions show down below. You don't need this, lots things like iron doors don't turn on automatically do actions if you place them down next to activated Redstone Signal, instead of turning them on after they've been placed

  	//Also being used as Redstone Detection except it automatically switches on when you place the block down
	@Override
	public void onPlace(BlockState state, World world, BlockPos pos, BlockState state_2, boolean Boolean) {
		if (redstoneIsActivated(world, pos)) {
			onRedstoneActivated(world, pos, state.getBlock(), Boolean);
		}
	}
	

This one is the method is the one that is called when it's checking if it's being activated by redstone, if it does have a signal it will return true and that "true" will be used by the if statement to activate the code that does all the actions when it is turned off. After that is "return false;" which is the default and so will turn off the if statement and won't work

	//if redstone signal is activated
	private boolean redstoneIsActivated(World world, BlockPos pos) {
		if (world.hasNeighborSignal(pos)) {
			return true;
		}
		return false;
	}
	

This is the actual actions code method and will do whatever you want and is being called by the first two previous methods

	//All of the block actions/statements when turned on by Redstone
	protected static final void onRedstoneActivated (World world, BlockPos pos, Block block, boolean Boolean) {

/*
 * 		actual body of statements, of when block is activated by Redstone
*/
		
		//example code, optional
		killAllPlayers (world, pos);
		
		//example code, optional
		EntityType.WITHER.spawn(((ServerWorld) world), null, null, new BlockPos(pos.getX(), pos.getY()+1, pos.getZ()), SpawnReason.COMMAND, Boolean, Boolean);
		
	}

This statement (underneath the comments) calls a method that will kill all the player. You don't need it

		//example code, optional
		killAllPlayers (world, pos);

Like this:

	//The thing that kills all the players. This method is optional
	protected static final void killAllPlayers(World world, BlockPos pos) {
		for (int i = 0; i < world.players().size(); i++) {
			world.players().get(i).hurt((new DamageSource("activatingtheblock")).bypassArmor(), Float.MAX_VALUE);
		}
	}

What it does is it gets an array or the code equivalent of a list of information and gets the "size()" or how many players are listed on the server

 

This:

		//example code, optional
		EntityType.WITHER.spawn(((ServerWorld) world), null, null, new BlockPos(pos.getX(), pos.getY()+1, pos.getZ()), SpawnReason.COMMAND, Boolean, Boolean);

takes the EntityType "Wither" and spawns it in the world. You don't need this either

Edited by Noxxous
Had to explain all of the different functions of the code

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Those are just warnings, probably because those libraries do not contain actual mods, just helper classes or something, hence the missing mods.toml files. You should be fine just ignoring them.
    • [28Jan2025 17:04:56.714] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\{COMPUTER_USERNAME}\AppData\Roaming\ModrinthApp\meta\libraries\net\minecraftforge\fmlcore\1.19.2-43.3.5\fmlcore-1.19.2-43.3.5.jar is missing mods.toml file [28Jan2025 17:04:56.727] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\{COMPUTER_USERNAME}\AppData\Roaming\ModrinthApp\meta\libraries\net\minecraftforge\javafmllanguage\1.19.2-43.3.5\javafmllanguage-1.19.2-43.3.5.jar is missing mods.toml file [28Jan2025 17:04:56.739] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\{COMPUTER_USERNAME}\AppData\Roaming\ModrinthApp\meta\libraries\net\minecraftforge\lowcodelanguage\1.19.2-43.3.5\lowcodelanguage-1.19.2-43.3.5.jar is missing mods.toml file [28Jan2025 17:04:56.751] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file C:\Users\{COMPUTER_USERNAME}\AppData\Roaming\ModrinthApp\meta\libraries\net\minecraftforge\mclanguage\1.19.2-43.3.5\mclanguage-1.19.2-43.3.5.jar is missing mods.toml file
    • thank you! removing imeediatelyfast made it work
    • Whether you are a fan of Hypixel Bedwars, SkyWars and PvP gamemodes, you would enjoy this server! We have a very fun and unique style of PvP that a lot of our players really enjoy and we want to bring this server to more players like you! Introducing Minezone, home of SUPER CRAFT BLOCKS. Here is what we have to offer: SUPER CRAFT BLOCKS: This has 3 different gamemodes you can play, Classic, Duels and Frenzy. Each mode offers over 60 kits to choose from, along with a total of over 60 maps, allowing for various different playstyles on each map. There are also random powerups that spawn on the map which can include Health Pots, Bazookas, Nukes, Extra Lives and way way more! There is also double jump in this gamemode as well, which makes PvP a lot more fun & unique. You only need a minimum of 2 players to start any mode! Classic: Choose a kit, 5 lives for each player, fight it out and claim the #1 spot! Look out for lightning as they can spawn powerups to really give you an advantage in the game! Duels: Fight against another random player or one of your friends and see who is the best! Frenzy: Your kit is randomly selected for you, each life you will have a different kit. All the other stuff from Classic/Duels apply to this mode as well like powerups.   SERVER IP: If this server has caught your interest in any way, please consider joining and you will NOT regret it! Bring some of your friends online for an even better experience and join in on the fun at: IP: minezone.club Hope to see you online!   SERVER TRAILER: https://www.youtube.com/watch?v=0phpMgu1mH0
  • Topics

  • Who's Online (See full list)

    • There are no registered users currently online
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.