Jump to content

Recommended Posts

Posted

Ok first question I have been wondering about... Is it possible to set a block's texture to a texture contained in another folder, and if so how? Also another question for future usage... How would I go about making a block, or a set of blocks be able to "move" a certain set of blocks aswell as entities. I'd assume I'd have to have the block set it self as an entity, but not sure on the execution. Any advice helps.

Member of Aerotech Networks, a Multi-Gaming server.

Also Currently porting the "Rise of the Automatons" minecraft mod

Posted

For the first thing, I want to use it for getting a custom sapling texture, cause it makes more sense to me...

And for the moving blocks/entity thing, I mean to later on add a type of "Elevator" with a "pulley" based system to raise and lower the player, and possibly minecarts and tracks. Mainly since the open sourced mod I'm porting was going to add something similar, but never got it working.

Member of Aerotech Networks, a Multi-Gaming server.

Also Currently porting the "Rise of the Automatons" minecraft mod

Posted

Ok, I was just wondering if it was possible. And like I said, the elevator like block will be something for later. Now I have a basic question. You see I have many blocks that have subBlocks, so I have a lot of itemBlock class files for them, and was wondering, is there a way to simplify subBlocks to make it more compact, and less cluttered? Possibly make them all utilize one central ItemBlock extending class? Or is that not possible? 

Member of Aerotech Networks, a Multi-Gaming server.

Also Currently porting the "Rise of the Automatons" minecraft mod

Posted

Firstly, ItemBlock class isn't necessary for every block, if it doesn't have custom functionality or use of metadata then not using it is fine.

 

Secondly, if all the ItemBlock classes do exactly the same thing then you can put that thing in one class and use metadata for distinguishing between different blocks.

Posted

Ok, but what if some blocks give off light, and others shouldn't give off light?

Member of Aerotech Networks, a Multi-Gaming server.

Also Currently porting the "Rise of the Automatons" minecraft mod

Posted

... the elevator like block will be something for later.

For the elevator, look at how minecarts work, then do a "minecart" that can move up & down (and looks like an elevator). Since the minecart is an entity, I think your elevator will end up being one also. In fact, you'd do well to subclass the EntityMinecart class.

 

BTW, the "Railcraft" mod already does vertical rails for vertical minecart movement, so somebody has already solved this problem (i.e. it must be possible).

 

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Posted

... the elevator like block will be something for later.

For the elevator, look at how minecarts work, then do a "minecart" that can move up & down (and looks like an elevator). Since the minecart is an entity, I think your elevator will end up being one also. In fact, you'd do well to subclass the EntityMinecart class.

 

BTW, the "Railcraft" mod already does vertical rails for vertical minecart movement, so somebody has already solved this problem (i.e. it must be possible).

Well actually by elevator I was thinking something similar to how redpower worked, except with differences. Which would include: Only connects and move only what I code to work with it. Basically the old developer of the mod I'm porting was going to add in a pulley based system, but never got it figured out.

Member of Aerotech Networks, a Multi-Gaming server.

Also Currently porting the "Rise of the Automatons" minecraft mod

Posted

Ok, but what if some blocks give off light, and others shouldn't give off light?

 

ItemBlock doesn't have anything to do with the Block's functionality, it is just an item that represents the block. What I meant by "custom functionality" is that if, for example, you do something with your mod when player right-clicks with the ItemBlock (or the item that represents the block) in his hand.

Other than that, custom ItemBlock classes aren't needed.

Posted

Ok, now I've hit a bit of a snag.. I'm trying to use Metadata for a grouping of items that are all used just for crafting, but for some reason it only seems to be loading the first item in the group. This is the item group code:

 

package com.AutonMatrix.item;

import java.util.List;

import com.AutonMatrix.creativeTabs.AM_CreativeTabs;
import com.AutonMatrix.lib.Strings;

import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ItemCraftSet extends Item{

private IIcon icons[];

public ItemCraftSet(){
	super();
	this.setHasSubtypes(true);
	this.setMaxDamage(0);
	this.setUnlocalizedName("am:craftset");
	this.setCreativeTab(AM_CreativeTabs.tabItem);

}

@Override
public IIcon getIconFromDamage(int par1){
	int i = MathHelper.clamp_int(par1, 0, EnumCraftSetType.values().length-1);
	return icons[i];
}

@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister iconregister){
	icons = new IIcon[EnumCraftSetType.values().length];
	for(int var4 = 0; var4 < EnumCraftSetType.values().length; var4++){
		icons[var4] = iconregister.registerIcon("am:"+EnumCraftSetType.values()[var4].name);
	}
}

@Override
public String getUnlocalizedName(ItemStack itemStack){
	return super.getUnlocalizedName(itemStack) + "."
			+ EnumCraftSetType.values()[itemStack.getItemDamage()].name;
}
}

 

and this is the code for the Enum File list it's referring to:

 

package com.AutonMatrix.item;

public enum EnumCraftSetType {
LENS("lens", "Lens"),
EYEPIECE("eyePiece", "Eye Piece"),
STONECOG("stonecog", "Stone Cog"),
LOOP("loop", "Metal Ring"),
CHAIN("chain", "Chain"),
SPROCKET("sprocket", "Sprocket"),
JOINT("joint","Joint"),
SHARP("sharp", "Sharpened Point"),
SMALLPLATE("smallPlate", "Small Plate"),
CYLINDER("cylinder", "Cylinder"),
ROD("rod", "Rod"),
PISTON("piston", "Tiny Piston"),
ACTUATOR("actuator", "Soul Actuator"),
CANVAS("canvas", "Canvas"),
WING("wing", "Wing"),
PASSIVE("passive", "Controller (Passive)"),
AGGRESSIVE("aggressive", "Controller (Aggressive)"),
JAW("jaw", "Jaw"),
SENSOR("sensor", "NVS"),
DRILL("drill", "Pickaxe Module"),
ROLLERCHAIN("rollerChain", "Roller Chain"),
SMALLHEAD("wHead", "Small Head"),
SMALLBODY("smallBody", "Small Body"),
TOTEHEAD("totehead", "Tote Head"),
MIDBODY("medBody", "Greater Body"),
SMALLLEG("smallLeg", "Small Leg"),
SENTRYHEAD("sHead", "Sentry Head"),
SALT("salt", "Salt"),
SURF("sulf", "Sulf"),
FACTOTUMHEAD("factotumhead", "Factotum Head"),
FACTOTUMCHUNK("furnaceChunk", "Factotum Chunk"),
BLUECORE("automatonCore", "Blue Core"),
REDCORE("superCore", "Red Core"),
PLANTMATTER("planty", "Plant Matter"),
PARTICULATE("bitty", "Cybernetic Particulate"),
BIONICCONGLOMERATE("ABC", "Adaptive Bionic Conglomerate");

public final String name;
public final String fullname;

EnumCraftSetType(String par1, String par2) {
	this.name = par1;
	this.fullname = par2;
}
}

 

Any help will be appreciated :)

*facepalm

Found the problem, I forgot to include an overridden getSubItems method xD

Member of Aerotech Networks, a Multi-Gaming server.

Also Currently porting the "Rise of the Automatons" minecraft mod

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

    • Version 1.19 - Forge 41.0.63 I want to create a wolf entity that I can ride, so far it seems to be working, but the problem is that when I get on the wolf, I can’t control it. I then discovered that the issue is that the server doesn’t detect that I’m riding the wolf, so I’m struggling with synchronization. However, it seems to not be working properly. As I understand it, the server receives the packet but doesn’t register it correctly. I’m a bit new to Java, and I’ll try to provide all the relevant code and prints *The comments and prints are translated by chatgpt since they were originally in Spanish* Thank you very much in advance No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. MountableWolfEntity package com.vals.valscraft.entity; import com.vals.valscraft.network.MountSyncPacket; import com.vals.valscraft.network.NetworkHandler; import net.minecraft.client.Minecraft; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.animal.Wolf; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.Entity; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.network.PacketDistributor; public class MountableWolfEntity extends Wolf { private boolean hasSaddle; private static final EntityDataAccessor<Byte> DATA_ID_FLAGS = SynchedEntityData.defineId(MountableWolfEntity.class, EntityDataSerializers.BYTE); public MountableWolfEntity(EntityType<? extends Wolf> type, Level level) { super(type, level); this.hasSaddle = false; } @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(DATA_ID_FLAGS, (byte)0); } public static AttributeSupplier.Builder createAttributes() { return Wolf.createAttributes() .add(Attributes.MAX_HEALTH, 20.0) .add(Attributes.MOVEMENT_SPEED, 0.3); } @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemstack = player.getItemInHand(hand); if (itemstack.getItem() == Items.SADDLE && !this.hasSaddle()) { if (!player.isCreative()) { itemstack.shrink(1); } this.setSaddle(true); return InteractionResult.SUCCESS; } else if (!level.isClientSide && this.hasSaddle()) { player.startRiding(this); MountSyncPacket packet = new MountSyncPacket(true); // 'true' means the player is mounted NetworkHandler.CHANNEL.sendToServer(packet); // Ensure the server handles the packet return InteractionResult.SUCCESS; } return InteractionResult.PASS; } @Override public void travel(Vec3 travelVector) { if (this.isVehicle() && this.getControllingPassenger() instanceof Player) { System.out.println("The wolf has a passenger."); System.out.println("The passenger is a player."); Player player = (Player) this.getControllingPassenger(); // Ensure the player is the controller this.setYRot(player.getYRot()); this.yRotO = this.getYRot(); this.setXRot(player.getXRot() * 0.5F); this.setRot(this.getYRot(), this.getXRot()); this.yBodyRot = this.getYRot(); this.yHeadRot = this.yBodyRot; float forward = player.zza; float strafe = player.xxa; if (forward <= 0.0F) { forward *= 0.25F; } this.flyingSpeed = this.getSpeed() * 0.1F; this.setSpeed((float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * 1.5F); this.setDeltaMovement(new Vec3(strafe, travelVector.y, forward).scale(this.getSpeed())); this.calculateEntityAnimation(this, false); } else { // The wolf does not have a passenger or the passenger is not a player System.out.println("No player is mounted, or the passenger is not a player."); super.travel(travelVector); } } public boolean hasSaddle() { return this.hasSaddle; } public void setSaddle(boolean hasSaddle) { this.hasSaddle = hasSaddle; } @Override protected void dropEquipment() { super.dropEquipment(); if (this.hasSaddle()) { this.spawnAtLocation(Items.SADDLE); this.setSaddle(false); } } @SubscribeEvent public static void onServerTick(TickEvent.ServerTickEvent event) { if (event.phase == TickEvent.Phase.START) { MinecraftServer server = net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer(); if (server != null) { for (ServerPlayer player : server.getPlayerList().getPlayers()) { if (player.isPassenger() && player.getVehicle() instanceof MountableWolfEntity) { MountableWolfEntity wolf = (MountableWolfEntity) player.getVehicle(); System.out.println("Tick: " + player.getName().getString() + " is correctly mounted on " + wolf); } } } } } private boolean lastMountedState = false; @Override public void tick() { super.tick(); if (!this.level.isClientSide) { // Only on the server boolean isMounted = this.isVehicle() && this.getControllingPassenger() instanceof Player; // Only print if the state changed if (isMounted != lastMountedState) { if (isMounted) { Player player = (Player) this.getControllingPassenger(); // Verify the passenger is a player System.out.println("Server: Player " + player.getName().getString() + " is now mounted."); } else { System.out.println("Server: The wolf no longer has a passenger."); } lastMountedState = isMounted; } } } @Override public void addPassenger(Entity passenger) { super.addPassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(true)); } } } @Override public void removePassenger(Entity passenger) { super.removePassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is no longer mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(false)); } } } @Override public boolean isControlledByLocalInstance() { Entity entity = this.getControllingPassenger(); return entity instanceof Player; } @Override public void positionRider(Entity passenger) { if (this.hasPassenger(passenger)) { double xOffset = Math.cos(Math.toRadians(this.getYRot() + 90)) * 0.4; double zOffset = Math.sin(Math.toRadians(this.getYRot() + 90)) * 0.4; passenger.setPos(this.getX() + xOffset, this.getY() + this.getPassengersRidingOffset() + passenger.getMyRidingOffset(), this.getZ() + zOffset); } } } MountSyncPacket package com.vals.valscraft.network; import com.vals.valscraft.entity.MountableWolfEntity; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class MountSyncPacket { private final boolean isMounted; public MountSyncPacket(boolean isMounted) { this.isMounted = isMounted; } public void encode(FriendlyByteBuf buffer) { buffer.writeBoolean(isMounted); } public static MountSyncPacket decode(FriendlyByteBuf buffer) { return new MountSyncPacket(buffer.readBoolean()); } public void handle(NetworkEvent.Context context) { context.enqueueWork(() -> { ServerPlayer player = context.getSender(); // Get the player from the context if (player != null) { // Verifies if the player has dismounted if (!isMounted) { Entity vehicle = player.getVehicle(); if (vehicle instanceof MountableWolfEntity wolf) { // Logic to remove the player as a passenger wolf.removePassenger(player); System.out.println("Server: Player " + player.getName().getString() + " is no longer mounted."); } } } }); context.setPacketHandled(true); // Marks the packet as handled } } networkHandler package com.vals.valscraft.network; import com.vals.valscraft.valscraft; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.simple.SimpleChannel; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class NetworkHandler { private static final String PROTOCOL_VERSION = "1"; public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel( new ResourceLocation(valscraft.MODID, "main"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals ); public static void init() { int packetId = 0; // Register the mount synchronization packet CHANNEL.registerMessage( packetId++, MountSyncPacket.class, MountSyncPacket::encode, MountSyncPacket::decode, (msg, context) -> msg.handle(context.get()) // Get the context with context.get() ); } }  
    • Do you use features of inventory profiles next (ipnext) or is there a change without it?
    • Remove rubidium - you are already using embeddium, which is a fork of rubidium
  • Topics

×
×
  • Create New...

Important Information

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