Minecraft [1.7.10] Forge Programming - Vanilla Texture überschreiben?

2 Antworten

Versuche mal in Erfahrung zu bringen, wie der Inhalt von BlockGlass aussieht. Dann kannst du nachschauen, wo die Textur gesetzt wird bzw. wie du sie setzen kannst.

Falls notwendig musst du die betreffende Render-Methode von BlockGlass überschreiben (mit vorherigem Aufruf der Render-Methode von BlockGlass selbst) oder du kopierst sie dir in deine Klasse hinein und nimmst Änderungen vor. In letzterem Fall musst du evt. nicht einmal mehr von BlockGlass erben.

9

Danke schonmal für die Antwort.

BlockGlass bringt das mit sich:

public class BlockGlass extends BlockBreakable

{
private static final String __OBFID = "CL_00000249";

public BlockGlass(Material p_i45408_1_, boolean p_i45408_2_)
{
super("glass", p_i45408_1_, p_i45408_2_);
this.setCreativeTab(CreativeTabs.tabBlock);
}

/**
* Returns the quantity of items to drop on block destruction.
*/
public int quantityDropped(Random p_149745_1_)
{
return 0;
}

/**
* Returns which pass should this block be rendered on. 0 for solids and 1 for alpha
*/
@SideOnly(Side.CLIENT)
public int getRenderBlockPass()
{
return 0;
}

/**
* If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
*/
public boolean renderAsNormalBlock()
{
return false;
}

/**
* Return true if a player with Silk Touch can harvest this block directly, and not its normal drops.
*/
protected boolean canSilkHarvest()
{
return true;
}
}

wobei diese Klasse wiederrum von BlockBreakable erbt die wiederum von Blocks erbt, und darin ist die Textur von dem BlockGlass gesetzt wurden.

BlockBreakable:

public class BlockBreakable extends Block

{
private boolean field_149996_a;
private String field_149995_b;
private static final String __OBFID = "CL_00000254";

protected BlockBreakable(String p_i45411_1_, Material p_i45411_2_, boolean p_i45411_3_)
{
super(p_i45411_2_);
this.field_149996_a = p_i45411_3_;
this.field_149995_b = p_i45411_1_;
}

/**
* Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two
* adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
*/
public boolean isOpaqueCube()
{
return false;
}

/**
* Returns true if the given side of this block type should be rendered, if the adjacent block is at the given
* coordinates. Args: blockAccess, x, y, z, side
*/
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_)
{
Block block = p_149646_1_.getBlock(p_149646_2_, p_149646_3_, p_149646_4_);

if (this == Blocks.glass || this == Blocks.stained_glass)
{
if (p_149646_1_.getBlockMetadata(p_149646_2_, p_149646_3_, p_149646_4_) != p_149646_1_.getBlockMetadata(p_149646_2_ - Facing.offsetsXForSide[p_149646_5_], p_149646_3_ - Facing.offsetsYForSide[p_149646_5_], p_149646_4_ - Facing.offsetsZForSide[p_149646_5_]))
{
return true;
}

if (block == this)
{
return false;
}
}

return !this.field_149996_a && block == this ? false : super.shouldSideBeRendered(p_149646_1_, p_149646_2_, p_149646_3_, p_149646_4_, p_149646_5_);
}

@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister p_149651_1_)
{
this.blockIcon = p_149651_1_.registerIcon(this.field_149995_b);
}
}

Block:

blockRegistry.addObject(20, "glass", (new BlockGlass(Material.glass, false)).setHardness(0.3F).setStepSound(soundTypeGlass).setBlockName("glass").setBlockTextureName("glass"));

Wieso kann man eigtl nicht sagen das man einfach die Textur überschrieben haben möchte?

Wenn du evtl eine Lösung in form eines kurzen Codestückes hättest, wäre es sehr nett, falls nicht wäre eine etwas ausführlichere Anweisung sehr freundlich :) (Ich bin gerade dabei Java zu lernen (learning by doing).)

Danke schonmal im vorraus :)

0
44
@ACCNummer1

Der Codeschnipsel aus der Blocks-Klasse muss (abgeändert auf deine Textur) in deine Klasse mit hinein. In welchem Kontext steht der Codeschnipsel?

a) Im Konstruktor: Dann sollte er bei dir auch im Konstruktor aufgerufen werden

b) In einer Methode: Wenn diese nicht private ist, kannst du sie überschreiben.

1
9
@regex9

Der Code in dem bereich ist verkürzt wie folgt:

 public static void registerBlocks()

{
blockRegistry.addObject(0, "air", (new BlockAir()).setBlockName("air"));
blockRegistry.addObject(1, "stone", (new BlockStone()).setHardness(1.5F).setResistance(10.0F).setStepSound(soundTypePiston).setBlockName("stone").setBlockTextureName("stone"));
  blockRegistry.addObject(20, "glass", (new BlockGlass(Material.glass, false)).setHardness(0.3F).setStepSound(soundTypeGlass).setBlockName("glass").setBlockTextureName("glass"));
}

Ich schätze mal es wäre damit eine Methode (Korrigiere mich bitte wenn ich falsch liege :D) Stellt sich nur die Frage wie ich das ganze jetzt überschrieben kann.

0
44
@ACCNummer1

Ähm- warte mal. Du weißt nicht, was eine Methode ist? Bevor du nun weiter werkelst, solltest du schleunigst die Grundlagen von Java lernen.

Diese Methode kannst du nicht überschreiben, sie ist statisch. Finde erst einmal heraus, wo sie aufgerufen wird. Praktisch musst du ihre Änderung, die sie ausführt, überschreiben. Dies muss aber zeitlich nach ihrer Ausführung geschehen. Entferne dann einfach das Objekt (glass) von blockRegistry, und füge es neu hinzu. Sollte blockRegistry allerdings eine lokale Variable sein oder gekapselt, musst du andere Umwege suchen.

Oder du schaust einmal in die Dokumentation der API, wie du in deiner Klasse Texturen setzen kannst.

0

Ich glaube das war so:
@Override
public void registerBlockIcons(IIconRegister par1IconRegister){}

9

Ui danke. habe jetzt aaber die texture nur löschen können. meine eigene Textur kam dabei aber nicht. (Textur im Spiel fehlt entsprechend)

Hier mal mein Code:

@Override

public void registerBlockIcons(IIconRegister par1IconRegister){setBlockTextureName("ultimatevidium:ooglass");}

Muss ich die textur anders einsetzen?

0
7

Hast du es inzwischen gelöst sonst antworte ich dir nachher am PC

0

Bukkit Plugins Programmieren!

Hallo ich ein kleines Test Plugin geschrieben (Kann noch nicht gut programmieren). Es ist einfach ein Countdown und dort muss ich denn Integer ja wieder auf die Anfangszahl setzen aber wie und wo ? :D

Code:

public class Countdown extends JavaPlugin implements Listener{

int high = 21;
int countdown;

@Override
public void onEnable() {
    
}

@Override
public void onDisable() {
    
}

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    final Player p = (Player) sender;
    
    if(cmd.getName().equalsIgnoreCase("Countdown")) {
        p.setLevel(20);
        p.sendMessage("§5Der Countdown hat gestartet!");
        countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {
                if(high != 0) {
                    high--;
                    p.sendMessage("§6Noch " + high + " §6Sekunden!");
                    p.setLevel(high);
                }else {
                    p.sendMessage("§cDein Hunger wurde geleert!");
                    p.setFoodLevel(0);
                    p.setLevel(0);
                    Bukkit.getScheduler().cancelTask(countdown);

                }
                
                
            }
        }, 0, 20);
        
        
        
        
        return true;
    }
    
    
    return false;
    
}

}

...zur Frage

Kann mir wer bei einer Java Aufgabe mit einem 2D Array helfen? Danke

Die Aufgabe ist, dass ich eine Methode schreiben soll, welche ein 2D boolean Array und einen ganzzahligen Faktor f>1 übergeben bekommt. Das Array ist quadratisch und mit true oder false Werten befüllt. Nun soll es in der Methode um den Faktor vergrößert werden und natürlich dementsprechend auch befüllt werden.

Mein Code funktioniert komischer weise nur für den Faktor 2:

public static boolean[][] magnify(boolean[][] q, int f){

    boolean bla =true ;
    int l= q.length;

    boolean[][] newQ = new boolean[l*f][l*f];

    for(int i = 0; i<l; i++){
        for(int j= 0; j<l; j++){

            if(q[i][j]==true){
                newQ[i*f][j*f] = true;
                bla=true;
            }

            else{
                newQ[i*f][j*f] = false; 
                bla = false;
            }

            for(int k=i*f; k<(i+1)*f; k++){
                for(int y=j*f; y<(j+1)*f; y++){
                    if(bla=true)
                        newQ[k][y]= true;
                    else
                        newQ[k][y] = false;
                }
            }
        }
    }


    return newQ;

}
...zur Frage

Brauche Hilfe beim Programmieren von einem Plugin bei Minecraft mit Eclipse.?

package me.nastee.main;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class main extends JavaPlugin {
    
    @Override
    public void onEnable(){
        System.out.println("[test] Das Plugin wurde geladen");
    
    }
    
    @Override
    public void onDisable(){
        System.out.println("[test] Das Plugin wurde deaktiviert!");
    }
    
    @Override
    public boolean onCommand(CommandSender sender,Command cmd,String label,String[] args){
        Player p = (Player)sender;
        if (cmd.getName().equalsIgnoreCase("delxp")){
            if (p.hasPermission("testplugin.heilen")){
                if (args.length == 0) {
                    p.setLevel(0);
                    p.sendMessage("§2Du hast nun keine XP Level mehr!");
                }
            }
        }
        return false;
    }
}

So sieht es bis jetzt aus. Ich würde aber gerne noch einen zweiten Command hinzufügen und zwar wenn man z.B /hulk eingibt, dass man dann zwei Extrareihen an Herzen bekommt. Kann mir bitte jemand helfen? Andere Tipps nehme ich natürlich auch gerne an :) .

...zur Frage

Was habe ich bei diesen Plugin falsch gecodet?

Ich habe gerade ein Wartungsplugin gecodet und die Commands die ich programmiert habe funktionieren nicht wo liegt der Fehler ? Code:

package de.pxlbst.wartungsplugin.main;

import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result; import org.bukkit.event.server.ServerListPingEvent; import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{

    boolean wartung = false;
   
    @Override
    public void onEnable() {
            Bukkit.getPluginManager().registerEvents(this, this);
           
            wartung = getConfig().get("WartungsPlugin.status.status") != null ? getConfig().getBoolean("WartungPlugin.status.status") : false;
            
            initConfig(); 
        
    }
    
    private void initConfig(){
        saveConfig();
        
        this.getConfig().options().header("Wartungs - Plugin - by PXLBST - Bitte passe auf Groß- und Kleinschreibung, sowie auf Leerzeichen auf!");
        this.getConfig().addDefault("WartungsPlugin.messages.kick", "§cDer Server ist im WartungsModus!");
        this.getConfig().addDefault("WartungsPlugin.motd.motd", "§cDer Server ist im WartungsModus!");
        this.getConfig().addDefault("WartungsPlugin.messages.on", "§aDu hast den Wartungs-Modus aktiviert!");
        this.getConfig().addDefault("WartungsPlugin.messages.off", "§c§4Du hast den Wartungs-Modus deaktiviert!");
        this.getConfig().addDefault("WartungPlugin.status.status", false);
        this.getConfig().options().copyDefaults(true);
        this.saveConfig();
        System.out.println("[WartungsPlugin] Succesfully (re)loaded config.yml!");

    }
   
    @EventHandler
    public void onLogin(AsyncPlayerPreLoginEvent event){
     if(wartung){
             
             
             for(OfflinePlayer op : Bukkit.getWhitelistedPlayers()){
                     if(op.getName().equalsIgnoreCase(event.getName())){
                             return;
                     }
             }
             
             if (!Bukkit.getOfflinePlayer(event.getName()).isOp()) {
             event.disallow(Result.KICK_OTHER, this.getConfig().getString("WartungsPlugin.messages.kick"));
             }
     }
    }
   
    @EventHandler
    public void onPing(ServerListPingEvent event){
     if(wartung){
             event.setMaxPlayers(0);
             event.setMotd(this.getConfig().getString("WartungsPlugin.motd.motd"));
     }
    }
   
   
    @Override
    public boolean onCommand(CommandSender sender, Command command
...zur Frage

Wie gebe ich die Textzeilen in Farbe aus? (Java,Minecraft,Plugin)

Grade angefangen mit Java, würde jetzt gerne wissen wie ich Vip, Premium, Sponsor in meinem Code farbig ingame ausgeben lassen kann. Jemand Ahnung ?

package me.Bob.test;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

public class Test extends JavaPlugin {

    @Override
    public void onDisable() 
    {
        System.out.println("Das Ränge-Info Plugin wurde deaktiviert!");
    }

    @Override
    public void onEnable() 
    {
        System.out.println("Das Ränge-Info Plugin wurde aktiviert!");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    {
        if(cmd.getName().equalsIgnoreCase("Rang"))
        {
            sender.sendMessage("Vip");
            sender.sendMessage("Premium");
            sender.sendMessage("Sponsor");
        }
        return true;
    }
    
    
    

}
...zur Frage

Was möchtest Du wissen?