Jump to content

Recommended Posts

Posted

Im sure this is extremely simple but for some reason I can't figure out how to do this. I have already setup the JDK, forge, and eclipse and made my first mod but I don't know how to make a new project in eclipse that has all the forge resources and stuff. 

Posted
22 minutes ago, King_of_Mines1 said:

Im sure this is extremely simple but for some reason I can't figure out how to do this. I have already setup the JDK, forge, and eclipse and made my first mod but I don't know how to make a new project in eclipse that has all the forge resources and stuff. 

This tutorial explains how to set up Forge in its own workspace so that more than one mod can be linked to it.

Posted
8 minutes ago, Jay Avery said:

This tutorial explains how to set up Forge in its own workspace so that more than one mod can be linked to it.

When I get to the part that where I have to import forge when I click on the eclipse file it says "Some projects cannot be imported because they already exist in the workspace" and it won't let me click finish. 025c499cdb568185a396b94774819cad.thumb.png.6ba2da39df6c7fd5d398a4f847c85496.png

Posted
3 minutes ago, diesieben07 said:

This is a terrible tutorial and you should not follow it.

 

Why? Is there a recommended approach to developing multiple mods other than installing multiple identical copies of forge?

Posted
59 minutes ago, diesieben07 said:

Yes, setting up multiple projects (of which the MDK is an example). Again, the MDK is not an "installation of Forge". It is an example project for making a mod, which then references Forge as a library.

When you run setupDecompWorkspace you are installing forge into the Gradle cache. If you run it again in a 2nd project, it will reference the same cache, and not do anything at all. You will only ever have one copy of each Forge version you use, this is the power of Gradle.

In the link you gave me the step for getting the project says. "For Eclipse, create a workspace anywhere (though the easiest location is one level above your project folder). Then simply import your project folder as a project, everything will be done automatically." What exactly is it asking me to do here.

Posted
7 minutes ago, King_of_Mines1 said:

In the link you gave me the step for getting the project says. "For Eclipse, create a workspace anywhere (though the easiest location is one level above your project folder). Then simply import your project folder as a project, everything will be done automatically." What exactly is it asking me to do here.

With no intention of offending, you should really learn how to comfortably manage files/folders on your chosen operating system (windows/mac/etc.), and then proceed to make sure you understand basic java syntax. Without these skills, you will have a lot of trouble even trying to accomplish the most basic of things (especially if you're following the tutorials you linked, they're quite out of date, and will not help you unless you know some java already). While people here are great and will offer tons of help and advice, if you repeatedly demonstrate a lack of basic java/programming knowledge, your welcome will wear out quickly. Again, no offense intended, but the above quoted post indicates that you have a bit of homework to do before you're ready to start making mods for minecraft.

Posted
13 minutes ago, diesieben07 said:
  • "create a workspace": Create an empty folder somewhere and point eclipse at it.
  • "import your project folder as a project": Go to File > Import > General > Existing Projects into Workspace and select the project folder, i.e. the folder containing your build.gradle (not the eclipse folder inside it!).

The issue is that when I try to import the project it says " Some projects cannot be imported because they already exist in the workspace"

 

 

5 minutes ago, Ugdhar said:

With no intention of offending, you should really learn how to comfortably manage files/folders on your chosen operating system (windows/mac/etc.), and then proceed to make sure you understand basic java syntax. Without these skills, you will have a lot of trouble even trying to accomplish the most basic of things (especially if you're following the tutorials you linked, they're quite out of date, and will not help you unless you know some java already). While people here are great and will offer tons of help and advice, if you repeatedly demonstrate a lack of basic java/programming knowledge, your welcome will wear out quickly. Again, no offense intended, but the above quoted post indicates that you have a bit of homework to do before you're ready to start making mods for minecraft.

I already know a bit of java and have made a working mod. This issue is just because I am getting an error that I don't know  how to fix. And I also haven't linked any outdated tutorials I'm using. I WAS linked outdated tutorials.

Posted
1 minute ago, King_of_Mines1 said:

And I also haven't linked any outdated tutorials I'm using. I WAS linked outdated tutorials.

You're right, sorry about that.

 

When importing the project, if you're using a workspace the level above the folder your mod project is in, I think you just uncheck where it says to copy project files into workspace (since it's already there), and it should work.

Posted
2 minutes ago, Ugdhar said:

You're right, sorry about that.

 

When importing the project, if you're using a workspace the level above the folder your mod project is in, I think you just uncheck where it says to copy project files into workspace (since it's already there), and it should work.

Its already unchecked and I still get the error.

Posted

You fixed the path shown in the screenshot so you're referencing the project folder containing build.gradle, and not the eclipse folder within that folder as suggested right?

 

And if it's that Test project, it looks like it's already present in the workspace on the left. If it's not that project, make sure you're not trying to import another project named Test (I haven't tried to see if you can have multiple projects with the same name).

 

Otherwise, I guess I'm not sure what's goin on.

Posted (edited)

This is the tutorial I followed by the man himself. It is old, but still works as the general concepts are the same. I don't think you have to create the debug configurations anymore, as they were already there for me for 1.11. I did have to remove the VM arguments in order for it to work though.

Also you shouldn't have to change anything in the build.gradle file except for

Spoiler

version = "1.11.2-0.0.1" // CHANGE 0.0.1 to correct mod version
group = "yourname.modid" // CHANGE yourname to your name/username and ofcourse change modid to your modid
archivesBaseName = "modid" // CHANGE modid

 

Hope this helps.

https://www.youtube.com/watch?v=xp2jmt47yTQ

Edited by Kriptikz
  • Like 2
Posted (edited)
53 minutes ago, diesieben07 said:

This thing is oooold...

lol yea, but it still works xD

I edited my comment to reflect what little changes there were.

Edited by Kriptikz
Posted
6 hours ago, Kriptikz said:

lol yea, but it still works xD

I edited my comment to reflect what little changes there were.

Im about to try and follow the video you sent me. Im making mods for 1.7.10 so is there anything different I need to do when I follow the video?

  • Guest locked this topic
Guest
This topic is now closed to further replies.

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.