Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 0 additions & 17 deletions README.md

This file was deleted.

65 changes: 65 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
buildscript {
repositories {
jcenter()
maven {
name = "forge"
url = "https://files.minecraftforge.net/maven"
}
}
dependencies {
classpath "net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT"
}
}

apply plugin: "net.minecraftforge.gradle.forge"

version = modVersion
group = modGroup
archivesBaseName = modBaseName

sourceCompatibility = 1.8
targetCompatibility = 1.8

minecraft {
// 1.12.2 Forge sürümünü kullan ama eski API ile uyumlu olacak şekilde kod yaz
version = "1.12.2-14.23.5.2768"
runDir = "run"
mappings = "stable_39"

// Ek bilgi (opsiyonel)
// Bu satırı eklersen mod .jar içinde sürüm bilgilerini gömer
makeObfSourceJar = false
}

repositories {
mavenCentral()
}

dependencies {
// Buraya modun başka bir mod veya kütüphane gerektiriyorsa ekleyebilirsin
}

processResources {
// Versiyon değişince dosyayı yeniden işle
inputs.property "version", project.version
// Burada mcversion alanını sabitleme → sadece 1.12 aralığını belirt
inputs.property "mcversion", "1.12"

from(sourceSets.main.resources.srcDirs) {
include "mcmod.info"
expand "version": project.version, "mcversion": "1.12"
}

from(sourceSets.main.resources.srcDirs) {
exclude "mcmod.info"
}
}

task deobfJar(type: Jar) {
from sourceSets.main.output
appendix = 'deobf'
}

artifacts {
archives deobfJar
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
16 changes: 16 additions & 0 deletions build/resources/main/mcmod.info
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[
{
"modid": "buildwand",
"name": "Build Wand",
"description": "Oyuncuların bir alanı seçip, otomatik olarak belirtilen malzemelerle doldurmasına olanak tanıyan bir mod",
"version": "2.0.5",
"mcversion": "[1.12,1.12.2]",
"url": "",
"updateUrl": "",
"authorList": ["LorNople"],
"credits": "Replit-AI",
"logoFile": "",
"screenshots": [],
"dependencies": []
}
]
75 changes: 75 additions & 0 deletions build/sources/main/java/com/buildwand/BuildWandPlugin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.buildwand;

import com.buildwand.commands.WandCommand;
import com.buildwand.listeners.SelectionListener;
import com.buildwand.utils.AreaSelection;
import com.buildwand.utils.BuildManager;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.common.MinecraftForge;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

//@Mod(modid = BuildWandPlugin.MODID, name = "Build Wand", version = "2.0.0")

@Mod(
modid = BuildWandPlugin.MODID,
name = "Build Wand",
version = "2.0.0",
acceptedMinecraftVersions = "[1.12,1.12.2]"
)

public class BuildWandPlugin {

public static final String MODID = "buildwand";
private static final Logger logger = LogManager.getLogger(MODID);

private static BuildWandPlugin instance;
private Map<UUID, AreaSelection> playerSelections;
private BuildManager buildManager;

@Mod.EventHandler
public void init(FMLInitializationEvent event) {
instance = this;
playerSelections = new HashMap<>();
buildManager = new BuildManager();

// Register event listeners
MinecraftForge.EVENT_BUS.register(new SelectionListener());

logger.info("Build Wand mod initialized!");
}

@Mod.EventHandler
public void serverStarting(FMLServerStartingEvent event) {
// Register commands
event.registerServerCommand(new WandCommand());

logger.info("Build Wand mod started!");
}

public static BuildWandPlugin getInstance() {
return instance;
}

public static Logger getLogger() {
return logger;
}

public Map<UUID, AreaSelection> getPlayerSelections() {
return playerSelections;
}

public AreaSelection getOrCreatePlayerSelection(UUID playerUUID) {
return playerSelections.computeIfAbsent(playerUUID, k -> new AreaSelection());
}

public BuildManager getBuildManager() {
return buildManager;
}
}
215 changes: 215 additions & 0 deletions build/sources/main/java/com/buildwand/commands/WandCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
package com.buildwand.commands;

import com.buildwand.BuildWandPlugin;
import com.buildwand.utils.AreaSelection;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextFormatting;

import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.UUID;

public class WandCommand extends CommandBase {

@Override
public String getName() {
return "wand";
}

@Override
public String getUsage(ICommandSender sender) {
return "/wand [undo|clear|copy|paste|help]";
}

@Override
public int getRequiredPermissionLevel() {
return -1; // Anyone can use this command
}

@Override
public boolean checkPermission(MinecraftServer server, ICommandSender sender) {
return true; // Always allow execution
}

private void executeUndo(EntityPlayer player) {
// Try to undo the last build first
if (BuildWandPlugin.getInstance().getBuildManager().undoLastBuild(player)) {
return;
}
// If no recent build, try to clear selection
else {
UUID playerUUID = player.getUniqueID();
AreaSelection selection = BuildWandPlugin.getInstance().getPlayerSelections().get(playerUUID);

if (selection != null && (selection.getFirstPosition() != null || selection.getSecondPosition() != null)) {
// Clear the selection
BuildWandPlugin.getInstance().getPlayerSelections().remove(playerUUID);
player.sendMessage(new TextComponentString(TextFormatting.YELLOW + "Alan seçiminiz temizlendi."));
} else {
player.sendMessage(new TextComponentString(TextFormatting.RED + "Geri alınacak yeni bir yapı veya temizlenecek bir seçim yok."));
}
}
}

private void executeClearSelection(EntityPlayer player) {
UUID playerUUID = player.getUniqueID();
AreaSelection selection = BuildWandPlugin.getInstance().getPlayerSelections().get(playerUUID);

if (selection != null && (selection.getFirstPosition() != null || selection.getSecondPosition() != null)) {
// Clear the selection
BuildWandPlugin.getInstance().getPlayerSelections().remove(playerUUID);
player.sendMessage(new TextComponentString(TextFormatting.YELLOW + "Your area selection has been cleared."));
} else {
player.sendMessage(new TextComponentString(TextFormatting.RED + "You don't have an active selection to clear."));
}
}

private void executeCopy(EntityPlayer player) {
BuildWandPlugin.getInstance().getBuildManager().copyStructure(player);
}

private void executePaste(EntityPlayer player) {
BuildWandPlugin.getInstance().getBuildManager().pasteStructure(player, true);
}

private void showHelp(EntityPlayer player) {
player.sendMessage(new TextComponentString(TextFormatting.GOLD + "=== BuildWand Commands ==="));
player.sendMessage(new TextComponentString(
TextFormatting.YELLOW + "/wand" + TextFormatting.WHITE + " - Bir seçim baltayı al"
));
player.sendMessage(new TextComponentString(
TextFormatting.YELLOW + "/wand help" + TextFormatting.WHITE + " - Show this help message"
));
player.sendMessage(new TextComponentString(
TextFormatting.YELLOW + "/wand undo" + TextFormatting.WHITE + " - Son bina işleminizi geri alın veya seçiminizi temizleyin"
));
player.sendMessage(new TextComponentString(
TextFormatting.YELLOW + "/wand clear" + TextFormatting.WHITE + " - Mevcut seçiminizi temizleyin"
));
player.sendMessage(new TextComponentString(
TextFormatting.YELLOW + "/wand copy" + TextFormatting.WHITE + " - Seçili yapıyı kopyala (malzeme gereksinimlerini gösterir)"
));
player.sendMessage(new TextComponentString(
TextFormatting.YELLOW + "/wand paste" + TextFormatting.WHITE + " - Kopyalanan yapıyı bulunduğunuz yere yapıştırın (envanterdeki malzemeleri kullanır)"
));
}

@Override
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
if (!(sender instanceof EntityPlayer)) {
sender.sendMessage(new TextComponentString(TextFormatting.RED + "Bu komut yalnızca bir oyuncu tarafından yürütülebilir."));
return;
}

EntityPlayer player = (EntityPlayer) sender;

// Check if the player is using a subcommand
if (args.length > 0) {
String subCommand = args[0].toLowerCase();

// Handle different subcommands
switch (subCommand) {
case "undo":
executeUndo(player);
return;
case "clear":
executeClearSelection(player);
return;
case "copy":
executeCopy(player);
return;
case "paste":
executePaste(player);
return;
case "help":
showHelp(player);
return;
default:
player.sendMessage(new TextComponentString(
TextFormatting.RED + "Bilinmeyen alt komut: " + subCommand +
TextFormatting.YELLOW + ". Kullanılabilir komutlar için /wand help komutunu deneyin."
));
return;
}
}

// Create a wooden axe
ItemStack wandItem = new ItemStack(Items.WOODEN_AXE, 1);
NBTTagCompound nbt = wandItem.getTagCompound();
if (nbt == null) {
nbt = new NBTTagCompound();
wandItem.setTagCompound(nbt);
}

// Set display name
NBTTagCompound display = new NBTTagCompound();
display.setString("Name", TextFormatting.GOLD + "Seçim Baltası");

// Set lore
NBTTagList lore = new NBTTagList();
lore.appendTag(new NBTTagString(TextFormatting.GRAY + "İlk köşeyi seçmek için sol tıklayın"));
lore.appendTag(new NBTTagString(TextFormatting.GRAY + "İkinci köşeyi seçmek için sağ tıklayın"));
lore.appendTag(new NBTTagString(TextFormatting.YELLOW + "Seçimden sonra malzemeyi ve miktarı belirtin"));
display.setTag("Lore", lore);

nbt.setTag("display", display);

// Try to give player the wand or place in hand
if (!player.getHeldItemMainhand().isEmpty()) {
// Try to add it to inventory
if (!player.inventory.addItemStackToInventory(wandItem)) {
player.sendMessage(new TextComponentString(TextFormatting.RED + "Seçim Baltası size veremedim. Envanteriniz dolu."));
return;
} else {
player.sendMessage(new TextComponentString(TextFormatting.GREEN + "Seçim Baltası envanterinize eklendi."));
}
} else {
// Place in main hand
player.setHeldItem(net.minecraft.util.EnumHand.MAIN_HAND, wandItem);
player.sendMessage(new TextComponentString(TextFormatting.GREEN + "Elinize seçim baltası verildi."));
}

// Check if player already has an area selected
AreaSelection selection = BuildWandPlugin.getInstance().getPlayerSelections().get(player.getUniqueID());
if (selection != null && selection.isComplete()) {
player.sendMessage(new TextComponentString(TextFormatting.GREEN + "Zaten bir seçeneğiniz var " +
TextFormatting.YELLOW + selection.getBlockCount() +
TextFormatting.GREEN + " blocks."));

player.sendMessage(new TextComponentString(
TextFormatting.GREEN + "Yapı malzemesini belirtmek için sohbete malzeme ve miktar yazın"
));
player.sendMessage(new TextComponentString(
TextFormatting.YELLOW + "Tek malzeme: " + TextFormatting.WHITE + "'cobblestone 100' veya 'planks:2 100'"
));
player.sendMessage(new TextComponentString(
TextFormatting.YELLOW + "Çoklu malzeme: " + TextFormatting.WHITE + "'planks 5, planks:3 10, cobblestone 20'"
));
BuildWandPlugin.getInstance().getBuildManager().setAwaitingMaterialInput(player.getUniqueID(), true);
} else {
player.sendMessage(new TextComponentString(TextFormatting.YELLOW +
"İlk köşeyi seçmek için sol tıklayın, ikinci köşeyi seçmek için sağ tıklayın."));
}
}

@Override
public List<String> getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) {
if (args.length == 1) {
return Arrays.asList("undo", "clear", "copy", "paste", "help");
}
return Collections.emptyList();
}
}
Loading