123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584 |
- event.load("block_place");
- event.load("block_break");
- event.load("item_air_click");
- event.load("inv_click");
- event.load("chat");
- decay_var = 3;
- iterations = 3;
- default_iterations = iterations;
- age = 0;
- default_age = age;
- Selected_Fractal = 1;
- default_Selected_Fractal = Selected_Fractal;
- Undo_List = list.new();
- Redo_List = list.new();
- Fractal_List = list.new();
- FractalHelp = array.new(9, 2);
- FractalHelp[0,0] = "§e§lFractal§6§lPlace";
- FractalHelp[0,1] = "to start placing the pattern";
- FractalHelp[1,0] = "§e§lFractal§6§lStart";
- FractalHelp[1,1] = "to start generating the fractal";
- FractalHelp[2,0] = "§e§lFractal§6§lBuildHere";
- FractalHelp[2,1] = "to place the fractal at current location";
- FractalHelp[3,0] = "§e§lFractal§6§lNew";
- FractalHelp[3,1] = "to start again";
- FractalHelp[4,0] = "§e§lFractal§6§lUndo";
- FractalHelp[4,1] = "to undo placing your last fractal";
- FractalHelp[5,0] = "§e§lFractal§6§lRedo";
- FractalHelp[5,1] = "to redo placing your last fractal";
- FractalHelp[6,0] = "§e§lFractal§6§lPause";
- FractalHelp[6,1] = "to stop fractal/fractal-pattern placement";
- FractalHelp[7,0] = "§e§lFractal§6§lResume";
- FractalHelp[7,1] = "to unpause";
- FractalHelp[8,0] = "§e§lFractal§6§lSettings";
- FractalHelp[8,1] = "open Fractal creation settings";
- Settings_Inv = array.new(25);
- Settings_Inv[0] = read.item("minecraft:slime_ball",1,"Selected Fractal");
- Settings_Inv[1] = read.item("km:refresh_red",1,"Set to default");
- Settings_Inv[2] = read.item("km:arrow_left",1,"- 10");
- Settings_Inv[3] = read.item("km:arrow_left",1,"- 1");
- Settings_Inv[4] = read.item("km:digit_0");
- Settings_Inv[5] = read.item(text.concat("km:digit_",text.number(Selected_Fractal)));
- Settings_Inv[6] = read.item("km:arrow_right",1,"+ 1");
- Settings_Inv[7] = read.item("km:arrow_right",1,"+ 10");
- Settings_Inv[8] = read.item("km:check_green",1,"Confirm");
- Settings_Inv[9] = read.item("minecraft:slime_ball",1,"Iterations");
- Settings_Inv[10] = read.item("km:refresh_red",1,"Set to default");
- Settings_Inv[11] = read.item("km:arrow_left",1,"- 1");
- Settings_Inv[12] = read.item("km:digit_0");
- Settings_Inv[13] = read.item(text.concat("km:digit_",text.number(iterations)));
- Settings_Inv[14] = read.item("km:arrow_right",1,"+ 1");
- Settings_Inv[15] = read.item("km:check_green",1,"Confirm");
- Settings_Inv[16] = read.item("minecraft:slime_ball",1,"Decay");
- Settings_Inv[17] = read.item("km:refresh_red",1,"Set to default");
- Settings_Inv[18] = read.item("km:arrow_left",1,"- 10");
- Settings_Inv[19] = read.item("km:arrow_left",1,"- 1");
- Settings_Inv[20] = read.item("km:digit_0");
- Settings_Inv[21] = read.item(text.concat("km:digit_",text.number(age)));
- Settings_Inv[22] = read.item("km:arrow_right",1,"+ 1");
- Settings_Inv[23] = read.item("km:arrow_right",1,"+ 10");
- Settings_Inv[24] = read.item("km:check_green",1,"Confirm");
- numbers = map.new();
- map.add(numbers, 0, read.item("km:digit_0"));
- map.add(numbers, 1, read.item("km:digit_1"));
- map.add(numbers, 2, read.item("km:digit_2"));
- map.add(numbers, 3, read.item("km:digit_3"));
- map.add(numbers, 4, read.item("km:digit_4"));
- map.add(numbers, 5, read.item("km:digit_5"));
- map.add(numbers, 6, read.item("km:digit_6"));
- map.add(numbers, 7, read.item("km:digit_7"));
- map.add(numbers, 8, read.item("km:digit_8"));
- map.add(numbers, 9, read.item("km:digit_9"));
- Fractal_Settings_Inv = inv.new("222222222220222202222222222");
- F_S_I_ID = inv.getID(Fractal_Settings_Inv);
- //Fractal_Settings_Inv = inv.new("222222222 220222202 222222222");
- for(a = 0; a < 25; a++){
- inv.setItem(Fractal_Settings_Inv, a, Settings_Inv[a]);
- }
- @Start
- Blocks = map.new();
- Block_Coords = list.new();
- Coords_X = list.new();
- Coords_Y = list.new();
- Coords_Z = list.new();
- start = false;
- build = false;
- set_iter = false;
- pause = false;
- setage = false;
- msg("dev", "§bFractalmaker §rloaded.");
- @wait
- wait();
- if(player.getname(player) == "SirTerence7"){
- ignoreGoto(event);
- }
- goto("wait");
- @block_place
- if(start && !pause){
- cancel = false;
- map.add(Blocks, block_loc, block_type);
- list.add(Block_Coords, block_loc);
- }
- elseif(build){
- cancel = true;
- player_loc = block_loc;
- goto("place_fractal");
- }
- goto("wait");
- @block_break
- if(start && !pause){
- if(map.contains(Blocks, block_loc)){
- cancel = false;
- map.remove(Blocks, block_loc);
- list.remove(Block_Coords, block_loc);
- }else{
- cancel = true;
- }
- }
- elseif(start && pause){
- if(map.contains(Blocks, block_loc)){
- cancel = true;
- }
- }
- goto("wait");
- @inv_click
- if(inv_id == F_S_I_ID){
- ignoreGoto(text.number(inv_slot));
- goto("wait");
- }
- @1
- temp_Selected_Fractal = default_Selected_Fractal;
- setnumber(Fractal_Settings_Inv, 4, 5, temp_Selected_Fractal);
- if(temp_Selected_Fractal == Selected_Fractal){
- inv.setItem(Fractal_Settings_Inv, 0, Settings_Inv[0]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 0, read.item("km:gem_stone",1,"Selected Fractal"));
- }
- inv.update(player);
- goto("wait");
- @2
- temp_Selected_Fractal -= 10;
- if(temp_Selected_Fractal < 1){
- temp_Selected_Fractal = 1;
- }else{
- setnumber(Fractal_Settings_Inv, 4, 5, temp_Selected_Fractal);
- if(temp_Selected_Fractal == Selected_Fractal){
- inv.setItem(Fractal_Settings_Inv, 0, Settings_Inv[0]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 0, read.item("km:gem_stone",1,"Selected Fractal"));
- }
- }
- inv.update(player);
- goto("wait");
- @3
- temp_Selected_Fractal--;
- if(temp_Selected_Fractal < 1){
- temp_Selected_Fractal = 1;
- }else{
- setnumber(Fractal_Settings_Inv, 4, 5, temp_Selected_Fractal);
- if(temp_Selected_Fractal == Selected_Fractal){
- inv.setItem(Fractal_Settings_Inv, 0, Settings_Inv[0]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 0, read.item("km:gem_stone",1,"Selected Fractal"));
- }
- }
- inv.update(player);
- goto("wait");
- @6
- temp_Selected_Fractal++;
- if(temp_Selected_Fractal > list.getSize(Fractal_List)){
- temp_Selected_Fractal = temp_Selected_Fractal - 1;
- }else{
- setnumber(Fractal_Settings_Inv, 4, 5, temp_Selected_Fractal);
- if(temp_Selected_Fractal == Selected_Fractal){
- inv.setItem(Fractal_Settings_Inv, 0, Settings_Inv[0]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 0, read.item("km:gem_stone",1,"Selected Fractal"));
- }
- }
- inv.update(player);
- goto("wait");
-
- @7
- temp_Selected_Fractal += 10;
- if(temp_Selected_Fractal > list.getSize(Fractal_List)){
- temp_Selected_Fractal = list.getSize(Fractal_List);
- }else{
- setnumber(Fractal_Settings_Inv, 4, 5, temp_Selected_Fractal);
- if(temp_Selected_Fractal == Selected_Fractal){
- inv.setItem(Fractal_Settings_Inv, 0, Settings_Inv[0]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 0, read.item("km:gem_stone",1,"Selected Fractal"));
- }
- }
- inv.update(player);
- goto("wait");
- @8
- Selected_Fractal = temp_Selected_Fractal;
- inv.setItem(Fractal_Settings_Inv, 0, Settings_Inv[0]);
- inv.update(player);
- if(build){
- goto("iter_jump");
- }
- goto("wait");
-
- @10
- temp_iterations = default_iterations;
- setnumber(Fractal_Settings_Inv, 12, 13, temp_iterations);
- if(temp_iterations == iterations){
- inv.setItem(Fractal_Settings_Inv, 9, Settings_Inv[9]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 9, read.item("km:gem_stone",1,"Iterations"));
- }
- inv.update(player);
- goto("wait");
- @11
- temp_iterations--;
- if(temp_iterations < 2){
- temp_iterations = 2;
- }else{
- setnumber(Fractal_Settings_Inv, 12, 13, temp_iterations);
- if(temp_iterations == iterations){
- inv.setItem(Fractal_Settings_Inv, 9, Settings_Inv[9]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 9, read.item("km:gem_stone",1,"Iterations"));
- }
- }
- inv.update(player);
- goto("wait");
- @14
- temp_iterations++;
- if(temp_iterations > 5){
- temp_iterations = 5;
- }else{
- setnumber(Fractal_Settings_Inv, 12, 13, temp_iterations);
- if(temp_iterations == iterations){
- inv.setItem(Fractal_Settings_Inv, 9, Settings_Inv[9]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 9, read.item("km:gem_stone",1,"Iterations"));
- }
- }
- inv.update(player);
- goto("wait");
- @15
- iterations = temp_iterations;
- inv.setItem(Fractal_Settings_Inv, 9, Settings_Inv[9]);
- inv.update(player);
- if(build){
- goto("iter_jump");
- }
- goto("wait");
-
-
- @17
- temp_age = default_age;
- setnumber(Fractal_Settings_Inv, 20, 21, temp_age);
- if(temp_age == age){
- inv.setItem(Fractal_Settings_Inv, 16, Settings_Inv[16]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 16, read.item("km:gem_stone",1,"Decay"));
- }
- inv.update(player);
- goto("wait");
- @18
- temp_age -= 10;
- if(temp_age < 0){
- temp_age = 0;
- }else{
- setnumber(Fractal_Settings_Inv, 20, 21, temp_age);
- if(temp_age == age){
- inv.setItem(Fractal_Settings_Inv, 16, Settings_Inv[16]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 16, read.item("km:gem_stone",1,"Decay"));
- }
- }
- inv.update(player);
- goto("wait");
- @19
- temp_age--;
- if(temp_age < 0){
- temp_age = 0;
- }else{
- setnumber(Fractal_Settings_Inv, 20, 21, temp_age);
- if(temp_age == age){
- inv.setItem(Fractal_Settings_Inv, 16, Settings_Inv[16]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 16, read.item("km:gem_stone",1,"Decay"));
- }
- }
- inv.update(player);
- goto("wait");
- @22
- temp_age++;
- if(temp_age > 99){
- temp_age = 99;
- }else{
- setnumber(Fractal_Settings_Inv, 20, 21, temp_age);
- if(temp_age == age){
- inv.setItem(Fractal_Settings_Inv, 16, Settings_Inv[16]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 16, read.item("km:gem_stone",1,"Decay"));
- }
- }
- inv.update(player);
- goto("wait");
- @23
- temp_age += 10;
- if(temp_age > 99){
- temp_age = 99;
- }else{
- setnumber(Fractal_Settings_Inv, 20, 21, temp_age);
- if(temp_age == age){
- inv.setItem(Fractal_Settings_Inv, 16, Settings_Inv[16]);
- }else{
- inv.setItem(Fractal_Settings_Inv, 16, read.item("km:gem_stone",1,"Decay"));
- }
- }
- inv.update(player);
- goto("wait");
- @24
- age = temp_age;
- inv.setItem(Fractal_Settings_Inv, 16, Settings_Inv[16]);
- inv.update(player);
- if(build){
- goto("iter_jump");
- }
- goto("wait");
- @chat
- if(text.contains(message, "%fractal")){
- message = text.subString(message,1,text.length(message));
- ignoreGoto(message);
- }
- goto("wait");
- @fractalhelp
- temp_size = array.getSize(FractalHelp);
- for(a = 0; a < temp_size-1; a++){
- temp_key = FractalHelp[a,0];
- temp_value = FractalHelp[a,1];
- fractal_command = text.hover(text.click(temp_key, temp_value), temp_value);
- msg(player, fractal_command);
- }
- goto("wait");
- @fractalplace
- msg(player, "You can place the pattern now.");
- start = true;
- goto("wait");
- @fractalstart
- if(start && map.getSize(Blocks) > 1){
- msg(player, "The Fractal will start generating now");
- @iter_jump
- loc = loc.getWorld(entity.getLocation(player));
- list.add(Fractal_List, fractal.create(Block_Coords, loc, Blocks, 2, iterations+1, Block_Coords, age));
- build = true;
- start = false;
- pause = false;
- msg(player, "The Fractal has generated, place a block or type \"fractalbuildhere\" to place it.");
- }else{
- msg(player, "You have not yet made a pattern.");
- }
- goto("wait");
- @fractalbuildhere
- if(build){
- player_loc = entity.getLocation(player);
- @place_fractal
- redo_loc = player_loc;
- msg(player, "Fractal will now generate with ", iterations, " iterations.");
- list.add(Undo_List, fractal.build(list.getIndex(Fractal_List, list.getSize(Fractal_List) - Selected_Fractal), player_loc, player));
- }else{
- msg(player, "You have not yet generated a fractal.");
- }
- goto("wait");
- @fractalnew
- msg(player, "Restarting");
- goto("Start");
- goto("wait");
- @fractalundo
- temp_size = list.getSize(Undo_List);
- if(temp_size > 0){
- msg(player, "Undoing");
- list.add(Redo_List, fractal.undo(list.getIndex(Undo_List,temp_size-1)));
- list.removeIndex(Undo_List,temp_size-1);
- }else{
- msg(player, "Nothing to undo");
- }
- goto("wait");
- @fractalredo
- temp_size = list.getSize(Redo_List);
- if(temp_size > 0){
- msg(player, "Redoing");
- list.add(Undo_List, fractal.undo(list.getIndex(Redo_List,temp_size-1)));
- list.removeIndex(Redo_List,temp_size-1);
- }else{
- msg(player, "Nothing to redo");
- }
- goto("wait");
- @fractalpause
- if(pause){
- msg(player, "You have already paused, type \"fractalresume\" to continue.");
- goto("wait");
- }else{
- pause = true;
- build = false;
- msg(player, "You have paused the fractal-placement.");
- }
- goto("wait");
- @fractalresume
- if(pause){
- pause = false;
- build = true;
- msg(player, "You can resume placing now.");
- }else{
- msg(player, "You have not paused.");
- }
- goto("wait");
- @fractalsettings
- temp_iterations = iterations;
- temp_age = age;
- temp_Selected_Fractal = Selected_Fractal;
- inv.open(Fractal_Settings_Inv, player, "Fractal Settings");
- goto("wait");
- function fractal.create(Block_Coords, world, Blocks, iter, iterations, Last_Block_Coords, fractalage){
- List_Size = list.getSize(Last_Block_Coords);
- Coords_X = list.new();
- Coords_Y = list.new();
- Coords_Z = list.new();
- New_Block_Coords = list.new();
- relative_blocks = list.new();
- for(a = 0; a < List_Size; a++){
- block_loc = list.getIndex(Last_Block_Coords, a);
- list.add(Coords_X, loc.getX(block_loc));
- list.add(Coords_Y, loc.getY(block_loc));
- list.add(Coords_Z, loc.getZ(block_loc));
- }
- list.sort(Coords_X);
- list.sort(Coords_Y);
- list.sort(Coords_Z);
- Min_X = list.getIndex(Coords_X, 0);
- Min_Y = list.getIndex(Coords_Y, 0);
- Min_Z = list.getIndex(Coords_Z, 0);
- X_Size = math.abs(Min_X - list.getIndex(Coords_X, list.getSize(Coords_X) - 1))+1;
- Y_Size = math.abs(Min_Y - list.getIndex(Coords_Y, list.getSize(Coords_Y) - 1))+1;
- Z_Size = math.abs(Min_Z - list.getIndex(Coords_Z, list.getSize(Coords_Z) - 1))+1;
- a3 = 0;
- for(a = 0; a < math.pow(X_Size,iter); a = a + X_Size){
- b3 = 0;
- for(b = 0; b < math.pow(Y_Size,iter); b = b + Y_Size){
- c3 = 0;
- for(c = 0; c < math.pow(Z_Size,iter); c = c + Z_Size){
- location = loc.new(world, Min_X + a3, Min_Y + b3, Min_Z + c3);
- if(list.contains(Block_Coords, location)){
- for(a2 = a; a2 < X_Size + a; a2++){
- for(b2 = b; b2 < Y_Size + b; b2++){
- for(c2 = c; c2 < Z_Size + c; c2++){
- loc_place = loc.new(world, Min_X + a2, Min_Y + b2, Min_Z + c2);
- rel_loc = loc.new(world, a2, b2, c2);
- loc_set = loc.new(world, Min_X + a2 - a, Min_Y + b2 - b, Min_Z + c2 - c);
- Block_to_set = map.getOrDefault(Blocks, loc_set, "minecraft:air");
- temparray = array.new(2);
- temparray[0] = rel_loc;
- temparray[1] = Block_to_set;
- rand_temp = math.random(0,100);
- if(Block_to_set != "minecraft:air" && rand_temp + 1 > fractalage){
- list.add(New_Block_Coords, loc_place);
- list.add(relative_blocks, temparray);
- }
- }
- }
- }
- }
- c3++;
- }
- b3++;
- }
- a3++;
- }
- iter++;
- if(iter < iterations){
- relative_blocks = fractal.create(New_Block_Coords, world, Blocks, iter, iterations, Last_Block_Coords, fractalage);
- }
- return(relative_blocks);
- }
- function fractal.build(Fractal, Position, Player){
- stop = false;
- Pos_X = math.round(loc.getX(Position));
- Pos_Y = math.round(loc.getY(Position));
- Pos_Z = math.round(loc.getZ(Position));
- World = loc.getWorld(Position);
- Coords_for_Undo = list.new();
- for(a = 0; a < list.getSize(Fractal); a++){
- temp_array = list.getIndex(Fractal, a);
- rel_loc = temp_array[0];
- Temp_X = Pos_X + loc.getX(rel_loc);
- Temp_Y = Pos_Y + loc.getY(rel_loc);
- Temp_Z = Pos_Z + loc.getZ(rel_loc);
- abs_loc = loc.new(World, Temp_X, Temp_Y, Temp_Z);
- if(!block.isAir(abs_loc) && abs_loc != Position){
- msg(Player, "Block is in the Way, cannot paste Fractal here.", block.getType(abs_loc));
- stop = true;
- a = list.getSize(Fractal) + 1;
- }else{
- stop = false;
- }
- }
- if(!stop){
- for(a = 0; a < list.getSize(Fractal); a++){
- temp_array = list.getIndex(Fractal, a);
- rel_loc = temp_array[0];
- Temp_X = Pos_X + loc.getX(rel_loc);
- Temp_Y = Pos_Y + loc.getY(rel_loc);
- Temp_Z = Pos_Z + loc.getZ(rel_loc);
- abs_loc = loc.new(World, Temp_X, Temp_Y, Temp_Z);
- Block_to_set = temp_array[1];
- if(Block_to_set != "minecraft:air"){
- temp_array2 = array.new(2);
- temp_array2[0] = abs_loc;
- temp_array2[1] = block.getType(abs_loc);
- list.add(Coords_for_Undo, temp_array2);
- block.set(abs_loc, Block_to_set);
- }
- }
- }
- return(Coords_for_Undo);
- }
- function fractal.undo(Coords_List){
- Coords_for_Redo = list.new();
- for(a = 0; a < list.getSize(Coords_List); a++){
- temp_array = list.getIndex(Coords_List, a);
- undo_loc = temp_array[0];
- undo_block = temp_array[1];
- if(undo_block == "minecraft:" || undo_block == ""){undo_block = "minecraft:air";}
- temp_array2 = array.new(2);
- temp_array2[0] = undo_loc;
- temp_array2[1] = block.getType(undo_loc);
- list.add(Coords_for_Redo, temp_array2);
- block.set(undo_loc, undo_block);
- }
- return(Coords_for_Redo);
- }
- function setnumber(Inv, First_Slot, Second_Slot, Number){
- if(Number > 100){Number = 99;}
- First_Digit = map.get($numbers, math.roundDown(Number / 10));
- Second_Digit = map.get($numbers, Number - 10 * math.roundDown(Number / 10));
- inv.setItem(Inv, First_Slot, First_Digit);
- inv.setItem(Inv, Second_Slot, Second_Digit);
- }
|